Tuesday, May 27, 2008

Long Live NetworkManager

(this is a work post)

Fedora 9 is out, Red Hat Enterprise Linux 5.2 is out, so what next?  Well, Fedora 10 of course (and RHEL 5.3, but I don't want to talk about that).  Right now I am working on some rather large changes for Fedora that I want to have incorporated by the time F-10 is ready to go to an alpha release (read: a test release, not the processor).

I have been working on all things network related in anaconda since the Fedora Core 5 time frame (that release and all subsequent releases).  I removed the use of libpump in favor of libdhcp so we could gain (a) better DHCP support by using ISC's client and (b) gain IPv6 support.  That was a very rocky rock and I stumbled down it pretty terribly, but I can say that IPv6 support has been there to some degree since Fedora Core 5.

Now, we are entering a new world of thinking for anaconda.  Relying less on our own tools and using more of the standard system offerings.  In the network camp, that means getting NetworkManager in to the installer.  Yes, that program that you can use to find nearby wireless networks and connect to them.  NetworkManager controls all of the active network links, with some limitations.  You can also talk to it via D-Bus, which opens the door for more interesting developments.  What I am specifically doing at the moment is:
  • Preparing a set of patches for rawhide anaconda that will remove libdhcp and all internal network configuration with code that runs NetworkManager.  After talking with dcbw, it was decided the best course of action now is to have anaconda write out the /etc/sysconfig files and then fire up NetworkManager.  Anaconda still prompts for network settings and then writes out the files and starts the daemon.  With these patches also come some more network related library functions that use libnl.  Those are mostly boring to average users, but I find it interesting.
  • Getting IPv6 support in to NetworkManager.  This is where NM drops the ball.  It's a great tool, but only for IPv4.  I am also preparing a set of patches for NetworkManager to get IPv6 (static, DHCPv6, and automatic neighbor discovery) supported.
  • libnl fixes.  This sort of falls back on NetworkManager too.  libnl is a userspace library for communicating with the kernel Netlink API.  This is how NetworkManager and anaconda do (or should) communicate with network interfaces.  There are a few things that don't totally work in the library, but I think that may or may not be working now (haven't looked in a few days).  I am also replacing the remaining uses of /sbin/ip in NetworkManager with libnl code.
That's a whole lot of stuff.  I am happy to report that it's coming along nicely and I hope to have NetworkManager working for all of my test cases in anaconda pretty soon (days) now.

1 comment:

David said...

Hrm, will removing libdhcp from anaconda and replacing that functionality with an external NM-based implementation also fix the weird problems I occasionally have getting RH installs to get a DHCP lease on certain configurations (when other DHCP clients seem to be fine)?