When working on NetworkManager, the following projects cause me headache:
- NetworkManager itself: I need to test NM in a virtual environment with bridges. These are not supported in the current release. I hope to make the next release mature enough to support its own development.
- Kernel: The kernel IPv6 networking layer is somewhat unmanagable. The rtnetlink interface doesn't provide enough funcionality to support IPv6 networking.
- GLIBC: The
getaddrinfo()
function doesn't work properly and is not supported in nsswitch.conf. It breaks whenever my development machine happens to be on an IPv4-only network. - nss-mdns (Avahi nsswitch plugin): Can't implement link-local name resolution because of the above problem in GLIBC.
- IETF networking standards: For some reasons many IPv6-related standards have serious design flaws that prevent them from working properly.
What do we need for proper Linux networking
- Interface for static IPv4 and IPv6 configuration (kernel)
- Interface for bridging/bonding/vlan configuration (kernel)
- Interface for DNS configuration (/etc/resolv.conf)
- DHCP client implementation for IPv4 automatic configuration (dhclient)
- RA client implementation for IPv6 address configuration (kernel, with workarounds in NetworkManager)
- RDNSS/DNSSL client implementation for IPv6 DNS configuration (NetworkManager through kernel, with workarounds)
- DHCP client implementation for IPv6 address/DNS/other configuration (dhclient)
- IPsec, VPN and tunneling implementations (various daemons)
- A network management daemon to properly manage all of the above together with user configuration (NetworkManager)
- Networking API for applications (glibc, with many problems)
I may have missed something but the objective is to show that networking is rather complex and the various tools need to be centrally managed by a network management service in order to make users and administrators happy.
NetworkManager
I'm currently maintaining a patchset in a separate NetworkManager branch called 'pavlix/next'. It has a lot of improvements over the current release of NetworkManager but also over the 'master' branch. The reason for keeping a separate branch is that I need to do a lot of interdependent stuff to fullfil a big picture of how things should work. Many changes I'm making are quite big.
I am often rebasing this branch and rewriting its history. It is not currently possible to merge it into 'master' and it is not possible to continuously marge your local changes without a considerable amount of 'rebase' magic.
The current patchset includes the following changes:
- Add a new subsystem for kernel network configuration (bgo #683173)
- Remove distribution-specific initscripts
- Build on any linux distribution without special options (bgo #663602)
- Remove unnecessary '--with-distro' values (some distributors may need to remove it from their package builds)
- Move NM-specific DHCP leases to /var/lib/NetworkManager (may need selinux policy changes)
- Add support for IPv4 dhclient.conf overrides in /etc/NetworkManager
- Don't ask 'nscd' to reload configuration (it uses inotify to watch it)
- Add support for bridges with manual and automatic IPv4/IPv6 configuration (bgo #546197)
- Fix support for bonds with manual and automatic IPv4/IPv6 configuration (bgo #540995)
- Read IPv4 addresses also in CIDR format in keyfile
GLIBC
- getaddrinfo(127.0.0.1, AI_ADDRCONFIG) fails on hosts without global IPv4 (e.g. notebooks not connected to any networks)
- getaddrinfo(::1, AI_ADDRCONFIG) fails on hosts without any other IPv6 address
- getaddrinfo(link-local-address, AI_ADDRCONFIG) fails on hosts without global IPv6 (hopefully solved)
IETF standards
- RFC 6106 (RA DNS): Relies on a false assuption that every (even multicast) IP packet is delivered to its destination.
- RFC 4861 (NDP): Doesn't specify how zero lifetimes should be used and lets implementations rely on the same false assumption.
- RFC 3493 (socket interfce): Breaks both IPv4 and IPv6 localhost and link-local networking depending on available global addresses.
Contact
Mail: psimerda AT redhat DOT com, pavlix AT pavlix DOT net
Jabber: pavlix AT pavlix DOT net
IRC Freenode: pavlix (#nm and a couple of other channels)
Phone: +420 775 996 256