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