| Both sides previous revision Previous revision Next revision | Previous revision Next revisionBoth sides next revision |
| docs:guide-user:advanced:hotplug_extras [2021/10/14 21:55] – [Examples] vgaetera | docs:guide-user:advanced:hotplug_extras [2023/10/03 18:12] – [Instructions] avoid global delay, use delay per script if necessary vgaetera |
|---|
| ====== Hotplug extras ====== | ====== Hotplug extras ====== |
| {{section>meta:infobox:howto_links#cli_skills&noheader&nofooter&noeditbutton}} | {{section>meta:infobox:howto_links#basic_skills&noheader&nofooter&noeditbutton}} |
| |
| ===== Introduction ===== | ===== Introduction ===== |
| * This instruction extends [[docs:guide-user:base-system:hotplug|Hotplug]] functionality. | * This instruction extends the functionality of [[docs:guide-user:base-system:hotplug|Hotplug]]. |
| * Follow the [[docs:guide-user:advanced:hotplug_extras#automated|automated]] section for quick setup. | * Follow the [[docs:guide-user:advanced:hotplug_extras#automated|automated]] section for quick setup. |
| |
| |
| ===== Implementation ===== | ===== Implementation ===== |
| * Rely on [[https://github.com/openwrt/openwrt/blob/master/package/base-files/files/lib/functions/network.sh|network functions]] to identify WAN interface. | * Use [[docs:guide-user:base-system:hotplug|Hotplug]] to detect connectivity change and trigger network dependent scripts. |
| * Use [[docs:guide-user:base-system:hotplug|Hotplug]] to detect WAN connectivity and trigger network dependent scripts. | |
| * Process subsystem-specific scripts with [[https://github.com/openwrt/openwrt/blob/master/package/base-files/files/sbin/hotplug-call|hotplug-call]]. | * Process subsystem-specific scripts with [[https://github.com/openwrt/openwrt/blob/master/package/base-files/files/sbin/hotplug-call|hotplug-call]]. |
| * Delay script invocation with [[man>sleep(1)|sleep]] to work around tunneled connections. | * Delay script invocation with [[man>sleep(1)|sleep]] to work around tunneled connections. |
| mkdir -p /etc/hotplug.d/iface | mkdir -p /etc/hotplug.d/iface |
| cat << "EOF" > /etc/hotplug.d/iface/90-online | cat << "EOF" > /etc/hotplug.d/iface/90-online |
| . /lib/functions/network.sh | if [ "${INTERFACE}" = "loopback" ] |
| network_flush_cache | |
| network_find_wan NET_IF | |
| network_find_wan6 NET_IF6 | |
| if [ "${INTERFACE}" != "${NET_IF}" ] \ | |
| && [ "${INTERFACE}" != "${NET_IF6}" ] | |
| then exit 0 | then exit 0 |
| fi | fi |
| cat << "EOF" >> /etc/sysupgrade.conf | cat << "EOF" >> /etc/sysupgrade.conf |
| /etc/hotplug.d/iface/90-online | /etc/hotplug.d/iface/90-online |
| EOF | |
| mkdir -p /etc/hotplug.d/online | |
| cat << "EOF" > /etc/hotplug.d/online/10-sleep | |
| sleep 10 | |
| EOF | |
| cat << "EOF" >> /etc/sysupgrade.conf | |
| /etc/hotplug.d/online/10-sleep | |
| EOF | EOF |
| </code> | </code> |
| <code bash> | <code bash> |
| # Example script | # Example script |
| cat << "EOF" > /etc/hotplug.d/online/30-example | cat << "EOF" > /etc/hotplug.d/online/00-logger |
| logger -t hotplug online | logger -t hotplug $(env) |
| EOF | EOF |
| reboot | /etc/init.d/network restart |
| | logread -e hotplug |
| </code> | </code> |
| |
| ===== Automated ===== | ===== Automated ===== |
| <code bash> | <code bash> |
| alias uclient-fetch="uclient-fetch --no-check-certificate" | wget -U "" -O hotplug-extras.sh "https://openwrt.org/_export/code/docs/guide-user/advanced/hotplug_extras?codeblock=0" |
| uclient-fetch -O hotplug-extras.sh "https://openwrt.org/_export/code/docs/guide-user/advanced/hotplug_extras?codeblock=0" | |
| . ./hotplug-extras.sh | . ./hotplug-extras.sh |
| </code> | </code> |
| |