dhclient flushes manual IPv6 default route on lease renewal

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

dhclient flushes manual IPv6 default route on lease renewal

Olivier Mehani-5
>Synopsis: dhclient flushes manual IPv6 default route one lease renewal
>Category: system
>Environment:
        System      : OpenBSD 5.3
        Details     : OpenBSD 5.3 (GENERIC) #53: Tue Mar 12 18:15:44 MDT 2013
                         [hidden email]:/usr/src/sys/arch/amd64/compile/GENERIC

        Architecture: OpenBSD.amd64
        Machine     : amd64
>Description:

On a network with IPv4-only DHCP and IPv6 with no RA, I ended up with this
/etc/hostname.sis0

  dhcp
  up
  inet6 2001:41D0:1:XXXX::1 56
  !/sbin/route add -inet6 default -gateway 2001:41D0:1:XXff:ff:ff:ff:ff

This default IPv6 route drops every 5 minutes, which is also the frequency at
which dhclient refreshes its leases.

>How-To-Repeat:

  $ sudo /sbin/route add -inet6 default -gateway 2001:41D0:1:XX:ff:ff:ff:ff
  $ route -n show -inet6 | grep default
  default                            2001:41d0:1:XX:ff:ff:ff:ff   UGS 0        0
  $ sudo pkill dhclient && sudo dhclient sis0
  [...]
  $ route -n show -inet6 | grep default
  $

>Fix:

Building dhclient from CURRENT (1.260, [0]) and using it instead seems to be a
valid workaround.

Prior the last change, bind_lease() unconditionally called flush_routes().
However, flush_routes() in [1] is documented to be equivalent to `route -q
$rdomain -n flush -inet -iface $interface` (note the -inet), which might
contradict my understanding of the cause.

[0] http://www.openbsd.org/cgi-bin/cvsweb/src/sbin/dhclient/dhclient.c?rev=1.260
[1] http://www.openbsd.org/cgi-bin/cvsweb/src/sbin/dhclient/kroute.c?rev=1.55




dmesg:
OpenBSD 5.3 (GENERIC) #53: Tue Mar 12 18:15:44 MDT 2013
    [hidden email]:/usr/src/sys/arch/amd64/compile/GENERIC
real mem = 2106527744 (2008MB)
avail mem = 2028052480 (1934MB)
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 2.4 @ 0xe4e30 (23 entries)
bios0: vendor Intel Corp. version "LY66210M.86A.0137.2008.0104.1540" date 01/04/2008
bios0: OVH RPS
acpi0 at bios0: rev 0
acpi0: sleep states S0 S1 S4 S5
acpi0: tables DSDT FACP APIC
acpi0: wakeup devices MAC0(S4) PS2K(S4) PS2M(S4) EUSB(S3) USB_(S3) USB2(S3) USB3(S3) AC97(S4) MC97(S4) ELAN(S4) ELAK(S4)
acpitimer0 at acpi0: 3579545 Hz, 24 bits
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel(R) Celeron(R) CPU 220 @ 1.20GHz, 1200.18 MHz
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,TM,PBE,SSE3,DTES64,MWAIT,DS-CPL,TM2,SSSE3,CX16,xTPR,PDCM,NXE,LONG,LAHF,PERF
cpu0: 512KB 64b/line 2-way L2 cache
cpu0: apic clock running at 133MHz
ioapic0 at mainbus0: apid 4 pa 0xfec00000, version 14, 24 pins
ioapic0: misconfigured as apic 0, remapped to apid 4
acpiprt0 at acpi0: bus 0 (PCI0)
acpiprt1 at acpi0: bus 1 (P0P1)
acpicpu0 at acpi0
acpibtn0 at acpi0: PWRB
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0 "SiS 662 PCI" rev 0x01
agp at pchb0 not configured
ppb0 at pci0 dev 1 function 0 "SiS 648FX AGP" rev 0x00
pci1 at ppb0 bus 1
vga1 at pci1 dev 0 function 0 "SiS 6330 VGA" rev 0x04
wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation)
wsdisplay0: screen 1-5 added (80x25, vt100 emulation)
pcib0 at pci0 dev 2 function 0 "SiS 964 ISA" rev 0x36
pciide0 at pci0 dev 2 function 5 "SiS 5513 EIDE" rev 0x01: 964: DMA, channel 0 wired to compatibility, channel 1 wired to compatibility
pciide0: channel 0 disabled (no drives)
pciide0: channel 1 disabled (no drives)
ohci0 at pci0 dev 3 function 0 "SiS 5597/5598 USB" rev 0x0f: apic 4 int 20, version 1.0, legacy support
ohci1 at pci0 dev 3 function 1 "SiS 5597/5598 USB" rev 0x0f: apic 4 int 21, version 1.0, legacy support
ohci2 at pci0 dev 3 function 2 "SiS 5597/5598 USB" rev 0x0f: apic 4 int 22, version 1.0, legacy support
ehci0 at pci0 dev 3 function 3 "SiS 7002 USB" rev 0x00: apic 4 int 23
ehci0: timed out waiting for BIOS
usb0 at ehci0: USB revision 2.0
uhub0 at usb0 "SiS EHCI root hub" rev 2.00/1.00 addr 1
sis0 at pci0 dev 4 function 0 "SiS 900 10/100BaseTX" rev 0x91: apic 4 int 19, address 00:1c:c0:4b:be:54
brgphy0 at sis0 phy 1: BCM54XX 10/100/1000baseT PHY, rev. 1
pciide1 at pci0 dev 5 function 0 "SiS 181 SATA" rev 0x01: DMA
pciide1: using apic 4 int 17 for native-PCI interrupt
wd0 at pciide1 channel 0 drive 0: <TOSHIBA DT01ACA050>
wd0: 16-sector PIO, LBA48, 476940MB, 976773168 sectors
wd0(pciide1:0:0): using PIO mode 4, Ultra-DMA mode 6
ppb1 at pci0 dev 31 function 0 "SiS PCI-PCI" rev 0x00
pci2 at ppb1 bus 2
isa0 at pcib0
isadma0 at isa0
com0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo
pckbc0 at isa0 port 0x60/5
pckbd0 at pckbc0 (kbd slot)
pckbc0: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
wbsio0 at isa0 port 0x4e/2: W83627DHG rev 0x25
lm1 at wbsio0 port 0x290/8: W83627DHG
usb1 at ohci0: USB revision 1.0
uhub1 at usb1 "SiS OHCI root hub" rev 1.00/1.00 addr 1
usb2 at ohci1: USB revision 1.0
uhub2 at usb2 "SiS OHCI root hub" rev 1.00/1.00 addr 1
usb3 at ohci2: USB revision 1.0
uhub3 at usb3 "SiS OHCI root hub" rev 1.00/1.00 addr 1
mtrr: Pentium Pro MTRR support
vscsi0 at root
scsibus0 at vscsi0: 256 targets
softraid0 at root
scsibus1 at softraid0: 256 targets
root on wd0a (3c6b2ba4c2cabfad.a) swap on wd0b dump on wd0b
WARNING: / was not properly unmounted

