]> git.proxmox.com Git - mirror_frr.git/blame - zebra/zebra_nb_state.c
zebra: add zebra container to rib model
[mirror_frr.git] / zebra / zebra_nb_state.c
CommitLineData
ce45ffe7
CS
1/*
2 * Copyright (C) 2020 Cumulus Networks, Inc.
3 * Chirag Shah
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the Free
7 * Software Foundation; either version 2 of the License, or (at your option)
8 * any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13 * more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; see the file COPYING; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20#include <zebra.h>
21#include "northbound.h"
22#include "libfrr.h"
23#include "zebra_nb.h"
09268680 24#include "zebra/interface.h"
9d86e091 25#include "zebra/zebra_router.h"
ce45ffe7 26
b00f3e4b
CS
27/*
28 * XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/up-count
29 */
30struct yang_data *
60ee8be1 31lib_interface_zebra_state_up_count_get_elem(struct nb_cb_get_elem_args *args)
b00f3e4b 32{
60ee8be1 33 const struct interface *ifp = args->list_entry;
09268680
CS
34 struct zebra_if *zebra_if;
35
36 zebra_if = ifp->info;
37
60ee8be1 38 return yang_data_new_uint16(args->xpath, zebra_if->up_count);
b00f3e4b
CS
39}
40
41/*
42 * XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/down-count
43 */
44struct yang_data *
60ee8be1 45lib_interface_zebra_state_down_count_get_elem(struct nb_cb_get_elem_args *args)
b00f3e4b 46{
60ee8be1 47 const struct interface *ifp = args->list_entry;
09268680
CS
48 struct zebra_if *zebra_if;
49
50 zebra_if = ifp->info;
51
60ee8be1 52 return yang_data_new_uint16(args->xpath, zebra_if->down_count);
b00f3e4b
CS
53}
54
55/*
56 * XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/zif-type
57 */
58struct yang_data *
60ee8be1 59lib_interface_zebra_state_zif_type_get_elem(struct nb_cb_get_elem_args *args)
b00f3e4b
CS
60{
61 /* TODO: implement me. */
62 return NULL;
63}
64
65/*
66 * XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/ptm-status
67 */
68struct yang_data *
60ee8be1 69lib_interface_zebra_state_ptm_status_get_elem(struct nb_cb_get_elem_args *args)
b00f3e4b
CS
70{
71 /* TODO: implement me. */
72 return NULL;
73}
74
75/*
76 * XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/vlan-id
77 */
78struct yang_data *
60ee8be1 79lib_interface_zebra_state_vlan_id_get_elem(struct nb_cb_get_elem_args *args)
b00f3e4b 80{
60ee8be1 81 const struct interface *ifp = args->list_entry;
09268680
CS
82 struct zebra_if *zebra_if;
83 struct zebra_l2info_vlan *vlan_info;
84
85 if (!IS_ZEBRA_IF_VLAN(ifp))
86 return NULL;
87
88 zebra_if = ifp->info;
89 vlan_info = &zebra_if->l2info.vl;
90
60ee8be1 91 return yang_data_new_uint16(args->xpath, vlan_info->vid);
b00f3e4b
CS
92}
93
94/*
95 * XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/vni-id
96 */
97struct yang_data *
60ee8be1 98lib_interface_zebra_state_vni_id_get_elem(struct nb_cb_get_elem_args *args)
b00f3e4b 99{
60ee8be1 100 const struct interface *ifp = args->list_entry;
09268680
CS
101 struct zebra_if *zebra_if;
102 struct zebra_l2info_vxlan *vxlan_info;
103
104 if (!IS_ZEBRA_IF_VXLAN(ifp))
105 return NULL;
106
107 zebra_if = ifp->info;
108 vxlan_info = &zebra_if->l2info.vxl;
109
60ee8be1 110 return yang_data_new_uint32(args->xpath, vxlan_info->vni);
b00f3e4b
CS
111}
112
113/*
114 * XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/remote-vtep
115 */
116struct yang_data *
60ee8be1 117lib_interface_zebra_state_remote_vtep_get_elem(struct nb_cb_get_elem_args *args)
b00f3e4b 118{
60ee8be1 119 const struct interface *ifp = args->list_entry;
09268680
CS
120 struct zebra_if *zebra_if;
121 struct zebra_l2info_vxlan *vxlan_info;
122
123 if (!IS_ZEBRA_IF_VXLAN(ifp))
124 return NULL;
125
126 zebra_if = ifp->info;
127 vxlan_info = &zebra_if->l2info.vxl;
128
60ee8be1 129 return yang_data_new_ipv4(args->xpath, &vxlan_info->vtep_ip);
b00f3e4b
CS
130}
131
132/*
133 * XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/mcast-group
134 */
135struct yang_data *
60ee8be1 136lib_interface_zebra_state_mcast_group_get_elem(struct nb_cb_get_elem_args *args)
b00f3e4b 137{
60ee8be1 138 const struct interface *ifp = args->list_entry;
09268680
CS
139 struct zebra_if *zebra_if;
140 struct zebra_l2info_vxlan *vxlan_info;
141
142 if (!IS_ZEBRA_IF_VXLAN(ifp))
143 return NULL;
144
145 zebra_if = ifp->info;
146 vxlan_info = &zebra_if->l2info.vxl;
147
60ee8be1 148 return yang_data_new_ipv4(args->xpath, &vxlan_info->mcast_grp);
b00f3e4b
CS
149}
150
56a88b9e 151const void *lib_vrf_zebra_ribs_rib_get_next(struct nb_cb_get_next_args *args)
ce45ffe7 152{
56a88b9e 153 struct vrf *vrf = (struct vrf *)args->parent_list_entry;
9d86e091 154 struct zebra_router_table *zrt =
56a88b9e 155 (struct zebra_router_table *)args->list_entry;
9d86e091
CS
156
157 struct zebra_vrf *zvrf;
158 afi_t afi;
159 safi_t safi;
160
161 zvrf = zebra_vrf_lookup_by_id(vrf->vrf_id);
162
56a88b9e 163 if (args->list_entry == NULL) {
9d86e091
CS
164 afi = AFI_IP;
165 safi = SAFI_UNICAST;
166
167 zrt = zebra_router_find_zrt(zvrf, zvrf->table_id, afi, safi);
168 if (zrt == NULL)
169 return NULL;
170 } else {
171 zrt = RB_NEXT(zebra_router_table_head, zrt);
172 /* vrf_id/ns_id do not match, only walk for the given VRF */
173 while (zrt && zrt->ns_id != zvrf->zns->ns_id)
174 zrt = RB_NEXT(zebra_router_table_head, zrt);
175 }
176
177 return zrt;
ce45ffe7
CS
178}
179
56a88b9e 180int lib_vrf_zebra_ribs_rib_get_keys(struct nb_cb_get_keys_args *args)
ce45ffe7 181{
56a88b9e 182 const struct zebra_router_table *zrt = args->list_entry;
9d86e091 183
56a88b9e 184 args->keys->num = 2;
9d86e091 185
56a88b9e 186 snprintf(args->keys->key[0], sizeof(args->keys->key[0]), "%s",
9d86e091
CS
187 "frr-zebra:ipv4-unicast");
188 /* TODO: implement key[0], afi-safi identityref */
56a88b9e
CS
189 snprintf(args->keys->key[1], sizeof(args->keys->key[1]), "%" PRIu32,
190 zrt->tableid);
9d86e091 191
ce45ffe7
CS
192 return NB_OK;
193}
194
56a88b9e
CS
195const void *
196lib_vrf_zebra_ribs_rib_lookup_entry(struct nb_cb_lookup_entry_args *args)
ce45ffe7 197{
56a88b9e 198 struct vrf *vrf = (struct vrf *)args->parent_list_entry;
9d86e091
CS
199 struct zebra_vrf *zvrf;
200 afi_t afi = AFI_IP;
201 safi_t safi = SAFI_UNICAST;
202
203 zvrf = zebra_vrf_lookup_by_id(vrf->vrf_id);
204
205 return zebra_router_find_zrt(zvrf, zvrf->table_id, afi, safi);
ce45ffe7
CS
206}
207
208/*
56a88b9e 209 * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route
ce45ffe7 210 */
56a88b9e
CS
211const void *
212lib_vrf_zebra_ribs_rib_route_get_next(struct nb_cb_get_next_args *args)
ce45ffe7 213{
56a88b9e
CS
214 const struct zebra_router_table *zrt = args->parent_list_entry;
215 const struct route_node *rn = args->list_entry;
9d86e091 216
56a88b9e 217 if (args->list_entry == NULL)
9d86e091
CS
218 rn = route_top(zrt->table);
219 else
220 rn = srcdest_route_next((struct route_node *)rn);
221
222 return rn;
ce45ffe7
CS
223}
224
56a88b9e 225int lib_vrf_zebra_ribs_rib_route_get_keys(struct nb_cb_get_keys_args *args)
ce45ffe7 226{
56a88b9e 227 const struct route_node *rn = args->list_entry;
9d86e091 228
56a88b9e
CS
229 args->keys->num = 1;
230 prefix2str(&rn->p, args->keys->key[0], sizeof(args->keys->key[0]));
9d86e091 231
ce45ffe7
CS
232 return NB_OK;
233}
234
235const void *
56a88b9e 236lib_vrf_zebra_ribs_rib_route_lookup_entry(struct nb_cb_lookup_entry_args *args)
ce45ffe7 237{
56a88b9e 238 const struct zebra_router_table *zrt = args->parent_list_entry;
9d86e091
CS
239 struct prefix p;
240 struct route_node *rn;
241
56a88b9e 242 yang_str2prefix(args->keys->key[0], &p);
9d86e091
CS
243
244 rn = route_node_lookup(zrt->table, &p);
245
246 if (!rn)
247 return NULL;
248
249 route_unlock_node(rn);
250
251 return rn;
ce45ffe7
CS
252}
253
254/*
56a88b9e 255 * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/prefix
ce45ffe7 256 */
60ee8be1 257struct yang_data *
56a88b9e 258lib_vrf_zebra_ribs_rib_route_prefix_get_elem(struct nb_cb_get_elem_args *args)
ce45ffe7 259{
56a88b9e 260 const struct route_node *rn = args->list_entry;
9d86e091 261
56a88b9e 262 return yang_data_new_prefix(args->xpath, &rn->p);
ce45ffe7
CS
263}
264
265/*
56a88b9e 266 * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry
ce45ffe7 267 */
56a88b9e
CS
268const void *lib_vrf_zebra_ribs_rib_route_route_entry_get_next(
269 struct nb_cb_get_next_args *args)
ed5abdb2 270{
9d86e091
CS
271 struct route_entry *re = NULL;
272
273 return re;
ed5abdb2
CS
274}
275
56a88b9e 276int lib_vrf_zebra_ribs_rib_route_route_entry_get_keys(
60ee8be1 277 struct nb_cb_get_keys_args *args)
ed5abdb2
CS
278{
279 /* TODO: implement me. */
280 return NB_OK;
281}
282
56a88b9e 283const void *lib_vrf_zebra_ribs_rib_route_route_entry_lookup_entry(
60ee8be1 284 struct nb_cb_lookup_entry_args *args)
ce45ffe7
CS
285{
286 /* TODO: implement me. */
287 return NULL;
288}
289
290/*
56a88b9e 291 * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/protocol
ce45ffe7 292 */
56a88b9e 293struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_protocol_get_elem(
60ee8be1 294 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
295{
296 /* TODO: implement me. */
297 return NULL;
298}
299
300/*
56a88b9e 301 * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/instance
ce45ffe7 302 */
56a88b9e 303struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_instance_get_elem(
60ee8be1 304 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
305{
306 /* TODO: implement me. */
307 return NULL;
308}
309
310/*
56a88b9e 311 * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/distance
ce45ffe7 312 */
56a88b9e 313struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_distance_get_elem(
60ee8be1 314 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
315{
316 /* TODO: implement me. */
317 return NULL;
318}
319
320/*
56a88b9e 321 * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/metric
ce45ffe7 322 */
56a88b9e 323struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_metric_get_elem(
60ee8be1 324 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
325{
326 /* TODO: implement me. */
327 return NULL;
328}
329
330/*
56a88b9e 331 * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/tag
ce45ffe7 332 */
56a88b9e 333struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_tag_get_elem(
60ee8be1 334 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
335{
336 /* TODO: implement me. */
337 return NULL;
338}
339
340/*
56a88b9e 341 * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/selected
ce45ffe7 342 */
56a88b9e 343struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_selected_get_elem(
60ee8be1 344 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
345{
346 /* TODO: implement me. */
347 return NULL;
348}
349
350/*
56a88b9e 351 * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/installed
ce45ffe7 352 */
56a88b9e 353struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_installed_get_elem(
60ee8be1 354 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
355{
356 /* TODO: implement me. */
357 return NULL;
358}
359
360/*
56a88b9e 361 * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/failed
ce45ffe7 362 */
56a88b9e 363struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_failed_get_elem(
60ee8be1 364 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
365{
366 /* TODO: implement me. */
367 return NULL;
368}
369
370/*
56a88b9e 371 * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/queued
ce45ffe7 372 */
56a88b9e 373struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_queued_get_elem(
60ee8be1 374 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
375{
376 /* TODO: implement me. */
377 return NULL;
378}
379
380/*
56a88b9e
CS
381 * XPath:
382 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/internal-flags
ce45ffe7 383 */
56a88b9e
CS
384struct yang_data *
385lib_vrf_zebra_ribs_rib_route_route_entry_internal_flags_get_elem(
60ee8be1 386 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
387{
388 /* TODO: implement me. */
389 return NULL;
390}
391
392/*
56a88b9e
CS
393 * XPath:
394 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/internal-status
ce45ffe7 395 */
56a88b9e
CS
396struct yang_data *
397lib_vrf_zebra_ribs_rib_route_route_entry_internal_status_get_elem(
60ee8be1 398 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
399{
400 /* TODO: implement me. */
401 return NULL;
402}
403
404/*
56a88b9e 405 * XPath: /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/uptime
ce45ffe7 406 */
56a88b9e 407struct yang_data *lib_vrf_zebra_ribs_rib_route_route_entry_uptime_get_elem(
60ee8be1 408 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
409{
410 /* TODO: implement me. */
411 return NULL;
412}
413
414/*
56a88b9e
CS
415 * XPath:
416 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group
ce45ffe7 417 */
56a88b9e 418const void *lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_get_next(
60ee8be1 419 struct nb_cb_get_next_args *args)
ce45ffe7
CS
420{
421 /* TODO: implement me. */
422 return NULL;
423}
424
56a88b9e 425int lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_get_keys(
60ee8be1 426 struct nb_cb_get_keys_args *args)
ce45ffe7
CS
427{
428 /* TODO: implement me. */
429 return NB_OK;
430}
431
56a88b9e 432const void *lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_lookup_entry(
60ee8be1 433 struct nb_cb_lookup_entry_args *args)
ce45ffe7
CS
434{
435 /* TODO: implement me. */
436 return NULL;
437}
438
439/*
ed5abdb2 440 * XPath:
56a88b9e 441 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/name
ce45ffe7
CS
442 */
443struct yang_data *
56a88b9e 444lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_name_get_elem(
60ee8be1 445 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
446{
447 /* TODO: implement me. */
448 return NULL;
449}
450
451/*
452 * XPath:
56a88b9e 453 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop
ce45ffe7 454 */
ed5abdb2 455const void *
56a88b9e 456lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_get_next(
60ee8be1 457 struct nb_cb_get_next_args *args)
ce45ffe7
CS
458{
459 /* TODO: implement me. */
460 return NULL;
461}
462
56a88b9e 463int lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_get_keys(
60ee8be1 464 struct nb_cb_get_keys_args *args)
ce45ffe7
CS
465{
466 /* TODO: implement me. */
467 return NB_OK;
468}
469
470const void *
56a88b9e 471lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_lookup_entry(
60ee8be1 472 struct nb_cb_lookup_entry_args *args)
ce45ffe7
CS
473{
474 /* TODO: implement me. */
475 return NULL;
476}
477
478/*
479 * XPath:
56a88b9e 480 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/nh-type
ce45ffe7
CS
481 */
482struct yang_data *
56a88b9e 483lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_nh_type_get_elem(
60ee8be1 484 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
485{
486 /* TODO: implement me. */
487 return NULL;
488}
489
490/*
491 * XPath:
56a88b9e 492 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/vrf
ce45ffe7
CS
493 */
494struct yang_data *
56a88b9e 495lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_vrf_get_elem(
60ee8be1 496 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
497{
498 /* TODO: implement me. */
499 return NULL;
500}
501
502/*
503 * XPath:
56a88b9e 504 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/gateway
ce45ffe7
CS
505 */
506struct yang_data *
56a88b9e 507lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_gateway_get_elem(
60ee8be1 508 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
509{
510 /* TODO: implement me. */
511 return NULL;
512}
513
514/*
515 * XPath:
56a88b9e 516 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/interface
ce45ffe7
CS
517 */
518struct yang_data *
56a88b9e 519lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_interface_get_elem(
60ee8be1 520 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
521{
522 /* TODO: implement me. */
523 return NULL;
524}
525
526/*
527 * XPath:
56a88b9e 528 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/bh-type
ce45ffe7
CS
529 */
530struct yang_data *
56a88b9e 531lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_bh_type_get_elem(
60ee8be1 532 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
533{
534 /* TODO: implement me. */
535 return NULL;
536}
537
538/*
539 * XPath:
56a88b9e 540 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/onlink
ce45ffe7
CS
541 */
542struct yang_data *
56a88b9e 543lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_onlink_get_elem(
60ee8be1 544 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
545{
546 /* TODO: implement me. */
547 return NULL;
548}
549
550/*
551 * XPath:
56a88b9e 552 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/mpls-label-stack/entry
ce45ffe7
CS
553 */
554const void *
56a88b9e 555lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_get_next(
60ee8be1 556 struct nb_cb_get_next_args *args)
ce45ffe7
CS
557{
558 /* TODO: implement me. */
559 return NULL;
560}
561
56a88b9e 562int lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_get_keys(
60ee8be1 563 struct nb_cb_get_keys_args *args)
ce45ffe7
CS
564{
565 /* TODO: implement me. */
566 return NB_OK;
567}
568
569const void *
56a88b9e 570lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_lookup_entry(
60ee8be1 571 struct nb_cb_lookup_entry_args *args)
ce45ffe7
CS
572{
573 /* TODO: implement me. */
574 return NULL;
575}
576
577/*
578 * XPath:
56a88b9e 579 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/mpls-label-stack/entry/id
ce45ffe7
CS
580 */
581struct yang_data *
56a88b9e 582lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_id_get_elem(
60ee8be1 583 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
584{
585 /* TODO: implement me. */
586 return NULL;
587}
588
589/*
590 * XPath:
56a88b9e 591 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/mpls-label-stack/entry/label
ce45ffe7
CS
592 */
593struct yang_data *
56a88b9e 594lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_label_get_elem(
60ee8be1 595 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
596{
597 /* TODO: implement me. */
598 return NULL;
599}
600
601/*
602 * XPath:
56a88b9e 603 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/mpls-label-stack/entry/ttl
ce45ffe7
CS
604 */
605struct yang_data *
56a88b9e 606lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_ttl_get_elem(
60ee8be1 607 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
608{
609 /* TODO: implement me. */
610 return NULL;
611}
612
613/*
614 * XPath:
56a88b9e 615 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/mpls-label-stack/entry/traffic-class
ce45ffe7
CS
616 */
617struct yang_data *
56a88b9e 618lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_traffic_class_get_elem(
60ee8be1 619 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
620{
621 /* TODO: implement me. */
622 return NULL;
623}
624
625/*
626 * XPath:
56a88b9e 627 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/duplicate
ce45ffe7
CS
628 */
629struct yang_data *
56a88b9e 630lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_duplicate_get_elem(
60ee8be1 631 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
632{
633 /* TODO: implement me. */
634 return NULL;
635}
636
637/*
638 * XPath:
56a88b9e 639 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/recursive
ce45ffe7
CS
640 */
641struct yang_data *
56a88b9e 642lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_recursive_get_elem(
60ee8be1 643 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
644{
645 /* TODO: implement me. */
646 return NULL;
647}
648
649/*
650 * XPath:
56a88b9e 651 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/active
ce45ffe7
CS
652 */
653struct yang_data *
56a88b9e 654lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_active_get_elem(
60ee8be1 655 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
656{
657 /* TODO: implement me. */
658 return NULL;
659}
660
661/*
662 * XPath:
56a88b9e 663 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/fib
ce45ffe7
CS
664 */
665struct yang_data *
56a88b9e 666lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_fib_get_elem(
60ee8be1 667 struct nb_cb_get_elem_args *args)
ce45ffe7
CS
668{
669 /* TODO: implement me. */
670 return NULL;
671}
7225e61c
CS
672
673/*
674 * XPath:
56a88b9e 675 * /frr-vrf:lib/vrf/frr-zebra:zebra/ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/weight
7225e61c
CS
676 */
677struct yang_data *
56a88b9e 678lib_vrf_zebra_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_weight_get_elem(
60ee8be1 679 struct nb_cb_get_elem_args *args)
7225e61c
CS
680{
681 /* TODO: implement me. */
682 return NULL;
683}