Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Register
  • Sign in
  • Kea Kea
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 594
    • Issues 594
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 61
    • Merge requests 61
  • Deployments
    • Deployments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar
  • ISC Open Source ProjectsISC Open Source Projects
  • KeaKea
  • Issues
  • #2863
Closed
Open
Issue created May 18, 2023 by Marcin Godzina@mgodzinaMaintainer

require-client-classes does not prioritize classes options

Using require-client-classes does not prioritize options defined in classes.

I tried classifying clients by empty host reservations and by class test.

Recreation:

00:03:00:01:f6:f5:f4:f3:f2:11 is sending Solicit and option 23 requirements. Kea responds with Advertise, including option 23. I expect "2001:db8::2" in option 23, which is defined in the class, but receive "2001:db8::1" from the subnet.

Tested configs:

1 - using empty reservation (both with and without "only-if-required": true)
{
    "Dhcp6": {
        "subnet6": [
            {
                "subnet": "2001:db8:1::/64",
                "pools": [
                    {
                        "pool": "2001:db8:1::1-2001:db8:1::1"
                    }
                ],
                "interface": "enp0s9",
                "option-data": [
                    {
                        "code": 23,
                        "csv-format": true,
                        "data": "2001:db8::1",
                        "name": "dns-servers",
                        "space": "dhcp6"
                    }
                ],
                "require-client-classes": [
                    "blocked"
                ]
            }
        ],
        "interfaces-config": {
            "interfaces": [
                "enp0s9"
            ]
        },
        "client-classes": [
            {
                "name": "blocked",
                "option-data": [
                    {
                        "name": "dns-servers",
                        "data": "2001:db8::2"
                    }
                ]
            }
        ],
        "reservations": [
            {
                "duid": "00:03:00:01:f6:f5:f4:f3:f2:11",
                "client-classes": [
                    "blocked"
                ]
            }
        ],
        "reservation-mode": "global",
        "renew-timer": 1000,
        "rebind-timer": 2000,
        "preferred-lifetime": 3000,
        "valid-lifetime": 4000,
        "lease-database": {
            "type": "memfile"
        }
    }
}
2 - using class test (both with and without "only-if-required": true)
{
    "Dhcp6": {
        "subnet6": [
            {
                "subnet": "2001:db8:1::/64",
                "pools": [
                    {
                        "pool": "2001:db8:1::1-2001:db8:1::1"
                    }
                ],
                "interface": "enp0s9",
                "option-data": [
                    {
                        "code": 23,
                        "csv-format": true,
                        "data": "2001:db8::1",
                        "name": "dns-servers",
                        "space": "dhcp6"
                    }
                ],
                "require-client-classes": [
                    "blocked"
                ]
            }
        ],
        "interfaces-config": {
            "interfaces": [
                "enp0s9"
            ]
        },
        "client-classes": [
            {
                "name": "blocked",
                "test": "option[1].hex == 0x00030001f6f5f4f3f211",
                "only-if-required": true,
                "option-data": [
                    {
                        "name": "dns-servers",
                        "data": "2001:db8::2"
                    }
                ]
            }
        ],
        "reservations": [
            {
                "duid": "00:03:00:01:f6:f5:f4:f3:f2:11"
            }
        ],
        "reservation-mode": "global",
        "renew-timer": 1000,
        "rebind-timer": 2000,
        "preferred-lifetime": 3000,
        "valid-lifetime": 4000,
        "lease-database": {
            "type": "memfile"
        }
    }
}
Edited May 18, 2023 by Marcin Godzina
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
Time tracking