usbdevs:
Controller /dev/usb0:
addr 1: high speed, self powered, config 1, EHCI root hub(0x0000), SiS(0x1039), rev 1.00
 port 1 powered
 port 2 powered
 port 3 powered
 port 4 powered
 port 5 powered
 port 6 powered
 port 7 powered
 port 8 powered
Controller /dev/usb1:
addr 1: full speed, self powered, config 1, OHCI root hub(0x0000), SiS(0x1039), rev 1.00
 port 1 powered
 port 2 powered
 port 3 powered
Controller /dev/usb2:
addr 1: full speed, self powered, config 1, OHCI root hub(0x0000), SiS(0x1039), rev 1.00
 port 1 powered
 port 2 powered
 port 3 powered
Controller /dev/usb3:
addr 1: full speed, self powered, config 1, OHCI root hub(0x0000), SiS(0x1039), rev 1.00
 port 1 powered
 port 2 powered

Reply | Threaded
Open this post in threaded view
|

Re: dhclient flushes manual IPv6 default route on lease renewal

Kenneth R Westerback
Pretty sure I fixed this by 5.4. If you can reproduce in 5.4 I would
be extremely interested.

.... Ken

On Tue, Aug 06, 2013 at 03:12:11AM +0200, Olivier Mehani wrote:

