b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame^] | 1 | #!/bin/sh /etc/rc.common |
| 2 | # Copyright (c) 2014 OpenWrt.org |
| 3 | |
| 4 | START=80 |
| 5 | |
| 6 | USE_PROCD=1 |
| 7 | PROG=/usr/sbin/umdns |
| 8 | IFACES="" |
| 9 | |
| 10 | load_ifaces() { |
| 11 | local network="$(uci -q get umdns.@umdns[-1].network)" |
| 12 | for n in $network; do |
| 13 | local device |
| 14 | json_load "$(ifstatus $n)" |
| 15 | json_get_var device l3_device |
| 16 | echo -n "$device " |
| 17 | done |
| 18 | } |
| 19 | |
| 20 | reload_service() { |
| 21 | json_init |
| 22 | json_add_array interfaces |
| 23 | for i in $(load_ifaces); do |
| 24 | json_add_string "" "$i" |
| 25 | done |
| 26 | json_close_array |
| 27 | |
| 28 | ubus call umdns set_config "$(json_dump)" |
| 29 | } |
| 30 | |
| 31 | start_service() { |
| 32 | local network="$(uci -q get umdns.@umdns[-1].network)" |
| 33 | |
| 34 | procd_open_instance |
| 35 | procd_set_param command "$PROG" |
| 36 | [ -f /etc/seccomp/umdns.json ] && procd_set_param seccomp /etc/seccomp/umdns.json |
| 37 | procd_set_param respawn |
| 38 | |
| 39 | procd_open_data |
| 40 | json_add_array firewall |
| 41 | |
| 42 | for n in $network; do |
| 43 | json_add_object "" |
| 44 | json_add_string type rule |
| 45 | json_add_string proto udp |
| 46 | json_add_string src "$n" |
| 47 | json_add_int dest_port 5353 |
| 48 | json_add_string target ACCEPT |
| 49 | json_close_object |
| 50 | done |
| 51 | |
| 52 | json_close_array |
| 53 | procd_close_data |
| 54 | |
| 55 | procd_open_trigger |
| 56 | procd_add_config_trigger "config.change" "umdns" /etc/init.d/umdns reload |
| 57 | for n in $network; do |
| 58 | procd_add_interface_trigger "interface.*" $n /etc/init.d/umdns reload |
| 59 | done |
| 60 | procd_add_raw_trigger "instance.update" 5000 "/bin/ubus" "call" "umdns" "reload" |
| 61 | procd_close_trigger |
| 62 | [ "$(uci get umdns.@umdns[-1].jail)" = 1 ] && { |
| 63 | procd_add_jail umdns ubus log |
| 64 | [ -d /etc/umdns ] && procd_add_jail_mount "/etc/umdns" |
| 65 | } |
| 66 | procd_close_instance |
| 67 | } |
| 68 | |
| 69 | service_started() { |
| 70 | ubus -t 10 wait_for umdns |
| 71 | [ $? = 0 ] && reload_service |
| 72 | } |