source: trunk/package/base-files/files/etc/hotplug.d/iface/10-routes @ 25454

Last change on this file since 25454 was 25454, checked in by jow, 6 years ago

[package] base-files:

  • properly disable IPv6 on bridge ports
  • introduce accept_ra option, defaults to true for dhcp interfaces, false for others
  • introduce send_rs option, defaults to true for static interfaces, false for others
  • Property svn:eol-style set to native
File size: 3.5 KB
Line 
1add_route() {
2        local config="$1"
3
4        # is this route intended for the
5        # $INTERFACE of this hotplug event
6        config_get interface "$config" interface
7        [ "$interface" != "$INTERFACE" ] && return 0
8       
9        # get the real interface name from network config
10        config_get dev "$interface" ifname
11
12        config_get target "$config" target
13        config_get netmask "$config" netmask
14        config_get gateway "$config" gateway
15        config_get metric "$config" metric
16        config_get mtu "$config" mtu
17
18        # make sure there is a gateway and a target
19        [ -n "$target" ] || {
20                echo "Missing target in route section $config"
21                return 1
22        }
23        [ -n "$gateway" ] || {
24                config_get gateway "$interface" gateway
25        }
26
27        # handle "0.0.0.0" as "no gateway given" to allow
28        # defining gateway-less routes while still keeping
29        # the possibility to have static routes with a
30        # proper gateway on interfaces with dynamic ips
31        [ "$gateway" = "0.0.0.0" ] && gateway=""
32
33        dest="${netmask:+-net "$target" netmask "$netmask"}"
34        dest="${dest:--host "$target"}"
35       
36        /sbin/route add $dest ${gateway:+gw "$gateway"} \
37                ${dev:+dev "$dev"} ${metric:+ metric "$metric"} \
38                ${mtu:+mss "$mtu"}
39}
40
41add_route6() {
42        local config="$1"
43
44        # is this route intended for the
45        # $INTERFACE of this hotplug event
46        config_get interface "$config" interface
47        [ "$interface" != "$INTERFACE" ] && return 0
48       
49        # get the real interface name from network config
50        config_get dev "$interface" ifname
51
52        config_get target "$config" target
53        config_get gateway "$config" gateway
54        config_get metric "$config" metric
55        config_get mtu "$config" mtu
56
57        # make sure there is a gateway and a target
58        [ -n "$target" ] || {
59                echo "Missing target in route section $config"
60                return 1
61        }
62        [ -n "$gateway" ] || {
63                config_get gateway "$interface" gateway
64        }
65
66        /sbin/route -A inet6 add $target ${gateway:+gw "$gateway"} \
67                ${dev:+dev "$dev"} ${metric:+ metric "$metric"} \
68                ${mtu:+mss "$mtu"}
69}
70
71case "$ACTION" in
72        ifup)
73                include /lib/network
74                scan_interfaces
75
76                # Setup aliases
77                config_set "$INTERFACE" aliases ""
78                config_set "$INTERFACE" alias_count 0
79                config_foreach setup_interface_alias alias "$INTERFACE" "$DEVICE"
80
81                # Save alias references in state vars
82                local aliases
83                config_get aliases "$INTERFACE" aliases
84                [ -z "$aliases" ] || uci_set_state network "$INTERFACE" aliases "$aliases"
85
86                # Make ip6addr of parent iface the main address again
87                local ip6addr
88                config_get ip6addr "$INTERFACE" ip6addr
89                [ -z "$ip6addr" ] || {
90                        ifconfig "$DEVICE" del "$ip6addr"
91                        ifconfig "$DEVICE" add "$ip6addr"
92                }
93               
94                # Setup sysctls
95                local proto accept_ra send_rs
96               
97                config_get proto "$INTERFACE" proto
98                if [ "$proto" = dhcp ]; then
99                        accept_ra=1
100                        send_rs=0
101                else
102                        accept_ra=0
103                        send_rs=1
104                fi
105
106                config_get_bool accept_ra "$INTERFACE" accept_ra $accept_ra
107                [ $accept_ra -eq 0 ] || {
108                        logger -t ifup "Allowing Router Advertisements on $INTERFACE ($DEVICE)"
109                        accept_ra=2
110                }
111                do_sysctl "net.ipv6.conf.$INTERFACE.accept_ra" $accept_ra
112
113                config_get_bool send_rs "$INTERFACE" send_rs $send_rs
114                [ $send_rs -eq 0 ] || {
115                        logger -t ifup "Enabling Router Solicitations on $INTERFACE ($DEVICE)"
116                        send_rs=2
117                }
118                do_sysctl "net.ipv6.conf.$INTERFACE.forwarding" $send_rs
119
120
121                # Setup routes
122                config_foreach "add_route" route
123                config_foreach "add_route6" route6
124        ;;
125        ifdown)
126                # Bring down named aliases
127                local device=$(uci_get_state network "$INTERFACE" device)
128                local ifn
129                for ifn in $(ifconfig | sed -ne "s/^\(\($DEVICE${device:+\|$device}\|br-$INTERFACE\):[^[:space:]]\+\).*/\1/p"); do
130                        ifconfig "$ifn" down
131                done
132        ;;
133esac
134
Note: See TracBrowser for help on using the repository browser.