>Synopsis:      dhcpleased(8) doesn't handle underlying changes in trunk(4)
>Category:      system
>Environment:
        System      : OpenBSD 6.9
        Details     : OpenBSD 6.9 (GENERIC.MP) #459: Fri Apr  9 11:31:33 MDT 
2021
                         
[email protected]:/usr/src/sys/arch/amd64/compile/GENERIC.MP

        Architecture: OpenBSD.amd64
        Machine     : amd64

>Description:
        On a trunk(4) interface for wired-WiFi failover, dhcpleased(8)
isn't able to ask for a new lease on active physical interface change.
This is a problem for me, because the network for wired and wireless
devicen on my LAN are different (172.16.0.0/24 for wired, 172.17.0.0/24
for wireless).

>How-To-Repeat:
        Start with a trunk(4) with failover configured as showed below,
connected over WiFi and without an ethernet cord plugged in. Start
dhcpleased(8) and get a lease. Now plug ethernet cord and check
interface status; despite the change on the active physical interface
dhcpleased(8) doesn't solicite a new lease. dhclient(8) does work in
this setup.

oolong$ doas cat /etc/hostname.trunk0
trunkproto failover
trunkport em0
trunkport iwn0
inet autoconf
oolong$ ifconfig trunk0
trunk0: flags=808943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,AUTOCONF4> 
mtu 1500
        lladdr 3c:97:0e:31:1f:fa
        index 5 priority 0 llprio 3
        trunk: trunkproto failover
                iwn0 port active
                em0 port master
        groups: trunk egress
        media: Ethernet autoselect
        status: active

>>> dhcpleased started <<<

oolong$ ifconfig trunk0
trunk0: flags=808943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,AUTOCONF4> 
mtu 1500
        lladdr 3c:97:0e:31:1f:fa
        index 5 priority 0 llprio 3
        trunk: trunkproto failover
                iwn0 port active
                em0 port master
        groups: trunk egress
        media: Ethernet autoselect
        status: active
        inet 172.17.0.3 netmask 0xffffff00 broadcast 172.17.0.255
oolong$ doas dhcpleasectl show interface trunk0
trunk0 [Bound]:
        server: 172.17.0.1
            IP: 172.17.0.3/255.255.255.0
        router: 172.17.0.1
           DNS: 172.17.0.1
         lease: 23h 59m 42s

>>> em0 plugged in <<<

oolong$ ifconfig trunk0
trunk0: flags=808943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,AUTOCONF4> 
mtu 1500
        lladdr 3c:97:0e:31:1f:fa
        index 5 priority 0 llprio 3
        trunk: trunkproto failover
                iwn0 port
                em0 port master,active
        groups: trunk egress
        media: Ethernet autoselect
        status: active
        inet 172.17.0.3 netmask 0xffffff00 broadcast 172.17.0.255
oolong$ doas dhcpleasectl show interface trunk0
trunk0 [Bound]:
        server: 172.17.0.1
            IP: 172.17.0.3/255.255.255.0
        router: 172.17.0.1
           DNS: 172.17.0.1
         lease: 23h 59m 14s
oolong$ doas dhcpleasectl send request trunk0
oolong$ doas dhcpleasectl show interface trunk0
trunk0 [Renewing]:
        server: 172.17.0.1
            IP: 172.17.0.3/255.255.255.0
        router: 172.17.0.1
           DNS: 172.17.0.1
         lease: 23h 59m 1s

---

