summaryrefslogtreecommitdiffstats
path: root/utils/sysrepo-plugin/README.md
blob: 87394e9757916a44e97e85b866b111aa1c42ea9b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
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.