Freeing lease with omshell not working?

Maarten Carels lists at carels.info
Tue Apr 26 11:24:29 UTC 2011


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi list,

At work we use ISC-DHCP to provide ip addresses to DSL customers, based on some kind of lineID. Only one ip is provided to every customer. We use some kind of classing scheme for that.

This causes a 2 hour wait (the lease time) when a new modem is deployed.

I made a script using omshell to clear an existing lease, by setting the lease state to free (1).

The script we use contains does this:

> server xx.xx.xx.xx
> connect
obj: <null>
> new lease
obj: lease
> set ip-address = aa.aa.aa.aa
obj: lease
ip-address = aa:aa:aa:aa
> open
obj: lease
ip-address = aa:aa:aa:aa
state = 00:00:00:02
dhcp-client-identifier = 01:00:1c:4a:0b:af:9a
client-hostname = "fritz.fonwlan.box"
subnet = 00:00:00:02
pool = 00:00:00:03
hardware-address = 00:1c:4a:0b:af:9a
hardware-type = 00:00:00:01
ends = 4d:b6:bb:34
starts = 4d:b6:9f:14
tstp = 00:00:00:00
tsfp = 00:00:00:00
atsfp = 00:00:00:00
cltt = 00:00:00:00
> set state = 1
obj: lease
ip-address = aa:aa:aa:aa
state = 1
dhcp-client-identifier = 01:00:1c:4a:0b:af:9a
client-hostname = "fritz.fonwlan.box"
subnet = 00:00:00:02
pool = 00:00:00:03
hardware-address = 00:1c:4a:0b:af:9a
hardware-type = 00:00:00:01
ends = 4d:b6:bb:34
starts = 4d:b6:9f:14
tstp = 00:00:00:00
tsfp = 00:00:00:00
atsfp = 00:00:00:00
cltt = 00:00:00:00
> update
obj: lease
ip-address = aa:aa:aa:aa
state = 1
dhcp-client-identifier = 01:00:1c:4a:0b:af:9a
client-hostname = "fritz.fonwlan.box"
subnet = 00:00:00:02
pool = 00:00:00:03
hardware-address = 00:1c:4a:0b:af:9a
hardware-type = 00:00:00:01
ends = 4d:b6:bb:34
starts = 4d:b6:9f:14
tstp = 00:00:00:00
tsfp = 00:00:00:00
atsfp = 00:00:00:00
cltt = 00:00:00:00
 
Looking in the dhcp logs this seems to work well, the server reports the change in the state of the lease from active to free, and in the leases file a new entry is added with the binding state set to free. And, if I ask in a new omshell session about the state of thie lease, it's shown as state 1 (free)

That part looks well, but during the remaining time of the old lease the new modem is refused an address. Log entries show this:

Last renewal by the olod modem:
Apr 23 10:39:14 dhcp2 dhcpd: DHCPREQUEST for aa.aa.aa.aa from 00:03:2f:17:17:1f (AP-Router) via em0
Apr 23 10:39:14 dhcp2 dhcpd: DHCPACK on aa.aa.aa.aa to 00:03:2f:17:17:1f (AP-Router) via em0

Then the new modem is connected. No lease is given, as the old one is still not timed out:

Apr 23 12:12:08 dhcp2 dhcpd: DHCPDISCOVER from 00:1c:4a:0b:af:9a circuit-id this remote-id dr3.d12.atm at br1483 via bb.bb.bb.bb (giaddr aa.aa.aa.1): network netname: no free leases

At this point the lease is freed by the omapi script:

Apr 23 12:13:29 dhcp2 dhcpd: lease aa.aa.aa.aa state changed from active to free

But the new modem is still refused
Apr 23 12:14:02 dhcp2 dhcpd: DHCPDISCOVER from 00:1c:4a:0b:af:9a circuit-id this remote-id dr3.d12.atm at br1483 via bb.bb.bb.bb (giaddr aa.aa.aa.1): network netname: no free leases

And this continues until the old lease has timed out two hours after the last renewal:

Apr 23 12:39:44 dhcp2 dhcpd: DHCPDISCOVER from 00:1c:4a:0b:af:9a circuit-id this remote-id dr3.d12.atm at br1483 via bb.bb.bb.bb (giaddr aa.aa.aa.1)
Apr 23 12:39:45 dhcp2 dhcpd: DHCPOFFER on aa.aa.aa.aa to 00:1c:4a:0b:af:9a (fritz.fonwlan.box) via bb.bb.bb.bb
Apr 23 12:39:45 dhcp2 dhcpd: DHCPREQUEST for aa.aa.aa.aa (zz.zz.zz.zz) from 00:1c:4a:0b:af:9a (fritz.fonwlan.box) via bb.bb.bb.bb (giaddr aa.aa.aa.1)
Apr 23 12:39:45 dhcp2 dhcpd: DHCPACK on aa.aa.aa.aa to 00:1c:4a:0b:af:9a (fritz.fonwlan.box) via bb.bb.bb.bb

Has anyone seen this behaviour before? Why is the lease reported as free at all places (log, leases file etc) but in some way considered as 'in-use' with the old MAC address?

The server is freebsd 6.2 running isc-dhcp 3.0.5
Leases are classed on option-82 stuff:
class "dr3.d12" {
    match if (substring(option agent.remote-id,0,7) = "dr3.d12");
    spawn with option agent.circuit-id;
}

And the network is defined with an shared-network clause, containing some subnets, each having some pools with an allow statement and a range of 1 ip address, like this:
        # package_id zzzzz
        pool {
          allow members of "dr3.d12" "this";
          range aa.aa.aa.aa;
        }

(yes, completely configured in the dhcp config, but this is only for some 22000 legacy clients using bridged configs)

- --maarten

-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
Comment: GPGTools - http://gpgtools.org

iQEcBAEBAgAGBQJNtqtyAAoJEHXc8jAmoaIoxZUH/34csv5QlQ2YWIGj8v9sjrW7
91nWv1f8Fi2VHgShOUZmFtVSlWNv9rUyTqaqkl5aq0nIpd11TaCIRJ37wLeZ/eMJ
ld6V0vAjBDk0W+r0X8ndFnXrzBRbQqok7VPjIufmg6ab03BpcWxThDM7Yn8iBo66
5Vcj9/1OBDpHciFnyGw6Kw9yK/5MpTAIILkGjtUTGqQn+0rVZMvEdNZOYB0ibRlD
Nd3nkeEa44CEWREtrUHyDm1HHjZdPAJSa0VR1Rwt+nV8dLxk9n1o37m075oW8NvG
6NOi537VgNxFYCL0qazR2b8pQb8tcPL2EddiJ3rPk4RnSd8BYFiULfWFOawEOZo=
=T9ON
-----END PGP SIGNATURE-----



More information about the dhcp-users mailing list