1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * VRRP northbound bindings.
4 * Copyright (C) 2019 Cumulus Networks, Inc.
15 #include "northbound.h"
21 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group
23 static int lib_interface_vrrp_vrrp_group_create(struct nb_cb_create_args
*args
)
25 struct interface
*ifp
;
28 struct vrrp_vrouter
*vr
;
30 vrid
= yang_dnode_get_uint8(args
->dnode
, "./virtual-router-id");
31 version
= yang_dnode_get_enum(args
->dnode
, "./version");
33 switch (args
->event
) {
35 ifp
= nb_running_get_entry(args
->dnode
, NULL
, false);
37 vr
= vrrp_lookup(ifp
, vrid
);
38 if (vr
&& vr
->autoconf
) {
40 args
->errmsg
, args
->errmsg_len
,
41 "Virtual Router with ID %d already exists on interface '%s'; created by VRRP autoconfiguration",
43 return NB_ERR_VALIDATION
;
54 ifp
= nb_running_get_entry(args
->dnode
, NULL
, true);
55 vr
= vrrp_vrouter_create(ifp
, vrid
, version
);
56 nb_running_set_entry(args
->dnode
, vr
);
62 lib_interface_vrrp_vrrp_group_destroy(struct nb_cb_destroy_args
*args
)
64 struct vrrp_vrouter
*vr
;
66 if (args
->event
!= NB_EV_APPLY
)
69 vr
= nb_running_unset_entry(args
->dnode
);
70 vrrp_vrouter_destroy(vr
);
76 lib_interface_vrrp_vrrp_group_get_next(struct nb_cb_get_next_args
*args
)
78 struct list
*l
= hash_to_list(vrrp_vrouters_hash
);
80 const struct vrrp_vrouter
*curr
;
81 const struct interface
*ifp
= args
->parent_list_entry
;
84 * If list_entry is null, we return the first vrrp instance with a
87 bool nextone
= args
->list_entry
? false : true;
89 for (ALL_LIST_ELEMENTS_RO(l
, ln
, curr
)) {
90 if (curr
== args
->list_entry
) {
95 if (nextone
&& curr
->ifp
== ifp
)
107 lib_interface_vrrp_vrrp_group_get_keys(struct nb_cb_get_keys_args
*args
)
109 const struct vrrp_vrouter
*vr
= args
->list_entry
;
112 snprintf(args
->keys
->key
[0], sizeof(args
->keys
->key
[0]), "%u",
119 lib_interface_vrrp_vrrp_group_lookup_entry(struct nb_cb_lookup_entry_args
*args
)
121 uint32_t vrid
= strtoul(args
->keys
->key
[0], NULL
, 10);
122 const struct interface
*ifp
= args
->parent_list_entry
;
124 return vrrp_lookup(ifp
, vrid
);
128 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/version
131 lib_interface_vrrp_vrrp_group_version_modify(struct nb_cb_modify_args
*args
)
133 if (args
->event
!= NB_EV_APPLY
)
136 struct vrrp_vrouter
*vr
;
139 vr
= nb_running_get_entry(args
->dnode
, NULL
, true);
140 vrrp_event(vr
->v4
, VRRP_EVENT_SHUTDOWN
);
141 vrrp_event(vr
->v6
, VRRP_EVENT_SHUTDOWN
);
142 version
= yang_dnode_get_enum(args
->dnode
, NULL
);
143 vr
->version
= version
;
145 vrrp_check_start(vr
);
151 * Helper function for address list OP_MODIFY callbacks.
153 static void vrrp_yang_add_del_virtual_address(const struct lyd_node
*dnode
,
156 struct vrrp_vrouter
*vr
;
159 vr
= nb_running_get_entry(dnode
, NULL
, true);
160 yang_dnode_get_ip(&ip
, dnode
, NULL
);
162 vrrp_add_ip(vr
, &ip
);
164 vrrp_del_ip(vr
, &ip
);
166 vrrp_check_start(vr
);
171 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/virtual-address
173 static int lib_interface_vrrp_vrrp_group_v4_virtual_address_create(
174 struct nb_cb_create_args
*args
)
176 if (args
->event
!= NB_EV_APPLY
)
179 vrrp_yang_add_del_virtual_address(args
->dnode
, true);
184 static int lib_interface_vrrp_vrrp_group_v4_virtual_address_destroy(
185 struct nb_cb_destroy_args
*args
)
187 if (args
->event
!= NB_EV_APPLY
)
190 vrrp_yang_add_del_virtual_address(args
->dnode
, false);
197 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/current-priority
199 static struct yang_data
*
200 lib_interface_vrrp_vrrp_group_v4_current_priority_get_elem(
201 struct nb_cb_get_elem_args
*args
)
203 const struct vrrp_vrouter
*vr
= args
->list_entry
;
205 return yang_data_new_uint8(args
->xpath
, vr
->v4
->priority
);
210 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/vrrp-interface
212 static struct yang_data
*
213 lib_interface_vrrp_vrrp_group_v4_vrrp_interface_get_elem(
214 struct nb_cb_get_elem_args
*args
)
216 const struct vrrp_vrouter
*vr
= args
->list_entry
;
218 struct yang_data
*val
= NULL
;
221 val
= yang_data_new_string(args
->xpath
, vr
->v4
->mvl_ifp
->name
);
228 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/source-address
230 static struct yang_data
*
231 lib_interface_vrrp_vrrp_group_v4_source_address_get_elem(
232 struct nb_cb_get_elem_args
*args
)
234 const struct vrrp_vrouter
*vr
= args
->list_entry
;
235 struct yang_data
*val
= NULL
;
237 if (!ipaddr_is_zero(&vr
->v4
->src
))
238 val
= yang_data_new_ip(args
->xpath
, &vr
->v4
->src
);
244 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/state
246 static struct yang_data
*lib_interface_vrrp_vrrp_group_v4_state_get_elem(
247 struct nb_cb_get_elem_args
*args
)
249 const struct vrrp_vrouter
*vr
= args
->list_entry
;
251 return yang_data_new_enum(args
->xpath
, vr
->v4
->fsm
.state
);
256 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/master-advertisement-interval
258 static struct yang_data
*
259 lib_interface_vrrp_vrrp_group_v4_master_advertisement_interval_get_elem(
260 struct nb_cb_get_elem_args
*args
)
262 const struct vrrp_vrouter
*vr
= args
->list_entry
;
264 return yang_data_new_uint16(args
->xpath
, vr
->v4
->master_adver_interval
);
268 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/skew-time
270 static struct yang_data
*lib_interface_vrrp_vrrp_group_v4_skew_time_get_elem(
271 struct nb_cb_get_elem_args
*args
)
273 const struct vrrp_vrouter
*vr
= args
->list_entry
;
275 return yang_data_new_uint16(args
->xpath
, vr
->v4
->skew_time
);
280 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/counter/state-transition
282 static struct yang_data
*
283 lib_interface_vrrp_vrrp_group_v4_counter_state_transition_get_elem(
284 struct nb_cb_get_elem_args
*args
)
286 const struct vrrp_vrouter
*vr
= args
->list_entry
;
288 return yang_data_new_uint32(args
->xpath
, vr
->v4
->stats
.trans_cnt
);
293 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/counter/tx/advertisement
295 static struct yang_data
*
296 lib_interface_vrrp_vrrp_group_v4_counter_tx_advertisement_get_elem(
297 struct nb_cb_get_elem_args
*args
)
299 const struct vrrp_vrouter
*vr
= args
->list_entry
;
301 return yang_data_new_uint32(args
->xpath
, vr
->v4
->stats
.adver_tx_cnt
);
306 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/counter/tx/gratuitous-arp
308 static struct yang_data
*
309 lib_interface_vrrp_vrrp_group_v4_counter_tx_gratuitous_arp_get_elem(
310 struct nb_cb_get_elem_args
*args
)
312 const struct vrrp_vrouter
*vr
= args
->list_entry
;
314 return yang_data_new_uint32(args
->xpath
, vr
->v4
->stats
.garp_tx_cnt
);
319 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/counter/rx/advertisement
321 static struct yang_data
*
322 lib_interface_vrrp_vrrp_group_v4_counter_rx_advertisement_get_elem(
323 struct nb_cb_get_elem_args
*args
)
325 const struct vrrp_vrouter
*vr
= args
->list_entry
;
327 return yang_data_new_uint32(args
->xpath
, vr
->v4
->stats
.adver_rx_cnt
);
332 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/virtual-address
334 static int lib_interface_vrrp_vrrp_group_v6_virtual_address_create(
335 struct nb_cb_create_args
*args
)
337 if (args
->event
!= NB_EV_APPLY
)
340 vrrp_yang_add_del_virtual_address(args
->dnode
, true);
345 static int lib_interface_vrrp_vrrp_group_v6_virtual_address_destroy(
346 struct nb_cb_destroy_args
*args
)
348 if (args
->event
!= NB_EV_APPLY
)
351 vrrp_yang_add_del_virtual_address(args
->dnode
, false);
358 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/current-priority
360 static struct yang_data
*
361 lib_interface_vrrp_vrrp_group_v6_current_priority_get_elem(
362 struct nb_cb_get_elem_args
*args
)
364 const struct vrrp_vrouter
*vr
= args
->list_entry
;
366 return yang_data_new_uint8(args
->xpath
, vr
->v6
->priority
);
371 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/vrrp-interface
373 static struct yang_data
*
374 lib_interface_vrrp_vrrp_group_v6_vrrp_interface_get_elem(
375 struct nb_cb_get_elem_args
*args
)
377 const struct vrrp_vrouter
*vr
= args
->list_entry
;
378 struct yang_data
*val
= NULL
;
381 val
= yang_data_new_string(args
->xpath
, vr
->v6
->mvl_ifp
->name
);
388 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/source-address
390 static struct yang_data
*
391 lib_interface_vrrp_vrrp_group_v6_source_address_get_elem(
392 struct nb_cb_get_elem_args
*args
)
394 const struct vrrp_vrouter
*vr
= args
->list_entry
;
395 struct yang_data
*val
= NULL
;
397 if (!ipaddr_is_zero(&vr
->v6
->src
))
398 val
= yang_data_new_ip(args
->xpath
, &vr
->v6
->src
);
404 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/state
406 static struct yang_data
*lib_interface_vrrp_vrrp_group_v6_state_get_elem(
407 struct nb_cb_get_elem_args
*args
)
409 const struct vrrp_vrouter
*vr
= args
->list_entry
;
411 return yang_data_new_enum(args
->xpath
, vr
->v6
->fsm
.state
);
416 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/master-advertisement-interval
418 static struct yang_data
*
419 lib_interface_vrrp_vrrp_group_v6_master_advertisement_interval_get_elem(
420 struct nb_cb_get_elem_args
*args
)
422 const struct vrrp_vrouter
*vr
= args
->list_entry
;
424 return yang_data_new_uint16(args
->xpath
, vr
->v6
->master_adver_interval
);
428 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/skew-time
430 static struct yang_data
*lib_interface_vrrp_vrrp_group_v6_skew_time_get_elem(
431 struct nb_cb_get_elem_args
*args
)
433 const struct vrrp_vrouter
*vr
= args
->list_entry
;
435 return yang_data_new_uint16(args
->xpath
, vr
->v6
->skew_time
);
440 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/counter/state-transition
442 static struct yang_data
*
443 lib_interface_vrrp_vrrp_group_v6_counter_state_transition_get_elem(
444 struct nb_cb_get_elem_args
*args
)
446 const struct vrrp_vrouter
*vr
= args
->list_entry
;
448 return yang_data_new_uint32(args
->xpath
, vr
->v6
->stats
.trans_cnt
);
453 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/counter/tx/advertisement
455 static struct yang_data
*
456 lib_interface_vrrp_vrrp_group_v6_counter_tx_advertisement_get_elem(
457 struct nb_cb_get_elem_args
*args
)
459 const struct vrrp_vrouter
*vr
= args
->list_entry
;
461 return yang_data_new_uint32(args
->xpath
, vr
->v6
->stats
.adver_tx_cnt
);
466 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/counter/tx/neighbor-advertisement
468 static struct yang_data
*
469 lib_interface_vrrp_vrrp_group_v6_counter_tx_neighbor_advertisement_get_elem(
470 struct nb_cb_get_elem_args
*args
)
472 /* TODO: implement me. */
478 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/counter/rx/advertisement
480 static struct yang_data
*
481 lib_interface_vrrp_vrrp_group_v6_counter_rx_advertisement_get_elem(
482 struct nb_cb_get_elem_args
*args
)
484 /* TODO: implement me. */
489 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/priority
492 lib_interface_vrrp_vrrp_group_priority_modify(struct nb_cb_modify_args
*args
)
494 if (args
->event
!= NB_EV_APPLY
)
497 struct vrrp_vrouter
*vr
;
500 vr
= nb_running_get_entry(args
->dnode
, NULL
, true);
501 priority
= yang_dnode_get_uint8(args
->dnode
, NULL
);
502 vrrp_set_priority(vr
, priority
);
508 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/preempt
511 lib_interface_vrrp_vrrp_group_preempt_modify(struct nb_cb_modify_args
*args
)
513 if (args
->event
!= NB_EV_APPLY
)
516 struct vrrp_vrouter
*vr
;
519 vr
= nb_running_get_entry(args
->dnode
, NULL
, true);
520 preempt
= yang_dnode_get_bool(args
->dnode
, NULL
);
521 vr
->preempt_mode
= preempt
;
527 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/accept-mode
530 lib_interface_vrrp_vrrp_group_accept_mode_modify(struct nb_cb_modify_args
*args
)
532 if (args
->event
!= NB_EV_APPLY
)
535 struct vrrp_vrouter
*vr
;
538 vr
= nb_running_get_entry(args
->dnode
, NULL
, true);
539 accept
= yang_dnode_get_bool(args
->dnode
, NULL
);
540 vr
->accept_mode
= accept
;
547 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/advertisement-interval
549 static int lib_interface_vrrp_vrrp_group_advertisement_interval_modify(
550 struct nb_cb_modify_args
*args
)
552 if (args
->event
!= NB_EV_APPLY
)
555 struct vrrp_vrouter
*vr
;
558 vr
= nb_running_get_entry(args
->dnode
, NULL
, true);
559 advert_int
= yang_dnode_get_uint16(args
->dnode
, NULL
);
560 vrrp_set_advertisement_interval(vr
, advert_int
);
566 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/shutdown
569 lib_interface_vrrp_vrrp_group_shutdown_modify(struct nb_cb_modify_args
*args
)
571 if (args
->event
!= NB_EV_APPLY
)
574 struct vrrp_vrouter
*vr
;
577 vr
= nb_running_get_entry(args
->dnode
, NULL
, true);
578 shutdown
= yang_dnode_get_bool(args
->dnode
, NULL
);
580 vr
->shutdown
= shutdown
;
583 vrrp_event(vr
->v4
, VRRP_EVENT_SHUTDOWN
);
584 vrrp_event(vr
->v6
, VRRP_EVENT_SHUTDOWN
);
586 vrrp_check_start(vr
);
593 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/checksum-with-
596 static int lib_interface_vrrp_vrrp_group_checksum_with_ipv4_pseudoheader_modify(
597 struct nb_cb_modify_args
*args
)
599 if (args
->event
!= NB_EV_APPLY
)
602 struct vrrp_vrouter
*vr
;
603 bool checksum_with_ipv4_ph
;
605 vr
= nb_running_get_entry(args
->dnode
, NULL
, true);
606 checksum_with_ipv4_ph
= yang_dnode_get_bool(args
->dnode
, NULL
);
607 vr
->checksum_with_ipv4_pseudoheader
= checksum_with_ipv4_ph
;
612 /* clang-format off */
613 const struct frr_yang_module_info frr_vrrpd_info
= {
617 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group",
619 .create
= lib_interface_vrrp_vrrp_group_create
,
620 .destroy
= lib_interface_vrrp_vrrp_group_destroy
,
621 .get_next
= lib_interface_vrrp_vrrp_group_get_next
,
622 .get_keys
= lib_interface_vrrp_vrrp_group_get_keys
,
623 .lookup_entry
= lib_interface_vrrp_vrrp_group_lookup_entry
,
624 .cli_show
= cli_show_vrrp
,
628 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/version",
630 .modify
= lib_interface_vrrp_vrrp_group_version_modify
,
634 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/priority",
636 .modify
= lib_interface_vrrp_vrrp_group_priority_modify
,
637 .cli_show
= cli_show_priority
,
641 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/preempt",
643 .modify
= lib_interface_vrrp_vrrp_group_preempt_modify
,
644 .cli_show
= cli_show_preempt
,
648 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/accept-mode",
650 .modify
= lib_interface_vrrp_vrrp_group_accept_mode_modify
,
654 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/checksum-with-ipv4-pseudoheader",
656 .modify
= lib_interface_vrrp_vrrp_group_checksum_with_ipv4_pseudoheader_modify
,
657 .cli_show
= cli_show_checksum_with_ipv4_pseudoheader
,
661 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/advertisement-interval",
663 .modify
= lib_interface_vrrp_vrrp_group_advertisement_interval_modify
,
664 .cli_show
= cli_show_advertisement_interval
,
668 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/shutdown",
670 .modify
= lib_interface_vrrp_vrrp_group_shutdown_modify
,
671 .cli_show
= cli_show_shutdown
,
675 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/virtual-address",
677 .create
= lib_interface_vrrp_vrrp_group_v4_virtual_address_create
,
678 .destroy
= lib_interface_vrrp_vrrp_group_v4_virtual_address_destroy
,
679 .cli_show
= cli_show_ip
,
683 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/current-priority",
685 .get_elem
= lib_interface_vrrp_vrrp_group_v4_current_priority_get_elem
,
689 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/vrrp-interface",
691 .get_elem
= lib_interface_vrrp_vrrp_group_v4_vrrp_interface_get_elem
,
695 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/source-address",
697 .get_elem
= lib_interface_vrrp_vrrp_group_v4_source_address_get_elem
,
701 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/state",
703 .get_elem
= lib_interface_vrrp_vrrp_group_v4_state_get_elem
,
707 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/master-advertisement-interval",
709 .get_elem
= lib_interface_vrrp_vrrp_group_v4_master_advertisement_interval_get_elem
,
713 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/skew-time",
715 .get_elem
= lib_interface_vrrp_vrrp_group_v4_skew_time_get_elem
,
719 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/counter/state-transition",
721 .get_elem
= lib_interface_vrrp_vrrp_group_v4_counter_state_transition_get_elem
,
725 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/counter/tx/advertisement",
727 .get_elem
= lib_interface_vrrp_vrrp_group_v4_counter_tx_advertisement_get_elem
,
731 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/counter/tx/gratuitous-arp",
733 .get_elem
= lib_interface_vrrp_vrrp_group_v4_counter_tx_gratuitous_arp_get_elem
,
737 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/counter/rx/advertisement",
739 .get_elem
= lib_interface_vrrp_vrrp_group_v4_counter_rx_advertisement_get_elem
,
743 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/virtual-address",
745 .create
= lib_interface_vrrp_vrrp_group_v6_virtual_address_create
,
746 .destroy
= lib_interface_vrrp_vrrp_group_v6_virtual_address_destroy
,
747 .cli_show
= cli_show_ipv6
,
751 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/current-priority",
753 .get_elem
= lib_interface_vrrp_vrrp_group_v6_current_priority_get_elem
,
757 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/vrrp-interface",
759 .get_elem
= lib_interface_vrrp_vrrp_group_v6_vrrp_interface_get_elem
,
763 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/source-address",
765 .get_elem
= lib_interface_vrrp_vrrp_group_v6_source_address_get_elem
,
769 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/state",
771 .get_elem
= lib_interface_vrrp_vrrp_group_v6_state_get_elem
,
775 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/master-advertisement-interval",
777 .get_elem
= lib_interface_vrrp_vrrp_group_v6_master_advertisement_interval_get_elem
,
781 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/skew-time",
783 .get_elem
= lib_interface_vrrp_vrrp_group_v6_skew_time_get_elem
,
787 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/counter/state-transition",
789 .get_elem
= lib_interface_vrrp_vrrp_group_v6_counter_state_transition_get_elem
,
793 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/counter/tx/advertisement",
795 .get_elem
= lib_interface_vrrp_vrrp_group_v6_counter_tx_advertisement_get_elem
,
799 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/counter/tx/neighbor-advertisement",
801 .get_elem
= lib_interface_vrrp_vrrp_group_v6_counter_tx_neighbor_advertisement_get_elem
,
805 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/counter/rx/advertisement",
807 .get_elem
= lib_interface_vrrp_vrrp_group_v6_counter_rx_advertisement_get_elem
,