9609f04d5c65cfaaa234fa124d9440582938d38b
[openwrt/svn-archive/archive.git] / package / network / ipv6 / ipv6-support / files / dhcpv6.sh
1 #!/bin/sh
2 # Copyright (c) 2012 OpenWrt.org
3 . /lib/ipv6/support.sh
4 . /lib/netifd/netifd-proto.sh
5
6 local device="$1"
7 local state="$2"
8 local network=""
9
10 resolve_network network "$device"
11
12 # Unknown network
13 [ -z "$network" ] && exit 0
14
15 if [ "$state" == "started" ]; then
16 # Start border
17 set_forward_border "$network" "$device" enable
18
19 # Configure device
20 conf_set "$device" accept_ra 2
21 conf_set "$device" forwarding 2
22
23 # Trigger RS
24 conf_set "$device" disable_ipv6 1
25 conf_set "$device" disable_ipv6 0
26
27 exit 0
28 elif [ "$state" == "stopped" ]; then
29 # Deconfigure device
30 conf_set "$device" accept_ra 1
31 conf_set "$device" forwarding 1
32
33 # Disable border
34 set_forward_border "$network" "$device" disable
35
36 exit 0
37 fi
38
39 # Announce prefixes
40 for prefix in $PREFIXES; do
41 announce_prefix "$prefix" "$network" "$device"
42 done
43
44 for prefix in $PREFIXES_LOST; do
45 announce_prefix "$prefix" "$network" "$device" delprefix
46 done
47
48
49 # Enable relaying if requested and we didn't get a prefix, disable otherwise
50 local fallback="stop"
51 [ -z "$PREFIXES" -a "$state" != "unbound" ] && fallback="start"
52 setup_prefix_fallback "$fallback" "$network" "$device"
53
54
55 # Operations in case of success
56 [ "$state" == "timeout" -o "$state" == "unbound" ] && exit 0
57
58 # Handshake completed, disable forwarding border
59 set_forward_border "$network" "$device" disable
60
61 local peerdns
62 config_get_bool peerdns "$network" peerdns 1
63 [ "$peerdns" -eq "1" ] && {
64 proto_init_update "*" 1
65 proto_set_keep 1
66 for server in $RDNSS; do
67 proto_add_dns_server "$server"
68 done
69 for domain in $DOMAINS; do
70 proto_add_dns_search "$domain"
71 done
72 proto_send_update "$network"
73 }
74