When I think back to how we used to manage our devices, I am struck by how primitive and limiting the old methods were. I used to be involved in the design and programming of embedded systems and network attached devices. The vast majority of the time, management of what we were making was the last thing on our minds. We were focused on the data plane, the control plane, and what the device did. Management was an unimportant afterthought. When we did think about management, we only thought about the device itself and not its relation to other devices. In other words, we were thinking about device management and not network management.
The management mechanisms which we implemented were usually basic, crude, and proprietary. We thought in terms of a person individually managing each device. Usually, there was a very primitive CLI or perhaps we got fancy and there was a menu-driven, text-based interface. Eventually, we moved from RS-232 serial console connections to supporting a CLI over telnet. This gave us our early network attached management interfaces. These CLIs could be scripted towards, but the CLIs were all different and maintenance of the scripts was even more of a nightmare than it is today. The emergence of industry standard CLI styles has helped some, but scripting is still very maintenance heavy and problematic.
When SNMP came along, many people thought that the problem of network management was solved. With a standardized protocol and MIBs to describe the management data, all should be fine – right? Unfortunately, attempts to make real use of SNMP uncovered many issues and limitations. As people attempted to manage their networks using SNMP, real-world experience showed that SNMP was doing a decent job of monitoring our networks but was not a good solution for configuring our network devices. For configuration, CLI scripting continued to be the method of choice.
As all of this was developing, it was becoming more important to view and perform true network management. Networks were constantly growing, evolving, and becoming more complex. Gone were the days when we could look at just the management of individual devices. Now, we need to manage networks of devices and their interrelationships.
In 2002, the Internet Architecture Board (IAB) held a Network Management Workshop to examine what was and was not working for network management and to identify the requirements for future network management protocols and methods. IETF members, equipment manufacturers, and network operators participated in this workshop. The outcome of this workshop was RFC3535 which presents the results of the workshop. Some of the key findings include the importance of programmatic interfaces, the need for a single data model language to cover all programmatic interfaces, the need for transactions, etc. etc. RFC3535 still makes for interesting and relevant reading today.
The IAB workshop results formed the foundation and requirements around which the IETF NETCONF and NETMOD workgroups designed the NETCONF protocol and the YANG data modeling language. Together, NETCONF and YANG have resulted in the preferred method for bringing programmability to modern network management.