Clients Must register for MPLS operations e.g. Incoming Label Map operations. Once registered, a client Must reserve an MPLS label (dynamic allocation) before using it as an incoming label map. Labels are reserved in blocks through the block reservation operations.
This file also defines RPC calls for adding, deleting, updating, and querying incoming label map entries (see RFC 3031)
Incoming Label Map (ILM): A mapping from incoming labels to corresponding NHLFEs. It is used when forwarding packets that arrive as labeled packets.
Next Hop Forwarding Entry (NHLE): An entry containing next-hop information and label manipulation instructions. This is also referred to as the ILM Path.
rpc SLMplsOper::SLMplsIlmOpStream |
( |
stream |
SLMplsIlmMsg | ) |
|
SLMplsLabelBlockMsg.Oper = SL_OBJOP_ADD. Add a contiguous label block. Add request may fail if the full block cannot be allocated.
SLMplsLabelBlockMsg.Oper = SL_OBJOP_DELETE. Delete a contiguous label block. Delete request may fail if the block is in use or the keys don't match the keys used on add.
SLMplsRegMsg.Oper = SL_REGOP_REGISTER. Global MPLS registration. A client Must Register BEFORE MPLS objects can be added/modified.
SLMplsRegMsg.Oper = SL_REGOP_UNREGISTER. Global MPLS un-registration. This call is used to end all MPLS notifications and unregister any interest in MPLS object configuration. This call cleans up all MPLS objects previously requested.
SLMplsRegMsg.Oper = SL_REGOP_EOF. MPLS End Of File. After Registration, the client is expected to send an EOF message to convey the end of replay of the client's known objects. This is especially useful under certain restart scenarios when the client and the server are trying to synchronize their MPLS objects.
message SLMplsLabelBlockKey |
This message is used to relay the label block key attributes.
See definition of SlMplsLabelBlockType for valid values. If none specified, defaults to SL_MPLS_LABEL_BLOCK_TYPE_SRGB.
string SLMplsLabelBlockKey::ClientName = 4 |
through CLI. Client name is ignored if BlockType is not SL_MPLS_LABEL_BLOCK_TYPE_CBF.
uint32 SLMplsLabelBlockKey::LabelBlockSize = 2 |
Block size should be <= SLServerResponse.MaxLabelsPerBlock
message SLMplsLabelBlockMsg |
This message is used to send a batch of label block requests. The Oper attributes indicates add or delete operations.
List size should be <= SLServerResponse.MaxLabelBlocksPerRequest
message SLMplsLabelBlockMsgRes |
This message is used to convey the result status corresponding to the label block operation.
message SLMplsLabelBlockMsgRsp |
This message is used to convey a summary status for the batch operation. If there are errors encountered, the Results field would indicate which label block reservation failed.
- SL_SUCCESS: signifies that the entire bulk operation was successful. In this case, the Results list is empty.
- SL_SOME_ERR: signifies that the operation failed for one or more entries. In this case, Results holds the result for each individual entry in the bulk.
- SL_RPC_XXX: signifies that the entire bulk operation failed. In this case, the Results list is empty.
message SLMplsLabelBlockGetMsg |
Attributes |
SLMplsLabelBlockKey | Key = 1 |
| MPLS Label Block key. More...
|
|
uint32 | EntriesCount = 2 |
| Number of entries requested.
|
|
bool | GetNext = 3 |
| if GetNext is FALSE: request up to 'EntriesCount' entries starting from the key If GetNext is TRUE, or if the key exact match is not found: request up to 'EntriesCount' entries starting from the key's next
|
|
If the Key is not specified, then request up to the first 'EntriesCount' entries.
message SLMplsLabelBlockGetMsgRsp |
if ErrStatus is SL_SUCCESS, Entries contains the info requested
bool SLMplsLabelBlockGetMsgRsp::Eof = 1 |
When set to True, it indicates that the server has returned M, where M < N, of the original N requested Entries.
Attributes |
uint32 | PurgeIntervalSeconds = 1 |
| In case the Service Layer -> LSD connection is lost, this specifies the timeout period after which LSD will automatically purge the installed ILMs, unless the service layer: More...
|
|
uint32 SlMplsReg::PurgeIntervalSeconds = 1 |
- Sends MPLS Registration message
- Replays all label blocks and ILMs
- and sends MPLS EOF message Similarly, in the event of an RP Switchover the ILMs must be replayed within the purge interval. Purge timer is ignored for all registration messages except for SL_REGOP_REGISTER
This message is used for MPLS global registration. Clients must register before using any MPLS service.
This message is used to convey the result of the MPLS registration.
This message is used to query MPLS global capabilities.
This message is used to convey the response to the global capabilities query.
uint32 SLMplsGetMsgRsp::LabelTableSize = 5 |
MplsLabelBlockKey.StartLabel <= LabelTableSize
uint32 SLMplsGetMsgRsp::MinStartLabel = 4 |
MplsLabelBlockKey.StartLabel >= MinStartLabel
message SLMplsGetStatsMsgRsp |
This message is used to convey the response to the MPLS statistics query.
This message holds the ILM path attributes.
The label action dictates what to do with the incoming label. Possible actions are:
- SL_LABEL_ACTION_SWAP: SWAP the incoming label with the specified LabelStack (see below), and forward the packet. Path attributes: NexthopInterface, VrfName, NexthopAddress.
- SL_LABEL_ACTION_POP_AND_FORWARD: Pop the label, and forward the packet to the specified nexthop. Path attributes: NexthopInterface, VrfName, NexthopAddress.
- SL_LABEL_ACTION_POP_AND_LOOKUP: Pop the label, and lookup the packet's next header's address in the specified VrfName. Path attributes: VrfName.
repeated uint32 SLMplsPath::LabelStack = 8 |
Stack of labels that is pushed when the packet is switched out. Label size is LSB 20 bits. Forwarding will set EXP, TTL and BOS. For primary path, typically only 1 label is used. For backup paths, more than 1 label can be used. If more than one label is used, remote backup addresses must be specified. The maximum number of labels pushed for primary and backup are platform dependent.
uint32 SLMplsPath::PathId = 6 |
Path-id is used to uniquely identify a path when it comes to protection (Fast Re-Route - FRR). It is not used otherwise.
In general, for FRR, There are 3 main path attributes:
- Primary. The path is the main path to carry traffic.
- Protected. A primary path with a configured backup path.
- Backup. The path is protecting a primary path.
NOTE1: a primary path (A) can be simultaneously protected (by B), and acting as a backup for another path (C). In this example, the primary path C is protected by A (which happens to be primary). So the primary path (A) is Primary, Protected, and Backup.
The following are various path types based on combinations of attributes:
- Pure Primary i.e. Not Protected and is not a Backup. => PathId is optional. ProtectedPathBitmap = 0x0
- Primary and Protected. Path is not a Backup. => PathId is mandatory. ProtectedPathBitmap = 0x0
- Primary and Not Protected. Path is also a Backup. => PathId is mandatory. ProtectedPathBitmap = 0xYYYY
- Primary and Protected. Path is also a Backup. => PathId is mandatory. ProtectedPathBitmap = 0xYYYY
- Pure Backup. Protection is not allowed for backup paths. => PathId is mandatory. ProtectedPathBitmap = 0xYYYY
NOTE2: Pure backup path-id uses a different range than primary path-ids. The valid range of primary path IDs, and pure backup path IDS are platform dependent and can be retrieved through the client init message.
repeated uint64 SLMplsPath::ProtectedPathBitmap = 7 |
The bitmap of paths this Backup path is protecting. Example: If this path is protecting paths with IDs 4, 5 and 6, then set bitmap to: 0x38 ==> 0011 1000 || |– path 4 ||– path 5 |– path 6 (1 << (pathId_1 - 1)) | (1 << (pathId_2 - 1)) | (1 << (pathId_3 - 1))
This field is used for backup MPLS path with more than one label, Typically associated with the PQ routers and remote Loop Free Alternatives. For N+1 backup labels, N remote backup addresses must be specified.
This message defines the Incoming Label Map key attributes.
Attributes |
oneof | value |
|
bool | DefaultElspPath = 2 |
| Flag to indicate that this is also an E-LSP entry and all paths will be using this default path.
|
|
uint32 | ForwardingClass = 3 |
| forwarding class with valid range <0-7>
|
|
This messages defines an ILM entry.
This message is used to send a batch of ILM entries.
uint64 SLMplsIlmMsg::Correlator = 2 |
This can be used to correlate replies with requests. The Server simply reflects this field back in the reply.
This message is used to convey the result of the ILM entry operation.
This message is used to convey the result of the ILM batch operation.
uint64 SLMplsIlmMsgRsp::Correlator = 1 |
This can be used to correlate replies with requests. The Server simply reflects this field back in the reply.
- SL_SUCCESS: signifies that the entire bulk operation was successful. In this case, the Results list is empty.
- SL_SOME_ERR: signifies that the operation failed for one or more entries. In this case, Results holds the result for each individual entry in the bulk.
- SL_RPC_XXX: signifies that the entire bulk operation failed. In this case, the Results list is empty.
Attributes |
uint64 | Correlator = 1 |
| Correlator. More...
|
|
SLMplsIlmKey | Key = 2 |
| MPLS ILM key. More...
|
|
uint32 | EntriesCount = 3 |
| Number of entries requested.
|
|
bool | GetNext = 4 |
| if GetNext is FALSE: request up to 'EntriesCount' entries starting from the key If GetNext is TRUE, or if the key exact match is not found: request up to 'EntriesCount' entries starting from the key's next
|
|
uint64 SLMplsIlmGetMsg::Correlator = 1 |
This can be used to correlate replies with requests. The Server simply reflects this field back in the reply.
If the Key is not specified, then request up to the first 'EntriesCount' entries.
message SLMplsIlmGetMsgRsp |
uint64 SLMplsIlmGetMsgRsp::Correlator = 1 |
This can be used to correlate replies with requests. The Server simply reflects this field back in the reply.
if ErrStatus is SL_SUCCESS, Entries contains the info requested
bool SLMplsIlmGetMsgRsp::Eof = 2 |
When set to True, it indicates that the server has returned M, where M < N, of the original N requested Entries.
Enumerator |
---|
SL_LABEL_ACTION_RESERVED |
Reserved. 0x0.
|
SL_LABEL_ACTION_SWAP |
Swap.
0x1 Swap outer label and forward. Used at tunnel midpoint for swapping labels.
|
SL_LABEL_ACTION_POP_AND_FORWARD |
Pop and forward.
0x2 Pop outer label and forward. Used for per CE and per prefix label disposition at egress PE.
|
SL_LABEL_ACTION_POP_AND_LOOKUP_IPV4 |
Pop and lookup IPv4.
0x3 Pop and lookup the IPv4 next header in the specified Vrf. Used for per vrf labels at egress PE.
|
SL_LABEL_ACTION_POP_AND_LOOKUP_IPV6 |
Pop and lookup IPv6.
0x4 Pop and lookup the IPv6 next header in the specified Vrf. Used for per vrf labels at egress PE.
|
SL_LABEL_ACTION_POP_AND_LOOKUP |
Pop and lookup.
0x5 Pop and lookup the next header in the packet (MPLS, IPv4, IPv6) in the specified Vrf. Used for per vrf labels at egress PE.
|
Enumerator |
---|
SL_MPLS_LABEL_BLOCK_TYPE_RESERVED |
Reserved. 0x0.
|
SL_MPLS_LABEL_BLOCK_TYPE_SRGB |
Segment Routing Global Block (SRGB) Block Type. 0x1.
|
SL_MPLS_LABEL_BLOCK_TYPE_CBF |
Class Based Forwarding (CBF) Block Type. 0x2.
|