odhcp6c: work-around for proto-script to avoid loosing the default route
[openwrt.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