<div dir="ltr">Hi,<div><br></div><div><p class="gmail-p1" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:10.5pt;font-family:Courier;color:black"><span class="gmail-s1"><span lang="EN-IN">“</span></span></p>

<p class="gmail-p1" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:10.5pt;font-family:Courier;color:black"><span class="gmail-s1"><i><span lang="EN-IN">Acknowledge
on "Client moves".</span></i></span><span class="gmail-apple-converted-space"><i><span lang="EN-IN"> 
</span></i></span><span class="gmail-s1"><i><span lang="EN-IN">The 'releases IP' is probably</span></i></span><i></i></p>

<p class="gmail-p1" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:10.5pt;font-family:Courier;color:black"><span class="gmail-s1"><i><span lang="EN-IN">something
like "I'm unaware that IP stands for Internet Protocol</span></i></span><i><span lang="EN-IN"></span></i></p>

<p class="gmail-p1" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:10.5pt;font-family:Courier;color:black"><span class="gmail-s1"><i><span lang="EN-IN">and
want to try how far I can get by being vague how the release</span></i></span><i><span lang="EN-IN"></span></i></p>

<p class="gmail-p1" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:10.5pt;font-family:Courier;color:black"><span class="gmail-s1"><i><span lang="EN-IN">of
the DHCP lease was done"</span></i></span><i><span lang="EN-IN"></span></i></p>

<p class="gmail-p2" style="margin:0in;font-size:9pt;font-family:Helvetica,sans-serif"><span lang="EN-IN">—></span></p>

<p class="gmail-p2" style="margin:0in;font-size:9pt;font-family:Helvetica,sans-serif"><span lang="EN-IN">Client is
executing “dhclient -4 eth1 -r” to release the IP address.</span></p>

<p class="gmail-p3" style="margin:0in;font-size:9pt;font-family:Helvetica,sans-serif"><span lang="EN-IN"> </span></p>

<p class="gmail-p3" style="margin:0in;font-size:9pt;font-family:Helvetica,sans-serif"><span lang="EN-IN"> </span></p>

<p class="gmail-p1" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:10.5pt;font-family:Courier;color:black"><span class="gmail-s1"><i><span lang="EN-IN">The
issue of moving clients,</span></i></span><i><span lang="EN-IN"></span></i></p>

<p class="gmail-p1" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:10.5pt;font-family:Courier;color:black"><span class="gmail-s1"><i><span lang="EN-IN">the
issue of interfaces go down and come up,</span></i></span><i><span lang="EN-IN"></span></i></p>

<p class="gmail-p1" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:10.5pt;font-family:Courier;color:black"><span class="gmail-s1"><i><span lang="EN-IN">the
issue of moving clients AND flipping interfaces?</span></i></span><i><span lang="EN-IN"></span></i></p>

<p class="gmail-p1" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:10.5pt;font-family:Courier;color:black"><span class="gmail-s1"><span lang="EN-IN">—></span></span><span lang="EN-IN"></span></p>

<p class="gmail-p4" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:9pt;font-family:Helvetica,sans-serif;color:black"><span class="gmail-s1"><span lang="EN-IN">There
is no flapping of the interfaces, interfaces are not going down and comping up.
Need to have at least one interface in DOWN state with dhcpv4 pool address
range defined for it, to reproduce the issue.</span></span><span lang="EN-IN"></span></p>

<p class="gmail-p5" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:10.5pt;font-family:Courier;color:black"><span lang="EN-IN"> </span></p>

<p class="gmail-p4" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:9pt;font-family:Helvetica,sans-serif;color:black"><span class="gmail-s1"><span lang="EN-IN">The
steps to reproduce the issue are as follows:</span></span><span lang="EN-IN"></span></p>

<p class="gmail-p4" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:9pt;font-family:Helvetica,sans-serif;color:black"><span class="gmail-s1"><span lang="EN-IN">1)
Have one client, 3 dhcp pools for 3 vlans or interfaces as shown below. Out of
these 3 interfaces, need to keep one interface in DOWN state, and move the
client across the other two UP interfaces, to reproduce the issue.</span></span><span lang="EN-IN"></span></p>

<p class="gmail-p4" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:9pt;font-family:Helvetica,sans-serif;color:black"><span class="gmail-s1"><span lang="EN-IN">vlan9
(State UP) : Range: 192.168.9.10-192.168.9.254</span></span><span lang="EN-IN"></span></p>

