# 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:
false
-1
-1
-1
-1
-1
-1
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:
true
-1
-1
-1
-1
-1
-1
0
10
20
30
10
20
30
10
20
30
40
50
60
70
80
90
100
110
10
20
30
40
10
10
20
30
0
10
20
30
40
10
20
30
40
## Release note
The current version is compatible with the 19.01 VPP stable and sysrepo 0.7.7.