[Dnsmasq-discuss] dhcp-script: environment var DNSMASQ_INTERFACE not always set
Bastian Bittorf
bb at npl.de
Sun Aug 6 20:00:11 UTC 2023
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 at 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 at 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 at 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
More information about the Dnsmasq-discuss
mailing list