<p class="gmail-p4" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:9pt;font-family:Helvetica,sans-serif;color:black"><span class="gmail-s1"><span lang="EN-IN">vlan19
(State UP): Range: 192.168.19.10-192.168.19.254</span></span><span lang="EN-IN"></span></p>

<p class="gmail-p4" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:9pt;font-family:Helvetica,sans-serif;color:black"><span class="gmail-s1"><span lang="EN-IN">vlan99
(State DOWN): Range: 192.168.99.10-192.168.99.254</span></span><span lang="EN-IN"></span></p>

<p class="gmail-p6" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:9pt;font-family:Helvetica,sans-serif;color:black"><span lang="EN-IN"> </span></p>

<p class="gmail-p4" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:9pt;font-family:Helvetica,sans-serif;color:black"><span class="gmail-s1"><span lang="EN-IN">2)
Put the client on vlan9. Client gets IP from vlan9 pool (e.g. 192.168.9.10) by
executing “dhclient -4 eth1”.</span></span><span lang="EN-IN"></span></p>

<p class="gmail-p6" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:9pt;font-family:Helvetica,sans-serif;color:black"><span lang="EN-IN"> </span></p>

<p class="gmail-p4" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:9pt;font-family:Helvetica,sans-serif;color:black"><span class="gmail-s1"><span lang="EN-IN">3)
Put the same client on vlan19. Client releases previously acquired IP (e.g.
192.168.9.10) by executing “dhclient -4 eth1 -r”.</span></span><span lang="EN-IN"></span></p>

<p class="gmail-p6" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:9pt;font-family:Helvetica,sans-serif;color:black"><span lang="EN-IN"> </span></p>

<p class="gmail-p4" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:9pt;font-family:Helvetica,sans-serif;color:black"><span class="gmail-s1"><span lang="EN-IN">4)
The same client tries to get the IP by executing “dhclient -4 eth1”.</span></span><span lang="EN-IN"></span></p>

<p class="gmail-p4" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:9pt;font-family:Helvetica,sans-serif;color:black"><span class="gmail-s1"><span lang="EN-IN">Here
client should get IP address from 192.168.19.xx pool, but it gets from
192.168.99.xx pool.</span></span><span lang="EN-IN"></span></p>

<p class="gmail-p6" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:9pt;font-family:Helvetica,sans-serif;color:black"><span lang="EN-IN"> </span></p>

<p class="gmail-p4" style="margin:0in;background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-origin:initial;background-clip:initial;font-size:9pt;font-family:Helvetica,sans-serif;color:black"><span class="gmail-s1"><span lang="EN-IN">5)
In case if the issue is not seen at step 4, then need to move the client across
vlan9 and vlan19 couple of times, where client will release the previously
acquired IP address on the current vlan and then try to acquire the IP address
on the current vlan.</span></span><span lang="EN-IN"></span></p>

<p class="MsoNormal" style="margin:0in;font-size:10pt;font-family:Calibri,sans-serif"><span lang="EN-IN" style="font-size:11pt"> </span></p>

<p class="MsoNormal" style="margin:0in;font-size:10pt;font-family:Calibri,sans-serif"><span class="gmail-s1"><span lang="EN-IN">Looking for your help to root cause the issue.</span></span></p>

<p class="MsoNormal" style="margin:0in;font-size:10pt;font-family:Calibri,sans-serif"><span class="gmail-s1"><span lang="EN-IN">”</span></span></p>

<p class="MsoNormal" style="margin:0in;font-size:10pt;font-family:Calibri,sans-serif"><span style="font-size:11pt"> </span></p>

<p class="MsoNormal" style="margin:0in;font-size:10pt;font-family:Calibri,sans-serif"><span lang="EN-IN" style="font-size:11pt"> </span></p>

