The first Ubuntu release appeared.
It was the Year of the Linux Desktop.
Novell had just bought Ximian and Mono happened.
Firefox 1.0 showed up.
This was your cellphone and PDAs were still a thing.
Fast forward to 2014…
Right before the 2014 holidays, and more than 10 years after the first line of NetworkManager was typed, we released version 1.0. A huge milestone on the way to making NetworkManager more cooperative, more flexible, more configurable, and more useful than ever before.
How you ask?
1: libnm: the new GLib client library
For all the GLib/GObject users out there, we’ve rebuilt libnm-util and libnm-glib from the ground up into a new single library called libnm. It uses GDBus instead of dbus-glib. It provides GIO-style asynchronous methods. It also exposes IP addresses, MAC addresses, and other properties as strings instead of byte arrays, and combines the old NMClient and NMRemoteSettings objects into a single NMClient object, among other things.
from gi.repository import GLib, NM for dev in NM.Client.new(None).get_devices(): ipcfg = dev.get_ip4_config() if ipcfg: for addr in ipcfg.get_addresses(): print "(%s) %s/%d" % (dev.get_iface(), addr.get_address(), addr.get_prefix())
2: a smaller, faster DHCP client
While it doesn’t do DHCPv6 (yet!) this internal client (based off systemd/connman code) is much faster than dhclient and dhcpcd, and doesn’t consume huge amounts of memory like dhclient. Use the ‘dhcp=internal’ option in NetworkManager.conf to enable it and let us know how it works. We’ll be adding DHCPv6 support and enhancing the recognized options in the near future.
3: configure and quit
Have a more static configuration and still want to use NetworkManager configuration and API to manage it? The ‘configure-and-quit=yes’ option in NetworkManager.conf will configure your interfaces and quit the NM process, spawning small helpers to preserve DHCP and IPv6 addresses. This saves cycles (and therefore money) and is simpler to manage.
4: more cooperative
Continuing the trend, NetworkManager 1.0 does a much better job of leaving externally configured interfaces alone until you tell it to do something. In addition to improvements for IPv6 sysctl recognition and user-added route preservation, externally created virtual interfaces are no longer automatically set IFF_UP, and NetworkManager handles external master/slave relationship changes more smoothly.
5: more powerful nmcli
We’ve added PolicyKit and interactive password support to nmcli, allowing full command-line-only operation for most network connections, even for less privileged users. There’s a new ‘nmcli dev connect’ command that brings up an interface using the best available connection. You can also delete virtual interfaces directly through nmcli.
6: improved IPv6
We’ve ensured that if network interfaces are supposed to be down and unconfigured, that the kernel doesn’t assign a link-local address to them, to prevent potential security issues when you think networking is down. We’ve also added support for IPv6 WWAN connections and fixes to respect router-delivered MTUs.
7: Bluetooth DUN support
Bluez5 changed API for Dial-Up-Networking functionality, which broke the NetworkManager support. At long last we’ve added that support back, no thanks to Bluez. Happy mobile networking!
8: more flexible and cooperative routing
Every interface that can have a default route now gets one, and NetworkManager manages the priorities to ensure they don’t conflict. Plus, if you need to, you can manually manage priorities on a per-connection basis to prefer WiFi over WWAN or WWAN over ethernet, or whatever you need.
9: fewer dependencies
We’ve also removed some direct dependencies (PolicyKit), slimmed down code, and split functionality into selectable plugins, leading to easier installs on limited systems and better configurability.
That’s just the tip of the iceberg; we’ve improved almost every part of NetworkManager and we’re not stopping there. We’re planning improvements to container use-cases, WiFi, VPNs, power savings, client APIs, and much more. 2015 is gonna be a great year, and not just because the version number is greater than 1!