ControlCommand » History » Revision 19
Revision 17 (Junxiao Shi, 04/17/2014 09:31 PM) → Revision 19/54 (Junxiao Shi, 04/18/2014 10:53 AM)
# Control Command
**Control Command** is a mechanism of [[Management|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:
1. "localhost" in UTF-8
2. "nfd" in UTF-8
3. *management-module* in UTF-8, management module to which the command needs to be dispatched
4. *command-verb* in UTF-8, command to be executed
5. *...*, a ControlParameters TLV block
6. timestamp of [[Command Interests]]
7. random-value of [[Command Interests]]
8. SignatureInfo of [[Command Interests]]
9. SignatureValue of [[Command Interests]]
### ControlParameters
ControlParameters block contains arguments to the command.
ControlParameters ::= CONTROL-PARAMETERS-TYPE TLV-LENGTH
Name?
FaceId?
Uri?
LocalControlFeature?
Origin? Flags?
Cost?
Flags?
Strategy?
ExpirationPeriod?
Procotol?
// Name is defined in NDN-TLV spec
FaceId ::= FACE-ID-TYPE TLV-LENGTH
nonNegativeInteger
Uri ::= URI-TYPE TLV-LENGTH
RFC3986 URI in UTF-8 encoding
LocalControlFeature ::= LOCAL-CONTROL-FEATURE-TYPE TLV-LENGTH
nonNegativeInteger
Origin Flags ::= ORIGIN-TYPE FLAGS-TYPE TLV-LENGTH
nonNegativeInteger
Cost ::= COST-TYPE TLV-LENGTH
nonNegativeInteger
Flags ::= FLAGS-TYPE TLV-LENGTH
nonNegativeInteger
Strategy ::= STRATEGY-TYPE TLV-LENGTH
Name
ExpirationPeriod ::= EXPIRATION-PERIOD-TYPE TLV-LENGTH
nonNegativeInteger
Protocol ::= PROTOCOL-TYPE TLV-LENGTH
ASCII string
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 on 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 blocks
### StatusCode
StatusCode generally follows HTTP convention \[[RFC2616](http://tools.ietf.org/html/rfc2616#section-10)\].
* Codes between 100 and 399 represents a success.
* Codes between 400 and 499 represents a client error.
* Codes between 500 and 599 represents a server error.
Common codes include:
StatusCode | Description
-----------|------------------------
200 | OK
400 | ControlParameters is incorrect
403 | Command Interest is not authorized
404 | Resource (e.g. face, prefix, ...) not found
501 | Module or Command verb is not supported
503 | Service not available
Each individual command MAY define additional codes.
### \<body>
Additional elements are allowed at the end of ControlResponse.
Each individual command MAY define the type and meaning of \<body>.
Unless otherwise defined by an individual command,
\<body> is the ControlParameters passed into this command for all successful responses,
and \<body> is empty for all failure responses.
## TLV-TYPE assignments
Type | Assigned value | Assigned value (hex)
------------------------------------------- | ----------------- | --------------------
ControlParameters | 104 | 0x68
FaceId | 105 | 0x69
Uri | 114 | 0x72
LocalControlFeature | 110 | 0x6e
Origin Flags | 111 108 | 0x6f 0x6c
Cost | 106 | 0x6a
Flags | 108 | 0x6c
Strategy | 107 | 0x6b
ExpirationPeriod | 109 | 0x6d
Protocol | 111 | 0x6f
ControlResponse | 101 | 0x65
StatusCode | 102 | 0x66
StatusText | 103 | 0x67
These types are assigned from the range reserved for forwarding daemon.