<p class="MsoNormal" style="margin:0in;font-size:10pt;font-family:Calibri,sans-serif"><span lang="EN-IN" style="font-size:11pt">Thanks and Regards,</span></p><p class="MsoNormal" style="margin:0in;font-size:10pt;font-family:Calibri,sans-serif"><span lang="EN-IN" style="font-size:11pt">Shashi</span></p></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Aug 8, 2023 at 11:23 AM Geert Stappers <<a href="mailto:stappers@stappers.nl">stappers@stappers.nl</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Sun, Aug 06, 2023 at 08:00:11PM +0000, Bastian Bittorf wrote:<br>
> Hello hackers,<br>
> <br>
> according to 'man dnsmasq' the var DNSMASQ_INTERFACE stores the name<br>
> of the interface on which the request arrived; this is not set for "old"<br>
> actions when dnsmasq restarts.<br>
> <br>
> all this in done in src/helper.c:<br>
> my_setenv("DNSMASQ_INTERFACE", strlen(data.interface) != 0 ? data.interface : NULL, &err);<br>
> <br>
> With my (up-to-date) OpenWRT setup this seems sometimes not the case.<br>
> Ontop of my dhcp-script.sh[1] i do (something like):<br>
> <br>
> <br>
> #!/bin/sh<br>
> MODE="$1"<br>
> MAC="$2"<br>
> IP="$3"<br>
> HOST="$4"<br>
> <br>
> if [ -n "$DNSMASQ_INTERFACE" ]; then<br>
>   log "provided dev: $DNSMASQ_INTERFACE mode: $MODE mac: $MAC ip: $IP host: $HOST"<br>
> else<br>
>   DEV="$( guess_dev "$IP" )"<br>
>   log "guessed dev: $DEV mode: $MODE mac: $MAC ip: $IP host: $HOST"<br>
> fi<br>
> <br>
> <br>
> Here the log output, when env-var DNSMASQ_INTERFACE is empty/unset and MODE is arp-add/add(!):<br>
> There are 2 interesting lines - both from the same client (linux, under my control):<br>
> <br>
> provided dev: br-mastergate mode: old mac: e4:f8:9c:73:8b:1f ip: 100.66.19.131 host: filmforecast<br>
> guessed dev:  br-mastergate mode: add mac: e4:f8:9c:73:8b:1f ip: 100.66.19.131 host: unset<br>
> <br>
> root@box:~ logread | grep e4:f8:9c:73:8b:1f<br>
> Sun Aug  6 21:12:38 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> 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<br>
<br>
Network 19<br>
<br>
> Sun Aug  6 21:12:38 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> kalua: /usr/lib/dnsmasq/dhcp-sc: dhcp_old() 'e4:f8:9c:73:8b:1f' is from 'br-mastergate' = roaming-DEV HOST: filmforecast<br>
> Sun Aug  6 21:16:01 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> hostapd: phy1-ap0: STA e4:f8:9c:73:8b:1f IEEE 802.11: authenticated<br>
> Sun Aug  6 21:16:01 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> kalua: /usr/sbin/cron.wireless_: iwevent() EVENT 6993: 'phy1-ap0: new station e4:f8:9c:73:8b:1f'<br>
> Sun Aug  6 21:16:01 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> hostapd: phy1-ap0: STA e4:f8:9c:73:8b:1f IEEE 802.11: associated (aid 3)<br>
> Sun Aug  6 21:16:01 2023 daemon.notice hostapd: phy1-ap0: AP-STA-CONNECTED e4:f8:9c:73:8b:1f auth_alg=open<br>
<br>
<br>
> Sun Aug  6 21:16:01 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> dnsmasq-dhcp[19331]: DHCPREQUEST(br-mastergate) 100.65.42.131 e4:f8:9c:73:8b:1f<br>
> Sun Aug  6 21:16:01 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> dnsmasq-dhcp[19331]: DHCPNAK(br-mastergate) 100.65.42.131 e4:f8:9c:73:8b:1f wrong address<br>
<br>
Network 42 DHCPREQUEST  _and_  DHCPNAK<br>
<br>
<br>
> Sun Aug  6 21:16:01 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> kalua: /usr/sbin/cron.wireless_: wifi_signal_get() dev: phy1-ap0 mac: e4:f8:9c:73:8b:1f try: 3 signal: -64 file: ''<br>
> Sun Aug  6 21:16:01 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> 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<br>
<br>
> Sun Aug  6 21:16:01 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> kalua: /usr/sbin/cron.wireless_: iwevent() mac2ipv4(20) grabbed ip from arp: e4:f8:9c:73:8b:1f -> 100.65.42.131<br>
> Sun Aug  6 21:16:01 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> 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)<br>
<br>
Network 42<br>
<br>
<br>
> Sun Aug  6 21:16:01 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> dnsmasq-dhcp[19331]: DHCPDISCOVER(br-mastergate) 100.65.42.131 e4:f8:9c:73:8b:1f<br>
<br>
A  discover, usualy  0.0.0.0,  this time  100.65.42.131    (Note the 42)<br>
<br>
<br>
> Sun Aug  6 21:16:01 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> dnsmasq-dhcp[19331]: DHCPOFFER(br-mastergate) 100.66.19.131 e4:f8:9c:73:8b:1f<br>
<br>
Note the 19<br>
<br>
<br>
> Sun Aug  6 21:16:01 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> dnsmasq-dhcp[19331]: DHCPREQUEST(br-mastergate) 100.66.19.131 e4:f8:9c:73:8b:1f<br>
> Sun Aug  6 21:16:01 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> dnsmasq-dhcp[19331]: DHCPACK(br-mastergate) 100.66.19.131 e4:f8:9c:73:8b:1f filmforecast<br>
<br>
> Sun Aug  6 21:16:01 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> 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<br>
<br>
dhcp_script<br>
<br>
<br>
> Sun Aug  6 21:16:01 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> kalua: /usr/lib/dnsmasq/dhcp-sc: dhcp_old() 'e4:f8:9c:73:8b:1f' is from 'br-mastergate' = roaming-DEV HOST: filmforecast<br>
<br>
dhcp_old<br>
<br>
<br>
70 seconds<br>
<br>
> Sun Aug  6 21:17:11 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> 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<br>
<br>
dhcp_script<br>
<br>
<br>
> Sun Aug  6 21:17:11 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> kalua: /usr/lib/dnsmasq/dhcp-sc: dhcp_add() 'e4:f8:9c:73:8b:1f' is from 'br-mastergate' = roaming-DEV HOST: unset<br>
<br>
dhcp_add<br>
<br>
<br>
> Sun Aug  6 21:17:11 2023 <a href="http://daemon.info" rel="noreferrer" target="_blank">daemon.info</a> kalua: /usr/lib/dnsmasq/dhcp-sc: F36-stube_dhcp-add() [OK] _weblogin login_check e4:f8:9c:73:8b:1f<br>
<br>
dhcp_F36-stube_dhcp-add<br>
<br>
<br>
> <br>
> the environment during the "guessed dev" call (without DNSMASQ_INTERFACE set)<br>
> was written ontop of the dhcp-script with:<br>
> {<br>
> echo "# $@"<br>
> set<br>
> } >>"/tmp/dhcp-$2-$1-$3"<br>
> <br>
> root@F36-stube:~ cat /tmp/dhcp-e4:f8:9c:73:8b:1f-arp-add-100.66.19.131 <br>
> # arp-add e4:f8:9c:73:8b:1f 100.66.19.131<br>
> FUNCNAME=''<br>
> HOME='/'<br>
> HOSTNAME='F36-stube'<br>
> IFS='         <br>
> '<br>
> LINENO=''<br>
> OPTIND='1'<br>
> PATH='/usr/sbin:/usr/bin:/sbin:/bin'<br>
> PPID='19337'<br>
> PS1='\w \$ '<br>
> PS2='> '<br>
> PS4='+ '<br>
> PWD='/'<br>
> SHLVL='1'<br>
> TERM='linux'<br>
> USER_DHCPSCRIPT='/etc/dhcp-script.d/10dhcpscript'<br>
> <br>
> root@F36-stube:~ dnsmasq --version<br>
> Dnsmasq version 2.89  Copyright (c) 2000-2022 Simon Kelley<br>
> ...<br>
> <br>
> Maybe somebody has an idea why this can happen, looking through the  <br>
> source it is not obvious and *should not happen* 8-) => except 'data.interface' is unknown.<br>
> This happens on different CPU architectures, at least: mips, arm and powerpc.<br>
> <br>
> I'am happy to test patches or suggestions.<br>
<br>
Suggestion:  Dig deeper<br>
<br>
<br>
> Thanks for your great work & bye,<br>
> Bastian Bittorf<br>
<br>
Groeten<br>
Geert Stappers<br>
<br>
[1]<br>
#!/bin/sh<br>
. /tmp/loader<br>
<br>
MODE="${1:-unset}"<br>
MAC="${2:-ff:00:00:00:00:00}"           # FIXME! this enforces an invalid mac, see sanitizer_mac()<br>
IP="${3:-127.0.0.1}"<br>
HOST="${4:-unset}"<br>
<br>
case "$MODE" in<br>
        arp-add) MODE=add ;;<br>
        arp-del) MODE=del ;;<br>
        old) test -e /tmp/CRON_OVERLOAD && exit 0 ;;<br>
