Hello hackers, according to 'man dnsmasq' the var DNSMASQ_INTERFACE stores the name of the interface on which the request arrived; this is not set for "old" actions when dnsmasq restarts.
all this in done in src/helper.c: my_setenv("DNSMASQ_INTERFACE", strlen(data.interface) != 0 ? data.interface : NULL, &err); With my (up-to-date) OpenWRT setup this seems sometimes not the case. Ontop of my dhcp-script.sh[1] i do (something like): #!/bin/sh MODE="$1" MAC="$2" IP="$3" HOST="$4" if [ -n "$DNSMASQ_INTERFACE" ]; then log "provided dev: $DNSMASQ_INTERFACE mode: $MODE mac: $MAC ip: $IP host: $HOST" else DEV="$( guess_dev "$IP" )" log "guessed dev: $DEV mode: $MODE mac: $MAC ip: $IP host: $HOST" fi Here the log output, when env-var DNSMASQ_INTERFACE is empty/unset and MODE is arp-add/add(!): There are 2 interesting lines - both from the same client (linux, under my control): provided dev: br-mastergate mode: old mac: e4:f8:9c:73:8b:1f ip: 100.66.19.131 host: filmforecast guessed dev: br-mastergate mode: add mac: e4:f8:9c:73:8b:1f ip: 100.66.19.131 host: unset root@box:~ logread | grep e4:f8:9c:73:8b:1f Sun Aug 6 21:12:38 2023 daemon.info kalua: /usr/lib/dnsmasq/dhcp-sc: dhcp_script() provided dev: br-mastergate mode: old mac: e4:f8:9c:73:8b:1f ip: 100.66.19.131 host: filmforecast Sun Aug 6 21:12:38 2023 daemon.info kalua: /usr/lib/dnsmasq/dhcp-sc: dhcp_old() 'e4:f8:9c:73:8b:1f' is from 'br-mastergate' = roaming-DEV HOST: filmforecast Sun Aug 6 21:16:01 2023 daemon.info hostapd: phy1-ap0: STA e4:f8:9c:73:8b:1f IEEE 802.11: authenticated Sun Aug 6 21:16:01 2023 daemon.info kalua: /usr/sbin/cron.wireless_: iwevent() EVENT 6993: 'phy1-ap0: new station e4:f8:9c:73:8b:1f' Sun Aug 6 21:16:01 2023 daemon.info hostapd: phy1-ap0: STA e4:f8:9c:73:8b:1f IEEE 802.11: associated (aid 3) Sun Aug 6 21:16:01 2023 daemon.notice hostapd: phy1-ap0: AP-STA-CONNECTED e4:f8:9c:73:8b:1f auth_alg=open Sun Aug 6 21:16:01 2023 daemon.info dnsmasq-dhcp[19331]: DHCPREQUEST(br-mastergate) 100.65.42.131 e4:f8:9c:73:8b:1f Sun Aug 6 21:16:01 2023 daemon.info dnsmasq-dhcp[19331]: DHCPNAK(br-mastergate) 100.65.42.131 e4:f8:9c:73:8b:1f wrong address Sun Aug 6 21:16:01 2023 daemon.info kalua: /usr/sbin/cron.wireless_: wifi_signal_get() dev: phy1-ap0 mac: e4:f8:9c:73:8b:1f try: 3 signal: -64 file: '' Sun Aug 6 21:16:01 2023 daemon.info kalua: /usr/sbin/cron.wireless_: iwevent() worker(7175) dev:phy1-ap0 ch:5 MODE: new MAC: e4:f8:9c:73:8b:1f - signal: '-64' border: '-73' try: 4 Sun Aug 6 21:16:01 2023 daemon.info kalua: /usr/sbin/cron.wireless_: iwevent() mac2ipv4(20) grabbed ip from arp: e4:f8:9c:73:8b:1f -> 100.65.42.131 Sun Aug 6 21:16:01 2023 daemon.info kalua: /usr/sbin/cron.wireless_: iwevent() worker(7175) dev:phy1-ap0 ch:5 MODE: new MAC: e4:f8:9c:73:8b:1f - ip: '100.65.42.131' signal: '-64' (is_good) Sun Aug 6 21:16:01 2023 daemon.info dnsmasq-dhcp[19331]: DHCPDISCOVER(br-mastergate) 100.65.42.131 e4:f8:9c:73:8b:1f Sun Aug 6 21:16:01 2023 daemon.info dnsmasq-dhcp[19331]: DHCPOFFER(br-mastergate) 100.66.19.131 e4:f8:9c:73:8b:1f Sun Aug 6 21:16:01 2023 daemon.info dnsmasq-dhcp[19331]: DHCPREQUEST(br-mastergate) 100.66.19.131 e4:f8:9c:73:8b:1f Sun Aug 6 21:16:01 2023 daemon.info dnsmasq-dhcp[19331]: DHCPACK(br-mastergate) 100.66.19.131 e4:f8:9c:73:8b:1f filmforecast Sun Aug 6 21:16:01 2023 daemon.info kalua: /usr/lib/dnsmasq/dhcp-sc: dhcp_script() provided dev: br-mastergate mode: old mac: e4:f8:9c:73:8b:1f ip: 100.66.19.131 host: filmforecast Sun Aug 6 21:16:01 2023 daemon.info kalua: /usr/lib/dnsmasq/dhcp-sc: dhcp_old() 'e4:f8:9c:73:8b:1f' is from 'br-mastergate' = roaming-DEV HOST: filmforecast Sun Aug 6 21:17:11 2023 daemon.info kalua: /usr/lib/dnsmasq/dhcp-sc: dhcp_script() guessed dev: br-mastergate mode: add mac: e4:f8:9c:73:8b:1f ip: 100.66.19.131 host: unset Sun Aug 6 21:17:11 2023 daemon.info kalua: /usr/lib/dnsmasq/dhcp-sc: dhcp_add() 'e4:f8:9c:73:8b:1f' is from 'br-mastergate' = roaming-DEV HOST: unset Sun Aug 6 21:17:11 2023 daemon.info kalua: /usr/lib/dnsmasq/dhcp-sc: F36-stube_dhcp-add() [OK] _weblogin login_check e4:f8:9c:73:8b:1f the environment during the "guessed dev" call (without DNSMASQ_INTERFACE set) was written ontop of the dhcp-script with: { echo "# $@" set } >>"/tmp/dhcp-$2-$1-$3" root@F36-stube:~ cat /tmp/dhcp-e4:f8:9c:73:8b:1f-arp-add-100.66.19.131 # arp-add e4:f8:9c:73:8b:1f 100.66.19.131 FUNCNAME='' HOME='/' HOSTNAME='F36-stube' IFS=' ' LINENO='' OPTIND='1' PATH='/usr/sbin:/usr/bin:/sbin:/bin' PPID='19337' PS1='\w \$ ' PS2='> ' PS4='+ ' PWD='/' SHLVL='1' TERM='linux' USER_DHCPSCRIPT='/etc/dhcp-script.d/10dhcpscript' root@F36-stube:~ dnsmasq --version Dnsmasq version 2.89 Copyright (c) 2000-2022 Simon Kelley ... Maybe somebody has an idea why this can happen, looking through the source it is not obvious and *should not happen* 8-) => except 'data.interface' is unknown. This happens on different CPU architectures, at least: mips, arm and powerpc. I'am happy to test patches or suggestions. Thanks for your great work & bye, Bastian Bittorf [1] https://github.com/bittorf/kalua/blob/master/openwrt-addons/etc/dhcp-script.d/10dhcpscript _______________________________________________ Dnsmasq-discuss mailing list Dnsmasq-discuss@lists.thekelleys.org.uk https://lists.thekelleys.org.uk/cgi-bin/mailman/listinfo/dnsmasq-discuss