Services: Kea DHCPv6: Allow customizing mac_sources and change default to ipv6-link-local (#10220)
* Services: Kea DHCPv6: Allow customizing mac_sources and change default to ipv6-link-local since it seems to align best with the expectations of our setup, especially taking PD route installation via kea_prefix_watcher.py into account.
Per default KEA would derive MAC addresses of clients from the DUID, but these do not take multiple interfaces into account. This means, the route target could be the wrong MAC address. The new default ipv6-link-local takes the EUI-64 assumption of the link-local address, this seems to be better suited as our default.
Two methods have been skipped since they are not implemented by KEA upstream, raw and subscriber-id.
* Specify this influences MAC based reservations. Since blast radius is larger make it non-advanced.
Services: Kea DHCPv6: Allow customizing mac_sources and change default to ipv6-link-local since it seems to align best with the expectations of our setup, especially taking PD route installation via kea_prefix_watcher.py into account.
Per default KEA would derive MAC addresses of clients from the DUID, but these do not take multiple interfaces into account. This means, the route target could be the wrong MAC address. The new default ipv6-link-local takes the EUI-64 assumption of the link-local address, this seems to be better suited as our default.
Two methods have been skipped since they are not implemented by KEA upstream, raw and subscriber-id.
interfaces: wrong DUID-UUID format for #10218
Not sure about migration here to avoid future migrations from breaking,
but wrong UUID is simply wrong. To be continued.
Services: Kea DHCPv6: kea_prefix_watcher: Plug socket into dynamic pd route installation script (#10197)
* Services: Kea DHCPv4/v6: Use KeaCtrl python lib for kea_prefix_watcher to switch to polling the socket instead of streaming the csv lease files. The running configuration has structured output, and we stay in memory without needing to read and parse any files. The tradeoff is that we always have to process the full set of leases, yet by using lease6-get-page which is especially made for efficient bulk operations, this should be rather cheap. The main benefit is we always work with structured json data, can filter for ID_PD better, and reprocess the full truth on every poll interval to ensure the whole setup is self-healing
* Use state instead of time based mechanism to decide of lease is still valid
* Make interval parameter explicit
* Time is still needed for polling
* We do not need argparse or parameters anymore
* Add an explicit empty argument for backend parser
* Remove duplicate state check, add documentation for the possible states
* No we still have do add state into the mix or the route lazy drop will not work anymore
* Use new count() base method for hasPdPools()
* Use count() directly in kea.inc
mvc: BaseField: extend count() for value-based field types
So getValues() already uses isSet() which makes the count of
set values in the field type correct. Add the tests to prove
it.
system: last round of fixes for snapshot names
"." and ".." are special path names and must be excluded.
"-." or "-_" are somehow problematic inside configd but adding
using ''%s seems to appease the whole system and doesn't mess
with shell quoting.
Reported by: @sopex