netifd: fix an error message during network shutdown
[openwrt/staging/chunkeey.git] / package / network / config / netifd / files / etc / init.d / network
index 6728fbcda5d9b9f7df3e7be059ccd474f05c3dcb..fbba9ecb1ccc8673bc0d88be385dbba022126c6b 100755 (executable)
@@ -5,10 +5,20 @@ STOP=90
 
 USE_PROCD=1
 
+init_switch() {
+       setup_switch() { return 0; }
+
+       include /lib/network
+       setup_switch
+}
+
 start_service() {
+       init_switch
+
        procd_open_instance
        procd_set_param command /sbin/netifd
        procd_set_param respawn
+       procd_set_param watch network.interface
        [ -e /proc/sys/kernel/core_pattern ] && {
                procd_set_param limits core="unlimited"
                echo '/tmp/%e.%p.%s.%t.core' > /proc/sys/kernel/core_pattern
@@ -17,28 +27,115 @@ start_service() {
 }
 
 reload_service() {
+       init_switch
        ubus call network reload
        /sbin/wifi reload_legacy
 }
 
-stop_service() {
+stop() {
        /sbin/wifi down
+       procd_kill network ''
 }
 
 service_running() {
-       setup_switch() { return 0; }
+       ubus -t 30 wait_for network.interface
+       /sbin/wifi reload_legacy
+}
 
-       include /lib/network
-       setup_switch
+validate_atm_bridge_section()
+{
+       uci_validate_section network "atm-bridge" "${1}" \
+               'unit:uinteger:0' \
+               'vci:range(32, 65535):35' \
+               'vpi:range(0, 255):8' \
+               'atmdev:uinteger:0' \
+               'encaps:or("llc", "vc"):llc' \
+               'payload:or("bridged", "routed"):bridged'
+}
 
-       sleep 5
+validate_route_section()
+{
+       uci_validate_section network route "${1}" \
+               'interface:string' \
+               'target:cidr4' \
+               'netmask:netmask4' \
+               'gateway:ip4addr' \
+               'metric:uinteger' \
+               'mtu:uinteger' \
+               'table:or(range(0,65535),string)'
+}
 
-       /sbin/wifi reload_legacy
+validate_route6_section()
+{
+       uci_validate_section network route6 "${1}" \
+               'interface:string' \
+               'target:cidr6' \
+               'gateway:ip6addr' \
+               'metric:uinteger' \
+               'mtu:uinteger' \
+               'table:or(range(0,65535),string)'
+}
+
+validate_rule_section()
+{
+       uci_validate_section network rule "${1}" \
+               'in:string' \
+               'out:string' \
+               'src:cidr4' \
+               'dest:cidr4' \
+               'tos:range(0,31)' \
+               'mark:string' \
+               'invert:bool' \
+               'lookup:or(range(0,65535),string)' \
+               'goto:range(0,65535)' \
+               'action:or("prohibit", "unreachable", "blackhole", "throw")'
+}
+
+validate_rule6_section()
+{
+       uci_validate_section network rule6 "${1}" \
+               'in:string' \
+               'out:string' \
+               'src:cidr6' \
+               'dest:cidr6' \
+               'tos:range(0,31)' \
+               'mark:string' \
+               'invert:bool' \
+               'lookup:or(range(0,65535),string)' \
+               'goto:range(0,65535)' \
+               'action:or("prohibit", "unreachable", "blackhole", "throw")'
+}
+
+validate_switch_section()
+{
+       uci_validate_section network switch "${1}" \
+               'name:string' \
+               'enable:bool' \
+               'enable_vlan:bool' \
+               'reset:bool'
+}
+
+validate_switch_vlan()
+{
+       uci_validate_section network switch_vlan "${1}" \
+               'device:string' \
+               'vlan:uinteger' \
+               'ports:list(ports)'
 }
 
 service_triggers()
 {
-       procd_add_reload_trigger "network"
+       procd_add_reload_trigger network wireless
+
+       procd_open_validate
+       validate_atm_bridge_section
+       validate_route_section
+       validate_route6_section
+       validate_rule_section
+       validate_rule6_section
+       validate_switch_section
+       validate_switch_vlan
+       procd_close_validate
 }
 
 restart() {