Project

General

Profile

StrategyChoice » History » Revision 9

Revision 8 (Junxiao Shi, 01/22/2017 07:35 PM) → Revision 9/16 (Davide Pesavento, 02/11/2017 12:47 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. 

 **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. 

 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 face 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