Project

General

Profile

StrategyChoice » History » Revision 11

Revision 10 (Junxiao Shi, 01/21/2018 12:11 PM) → Revision 11/16 (Junxiao Shi, 02/03/2018 03:49 PM)

# Strategy Choice Management 

 **Strategy Choice Management** is a module of [[Management|NFD Management protocol]]. 
 It provides: 

 * commands to choose the forwarding strategy for a namespace 
 * a dataset of strategy choices 

 Strategy Choice Management commands and datasets are available under namespace `ndn:/localhost/nfd/strategy-choice`. 


 ## Strategy 

 A strategy is identified by a name. 

 NFD currently supports the following strategies: 

 * ndn:/localhost/nfd/strategy/best-route 
 * ndn:/localhost/nfd/strategy/broadcast 
 * ndn:/localhost/nfd/strategy/client-control 
 * ndn:/localhost/nfd/strategy/ncc 
 * ndn:/localhost/nfd/strategy/access 
 * ndn:/localhost/nfd/strategy/asf 

 Each strategy listed above may have one or more versions. Strategy version is increased when there is a major behavior change; bugfixes usually won't bump strategy version. The version component is appended to the strategy name. 
 A strategy may accept parameters name components. Parameters are always optional. They may be appended to the strategy name after the version component. Whether a strategy accepts parameters and the syntax and semantics of the parameters are defined by each strategy. 


 ## Control Commands 

 [[ControlCommand]] **management-module**: `strategy-choice` 

 ### Set the strategy for a namespace 

 **command-verb**: `set` 

 ControlParameters fields: 

 * Name (required) 
 * Strategy (required) 

 **Name** is the name prefix on which the strategy is selected. 
 NFD MAY impose a limit on the length of name prefix. The current limit is 32 name components. 
 If Name exceeds this limit, the command fails with code 414. 

 **Strategy** must be a Name that identifies a strategy. 
 It could be either an unversioned name to instantiate the latest version of a strategy, or a versioned name to instantiate a specific version. If the chosen strategy accepts parameters, they may be appended after a versioned name. 
 If **Strategy** does not match any registered strategy, the command fails with code 404. 
 In case of an error during strategy initiation (such as unacceptable parameter), the command fails with code 409. 

 If the command succeeds, \<Body> in ControlResponse block contains updated ControlParameters: 

 * Name: unchanged 
 * Strategy: strategy instance name, which always contains a version component and may contain parameters name components 

 ### Unset the strategy for a namespace 

 **command-verb**: `unset` 

 ControlParameters fields: 

 * Name (required) 

 After this operation, the effective strategy at **Name** is inherited from the parent.   
 If there is no strategy defined at **Name**, this command does nothing, but is still considered successful. 

 **Name** must not be `ndn:/`, otherwise the command fails with code 400. 


 ## Strategy Choice Dataset 

 Strategy choices for namespaces are published as a [[StatusDataset|Status Dataset]] at `ndn:/localhost/nfd/strategy-choice/list`. 

 Each choice is represented by a **StrategyChoice** block: 

     StrategyChoice := STRATEGY-CHOICE-TYPE TLV-LENGTH 
                         Name 
                         Strategy 

 * **Name** is the namespace on which a strategy is chosen. 
 * **Strategy** is the strategy chosen for this namespace. 


 ## TLV-TYPE assignments 

 Type                                          | Assigned value      | Assigned value (hex) 
 ------------------------------------------- | ----------------- | -------------------- 
 StrategyChoice                                | 128                 | 0x80