The Network Management System
An NMS is a complicated suite of interrelated applications. Some of the major requirements that an NMS generally fulfils are the following:
- Device discovery
- Connection discovery
- Logical element configuration
- Monitoring
The purpose of the first three items can be intuitively deduced—the NMS automatically discovers the devices and logical elements in the network. These entities can also be created with the aid of the NMS. The last item is of immediate interest to us in this article. Monitoring allows for the automatic detection and response to status changes, such as link failures in the case of Figure 1.
So, let’s take a quick look inside the NMS.
An NMS Under the Hood
A generic NMS consists of numerous applications. In many cases, there is a single shared data model at the center of the system. This model can be instantiated in a relational database or possibly even in an object database. The important point is that the network elements in Figure 1 are generally modelled in the NMS. So, we’d expect to see software models for event handlers, devices, links, LSPs, and so on. Let’s see how this might look in some C++ code. Listing 2 illustrates a network event handler.
Listing 2 Network Event Handler Class
typedef int Event; const Event No_Event_Support = -1; class EventHandler { public: explicit EventHandler(EventHandler* = 0, Event = No_Event_Support); virtual const bool HasEventSupport(); virtual void SetHandler(EventHandler*, Event); virtual void HandleEvent(); ~EventHandler() { }; private: EventHandler* _successor; Event _event;};
In Listing 2 we see a generic event handler class. When is this handler used? Well, it’s used when an entity manages a network event such as a link failure. Each managed entity in this fictitious NMS is a subclass of EventHandler, so each such entity (such as an LSP) has the capability to handle events.