Summary
We've now seen a detailed description of two of the IETF MPLS MIBs, indicating how these MIB objects might be manipulated by an NMS in order to create LSPs and tunnels. These MIBs
|
Chapter 9. Network Management Theory and Practice
As with many areas of human endeavor, the gap that separates the theory and practice of NMS development is very wide. Viewed against the backdrop of
We start with yet another MIB-
|
MIBs Again
In Chapter 8, "Case Study: MPLS Network Management," we studied in some depth the structure and use of two of the IETF MPLS MIBs. These MIBs have been well-designed; for example, a signaled traffic-engineered tunnel created using the
mplsTunnelTable
can be managed with reference just to the originating node MIB. In other words, it is not necessary to browse every node in the
All of the MIBs we've studied so far have been
Tightly Coupled Intercolumn Dependencies
An important area of MIB design is that of intercolumn dependency in which the value of column X provides a context for column Y, or vice versa. An example is where a tunnel instance is a backup for a primary tunnel as
Figure 9-1. A primary tunnel with a backup instance.
In Figure 9-1, we see an MPLS network with two tunnels. One is a primary and the other is a backup. This can be brought about by creating two entries in the
mplsTunnelTable
, one of which is an instance of the other. By instance, we mean a copy in all things except the path taken. The two tunnels can be configured to share the same set of resources, such as bandwidth, or they can each duplicate the resources. The primary tunnel follows the path {LER1, LSR1, LSR2, LER2}, while the backup
Let's consider the steps that must be taken to bring this about using SNMP. To create the primary tunnel, we set the values of
mplsTunnelIndex
and
mplsTunnelInstance
both to 1 (as well as setting other mandatory
So, the value of
mplsTunnelInstance
serves to
This is an example of intercolumn dependencies in which the value of one column depends on the value of another. In the case of backup (or load-sharing) tunnels, the value of
mplsTunnelIndex
has the same value as
mplsTunnelIndex
from another row in the
mplsTunnelTable
. The two entries are differentiated by the value of
mplsTunnelInstance
. Such dependencies contribute some complexity to the MIB. For example, should we be allowed to delete a primary tunnel before deleting the backup? Usually not, because the backup
As with many engineering decisions, the best way to implement this is with clear rules, such as precluding deletion of a primary tunnel until all instances have been deleted. The agent should enforce these rules along with the NMS (e.g., if the
Another important issue is that of providing default values for MIB objects. This can have an important impact on the complexity of the SNMP-handling software in an NMS, as we'll see in the next section. Default Values and Thin Software Layers
If two MIB columns depend semantically on each other, then it is good practice to have default values via the
DEFVAL
clause. To
Having to check the value of an object makes the SNMP code unnecessarily complex. It makes flow-through operations more difficult to achieve because the incoming data has to be
The issue of holes is important. These can arise if a SET operation is completed on a table row without setting all the columns. It is up to the agent to provide some default value if it deems it necessary. The problem with MIB holes (as we saw in Chapter 6, "Network Management Software Components") is that a getRequest on a MIB hole can result in an exception; likewise a getNextRequest on a MIB hole results in getting the lexical successor to the specified object skipping any holes. This can result in unexpected data being presented to the NMS. Providing default values can also help in avoiding MIB holes. When holes are avoided, it becomes easier to navigate around a MIB. An allied problem occurs in the use of relational database products (e.g., Informix, SQL Server) when null values have been written into tables. Retrieving such null data using Java can result in exceptions being thrown. This can be highly inconvenient because it then becomes necessary to catch such exceptions. An added difficulty is that exception handling in languages such as Java can be quite slow. Just as for MIBs, it is generally better practice to avoid the problem altogether by the use of default (i.e., not null) schema values in the table definitions. MIBs and Scalability
The crucial role
The scale of emerging NEs is such that SNMP may be approaching a physical limit ”navigating tables with millions of entries is almost
Decision-Making in the NetworkThe mapping of IP packets into the MPLS domain is a nontrivial task. The increasingly high speed and volume of IP packet feeds across enterprise networks is a compelling reason for moving individual packet-handling decisions outside of the NMS. Yet another important MPLS MIB ”the FTN MIB [IETF-MPLS-FTN] ”provides a framework for this and is now described. The MPLS FTN MIB
The full title of this MIB is a little unwieldy: MPLS FEC-To-NHLFE Management Information Base. An understanding of this MIB should help us gain a deeper
A FEC is a
An analogy for a FEC is international
FEC Definition
Once an IP packet has been labeled, the MPLS node must decide where to send (or forward) it. The next hop label forwarding entry ( NHLFE ) is used for this purpose and contains the following details:
Recall from Chapter 8 that an LSP is an object created using the LSR (and TE) MIB. MPLS-encoded packets
When a packet matches a particular rule, a corresponding action is executed, such as forwarding or
The next part of the FTN MIB concerns the association between the packet-handling rules and specific NE interfaces. The last table in the MIB provides performance-
This is the broad functional description of the FTN MIB; we now look at the details of the following three tables:
The mplsFTNTable is used to store mappings between FECs and NHLFE. Each row defines a rule to apply to incoming IP packets and an action to take if the rule applies. The criteria for rule construction can consist of the following objects:
These are all fields in the IP packet header, as we saw in Chapter 3, "The Network Management Problem," Figure 3-5. Another object, called the action pointer, serves to point at an entry in either the LSR MIB ( mplsXCEntry ) or the TE MIB ( mplsTunnelEntry ).
The
mplsFTNMapTable
is used to activate or map FTN entries defined in
mplsFTNTable
to specific interfaces. FTN entries are compared with incoming packets in the order in which they are applied on an interface. The
mplsFTNMapTable
supports a linked-list structure of FTN entries. The order of this list dictates the order of application of the associated policies on a given interface. So, if two FTNs, ftn1 and ftn2, are associated with an interface, then IP packets are
Finally, the mplsFTNPerfTable provides performance counters for each FTN entry on a per-interface basis. Because LERs are located at the boundary of IP and MPLS networks, the traffic levels can be very high (e.g., an SP boundary connected to a large corporate site), so there is a need for high-capacity counters in order to avoid 32-bit counters wrapping around (although wraparound is clearly still possible). Example Using the FTN MIBThis example illustrates the FTN MIB setup required for pushing MPLS-encoded IP traffic into either an LSP or a tunnel. Figure 9-2 illustrates two IP traffic streams feeding into an MPLS LER (Edge Router 1). One IP source is sending voice-over-IP (VoIP) telephony traffic, and the other is SMTP (email distribution). We want to push the SMTP traffic through the LSP and the VoIP traffic through the tunnel. The VoIP traffic has real-time requirements, so let's assume that we have created the tunnel with adequate bandwidth and an appropriate assigned QoS (as we saw in Chapter 8). The SMTP traffic requirements are less stringent, so we use an LSP for this purpose, with no bandwidth resource allocation and a best-effort QoS. The tunnel, however, has to carry real-time telephony data, so we assume that the tunnel has dedicated resources (e.g., 640kbps as we saw in Chapter 8). Figure 9-2. FTN MIB setup for incoming IP traffic.
The LSP and tunnel are capable of transferring MPLS-encapsulated IP packets through the core network and delivering them as IP at the point of egress (Edge Router 2).
In this case, we have two IP destinations: the SMTP Gateway at IP address 10.81.1.131 and a VoIP Gateway at 10.81.1.132, respectively. The setup we illustrate in Figure 9-2 is unidirectional (a telephony application would require bidirectional connections); to complete the VoIP picture, we would need another tunnel (or LSP) to forward traffic in the
As can be seen in Figure 9-2, the egress MPLS label used by the core router has the reserved value 0. This value is called Explicit Null and is used in order to indicate to the next MPLS node (Edge Router 2) that the MPLS data must be stripped off the packet and a normal IP lookup performed. In other words, the label value of 0
Setting Up the mplsFTNTable for LSP RedirectionIn order to push IP traffic into the LSP in Figure 9-2, an entry is required in the mplsFTNTable . The LSP setup requires the network administrator to know in advance the values of the following objects at each hop:
Figure 9-2 illustrates the MIB objects needed for setting up the mplsFTNTable . These objects are required only for Edge Router 1 and consist of the following:
Given these details, we now have enough information to populate a row in mplsFTNTable :
{ mplsFTNIndex = 1,
mplsFTNDescr = "FTN-ENTRY-1 for IP subnet 10.81.0.0",
mplsFTNMask = 0x01, -- Look up destination address only
mplsFTNAddrType = ipv4,
mplsFTNDestIpv4AddrMin = 10.81.1.131,
mplsFTNDestIpv4AddrMax = 10.81.1.131,
mplsFTNActionType = redirectLsp,
mplsFTNActionPointer = mplsXCLspId.5.0.0.3 }
The value of mplsFTNActionPointer indicates the LSP to which packets should be redirected. It is set to point to the first column object of the XC entry that corresponds to this LSP. This is mplsXCIndex.5.0.0.3 , which represents the following mplsXCTable entry:
{ mplsXCIndex = 5,
mplsInSegmentIfIndex = 0, -- originating LSP
mplsInSegmentLabel = 0, -- originating LSP
mplsOutSegmentIndex = 3, -- pointer to a row in mplsOutSegmentTable
mplsXCLabelStackIndex = 0 }
This
mplsXCTable
entry in
{ mplsOutSegmentIndex = 3,
mplsOutSegmentIfIndex = 6,
mplsOutSegmentPushTopLabel = true,
mplsOutSegmentTopLabel = 30 -- Egress label value }
As can be seen, the values in mplsOutSegmentTable match those illustrated in Figure 9-2. Finally, we have mplsFTNMapTable , which activates the FTN entry:
{ mplsFTNMapIfIndex = 1,
mplsFTNPrevIndex = 0, -- The first FTN entry on this interface
mplsFTNMapCurrIndex = 1 }
IP packets with the destination address 10.81.1.131 are now redirected into the LSP as required. Setting Up the mplsFTNTable for Tunnel RedirectionIn order to push IP traffic into the Tunnel in Figure 9-2, another entry is required in the mplsFTNTable . We give this row the index value 2.
{ mplsFTNIndex = 2,
mplsFTNDescr = "FTN-ENTRY-2 for IP subnet 10.81.0.0",
mplsFTNMask = 0x01, -- Look up destination address only
mplsFTNAddrType = ipv4,
mplsFTNDestIpv4AddrMin = 10.81.1.132,
mplsFTNDestIpv4AddrMax = 10.81.1.132,
mplsFTNActionType = redirectTunnel,
-- We assume that the ingress and egress LSR IDs are 1.1.1.1 and
-- 2.2.2.2 respectively for this tunnel as seen in Figure 92
mplsFTNActionPointer = mplsTunnelIndex.4.0.1.1.1.1.2.2.2.2 }
In mplsTunnelTable , we have the following row with index 4:
{ mplsTunnelIndex = 4,
mplsTunnelInstance = 0, -- primary tunnel
mplsTunnelIngressLSRID = 1.1.1.1,
mplsTunnelEgressLSRID = 2.2.2.2 }
Finally, we have mplsFTNMapTable , which activates the FTN entry:
{ mplsFTNMapIfIndex = 1,
mplsFTNPrevIndex = 1,
mplsFTNMapCurrIndex = 2 }
IP packets with the destination address 10.81.1.132 are now redirected into the traffic-engineered tunnel as required. |