odhcp6c: work-around for proto-script to avoid loosing the default route
[openwrt/staging/blogic.git] / package / network / ipv6 / odhcp6c / files / dhcpv6.script
1 #!/bin/sh
2 [ -z "$2" ] && echo "Error: should be run by odhcpc6c" && exit 1
3 . /lib/functions.sh
4 . /lib/netifd/netifd-proto.sh
5
6 ipv6_conf() {
7 echo "$3" > "/proc/sys/net/ipv6/conf/$1/$2"
8 }
9
10 prepare_interface() {
11 local device="$1"
12 ipv6_conf "$device" accept_ra 2
13 ipv6_conf "$device" forwarding 2
14
15 # Send RS
16 if [ -x /usr/sbin/6relayd ]; then
17 sleep 1
18 /usr/sbin/6relayd -s "$device"
19 sleep 4
20 /usr/sbin/6relayd -s "$device"
21 fi
22
23 }
24
25 cleanup_interface() {
26 local device="$1"
27 ipv6_conf "$device" accept_ra 1
28 ipv6_conf "$device" forwarding 1
29 }
30
31 setup_interface () {
32 local device="$1"
33 proto_init_update "*" 1
34
35 for dns in $RDNSS; do
36 proto_add_dns_server "$dns"
37 done
38
39 for domain in $DOMAINS; do
40 proto_add_dns_search "$domain"
41 done
42
43 for prefix in $PREFIXES; do
44 proto_add_ipv6_prefix "$prefix"
45 done
46
47 proto_send_update "$INTERFACE"
48
49 # TODO: $SNTP_IP $SIP_IP $SNTP_FQDN $SIP_DOMAIN
50 }
51
52 teardown_interface() {
53 proto_init_update "*" 0
54 proto_send_update "$INTERFACE"
55 }
56
57 case "$2" in
58 informed|bound|updated|rebound)
59 setup_interface "$1"
60 prepare_interface "$1"
61 ;;
62 started|stopped|unbound)
63 cleanup_interface "$1"
64 teardown_interface "$1"
65 ;;
66 esac
67
68 # user rules
69 [ -f /etc/odhcp6c.user ] && . /etc/odhcp6c.user
70
71 exit 0