[Dnsmasq-discuss] "No IPv6 address available" for bulk request from IXIA DHCPv6 clients
Simon Kelley
simon at thekelleys.org.uk
Thu Mar 7 17:42:01 GMT 2019
What a strange configuration!
I can sort-of explain what's happening here.
DHCP is a two-phase process: The server first suggests an address, then
the client accepts it and tells the server that it will be using the
address.
In dnsmasq, the first phase does not reserve an address. It's completely
idempotent. The client is given a suggested address, but there's nothing
to stop the same address being suggested to another client until the
first one comes along and reserves it. The address suggested to a client
is determined in part by a hash of the client's MAC address or some
other unique feature, so that clashes are very rare.
However in this case, you have dhcp ranges holding only two addresses.
Whilst the first range has at least one free address, it will be used to
suggest the address to use. The hash doesn't work: if there's only one
free address, then that will be suggested and the hash can't change it.
So when lots of clients come along at once and ask for an address, they
all get one of the two addresses from the first dhcp-range. When they
come back to comfirm the address, all but two are refused because the
address in already in use.
If the clients come along one at a time, the addresses that are already
committed to the earlier clients don't get suggested, and the clients
get an address which they can sucessfuly commit.
The fix is to use a more conventional dhcp-range configuration. Another
possible fix might be to use the --dhcp-sequential-ip setting. That
_might_ behave more sanely under these conditions, but I've not tested
it, so no guarantees.
Cheers,
Simon.
On 07/02/2019 10:12, P, Sreelakshmi wrote:
> Hi All,
>
>
>
> I’m trying to simulate DHCPv6 clients from IXIA and observe that only 1
> or 2 clients gets honored with IPv6 address when simultaneous requests
> are sent from 64 clients, but the same thing works if the request is
> made one after the other sequentially.
>
>
>
> *_Configuration below:_*
>
>
>
> log-facility=/var/log/dnsmasq_swns/dnsmasq6.log
>
> port=0
>
> dhcp-script=/usr/bin/dhcp_server_leases
>
> leasefile-ro
>
> dhcp-lease-max=64000
>
> bind-dynamic
>
> dhcp-range=set:default+test,2000::e:2,2000::e:3
>
> dhcp-range=set:default+test,2000::27:1,2000::27:2
>
> dhcp-range=set:default+test,2000::16:1,2000::16:2
>
> dhcp-range=set:default+test,2000::7:1,2000::7:2
>
> dhcp-range=set:default+test,2000::26:1,2000::26:2
>
> dhcp-range=set:default+test,2000::3b:1,2000::3b:2
>
> dhcp-range=set:default+test,2000::32:1,2000::32:2
>
> dhcp-range=set:default+test,2000::40:1,2000::40:2
>
> dhcp-range=set:default+test,2000::28:1,2000::28:2
>
> dhcp-range=set:default+test,2000::1b:1,2000::1b:2
>
> dhcp-range=set:default+test,2000::3f:1,2000::3f:2
>
> dhcp-range=set:default+test,2000::12:1,2000::12:2
>
> dhcp-range=set:default+test,2000::9:1,2000::9:2
>
> dhcp-range=set:default+test,2000::d:1,2000::d:2
>
> dhcp-range=set:default+test,2000::36:1,2000::36:2
>
> dhcp-range=set:default+test,2000::24:1,2000::24:2
>
> dhcp-range=set:default+test,2000::1f:1,2000::1f:2
>
> dhcp-range=set:default+test,2000::34:1,2000::34:2
>
> dhcp-range=set:default+test,2000::21:1,2000::21:2
>
> dhcp-range=set:default+test,2000::3a:1,2000::3a:2
>
> dhcp-range=set:default+test,2000::17:1,2000::17:2
>
> dhcp-range=set:default+test,2000::3d:1,2000::3d:2
>
> dhcp-range=set:default+test,2000::1:1,2000::1:2
>
> dhcp-range=set:default+test,2000::f:1,2000::f:2
>
> dhcp-range=set:default+test,2000::22:1,2000::22:2
>
> dhcp-range=set:default+test,2000::14:1,2000::14:2
>
> dhcp-range=set:default+test,2000::2c:1,2000::2c:2
>
> dhcp-range=set:default+test,2000::19:1,2000::19:2
>
> dhcp-range=set:default+test,2000::1d:1,2000::1d:2
>
> dhcp-range=set:default+test,2000::2:1,2000::2:2
>
> dhcp-range=set:default+test,2000::37:1,2000::37:2
>
> dhcp-range=set:default+test,2000::a:1,2000::a:2
>
> dhcp-range=set:default+test,2000::38:1,2000::38:2
>
> dhcp-range=set:default+test,2000::2a:1,2000::2a:2
>
> dhcp-range=set:default+test,2000::23:1,2000::23:2
>
> dhcp-range=set:default+test,2000::2b:1,2000::2b:2
>
> dhcp-range=set:default+test,2000::4:1,2000::4:2
>
> dhcp-range=set:default+test,2000::15:1,2000::15:2
>
> dhcp-range=set:default+test,2000::8:1,2000::8:2
>
> dhcp-range=set:default+test,2000::35:1,2000::35:2
>
> dhcp-range=set:default+test,2000::1e:1,2000::1e:2
>
> dhcp-range=set:default+test,2000::b:1,2000::b:2
>
> dhcp-range=set:default+test,2000::3c:1,2000::3c:2
>
> dhcp-range=set:default+test,2000::25:1,2000::25:2
>
> dhcp-range=set:default+test,2000::3:1,2000::3:2
>
> dhcp-range=set:default+test,2000::33:1,2000::33:2
>
> dhcp-range=set:default+test,2000::31:1,2000::31:2
>
> dhcp-range=set:default+test,2000::6:1,2000::6:2
>
> dhcp-range=set:default+test,2000::18:1,2000::18:2
>
> dhcp-range=set:default+test,2000::11:1,2000::11:2
>
> dhcp-range=set:default+test,2000::1a:1,2000::1a:2
>
> dhcp-range=set:default+test,2000::3e:1,2000::3e:2
>
> dhcp-range=set:default+test,2000::2d:1,2000::2d:2
>
> dhcp-range=set:default+test,2000::2e:1,2000::2e:2
>
> dhcp-range=set:default+test,2000::39:1,2000::39:2
>
> dhcp-range=set:default+test,2000::30:1,2000::30:2
>
> dhcp-range=set:default+test,2000::5:1,2000::5:2
>
> dhcp-range=set:default+test,2000::10:1,2000::10:2
>
> dhcp-range=set:default+test,2000::c:1,2000::c:2
>
> dhcp-range=set:default+test,2000::2f:1,2000::2f:2
>
> dhcp-range=set:default+test,2000::29:1,2000::29:2
>
> dhcp-range=set:default+test,2000::20:1,2000::20:2
>
> dhcp-range=set:default+test,2000::1c:1,2000::1c:2
>
> dhcp-range=set:default+test,2000::13:1,2000::13:2
>
> # -------------------------------------------------------
>
>
>
> *_Interface IP:_*
>
>
>
> root at 8320:~# ip -6 addr
>
> 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1
>
> inet6 ::1/128 scope host
>
> valid_lft forever preferred_lft forever
>
> 2: bridge-vrf: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9198 state UP qlen 1000
>
> inet6 fe80::1c5c:2ff:fe4f:8fb8/64 scope link
>
> valid_lft forever preferred_lft forever
>
> 3: tap-br0 at tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9198 state UP
> qlen 1000
>
> inet6 fe80::e8fb:ecff:fed5:1091/64 scope link
>
> valid_lft forever preferred_lft forever
>
> 4: tap0 at tap-br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9198 state UP
> qlen 1000
>
> inet6 fe80::1/64 scope link
>
> valid_lft forever preferred_lft forever
>
> inet6 fe80::bc2b:37ff:fe5c:be11/64 scope link
>
> valid_lft forever preferred_lft forever
>
> *61: vlan1 at bridge_normal: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
> state UP qlen 1000*
>
> * inet6 2000::e:1/64 scope global*
>
> * valid_lft forever preferred_lft forever*
>
> * inet6 fe80::cc37:ab80:1be:a7a/64 scope link*
>
> * valid_lft forever preferred_lft forever*
>
> * *
>
> Logs attached for both cases. It throws error “no address available”
> even though configured ranges can provide 64 IPs. Is there any known
> issues with Ixia DHCPv6 client ? What is the best tool to do performance
> testing of dnsmasq DHCPv6 server ?
>
>
>
> Regards,
>
> Sree
>
>
> _______________________________________________
> Dnsmasq-discuss mailing list
> Dnsmasq-discuss at lists.thekelleys.org.uk
> http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss
>
More information about the Dnsmasq-discuss
mailing list