Detect duplicate static mappings
On ISC it allowed me to create duplicate entries for the same IP address. On Kea it gives an error and the service can't start. It'd be nice if this tool recognized that as an error at a minimum and either didn't migrate that reservation or asked the user what it wanted to do with it.
In my case I have a device (Home Theater AVR) that can either be configured Wi-Fi or Ethernet (but only one or the other) so I gave it the same IP address for both of its MAC Addresses. ISC was fine with this but Kea is not.
This is the error it would give and failed to start up.
ERROR [kea-dhcp4.dhcp4.0xe9d9e612000] DHCP4_PARSER_FAIL failed to create or run parser for configuration element subnet4: failed to add new host using the HW address 'XXXXXXXXX and DUID '(null)' to the IPv4 subnet id '1' for the address YYYYYYY: There's already a reservation for this address
@collumbrian
Assigning the same IP address to two different NICs (having two different MAC addresses) should NOT be an issue as long as both NICs are in the same subnet ... this is done all the time in hot fail-over scenarios, though I suppose it could be an issue for a router that doesn't account for it. Though I highly doubt Opnsense would be such a router. Sounds like a failure on Kea's side of the house, where, for some reason, they decided not to allow duplicate IP addresses on two different NICs ... even though this is not a violation of any rules of TCP/IP or networking in general. My understanding is that from the router's perspective, when it's sending a packet destined for an IP address, it will make a choice as to which NIC will get the packet ... based on how it's programmed.
Have you looked in the Kea record for that IP address to see if it's possible to add more than one MAC address? Perhaps it doesn't permit two different manual assignments of the same IP address, but it might have a way to assign more than one MAC to the same IP within a single static assignment.
I'll look at the code and see what it would take to include a warning message in this scenario ... doesn't sound difficult but I haven't looked at the code in a long time.