esac<br>
<br>
case "$MAC" in<br>
        '00:00:00:00:00:00')<br>
                MODE='cron-watchdog'<br>
        ;;<br>
        *'-'*)<br>
                _log it dhcp_script daemon info "ignore non-ethernet events: $MAC"<br>
                exit 0<br>
        ;;<br>
esac<br>
<br>
if   [ -n "$DNSMASQ_INTERFACE" ]; then<br>
        # see: man dnsmasq - we get some env vars, debug with 'set >/tmp/foo' ontop of this script<br>
        # DNSMASQ_CLIENT_ID<br>
        # DNSMASQ_DATA_MISSING<br>
        # DNSMASQ_DOMAIN<br>
        # DNSMASQ_INTERFACE => DNSMASQ_INTERFACE stores the name of the interface on which the request arrived; this is not set for "old" actions when dnsmasq restarts.<br>
        # DNSMASQ_LEASE_EXPIRES<br>
        # DNSMASQ_TIME_REMAINING<br>
<br>
        export DNSMASQ_INTERFACE                # needed in netfilter_user_reachable()<br>
        DEV="$DNSMASQ_INTERFACE"<br>
        _log it dhcp_script daemon info "provided dev: $DEV mode: $MODE mac: $MAC ip: $IP host: $HOST"<br>
