2 [ -z "$2" ] && echo "Error: should be run by odhcpc6c" && exit 1
10 grep -v "#odhcp6c:$device:" /etc
/resolv.conf
> /tmp
/resolv.conf.tmp
12 echo "nameserver $c #odhcp6c:$device:" >> /tmp
/resolv.conf.tmp
14 mv /tmp
/resolv.conf.tmp
/etc
/resolv.conf
15 chmod 0644 /etc
/resolv.conf
16 ) 9>/tmp
/resolv.conf.lock
17 rm -f /tmp
/resolv.conf.lock
/tmp
/resolv.conf.tmp
24 for radns
in $RA_DNS; do
27 [ "$radns" = "$dns" ] && duplicate
=1
29 [ "$duplicate" = 0 ] && RDNSS
="$RDNSS $radns"
34 if [ -z "$dnspart" ]; then
37 dnspart
="$dnspart, \"$dns\""
41 update_resolv
"$device" "$dns"
44 for entry
in $PREFIXES; do
45 local addr
="${entry%%,*}"
47 local preferred
="${entry%%,*}"
49 local valid
="${entry%%,*}"
51 [ "$entry" = "$valid" ] && entry
=
56 while [ -n "$entry" ]; do
57 local key
="${entry%%=*}"
59 local val
="${entry%%,*}"
61 [ "$entry" = "$val" ] && entry
=
63 if [ "$key" = "class" ]; then
64 class
=", \"class\": $val"
65 elif [ "$key" = "excluded" ]; then
66 excluded
=", \"excluded\": \"$val\""
70 local prefix
="{\"address\": \"$addr\", \"preferred\": $preferred, \"valid\": $valid $class $excluded}"
72 if [ -z "$prefixpart" ]; then
75 prefixpart
="$prefixpart, $prefix"
78 # TODO: delete this somehow when the prefix disappears
79 ip
-6 route add unreachable
"$addr"
82 ip
-6 route flush dev
"$device"
83 ip
-6 address flush dev
"$device" scope global
86 for entry
in $RA_ADDRESSES; do
88 local addr
="${entry%%/*}"
89 for dentry
in $ADDRESSES; do
90 local daddr
="${dentry%%/*}"
91 [ "$addr" = "$daddr" ] && duplicate
=1
93 [ "$duplicate" = "0" ] && ADDRESSES
="$ADDRESSES $entry"
96 for entry
in $ADDRESSES; do
97 local addr
="${entry%%,*}"
99 local preferred
="${entry%%,*}"
101 local valid
="${entry%%,*}"
103 ip
-6 address add
"$addr" dev
"$device" preferred_lft
"$preferred" valid_lft
"$valid"
106 for entry
in $RA_ROUTES; do
107 local addr
="${entry%%,*}"
109 local gw
="${entry%%,*}"
111 local valid
="${entry%%,*}"
113 local metric
="${entry%%,*}"
115 if [ -n "$gw" ]; then
116 ip
-6 route add
"$addr" via
"$gw" metric
"$metric" dev
"$device" from
"::/128"
118 ip
-6 route add
"$addr" metric
"$metric" dev
"$device"
121 for prefix
in $PREFIXES; do
122 local paddr
="${prefix%%,*}"
123 [ -n "$gw" ] && ip
-6 route add
"$addr" via
"$gw" metric
"$metric" dev
"$device" from
"$paddr"
128 teardown_interface
() {
130 ip
-6 route flush dev
"$device"
131 ip
-6 address flush dev
"$device" scope global
132 update_resolv
"$device" ""
139 teardown_interface
"$1"
142 informed|updated|rebound|ra-updated
)
146 teardown_interface
"$1"
149 teardown_interface
"$1"
154 [ -f /etc
/odhcp6c.user
] && .
/etc
/odhcp6c.user
155 ) 9>/tmp
/odhcp6c.lock.
$1
156 rm -f /tmp
/odhcp6c.lock.
$1