oolong$ doas dhcpleased -dvvv
state_transition[trunk0] Down -> Rebooting, timo: 1
DHCPREQUEST on trunk0
parse_dhcp, from: 00:0d:b9:53:c6:29, to: 3c:97:0e:31:1f:fa
parse_dhcp: 172.17.0.1:67 -> 172.17.0.3:68
dhcp_hdr op: Boot Reply (2)
dhcp_hdr htype: Ethernet (1)
dhcp_hdr hlen: 6
dhcp_hdr hops: 0
dhcp_hdr xid: 0xe2ba463e
dhcp_hdr secs: 0
dhcp_hdr flags: 0x0
dhcp_hdr ciaddr: 0.0.0.0
dhcp_hdr yiaddr: 172.17.0.3
dhcp_hdr siaddr: 172.17.0.1
dhcp_hdr giaddr: 0.0.0.0
dhcp_hdr chaddr: 3c:97:0e:31:1f:fa (00000000000000000000)
DHO_DHCP_MESSAGE_TYPE: DHCPACK
DHO_DHCP_SERVER_IDENTIFIER: 172.17.0.1
DHO_DHCP_LEASE_TIME 86400s
DHO_SUBNET_MASK: 255.255.255.0
DHO_ROUTER: 172.17.0.1 (1/1)
DHO_DOMAIN_NAME_SERVERS: 172.17.0.1 (1/1)
DHO_DOMAIN_NAME: lgv5.net
DHO_DHCP_RENEWAL_TIME 43200s
DHO_DHCP_REBINDING_TIME 75600s
DHO_END
DHCPACK on trunk0 from 00:0d:b9:53:c6:29/172.17.0.1 to 
3c:97:0e:31:1f:fa/172.17.0.3
adding 172.17.0.3 to trunk0 (lease from 172.17.0.1)
adding nameservers 172.17.0.1 (lease from 172.17.0.1 on trunk0)
state_transition[trunk0] Rebooting -> Bound, timo: 43200
configure_interface trunk0

>>> em0 plugged in <<<

state_transition[trunk0] Bound -> Renewing, timo: 16200
DHCPREQUEST on trunk0
^Cfrontend exiting
waiting for children to terminate
engine exiting
terminating

---

oolong$ doas tcpdump -eni trunk0 port bootpc or bootps
tcpdump: listening on trunk0, link-type EN10MB
23:50:12.702732 3c:97:0e:31:1f:fa ff:ff:ff:ff:ff:ff 0800 342: 0.0.0.0.68 > 
255.255.255.255.67:  xid:0x3e46bae2 [|bootp] [tos 0x10]
23:50:12.703968 00:0d:b9:53:c6:29 3c:97:0e:31:1f:fa 0800 347: 172.17.0.1.67 > 
172.17.0.3.68:  xid:0x3e46bae2 Y:172.17.0.3 S:172.17.0.1 [|bootp] [tos 0x10]

>>> after dhcpleasectl send request trunk0 <<<

23:51:06.464978 3c:97:0e:31:1f:fa 00:0d:b9:53:c6:29 0800 342: 172.17.0.3.68 > 
172.17.0.1.67:  xid:0x20edf395 [|bootp]
^C
366 packets received by filter
0 packets dropped by kernel


>Fix:
        As showed above, even forcing a solicitation with dhcpleasectl
produces no effect, and I think it's even worth to notice that it
doesn't try to send a request to broadcast, but to the last known
responder.
A workaround is unsetting and setting "autoconf" again on trunk(4)
after plugging the wired network.

dmesg:
OpenBSD 6.9 (GENERIC.MP) #459: Fri Apr  9 11:31:33 MDT 2021
    [email protected]:/usr/src/sys/arch/amd64/compile/GENERIC.MP