elif [ -e "$TMPDIR/firmware_burn" ]; then<br>
        exit 0<br>
else<br>
        case "$IP" in fe80::*) exit 0 ;; esac   # ignore IPv6 linklocal, ip2dev() does not work here reliable anyway<br>
<br>
        # <a href="https://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2023q3/017193.html" rel="noreferrer" target="_blank">https://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2023q3/017193.html</a><br>
        DEV="$( _net ip2dev $IP )"<br>
        _log it dhcp_script daemon info "guessed dev: $DEV mode: $MODE mac: $MAC ip: $IP host: $HOST"<br>
fi<br>
<br>
case "$DEV" in<br>
        'br-mastergate')<br>
                TYPE='roaming'<br>
<br>
                case "$MODE" in<br>
                        'add')<br>
                                echo "$MAC $IP $DNSMASQ_LEASE_EXPIRES" >>"$TMPDIR/roaming_dhcp_worker"<br>
                                # recent entries on top ("tac")<br>
                                grep -sn '' "$TMPDIR/roaming_dhcp_worker" | sort -rn | cut -d: -f2- >"$TMPDIR/roaming_dhcp"<br>
                        ;;<br>
                        'del')<br>
                                sed -i "/^$MAC/d" "$TMPDIR/roaming_dhcp_worker"<br>
                                sed -i "/^$MAC/d" "$TMPDIR/roaming_dhcp"<br>
                        ;;<br>
                esac<br>
        ;;<br>
        $WANDEV)<br>
                TYPE='wan'<br>
        ;;<br>
        $LANDEV)<br>
                TYPE='lan'<br>
<br>
                case "$MODE" in<br>
                        'add'|'old')<br>
                                bool_true 'system.@monitoring[0].report_lan_dhcp' && {<br>
                                        SHOW_HOST="$HOST"<br>
                                        [ "$SHOW_HOST" = 'unset' ] && SHOW_HOST="$( _net mac2vendor "$MAC" short )"<br>
                                        echo >>$SCHEDULER_IMPORTANT "_log remote 'lan_dhcp: date: $( date ) CLIENT: mac: $MAC ip: $IP hostname: $SHOW_HOST ROUTER: $HOSTNAME'"<br>
                                }<br>
                        ;;<br>
                esac<br>
        ;;<br>
        $WIFIDEV)<br>
                TYPE='wifi'<br>
        ;;<br>
        $LODEV)<br>
                TYPE='loopback'<br>
        ;;<br>
        'by-mybridge'|'gateway0')       # just for better logging<br>
                TYPE='batman'<br>
        ;;<br>
        *)<br>
                TYPE='unknown'<br>
        ;;<br>
esac<br>
<br>
case "$HOST" in<br>
        'reanimateV2')<br>
                # seed watch_reanimate_dead_neighbour()<br>
                MODE='invalid'<br>
                _http robotstxt_generate<br>
        ;;<br>
esac<br>
<br>
if [ "$MODE" = 'old' ]; then<br>
        _log it dhcp_$MODE daemon info "'$MAC' is from '$DEV' = ${TYPE}-DEV HOST: $HOST"<br>
