aboutsummaryrefslogtreecommitdiffstats
path: root/utils/sysrepo-plugin/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'utils/sysrepo-plugin/README.md')
-rw-r--r--utils/sysrepo-plugin/README.md278
1 files changed, 278 insertions, 0 deletions
diff --git a/utils/sysrepo-plugin/README.md b/utils/sysrepo-plugin/README.md
new file mode 100644
index 000000000..87394e975
--- /dev/null
+++ b/utils/sysrepo-plugin/README.md
@@ -0,0 +1,278 @@
+# hICN plugin for sysrepo (2019)
+
+This plugin serves as a data management agent that runs on the same host as a
+VPP instance. It provides yang models via NETCONF to allow the management of
+hicn-plugin that runs in VPP instance from out-of-box.
+
+## Software Requirement
+
+- VPP
+
+- hicn-plugin
+
+- sysrepo
+
+## hICN yang model
+
+You can install the yang model using the following bash script:
+
+EXIT_CODE=0
+command -v sysrepoctl > /dev/null
+if [ $? != 0 ]; then
+ echo "Could not find command \"sysrepoctl\"."
+ exit ${EXIT_CODE}
+else
+sysrepoctl --install --yang=path_to_hicn_yang_model
+fi
+
+hicn.yang can be found under `plugin/yang/model/hicn.yang`. It consists of two
+container nodes: *hicn-conf* and *hicn-state*. One is used to hold the
+configuration data (i.e., *hicn-conf*) and one for providing the state
+data (i.e., *hicn-state*). The *hicn-conf* has one node, *params*, which
+contains the hICN configuration parameters. Controler can configure these parameters
+through the edit-config RPC call. This node can be used to enable and to initialize
+the hicn-plugin in VPP instance. Hicn-state container is used to provide the state
+data to the controler. It consists of *state*, *strategy*, *strategies*, *route*,
+and *face-ip-params* nodes with the coresponding leaves. In hicn model variety of
+RPCs are provided to allow controler to communicate with hicn-plugin as well as
+update the state data in *hicn-state*. Here you can find the schematic view of
+the described hicn model:
+
+
+module: hicn
+ +--rw hicn-conf
+ | +--rw params
+ | +--rw enable_disable? boolean
+ | +--rw pit_max_size? int32
+ | +--rw cs_max_size? int32
+ | +--rw cs_reserved_app? int32
+ | +--rw pit_dflt_lifetime_sec? float
+ | +--rw pit_max_lifetime_sec? float
+ | +--rw pit_min_lifetime_sec? float
+ +--ro hicn-state
+ +--ro states
+ | +--ro pkts_processed? uint64
+ | +--ro pkts_interest_count? uint64
+ | +--ro pkts_data_count? uint64
+ | +--ro pkts_from_cache_count? uint64
+ | +--ro pkts_no_pit_count? uint64
+ | +--ro pit_expired_count? uint64
+ | +--ro cs_expired_count? uint64
+ | +--ro cs_lru_count? uint64
+ | +--ro pkts_drop_no_buf? uint64
+ | +--ro interests_aggregated? uint64
+ | +--ro interests_retx? uint64
+ | +--ro interests_hash_collision? uint64
+ | +--ro pit_entries_count? uint64
+ | +--ro cs_entries_count? uint64
+ | +--ro cs_entries_ntw_count? uint64
+ +--ro strategy
+ | +--ro description? uint8
+ +--ro route
+ | +--ro faceids? uint16
+ | +--ro strategy_id? uint32
+ +--ro strategies
+ | +--ro n_strategies? uint8
+ | +--ro strategy_id? uint32
+ +--ro face-ip-params
+ +--ro nh_addr? uint64
+ +--ro swif? uint32
+ +--ro flags? uint32
+
+
+To setup the startup configuration you can use the following script:
+
+EXIT_CODE=0
+command -v sysrepocfg > /dev/null
+if [ $? != 0 ]; then
+ echo "Could not find command \"sysrepocfg\"."
+ exit ${EXIT_CODE}
+else
+sysrepocfg -d startup -i startup.xml -f xml hicn
+fi
+
+
+*startup.xml* is placed under `plugin/yang/startup.xml`. Here you can find the content:
+
+<hicn-conf xmlns="urn:sysrepo:hicn">
+<params>
+ <enable_disable>false</enable_disable>
+ <pit_max_size>-1</pit_max_size>
+ <cs_max_size>-1</cs_max_size>
+ <cs_reserved_app>-1</cs_reserved_app>
+ <pit_dflt_lifetime_sec>-1</pit_dflt_lifetime_sec>
+ <pit_max_lifetime_sec>-1</pit_max_lifetime_sec>
+ <pit_min_lifetime_sec>-1</pit_min_lifetime_sec>
+</params>
+</hicn-conf>
+
+As can be seen, it contains the params leaves in *hicn-conf* node which is
+used as the startup configuration when the yang model is loaded to the sysrepo.
+This configuration can be changed through the controler by subscribing which
+changes the target to the running state.
+
+hicn model provides a list of RPCs which allows controler to communicate directly
+with the hicn-plugin. This RPCs may also cause the modification in state data.
+Here you can find the list of RPCs:
+
+ rpcs:
+ +---x node-params-set
+ | +---w input
+ | +---w enable_disable? boolean
+ | +---w pit_max_size? int32
+ | +---w cs_max_size? int32
+ | +---w cs_reserved_app? int32
+ | +---w pit_dflt_lifetime_sec? float
+ | +---w pit_max_lifetime_sec? float
+ | +---w pit_min_lifetime_sec? float
+ +---x node-params-get
+ +---x node-stat-get
+ +---x strategy-get
+ | +---w input
+ | +---w strategy_id? uint32
+ +---x strategies-get
+ +---x route-get
+ | +---w input
+ | +---w prefix0? uint64
+ | +---w prefix1? uint64
+ | +---w len? uint8
+ +---x route-del
+ | +---w input
+ | +---w prefix0? uint64
+ | +---w prefix1? uint64
+ | +---w len? uint8
+ +---x route-nhops-add
+ | +---w input
+ | +---w prefix0? uint64
+ | +---w prefix1? uint64
+ | +---w len? uint8
+ | +---w face_ids0? uint32
+ | +---w face_ids1? uint32
+ | +---w face_ids2? uint32
+ | +---w face_ids3? uint32
+ | +---w face_ids4? uint32
+ | +---w face_ids5? uint32
+ | +---w face_ids6? uint32
+ | +---w n_faces? uint8
+ +---x route-nhops-del
+ | +---w input
+ | +---w prefix0? uint64
+ | +---w prefix1? uint64
+ | +---w len? uint8
+ | +---w faceid? uint16
+ +---x face-ip-params-get
+ | +---w input
+ | +---w faceid? uint16
+ +---x face-ip-add
+ | +---w input
+ | +---w nh_addr0? uint64
+ | +---w nh_addr1? uint64
+ | +---w swif? uint32
+ +---x face-ip-del
+ | +---w input
+ | +---w faceid? uint16
+ +---x punting-add
+ | +---w input
+ | +---w prefix0? uint64
+ | +---w prefix1? uint64
+ | +---w len? uint8
+ | +---w swif? uint32
+ +---x punting-del
+ +---w input
+ +---w prefix0? uint64
+ +---w prefix1? uint64
+ +---w len? uint8
+ +---w swif? uint32
+
+
+In order to run different RPCs from controler you can use the examples in the
+*hicn_netconf_client.xml* under `plugin/yang/model`. Here you can find the content:
+
+<node-params-set xmlns="urn:sysrepo:hicn">
+ <enable_disable>true</enable_disable>
+ <pit_max_size>-1</pit_max_size>
+ <cs_max_size>-1</cs_max_size>
+ <cs_reserved_app>-1</cs_reserved_app>
+ <pit_dflt_lifetime_sec>-1</pit_dflt_lifetime_sec>
+ <pit_max_lifetime_sec>-1</pit_max_lifetime_sec>
+ <pit_min_lifetime_sec>-1</pit_min_lifetime_sec>
+</node-params-set>
+
+
+<node-params-get xmlns="urn:sysrepo:hicn"/>
+
+<node-stat-get xmlns="urn:sysrepo:hicn"/>
+
+<strategy-get xmlns="urn:sysrepo:hicn">
+ <strategy_id>0</strategy_id>
+</strategy-get>
+
+<strategies-get xmlns="urn:sysrepo:hicn"/>
+
+
+<route-get xmlns="urn:sysrepo:hicn">
+ <prefix0>10</prefix0>
+ <prefix1>20</prefix1>
+ <len>30</len>
+</route-get>
+
+<route-del xmlns="urn:sysrepo:hicn">
+ <prefix0>10</prefix0>
+ <prefix1>20</prefix1>
+ <len>30</len>
+</route-del>
+
+<route-nhops-add xmlns="urn:sysrepo:hicn">
+ <prefix0>10</prefix0>
+ <prefix1>20</prefix1>
+ <len>30</len>
+ <face_ids0>40</face_ids0>
+ <face_ids1>50</face_ids1>
+ <face_ids2>60</face_ids2>
+ <face_ids3>70</face_ids3>
+ <face_ids4>80</face_ids4>
+ <face_ids5>90</face_ids5>
+ <face_ids6>100</face_ids6>
+ <n_faces>110</n_faces>
+</route-nhops-add>
+
+<route-nhops-del xmlns="urn:sysrepo:hicn">
+ <prefix0>10</prefix0>
+ <prefix1>20</prefix1>
+ <len>30</len>
+ <faceid>40</faceid>
+</route-nhops-del>
+
+
+<face-ip-params-get xmlns="urn:sysrepo:hicn">
+ <faceid>10</faceid>
+</face-ip-params-get>
+
+<face-ip-add xmlns="urn:sysrepo:hicn">
+ <nh_addr0>10</nh_addr0>
+ <nh_addr1>20</nh_addr1>
+ <swif>30</swif>
+</face-ip-add>
+
+<face-ip-del xmlns="urn:sysrepo:hicn">
+ <faceid>0</faceid>
+</face-ip-del>
+
+<punting-add xmlns="urn:sysrepo:hicn">
+ <prefix0>10</prefix0>
+ <prefix1>20</prefix1>
+ <len>30</len>
+ <swif>40</swif>
+</punting-add>
+
+
+<punting-del xmlns="urn:sysrepo:hicn">
+ <prefix0>10</prefix0>
+ <prefix1>20</prefix1>
+ <len>30</len>
+ <swif>40</swif>
+</punting-del>
+
+## Release note
+
+The current version is compatible with the 19.01 VPP stable and sysrepo 0.7.7. \ No newline at end of file