real mem = 12534018048 (11953MB)
avail mem = 12138762240 (11576MB)
random: good seed from bootblocks
mpath0 at root
scsibus0 at mpath0: 256 targets
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 2.7 @ 0xdae9d000 (70 entries)
bios0: vendor LENOVO version "G2ET33WW (1.13 )" date 07/24/2012
bios0: LENOVO 2325BG4
acpi0 at bios0: ACPI 4.0
acpi0: sleep states S0 S3 S4 S5
acpi0: tables DSDT FACP SLIC TCPA SSDT SSDT SSDT HPET APIC MCFG ECDT FPDT ASF! 
UEFI UEFI POAT SSDT SSDT DMAR UEFI
acpi0: wakeup devices LID_(S4) SLPB(S3) IGBE(S4) EXP3(S4) XHCI(S3) EHC1(S3) 
EHC2(S3) HDEF(S4)
acpitimer0 at acpi0: 3579545 Hz, 24 bits
acpihpet0 at acpi0: 14318179 Hz
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz, 1197.47 MHz, 06-3a-09
cpu0: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,RDTSCP,LONG,LAHF,PERF,ITSC,FSGSBASE,SMEP,ERMS,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,MELTDOWN
cpu0: 256KB 64b/line 8-way L2 cache
cpu0: smt 0, core 0, package 0
mtrr: Pentium Pro MTRR support, 10 var ranges, 88 fixed ranges
cpu0: apic clock running at 99MHz
cpu0: mwait min=64, max=64, C-substates=0.2.1.1.2, IBE
cpu1 at mainbus0: apid 2 (application processor)
cpu1: Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz, 1197.29 MHz, 06-3a-09
cpu1: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,RDTSCP,LONG,LAHF,PERF,ITSC,FSGSBASE,SMEP,ERMS,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,MELTDOWN
cpu1: 256KB 64b/line 8-way L2 cache
cpu1: smt 0, core 1, package 0
ioapic0 at mainbus0: apid 2 pa 0xfec00000, version 20, 24 pins
acpimcfg0 at acpi0
acpimcfg0: addr 0xf8000000, bus 0-63
acpiec0 at acpi0
acpiprt0 at acpi0: bus 0 (PCI0)
acpiprt1 at acpi0: bus -1 (PEG_)
acpiprt2 at acpi0: bus 2 (EXP1)
acpiprt3 at acpi0: bus 3 (EXP2)
acpiprt4 at acpi0: bus 4 (EXP3)
acpibtn0 at acpi0: LID_
acpibtn1 at acpi0: SLPB
acpipci0 at acpi0 PCI0: 0x00000000 0x00000011 0x00000001
acpicmos0 at acpi0
tpm0 at acpi0 TPM_ addr 0xfed40000/0x5000, device 0x0000104a rev 0x4e
acpibat0 at acpi0: BAT0 model "45N1029" serial 15304 type LION oem "LGC"
acpiac0 at acpi0: AC unit offline
acpithinkpad0 at acpi0: version 1.0
"PNP0C14" at acpi0 not configured
"PNP0C14" at acpi0 not configured
acpicpu0 at acpi0: C3(200@87 mwait.1@0x30), C2(500@59 mwait.1@0x10), C1(1000@1 
mwait.1), PSS
acpicpu1 at acpi0: C3(200@87 mwait.1@0x30), C2(500@59 mwait.1@0x10), C1(1000@1 
mwait.1), PSS
acpipwrres0 at acpi0: PUBS, resource for XHCI, EHC1, EHC2
acpitz0 at acpi0: critical temperature is 103 degC
acpidock0 at acpi0: GDCK not docked (0)
acpivideo0 at acpi0: VID_
acpivout0 at acpivideo0: LCD0
acpivideo1 at acpi0: VID_
cpu0: using VERW MDS workaround (except on vmm entry)
cpu0: Enhanced SpeedStep 1197 MHz: speeds: 2601, 2600, 2500, 2400, 2300, 2200, 
2100, 2000, 1900, 1800, 1700, 1600, 1500, 1400, 1300, 1200 MHz
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0 "Intel Core 3G Host" rev 0x09
inteldrm0 at pci0 dev 2 function 0 "Intel HD Graphics 4000" rev 0x09
drm0 at inteldrm0
inteldrm0: msi, IVYBRIDGE, gen 7
xhci0 at pci0 dev 20 function 0 "Intel 7 Series xHCI" rev 0x04: msi, xHCI 1.0
usb0 at xhci0: USB revision 3.0
uhub0 at usb0 configuration 1 interface 0 "Intel xHCI root hub" rev 3.00/1.00 
addr 1
"Intel 7 Series MEI" rev 0x04 at pci0 dev 22 function 0 not configured
puc0 at pci0 dev 22 function 3 "Intel 7 Series KT" rev 0x04: ports: 16 com
com4 at puc0 port 0 apic 2 int 19: ns16550a, 16 byte fifo
com4: probed fifo depth: 0 bytes
em0 at pci0 dev 25 function 0 "Intel 82579LM" rev 0x04: msi, address 
3c:97:0e:31:1f:fa
ehci0 at pci0 dev 26 function 0 "Intel 7 Series USB" rev 0x04: apic 2 int 16
usb1 at ehci0: USB revision 2.0
uhub1 at usb1 configuration 1 interface 0 "Intel EHCI root hub" rev 2.00/1.00 
addr 1
azalia0 at pci0 dev 27 function 0 "Intel 7 Series HD Audio" rev 0x04: msi
azalia0: codecs: Realtek ALC269, Intel/0x2806, using Realtek ALC269
audio0 at azalia0
ppb0 at pci0 dev 28 function 0 "Intel 7 Series PCIE" rev 0xc4: msi
pci1 at ppb0 bus 2
sdhc0 at pci1 dev 0 function 0 "Ricoh 5U822 SD/MMC" rev 0x07: apic 2 int 16
sdhc0: SDHC 3.0, 50 MHz base clock
sdmmc0 at sdhc0: 4-bit, sd high-speed, mmc high-speed, dma
ppb1 at pci0 dev 28 function 1 "Intel 7 Series PCIE" rev 0xc4: msi
pci2 at ppb1 bus 3
iwn0 at pci2 dev 0 function 0 "Intel Centrino Advanced-N 6205" rev 0x34: msi, 
MIMO 2T2R, MoW, address 60:67:20:82:85:c0
ppb2 at pci0 dev 28 function 2 "Intel 7 Series PCIE" rev 0xc4: msi
pci3 at ppb2 bus 4
ehci1 at pci0 dev 29 function 0 "Intel 7 Series USB" rev 0x04: apic 2 int 23
usb2 at ehci1: USB revision 2.0
uhub2 at usb2 configuration 1 interface 0 "Intel EHCI root hub" rev 2.00/1.00 
addr 1
pcib0 at pci0 dev 31 function 0 "Intel QM77 LPC" rev 0x04
ahci0 at pci0 dev 31 function 2 "Intel 7 Series AHCI" rev 0x04: msi, AHCI 1.3
ahci0: port 0: 6.0Gb/s
scsibus1 at ahci0: 32 targets
sd0 at scsibus1 targ 0 lun 0: <ATA, CT480BX500SSD1, M6C> naa.0000000000000000
sd0: 457862MB, 512 bytes/sector, 937703088 sectors, thin
ichiic0 at pci0 dev 31 function 3 "Intel 7 Series SMBus" rev 0x04: apic 2 int 18
iic0 at ichiic0
spdmem0 at iic0 addr 0x50: 8GB DDR3 SDRAM PC3-12800 SO-DIMM
spdmem1 at iic0 addr 0x51: 4GB DDR3 SDRAM PC3-12800 SO-DIMM
isa0 at pcib0
isadma0 at isa0
pckbc0 at isa0 port 0x60/5 irq 1 irq 12
pckbd0 at pckbc0 (kbd slot)
wskbd0 at pckbd0: console keyboard
pms0 at pckbc0 (aux slot)
wsmouse0 at pms0 mux 0
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
vmm0 at mainbus0: VMX/EPT
uhub3 at uhub1 port 1 configuration 1 interface 0 "Intel Rate Matching Hub" rev 
2.00/0.00 addr 2
uvideo0 at uhub3 port 6 configuration 1 interface 0 "Ricoh Company Ltd. 
Integrated Camera" rev 2.00/0.11 addr 3
video0 at uvideo0
uhub4 at uhub2 port 1 configuration 1 interface 0 "Intel Rate Matching Hub" rev 
2.00/0.00 addr 2
vscsi0 at root
scsibus2 at vscsi0: 256 targets
softraid0 at root
scsibus3 at softraid0: 256 targets
sd1 at scsibus3 targ 1 lun 0: <OPENBSD, SR CRYPTO, 006>
sd1: 457860MB, 512 bytes/sector, 937697393 sectors
root on sd1a (af42e96f6d19d2e8.a) swap on sd1b dump on sd1b
inteldrm0: 1366x768, 32bpp
wsdisplay0 at inteldrm0 mux 1: console (std, vt100 emulation), using wskbd0
wsdisplay0: screen 1-5 added (std, vt100 emulation)

Reply via email to