netifd: initialize the switch early at start time and on reload (fixes #13015)
[openwrt.git] / package / network / config / netifd / files / etc / init.d / network
index f54d69b..e117463 100755 (executable)
@@ -5,20 +5,30 @@ STOP=90
 
 USE_PROCD=1
 
+init_switch() {
+       setup_switch() { return 0; }
+
+       include /lib/network
+       setup_switch
+}
+
 start_service() {
-       [ -e /proc/sys/kernel/core_pattern ] && {
-               ulimit -c unlimited
-               echo '/tmp/%e.%p.%s.%t.core' > /proc/sys/kernel/core_pattern
-       }
+       init_switch
+
        procd_open_instance
        procd_set_param command /sbin/netifd
        procd_set_param respawn
+       [ -e /proc/sys/kernel/core_pattern ] && {
+               procd_set_param limits core="unlimited"
+               echo '/tmp/%e.%p.%s.%t.core' > /proc/sys/kernel/core_pattern
+       }
        procd_close_instance
 }
 
 reload_service() {
+       init_switch
        ubus call network reload
-       /sbin/wifi up
+       /sbin/wifi reload_legacy
 }
 
 stop_service() {
@@ -26,19 +36,16 @@ stop_service() {
 }
 
 service_running() {
-       setup_switch() { return 0; }
-
-       include /lib/network
-       setup_switch
-
        sleep 5
-
-       /sbin/wifi up
+       /sbin/wifi reload_legacy
 }
 
 service_triggers()
 {
-       procd_add_reload_trigger "network"
+       procd_open_trigger
+       procd_add_config_trigger "config.change" "network" /etc/init.d/network reload
+       procd_add_config_trigger "config.change" "wireless" /etc/init.d/network reload
+       procd_close_trigger
 }
 
 restart() {