> >Synopsis: dhclient flushes manual IPv6 default route one lease renewal
> >Category: system
> >Environment:
> System      : OpenBSD 5.3
> Details     : OpenBSD 5.3 (GENERIC) #53: Tue Mar 12 18:15:44 MDT 2013
> [hidden email]:/usr/src/sys/arch/amd64/compile/GENERIC
>
> Architecture: OpenBSD.amd64
> Machine     : amd64
> >Description:
>
> On a network with IPv4-only DHCP and IPv6 with no RA, I ended up with this
> /etc/hostname.sis0
>
>   dhcp
>   up
>   inet6 2001:41D0:1:XXXX::1 56
>   !/sbin/route add -inet6 default -gateway 2001:41D0:1:XXff:ff:ff:ff:ff
>
> This default IPv6 route drops every 5 minutes, which is also the frequency at
> which dhclient refreshes its leases.
>
> >How-To-Repeat:
>
>   $ sudo /sbin/route add -inet6 default -gateway 2001:41D0:1:XX:ff:ff:ff:ff
>   $ route -n show -inet6 | grep default
>   default                            2001:41d0:1:XX:ff:ff:ff:ff   UGS 0        0
>   $ sudo pkill dhclient && sudo dhclient sis0
>   [...]
>   $ route -n show -inet6 | grep default
>   $
>
> >Fix:
>
> Building dhclient from CURRENT (1.260, [0]) and using it instead seems to be a
> valid workaround.
>
> Prior the last change, bind_lease() unconditionally called flush_routes().
> However, flush_routes() in [1] is documented to be equivalent to `route -q
> $rdomain -n flush -inet -iface $interface` (note the -inet), which might
> contradict my understanding of the cause.
>
> [0] http://www.openbsd.org/cgi-bin/cvsweb/src/sbin/dhclient/dhclient.c?rev=1.260
> [1] http://www.openbsd.org/cgi-bin/cvsweb/src/sbin/dhclient/kroute.c?rev=1.55
>
>
>
>
> dmesg:
> OpenBSD 5.3 (GENERIC) #53: Tue Mar 12 18:15:44 MDT 2013
>     [hidden email]:/usr/src/sys/arch/amd64/compile/GENERIC
> real mem = 2106527744 (2008MB)
> avail mem = 2028052480 (1934MB)
> mainbus0 at root
> bios0 at mainbus0: SMBIOS rev. 2.4 @ 0xe4e30 (23 entries)
> bios0: vendor Intel Corp. version "LY66210M.86A.0137.2008.0104.1540" date 01/04/2008
> bios0: OVH RPS
> acpi0 at bios0: rev 0
> acpi0: sleep states S0 S1 S4 S5
> acpi0: tables DSDT FACP APIC
> acpi0: wakeup devices MAC0(S4) PS2K(S4) PS2M(S4) EUSB(S3) USB_(S3) USB2(S3) USB3(S3) AC97(S4) MC97(S4) ELAN(S4) ELAK(S4)
> acpitimer0 at acpi0: 3579545 Hz, 24 bits
> acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
> cpu0 at mainbus0: apid 0 (boot processor)
> cpu0: Intel(R) Celeron(R) CPU 220 @ 1.20GHz, 1200.18 MHz
> 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,TM,PBE,SSE3,DTES64,MWAIT,DS-CPL,TM2,SSSE3,CX16,xTPR,PDCM,NXE,LONG,LAHF,PERF
> cpu0: 512KB 64b/line 2-way L2 cache
> cpu0: apic clock running at 133MHz
> ioapic0 at mainbus0: apid 4 pa 0xfec00000, version 14, 24 pins
> ioapic0: misconfigured as apic 0, remapped to apid 4
> acpiprt0 at acpi0: bus 0 (PCI0)
> acpiprt1 at acpi0: bus 1 (P0P1)
> acpicpu0 at acpi0
> acpibtn0 at acpi0: PWRB
> pci0 at mainbus0 bus 0
> pchb0 at pci0 dev 0 function 0 "SiS 662 PCI" rev 0x01
> agp at pchb0 not configured
> ppb0 at pci0 dev 1 function 0 "SiS 648FX AGP" rev 0x00
> pci1 at ppb0 bus 1
> vga1 at pci1 dev 0 function 0 "SiS 6330 VGA" rev 0x04
> wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation)
> wsdisplay0: screen 1-5 added (80x25, vt100 emulation)
> pcib0 at pci0 dev 2 function 0 "SiS 964 ISA" rev 0x36
> pciide0 at pci0 dev 2 function 5 "SiS 5513 EIDE" rev 0x01: 964: DMA, channel 0 wired to compatibility, channel 1 wired to compatibility
> pciide0: channel 0 disabled (no drives)
> pciide0: channel 1 disabled (no drives)
> ohci0 at pci0 dev 3 function 0 "SiS 5597/5598 USB" rev 0x0f: apic 4 int 20, version 1.0, legacy support
> ohci1 at pci0 dev 3 function 1 "SiS 5597/5598 USB" rev 0x0f: apic 4 int 21, version 1.0, legacy support
> ohci2 at pci0 dev 3 function 2 "SiS 5597/5598 USB" rev 0x0f: apic 4 int 22, version 1.0, legacy support
> ehci0 at pci0 dev 3 function 3 "SiS 7002 USB" rev 0x00: apic 4 int 23
> ehci0: timed out waiting for BIOS
> usb0 at ehci0: USB revision 2.0
> uhub0 at usb0 "SiS EHCI root hub" rev 2.00/1.00 addr 1
> sis0 at pci0 dev 4 function 0 "SiS 900 10/100BaseTX" rev 0x91: apic 4 int 19, address 00:1c:c0:4b:be:54
> brgphy0 at sis0 phy 1: BCM54XX 10/100/1000baseT PHY, rev. 1
> pciide1 at pci0 dev 5 function 0 "SiS 181 SATA" rev 0x01: DMA
> pciide1: using apic 4 int 17 for native-PCI interrupt
> wd0 at pciide1 channel 0 drive 0: <TOSHIBA DT01ACA050>
> wd0: 16-sector PIO, LBA48, 476940MB, 976773168 sectors
> wd0(pciide1:0:0): using PIO mode 4, Ultra-DMA mode 6
> ppb1 at pci0 dev 31 function 0 "SiS PCI-PCI" rev 0x00
> pci2 at ppb1 bus 2
> isa0 at pcib0
> isadma0 at isa0
> com0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo
> pckbc0 at isa0 port 0x60/5
> pckbd0 at pckbc0 (kbd slot)
> pckbc0: using irq 1 for kbd slot
> wskbd0 at pckbd0: console keyboard, using wsdisplay0
> pcppi0 at isa0 port 0x61
> spkr0 at pcppi0
> wbsio0 at isa0 port 0x4e/2: W83627DHG rev 0x25
> lm1 at wbsio0 port 0x290/8: W83627DHG
> usb1 at ohci0: USB revision 1.0
> uhub1 at usb1 "SiS OHCI root hub" rev 1.00/1.00 addr 1
> usb2 at ohci1: USB revision 1.0
> uhub2 at usb2 "SiS OHCI root hub" rev 1.00/1.00 addr 1
> usb3 at ohci2: USB revision 1.0
> uhub3 at usb3 "SiS OHCI root hub" rev 1.00/1.00 addr 1
> mtrr: Pentium Pro MTRR support
> vscsi0 at root
> scsibus0 at vscsi0: 256 targets
> softraid0 at root
> scsibus1 at softraid0: 256 targets
> root on wd0a (3c6b2ba4c2cabfad.a) swap on wd0b dump on wd0b
> WARNING: / was not properly unmounted
>
> usbdevs:
> Controller /dev/usb0:
> addr 1: high speed, self powered, config 1, EHCI root hub(0x0000), SiS(0x1039), rev 1.00
>  port 1 powered
>  port 2 powered
>  port 3 powered
>  port 4 powered
>  port 5 powered
>  port 6 powered
>  port 7 powered
>  port 8 powered
> Controller /dev/usb1:
> addr 1: full speed, self powered, config 1, OHCI root hub(0x0000), SiS(0x1039), rev 1.00
>  port 1 powered
>  port 2 powered
>  port 3 powered
> Controller /dev/usb2:
> addr 1: full speed, self powered, config 1, OHCI root hub(0x0000), SiS(0x1039), rev 1.00
>  port 1 powered
>  port 2 powered
>  port 3 powered
> Controller /dev/usb3:
> addr 1: full speed, self powered, config 1, OHCI root hub(0x0000), SiS(0x1039), rev 1.00
>  port 1 powered
>  port 2 powered

