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 ) 9>/tmp/resolv.conf.lock
16 rm -f /tmp/resolv.conf.lock /tmp/resolv.conf.tmp
23 for radns in $RA_DNS; do
26 [ "$radns" = "$dns" ] && duplicate=1
28 [ "$duplicate" = 0 ] && RDNSS="$RDNSS $radns"
33 if [ -z "$dnspart" ]; then
36 dnspart="$dnspart, \"$dns\""
40 update_resolv "$device" "$dns"
43 for entry in $PREFIXES; do
44 local addr="${entry%%,*}"
46 local preferred="${entry%%,*}"
48 local valid="${entry%%,*}"
50 [ "$entry" = "$valid" ] && entry=
55 while [ -n "$entry" ]; do
56 local key="${entry%%=*}"
58 local val="${entry%%,*}"
60 [ "$entry" = "$val" ] && entry=
62 if [ "$key" = "class" ]; then
63 class=", \"class\": $val"
64 elif [ "$key" = "excluded" ]; then
65 excluded=", \"excluded\": \"$val\""
69 local prefix="{\"address\": \"$addr\", \"preferred\": $preferred, \"valid\": $valid $class $excluded}"
71 if [ -z "$prefixpart" ]; then
74 prefixpart="$prefixpart, $prefix"
77 # TODO: delete this somehow when the prefix disappears
78 ip -6 route add unreachable "$addr"
81 ip -6 route flush dev "$device"
82 ip -6 address flush dev "$device" scope global
85 for entry in $RA_ADDRESSES; do
87 local addr="${entry%%/*}"
88 for dentry in $ADDRESSES; do
89 local daddr="${dentry%%/*}"
90 [ "$addr" = "$daddr" ] && duplicate=1
92 [ "$duplicate" = "0" ] && ADDRESSES="$ADDRESSES $entry"
95 for entry in $ADDRESSES; do
96 local addr="${entry%%,*}"
98 local preferred="${entry%%,*}"
100 local valid="${entry%%,*}"
102 ip -6 address add "$addr" dev "$device" preferred_lft "$preferred" valid_lft "$valid"
105 for entry in $RA_ROUTES; do
106 local addr="${entry%%,*}"
108 local gw="${entry%%,*}"
110 local valid="${entry%%,*}"
112 local metric="${entry%%,*}"
114 if [ -n "$gw" ]; then
115 ip -6 route add "$addr" via "$gw" metric "$metric" dev "$device" from "::/128"
117 ip -6 route add "$addr" metric "$metric" dev "$device"
120 for prefix in $PREFIXES; do
121 local paddr="${prefix%%,*}"
122 [ -n "$gw" ] && ip -6 route add "$addr" via "$gw" metric "$metric" dev "$device" from "$paddr"
127 teardown_interface() {
129 ip -6 route flush dev "$device"
130 ip -6 address flush dev "$device" scope global
131 update_resolv "$device" ""
136 teardown_interface "$1"
139 informed|updated|rebound|ra-updated)
143 teardown_interface "$1"
146 teardown_interface "$1"
151 [ -f /etc/odhcp6c.user ] && . /etc/odhcp6c.user