ControlCommand » History » Revision 13
« Previous |
Revision 13/53
(diff)
| Next »
Junxiao Shi, 03/18/2014 12:03 AM
Control Command¶
Control Command is a mechanism of NFD Management protocol.
This document defines the request and response format of commands that can alter forwarder state, and how these commands should be signed and authenticated.
This mechanism is useful for altering forwarder state.
Request format¶
Control commands are signed Command Interests under ndn:/localhost/nfd
prefix.
/localhost/nfd/<management-module>/<command-verb>/................./...............................
\ / \ /
------ ------ -------------- --------------
\/ \/
ControlParameters Command Interest security
A request Interest has 9 Name components.
These components are:
- "localhost" in UTF-8
- "nfd" in UTF-8
- management-module in UTF-8, management module to which the command needs to be dispatched
- command-verb in UTF-8, command to be executed
- ..., a ControlParameters TLV block
- timestamp of Command Interests
- random-value of Command Interests
- SignatureInfo of Command Interests
- SignatureValue of Command Interests
ControlParameters¶
ControlParameters block contains arguments to the command.
ControlParameters ::= CONTROL-PARAMETERS-TYPE TLV-LENGTH
Name?
FaceId?
Uri?
ControlModule?
Cost?
Strategy?
// Name is defined in NDN-TLV spec
FaceId ::= FACEID-TYPE TLV-LENGTH
nonNegativeInteger
Uri ::= URI-TYPE TLV-LENGTH
RFC3986 URI in UTF-8 encoding
ControlModule ::= CONTROL-MODULE-TYPE TLV-LENGTH
nonNegativeInteger
Cost ::= COST-TYPE TLV-LENGTH
nonNegativeInteger
Strategy ::= STRATEGY-TYPE TLV-LENGTH
Name
This definition exhausts all possible fields used in existing commands.
Each individual command MUST specify:
- a list of required fields: those fields MUST be present
- a list of optional fields: those fields MAY be present
- the semantics of each required and optional fields
A field that is neither required nor optional for a command MUST NOT be present in a ControlParameter given to that command.
Each individual command MAY impose additional constraints to certain fields.
Response format¶
A response from the command interface is a Data that matches the request Interest.
The payload of this Data is a ControlResponse block.
ControlResponse ::= CONTROL-RESPONSE-TYPE TLV-LENGTH
StatusCode
StatusText
<body>?
StatusCode ::= STATUS-CODE-TYPE TLV-LENGTH
nonNegativeInteger
StatusText ::= STATUS-TEXT-TYPE TLV-LENGTH
string in UTF-8
<body> ::= zero or more arbitary TLV block
StatusCode¶
StatusCode generally follows HTTP convention.
Codes between 100 and 399 are considered successful; all other codes are considered failure.
Common codes include:
StatusCode | Description |
---|---|
200 | OK |
400 | Arguments are incorrect |
403 | Signing key is not authorized for this command |
404 | Resource (e.g. face, prefix, ...) not found |
501 | Command verb is not supported |
Each individual command MAY define additional codes.
<body>¶
Additional elements are allowed at the end of ControlResponse.
Unless defined by an individual command, <body> is the ControlParameters passed into this command.
Each individual command MAY define the type and meaning of <body>.
TLV-TYPE assignments¶
Type | Assigned value | Assigned value (hex) |
---|---|---|
ControlParameters | 104 | 0x68 |
FaceId | 105 | 0x69 |
Uri | 114 | 0x72 |
ControlModule | 110 | 0x6e |
Cost | 106 | 0x6a |
Strategy | 107 | 0x6b |
ControlResponse | 101 | 0x65 |
StatusCode | 102 | 0x66 |
StatusText | 103 | 0x67 |
These types are assigned from the range reserved for forwarding daemon.
Updated by Junxiao Shi over 10 years ago · 52 revisions