Reply | Threaded
Open this post in threaded view
|

Re: dhclient flushes manual IPv6 default route on lease renewal

Olivier Mehani
Hey Kenneth,

On Mon, Aug 05, 2013 at 11:56:53PM -0400, Kenneth R Westerback wrote:
> > Prior the last change, bind_lease() unconditionally called
flush_routes().
> > However, flush_routes() in [1] is documented to be equivalent to `route
-q
> > $rdomain -n flush -inet -iface $interface` (note the -inet), which might
> > contradict my understanding of the cause.
> >
> > [0]
http://www.openbsd.org/cgi-bin/cvsweb/src/sbin/dhclient/dhclient.c?rev=1.260
> > [1]
http://www.openbsd.org/cgi-bin/cvsweb/src/sbin/dhclient/kroute.c?rev=1.55
> Pretty sure I fixed this by 5.4. If you can reproduce in 5.4 I would
> be extremely interested.

As mentioned on ipv6@, I got slightly confused staring at various
versions of a file at once, namely, kroute.c. 5.3 had 1.40 [2], which
doesn't have a [priv_]flush_routes(), but only
[priv_]flush_routes_and_arp_cache(). The priv_ variant says nothing
about AF_INET (mib[3] = 0).

This is not the case in 1.55, as it appears to have been fixed with 1.47
[3].

The problem was on a 5.3 release machine. I'll try to get a current
going in a similar situation, and see if I can reproduce the problem,
but now that I have read the code with the right references, I agree
with you that it should be fixed in 5.4 already (as of 1.47 [3]).

[2]
http://www.openbsd.org/cgi-bin/cvsweb/src/sbin/dhclient/kroute.c?rev=1.40;onl
y_with_tag=OPENBSD_5_3_BASE
[3] http://www.openbsd.org/cgi-bin/cvsweb/src/sbin/dhclient/kroute.c#rev1.47

--
Olivier Mehani <[hidden email]>
PGP fingerprint: 4435 CF6A 7C8D DD9B E2DE  F5F9 F012 A6E2 98C6 6655

[demime 1.01d removed an attachment of type application/pgp-signature]