else<br>
        _log it dhcp_$MODE daemon info "'$MAC' is from '$DEV' = ${TYPE}-DEV HOST: $HOST"<br>
<br>
        case "$MODE-$HOST" in<br>
                'add-check_if_reachable')<br>
                        MODE="$HOST"<br>
                        _log it dhcp_add_check_if_reachable daemon info "MAC: $MAC IP: $IP DEV: $DEV"<br>
                        _netfilter user_add "$MAC" "$IP"<br>
                ;;<br>
        esac<br>
fi<br>
<br>
case "$MODE" in<br>
        add|old)<br>
                bool_true 'system.@weblogin[0].enabled' && {<br>
                        case "$MODE" in<br>
                                'old')<br>
                                        _netfilter user_probe "$MAC" && exit 0<br>
                                        # maybe unknown after unscheduled reboot, so go further<br>
                                ;;<br>
                                'add')<br>
                                        case "$TYPE" in<br>
                                                'roaming')<br>
                                                        echo >>$SCHEDULER_IMPORTANT "_net roaming_report_new $MAC $IP $DNSMASQ_LEASE_EXPIRES"<br>
                                                ;;<br>
                                        esac<br>
                                ;;<br>
                        esac<br>
<br>
                        USER="$MAC"<br>
                        SIGNAL="${HOSTNAME}_dhcp-${MODE}"                               # keyword 'dhcp' is important for login_check()<br>
                        export REMOTE_ADDR="$IP"<br>
<br>
                        if _weblogin login_check "$USER" '' "$MAC" "$SIGNAL" ; then<br>
                                # for "very fast unsplashing" and not showing 'please use credentials'<br>
                                $IPT -t mangle -I PREROUTING -j ACCEPT<br>
                                _log it $SIGNAL daemon info "[OK] _weblogin login_check $USER"<br>
                                _netfilter user_add "$MAC" "$IP"<br>
                                # remove the hack for "very fast unsplashing"<br>
                                $IPT -t mangle -D PREROUTING -j ACCEPT<br>
                        else<br>
                                if _weblogin login_check "$USER" "$HOSTNAME" "$MAC" "$SIGNAL" ; then<br>
                                        _log it $SIGNAL daemon info "[OK] _weblogin login_check $USER/$HOSTNAME (2nd try)"<br>
                                        _netfilter user_add "$MAC" "$IP"<br>
                                else<br>
                                        _log it $SIGNAL daemon info "[ERR] _weblogin login_check $USER/$HOSTNAME"<br>
                                fi<br>
                        fi<br>
                }<br>
<br>
                echo >>$SCHEDULER "_netfilter portforwarding_request $IP $MAC $HOST"<br>
        ;;<br>
        del)<br>
#               if bool_true 'system.@weblogin[0].dhcpautologout'; then<br>
                        echo >>$SCHEDULER "_netfilter user_del $MAC dhcp_del"<br>
#               else<br>
#                       _netfilter set_arp reachable "$MAC" "$IP" "$DEV"<br>
#               fi<br>
        ;;<br>
esac<br>
<br>
# wrong place but works:<br>
[ -e '/etc/crontabs/root' ] && {<br>
        [ $( _stopwatch stop '/tmp/CRON_LASTCALL' interim,nolog,seconds ) -gt 900 ] && {<br>
                mkdir '/tmp/LOCK_dhcpscript_cron_restart' && {<br>
                        _stopwatch start '/tmp/CRON_LASTCALL' global<br>
                        _log it watch_cron daemon alert "cron died, restarting"<br>
                        /etc/init.d/S51crond_fff+ restart<br>
                        rm -fR '/tmp/LOCK_dhcpscript_cron_restart'<br>
                }<br>
        }<br>
}<br>
<br>
true<br>
-- <br>
Silence is hard to parse<br>
<br>
_______________________________________________<br>
Dnsmasq-discuss mailing list<br>
<a href="mailto:Dnsmasq-discuss@lists.thekelleys.org.uk" target="_blank">Dnsmasq-discuss@lists.thekelleys.org.uk</a><br>
<a href="https://lists.thekelleys.org.uk/cgi-bin/mailman/listinfo/dnsmasq-discuss" rel="noreferrer" target="_blank">https://lists.thekelleys.org.uk/cgi-bin/mailman/listinfo/dnsmasq-discuss</a><br>
</blockquote></div>