Grouping addresses by interface?

Erik Muller erikm at
Fri Jul 1 03:46:01 UTC 2016

Is anyone aware of a good way to automagically group ipv6 assignments by
interface-id?  A lot of searching has me pretty much convinced that there's
no easy way to do this out of the box, but I'm hoping somebody else has
found a good approach to this before I start looking deeper.  (and if there
isn't an existing technique, I think kea hooks look very promising as a way
to build this functionality...)

The use-case I'm working with is supporting dual-stack IPoE ipv6 on
Alcatel/Nokia 7750, which require users on each access port to be addressed
out of a unique /64 per port[1].

It's pretty simple to do this with a brute force model, something like the
sample below - classes per interface, and multiple pools each in a separate
/64 for each class, and that works OK... but it's ugly to manage
(preprovisioning vs restarting to add new users, etc).  And more
importantly, it doesn't scale very well.  I've done some testing (synthetic
benchmarks, not real-world, YMMV), and beyond a few thousand pools the
throughput really starts to fall off, and dhcpd is using over a gig of
memory by the time you get to 10000.

class "test-1" {
    match if v6relay(1, option dhcp6.interface-id) = "lag-1:12.34";
class "test-2" {
    match if v6relay(1, option dhcp6.interface-id) = "lag-2:56.78";
shared-network production-testing {
    subnet6 2001:db8:0000::/48 {
        pool6 {
            range6 2001:db8:0000:0001::/120;
            allow members of "test-1";
        pool6 {
            range6 2001:db8:0000:0002::/120;
            allow members of "test-2";

If you know a better way to approach this, I'd love to hear it.

[1] sec 4.2 of covers this
deployment model

More information about the dhcp-users mailing list