Defines RPCs for MPLS Registrations, label block reservations, and ILM entries manipulations.
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.
Messages | |
message | SLMplsLabelBlockKey |
MPLS Label block key. More... | |
message | SLMplsLabelBlockMsg |
MPLS Label block batch reservation message. More... | |
message | SLMplsLabelBlockMsgRes |
MPLS Label block reservation result. More... | |
message | SLMplsLabelBlockMsgRsp |
MPLS Label block batch reservation response. More... | |
message | SLMplsLabelBlockGetMsg |
MPLS Label Block Get Message This message is used to query previous label block reservations. More... | |
message | SLMplsLabelBlockGetMsgRsp |
MPLS Label Block get message response This message is the response to the label block query. More... | |
message | SlMplsReg |
MPLS Registration message. More... | |
message | SLMplsRegMsg |
MPLS Registration message. More... | |
message | SLMplsRegMsgRsp |
MPLS Registration response message. More... | |
message | SLMplsGetMsg |
MPLS Get Global Info message. More... | |
message | SLMplsGetMsgRsp |
MPLS Get Global Info response message. More... | |
message | SLMplsGetStatsMsgRsp |
MPLS Get Global Stats response message. More... | |
message | SLMplsPath |
MPLS Path (or NHLFE) information. More... | |
message | SLMplsIlmKey |
MPLS ILM entry's key. More... | |
message | SLMplsIlmKey::IPPrefixKey |
message | SLMplsIlmKey::IPv6PrefixKey |
message | SLMplsIlmKey::IPv4PrefixKey |
message | SLMplsCos |
MPLS ILM entry's CoS value This message contains either EXP bits or a forwarding class. More... | |
message | SLMplsIlmEntry |
MPLS ILM entry. More... | |
message | SLMplsIlmMsg |
A batch of MPLS ILM entries. More... | |
message | SLMplsIlmRes |
MPLS ILM result. More... | |
message | SLMplsIlmMsgRsp |
MPLS ILM batch response. More... | |
message | SLMplsIlmGetMsg |
MPLS ILM Get Message This message is used to query the attributes of an ILM entry. More... | |
message | SLMplsIlmGetMsgRsp |
MPLS ILM Get Message Response. More... | |
Enumerations | |
enum | SlLabelAction { SL_LABEL_ACTION_RESERVED = 0x0, SL_LABEL_ACTION_SWAP = 0x1, SL_LABEL_ACTION_POP_AND_FORWARD = 0x2, SL_LABEL_ACTION_POP_AND_LOOKUP_IPV4 = 0x3, SL_LABEL_ACTION_POP_AND_LOOKUP_IPV6 = 0x4, SL_LABEL_ACTION_POP_AND_LOOKUP = 0x5, SL_LABEL_ACTION_PUSH = 0x6 } |
MPLS label actions. More... | |
enum | SLMplsLabelBlockType { SL_MPLS_LABEL_BLOCK_TYPE_RESERVED = 0x0, SL_MPLS_LABEL_BLOCK_TYPE_SRGB = 0x1, SL_MPLS_LABEL_BLOCK_TYPE_CBF = 0x2 } |
Label Block Types. More... | |
rpc SLMplsOper::SLMplsIlmOp | ( | SLMplsIlmMsg | ) |
MPLS ILM operations.
SLMplsIlmMsg.Oper = SL_OBJOP_ADD: Add incoming label map entry. Fails if the entry already exists and not stale. First ADD operation on a stale entry is allowed and the entry is no longer considered stale.
SLMplsIlmMsg.Oper = SL_OBJOP_UPDATE: Create or update incoming label map entry. The RPC implements replacement semantics, wherein if the entry exists, all its attributes are replaced with values from the new message.
SLMplsIlmMsg.Oper = SL_OBJOP_DELETE: Delete incoming label map entry. The entry's key is enough to delete the object. Other attributes if present are ignored. Delete of a non-existant entry is considered a success.
rpc SLMplsOper::SLMplsIlmOpStream | ( | stream | SLMplsIlmMsg | ) |
MPLS ILM stream operations.
SLMplsIlmMsg.Oper = SL_OBJOP_ADD: Add incoming label map entry. Fails if the entry already exists and not stale. First ADD operation on a stale entry is allowed and the entry is no longer considered stale.
SLMplsIlmMsg.Oper = SL_OBJOP_UPDATE: Create or update incoming label map entry.
SLMplsIlmMsg.Oper = SL_OBJOP_DELETE: Delete incoming label map entry. Delete of a non-existant entry is returned as success.
rpc SLMplsOper::SLMplsLabelBlockOp | ( | SLMplsLabelBlockMsg | ) |
MPLS Label Block operations.
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.
rpc SLMplsOper::SLMplsRegOp | ( | SLMplsRegMsg | ) |
MPLS Registration operations.
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.
The MPLS registration operations can be used by the client to synchronize label block allocations and ILMs with the device. When the client re-registers with the server using SL_REGOP_REGISTER, server marks all label block allocations and ILMs as stale. Client then must reprogram label block allocations and ILMs. When client sends SL_REGOP_EOF, any objects not reprogrammed are removed from the device.
The client must perform all operations (MPLS registration, label block and ILM) from a single execution context.
message SLMplsLabelBlockKey |
MPLS Label block key.
This message is used to relay the label block key attributes.
Attributes | |
uint32 | StartLabel = 1 |
Starting label value of the block. | |
uint32 | LabelBlockSize = 2 |
Label block size. More... | |
SLMplsLabelBlockType | BlockType = 3 |
Label block type. More... | |
string | ClientName = 4 |
Label block client name as configured e.g. More... | |
SLMplsLabelBlockType SLMplsLabelBlockKey::BlockType = 3 |
Label block type.
See definition of SlMplsLabelBlockType for valid values. If none specified, defaults to SL_MPLS_LABEL_BLOCK_TYPE_SRGB.
string SLMplsLabelBlockKey::ClientName = 4 |
Label block client name as configured e.g.
through CLI. Client name is ignored if BlockType is not SL_MPLS_LABEL_BLOCK_TYPE_CBF.
uint32 SLMplsLabelBlockKey::LabelBlockSize = 2 |
Label block size.
Block size should be <= SLServerResponse.MaxLabelsPerBlock
message SLMplsLabelBlockMsg |
MPLS Label block batch reservation message.
This message is used to send a batch of label block requests. The Oper attributes indicates add or delete operations.
Attributes | |
SLObjectOp | Oper = 1 |
MPLS Label Block Operations. | |
repeated SLMplsLabelBlockKey | MplsBlocks = 2 |
List of label blocks requests. More... | |
repeated SLMplsLabelBlockKey SLMplsLabelBlockMsg::MplsBlocks = 2 |
List of label blocks requests.
List size should be <= SLServerResponse.MaxLabelBlocksPerRequest
message SLMplsLabelBlockMsgRes |
MPLS Label block reservation result.
This message is used to convey the result status corresponding to the label block operation.
Attributes | |
SLErrorStatus | ErrStatus = 1 |
Corresponding error code. | |
SLMplsLabelBlockKey | Key = 2 |
Key for which the error code is reported. | |
message SLMplsLabelBlockMsgRsp |
MPLS Label block batch reservation response.
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.
Attributes | |
SLErrorStatus | StatusSummary = 1 |
Summary result of the bulk operation (refer to enum SLErrorStatus) In general, the StatusSummary implies one of 3 things: More... | |
repeated SLMplsLabelBlockMsgRes | Results = 2 |
In case of errors, this field indicates which entry in the bulk was erroneous. More... | |
repeated SLMplsLabelBlockMsgRes SLMplsLabelBlockMsgRsp::Results = 2 |
In case of errors, this field indicates which entry in the bulk was erroneous.
SLErrorStatus SLMplsLabelBlockMsgRsp::StatusSummary = 1 |
Summary result of the bulk operation (refer to enum SLErrorStatus) In general, the StatusSummary implies one of 3 things:
message SLMplsLabelBlockGetMsg |
MPLS Label Block Get Message This message is used to query previous label block reservations.
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 | |
SLMplsLabelBlockKey SLMplsLabelBlockGetMsg::Key = 1 |
MPLS Label Block key.
If the Key is not specified, then request up to the first 'EntriesCount' entries.
message SLMplsLabelBlockGetMsgRsp |
MPLS Label Block get message response This message is the response to the label block query.
Attributes | |
bool | Eof = 1 |
End Of File. More... | |
SLErrorStatus | ErrStatus = 2 |
Status of the Get operation. | |
repeated SLMplsLabelBlockKey | Entries = 3 |
Returned entries as requested in the Get operation. More... | |
repeated SLMplsLabelBlockKey SLMplsLabelBlockGetMsgRsp::Entries = 3 |
Returned entries as requested in the Get operation.
if ErrStatus is SL_SUCCESS, Entries contains the info requested
bool SLMplsLabelBlockGetMsgRsp::Eof = 1 |
End Of File.
When set to True, it indicates that the server has returned M, where M < N, of the original N requested Entries.
message SlMplsReg |
MPLS Registration message.
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 |
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:
message SLMplsRegMsg |
message SLMplsRegMsgRsp |
MPLS Registration response message.
This message is used to convey the result of the MPLS registration.
Attributes | |
SLErrorStatus | ErrStatus = 1 |
Error code. | |
message SLMplsGetMsg |
MPLS Get Global Info message.
This message is used to query MPLS global capabilities.
message SLMplsGetMsgRsp |
MPLS Get Global Info response message.
This message is used to convey the response to the global capabilities query.
Attributes | |
SLErrorStatus | ErrStatus = 1 |
Error code. | |
uint32 | MaxLabelsPerBlock = 2 |
Maximum labels that can be allocated/freed per label block. | |
uint32 | MaxLabelblocksPerLabelblockmsg = 3 |
Maximum label blocks that can be allocated/freed per MplsLabelBlockMsg. | |
uint32 | MinStartLabel = 4 |
Minimum label value that can be reserved on the platform. More... | |
uint32 | LabelTableSize = 5 |
Label table size for the platform. More... | |
uint32 | MaxIlmPerIlmmsg = 6 |
Max ILM objects within a single IlmMsg message. | |
uint32 | MaxPathsPerIlm = 7 |
Maximum paths per ILM. | |
uint32 SLMplsGetMsgRsp::LabelTableSize = 5 |
Label table size for the platform.
MplsLabelBlockKey.StartLabel <= LabelTableSize
uint32 SLMplsGetMsgRsp::MinStartLabel = 4 |
Minimum label value that can be reserved on the platform.
MplsLabelBlockKey.StartLabel >= MinStartLabel
message SLMplsGetStatsMsgRsp |
MPLS Get Global Stats response message.
This message is used to convey the response to the MPLS statistics query.
Attributes | |
SLErrorStatus | ErrStatus = 1 |
Error code. | |
uint32 | LabelBlockCount = 2 |
Num of label blocks created. | |
uint32 | IlmCount = 3 |
Num ILMs added through the service layer. | |
message SLMplsPath |
MPLS Path (or NHLFE) information.
This message holds the ILM path attributes.
Attributes | |
SLIpAddress | NexthopAddress = 1 |
One of IPv4 or IPv6 address. | |
SLInterface | NexthopInterface = 2 |
Next hop interface. | |
uint32 | LoadMetric = 3 |
ECMP load weight metric. | |
string | VrfName = 4 |
VRF name. | |
SlLabelAction | Action = 5 |
Associated MPLS incoming label's action. More... | |
uint32 | PathId = 6 |
Path identifier. More... | |
repeated uint64 | ProtectedPathBitmap = 7 |
Path protection bitmap. More... | |
repeated uint32 | LabelStack = 8 |
MPLS label stack. More... | |
repeated SLIpAddress | RemoteAddress = 9 |
MPLS Remote router backup address. More... | |
SLMplsCos | SlMplsCosVal = 10 |
Either Exp bits or CoS forwarding class. More... | |
uint32 | SlMplsPathPriority = 11 |
Set Path priority as primary, backup or reserved. More... | |
uint32 | SlMplsPathSetId = 12 |
Set the Path set-id, Integer range [0 . More... | |
bool | SlMplsPathDown = 13 |
Set the Path availability. More... | |
SlLabelAction SLMplsPath::Action = 5 |
Associated MPLS incoming label's action.
The label action dictates what to do with the incoming label. Possible actions are:
repeated uint32 SLMplsPath::LabelStack = 8 |
MPLS label stack.
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 identifier.
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:
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:
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 |
Path protection bitmap.
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))
repeated SLIpAddress SLMplsPath::RemoteAddress = 9 |
MPLS Remote router backup address.
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.
SLMplsCos SLMplsPath::SlMplsCosVal = 10 |
Either Exp bits or CoS forwarding class.
For class based forwarding of MPLS labels, the client can choose to program forwarding class as an attribute of the path. In this programming model, all paths for all classes must be programmed together and class must not be specified as key attribute on the ILM. All the paths of the same class must be contiguous. If any path has a class specified, then all others paths must have the class specified as well.
bool SLMplsPath::SlMplsPathDown = 13 |
Set the Path availability.
TRUE : Path is DOWN. Not available for carrying traffic but preprogrammed. FALSE : Path is UP. Available for carrying traffic.(default). Load metric should be set to 0 when the path is down.
uint32 SLMplsPath::SlMplsPathPriority = 11 |
Set Path priority as primary, backup or reserved.
0: Path is installed as the primary path. 1: Path is installed as a backup path. Everything else: Reserved.
uint32 SLMplsPath::SlMplsPathSetId = 12 |
Set the Path set-id, Integer range [0 .
. 7], default = 0 Paths of an ILM should be associated with a SetID. SetID is used for grouping paths with the same SlMplsPathPriority value. Paths with same SetID must have same SlMplsPathPriority value. Client makes the entire set primary or backup by setting the SlMplsPathPriority for all paths in the set.
message SLMplsIlmKey |
MPLS ILM entry's key.
This message defines the Incoming Label Map key attributes.
Attributes | |
uint32 | LocalLabel = 1 |
Incoming local label. | |
SLMplsCos | SlMplsCosVal = 2 |
Either Exp bits or CoS forwarding class. | |
IPPrefixKey | Prefix = 3 |
IP Prefix key. More... | |
IPPrefixKey SLMplsIlmKey::Prefix = 3 |
IP Prefix key.
If set, the prefix is used as ILM key instead of LocalLabel.
message SLMplsIlmKey::IPPrefixKey |
Attributes | |
oneof { | |
IPv4PrefixKey V4Prefix = 1 | |
IPv6PrefixKey V6Prefix = 2 | |
}; | |
uint32 | PrefixLen = 3 |
IPv4 Prefix length [0-32] IPv6 Prefix length [0-128]. | |
string | VrfName = 4 |
VRF name. More... | |
string SLMplsIlmKey::IPPrefixKey::VrfName = 4 |
VRF name.
Client must withdraw ILM if VRF configuration is removed.
message SLMplsIlmKey::IPv6PrefixKey |
Attributes | |
bytes | Prefix = 1 |
IPv6 Prefix in network byte order. | |
message SLMplsIlmKey::IPv4PrefixKey |
message SLMplsCos |
MPLS ILM entry's CoS value This message contains either EXP bits or a forwarding class.
Attributes | |
oneof { | |
uint32 Exp = 1 | |
LSB 3 bits with valid range <0-7> this is used to configure E-LSPs (see RFC 3270) | |
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> | |
}; | |
message SLMplsIlmEntry |
MPLS ILM entry.
This messages defines an ILM entry.
Attributes | |
SLMplsIlmKey | Key = 1 |
ILM Key. | |
repeated SLMplsPath | Paths = 2 |
List of path (NHLFE) information. | |
SLUpdatePriority | Priority = 3 |
Each entry can have priority value, this priority value may be used in internal queuing of routes while programming the data-plane. | |
message SLMplsIlmMsg |
A batch of MPLS ILM entries.
This message is used to send a batch of ILM entries.
Attributes | |
SLObjectOp | Oper = 1 |
MPLS Object Operations. | |
uint64 | Correlator = 2 |
Correlator. More... | |
repeated SLMplsIlmEntry | MplsIlms = 3 |
List of ILM entries. | |
uint64 SLMplsIlmMsg::Correlator = 2 |
Correlator.
This can be used to correlate replies with requests. The Server simply reflects this field back in the reply.
message SLMplsIlmRes |
MPLS ILM result.
This message is used to convey the result of the ILM entry operation.
Attributes | |
SLErrorStatus | ErrStatus = 1 |
Corresponding error code. | |
SLMplsIlmKey | Key = 2 |
ILM Key. | |
message SLMplsIlmMsgRsp |
MPLS ILM batch response.
This message is used to convey the result of the ILM batch operation.
Attributes | |
uint64 | Correlator = 1 |
Correlator. More... | |
SLErrorStatus | StatusSummary = 2 |
Summary result of the bulk operation (refer to enum SLErrorStatus) In general, the StatusSummary implies one of 3 things: More... | |
repeated SLMplsIlmRes | Results = 3 |
In case of errors, this field indicates which entry in the bulk was erroneous. More... | |
uint64 SLMplsIlmMsgRsp::Correlator = 1 |
Correlator.
This can be used to correlate replies with requests. The Server simply reflects this field back in the reply.
repeated SLMplsIlmRes SLMplsIlmMsgRsp::Results = 3 |
In case of errors, this field indicates which entry in the bulk was erroneous.
SLErrorStatus SLMplsIlmMsgRsp::StatusSummary = 2 |
Summary result of the bulk operation (refer to enum SLErrorStatus) In general, the StatusSummary implies one of 3 things:
message SLMplsIlmGetMsg |
MPLS ILM Get Message This message is used to query the attributes of an ILM entry.
All labels and prefixes programmed via the MPLS RPCs are stored in the same table and objects are returned from the specified key in the order of labels, IPv4 prefixes, followed any IPv6 prefixes.
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 |
Correlator.
This can be used to correlate replies with requests. The Server simply reflects this field back in the reply.
SLMplsIlmKey SLMplsIlmGetMsg::Key = 2 |
MPLS ILM key.
If the Key is not specified, then request up to the first 'EntriesCount' entries.
message SLMplsIlmGetMsgRsp |
MPLS ILM Get Message Response.
Attributes | |
uint64 | Correlator = 1 |
Correlator. More... | |
bool | Eof = 2 |
End Of File. More... | |
SLErrorStatus | ErrStatus = 3 |
Status of the Get operation. | |
repeated SLMplsIlmEntry | Entries = 4 |
Returned entries as requested in the Get operation. More... | |
uint64 SLMplsIlmGetMsgRsp::Correlator = 1 |
Correlator.
This can be used to correlate replies with requests. The Server simply reflects this field back in the reply.
repeated SLMplsIlmEntry SLMplsIlmGetMsgRsp::Entries = 4 |
Returned entries as requested in the Get operation.
if ErrStatus is SL_SUCCESS, Entries contains the info requested
bool SLMplsIlmGetMsgRsp::Eof = 2 |
End Of File.
When set to True, it indicates that the server has returned M, where M < N, of the original N requested Entries.
enum SlLabelAction |
MPLS label actions.
enum SLMplsLabelBlockType |