The case for eliminating inconsistencies between Linux kernel IPv4/IPv6 API:
The Linux kernel provides a rich Netlink based API to configure, deploy and manage IPv4 and IPv6.
However, the APIs for IPV4 and IPv6 are not consistent in some cases.
Some of these inconsistencies include:
- IPV6 addresses are removed on link down. IPV4 addresses stay
- IPV4 multipath route handling API is different from IPV6 Netlink route replace/append handling is different between IPV4 and IPV6
Over the years user-space components have worked around these inconsistencies.
In this paper we survey the inconsistencies in the kernel API between IPV4 and IPV6 and present the solutions we adopted to workaround these inconsistencies in user space. We show how these inconsistencies cascade into multiple components (routing daemons, user-space netlink caches and hardware offload drivers) in a system. We show that the resulting implementation is complex enough to justify an effort to eliminate these inconsistencies in the future by unifying the IPv4/IPv6 kernel API