2 * VRRP northbound bindings.
3 * Copyright (C) 2019 Cumulus Networks, Inc.
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the Free
8 * Software Foundation; either version 2 of the License, or (at your option)
11 * This program is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
16 * You should have received a copy of the GNU General Public License along
17 * with this program; see the file COPYING; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
28 #include "northbound.h"
34 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group
36 static int lib_interface_vrrp_vrrp_group_create(struct nb_cb_create_args
*args
)
38 struct interface
*ifp
;
41 struct vrrp_vrouter
*vr
;
43 vrid
= yang_dnode_get_uint8(args
->dnode
, "./virtual-router-id");
44 version
= yang_dnode_get_enum(args
->dnode
, "./version");
46 switch (args
->event
) {
48 ifp
= nb_running_get_entry(args
->dnode
, NULL
, false);
50 vr
= vrrp_lookup(ifp
, vrid
);
51 if (vr
&& vr
->autoconf
) {
53 args
->errmsg
, args
->errmsg_len
,
54 "Virtual Router with ID %d already exists on interface '%s'; created by VRRP autoconfiguration",
56 return NB_ERR_VALIDATION
;
67 ifp
= nb_running_get_entry(args
->dnode
, NULL
, true);
68 vr
= vrrp_vrouter_create(ifp
, vrid
, version
);
69 nb_running_set_entry(args
->dnode
, vr
);
75 lib_interface_vrrp_vrrp_group_destroy(struct nb_cb_destroy_args
*args
)
77 struct vrrp_vrouter
*vr
;
79 if (args
->event
!= NB_EV_APPLY
)
82 vr
= nb_running_unset_entry(args
->dnode
);
83 vrrp_vrouter_destroy(vr
);
89 lib_interface_vrrp_vrrp_group_get_next(struct nb_cb_get_next_args
*args
)
91 struct list
*l
= hash_to_list(vrrp_vrouters_hash
);
93 const struct vrrp_vrouter
*curr
;
94 const struct interface
*ifp
= args
->parent_list_entry
;
97 * If list_entry is null, we return the first vrrp instance with a
100 bool nextone
= args
->list_entry
? false : true;
102 for (ALL_LIST_ELEMENTS_RO(l
, ln
, curr
)) {
103 if (curr
== args
->list_entry
) {
108 if (nextone
&& curr
->ifp
== ifp
)
120 lib_interface_vrrp_vrrp_group_get_keys(struct nb_cb_get_keys_args
*args
)
122 const struct vrrp_vrouter
*vr
= args
->list_entry
;
125 snprintf(args
->keys
->key
[0], sizeof(args
->keys
->key
[0]), "%u",
132 lib_interface_vrrp_vrrp_group_lookup_entry(struct nb_cb_lookup_entry_args
*args
)
134 uint32_t vrid
= strtoul(args
->keys
->key
[0], NULL
, 10);
135 const struct interface
*ifp
= args
->parent_list_entry
;
137 return vrrp_lookup(ifp
, vrid
);
141 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/version
144 lib_interface_vrrp_vrrp_group_version_modify(struct nb_cb_modify_args
*args
)
146 if (args
->event
!= NB_EV_APPLY
)
149 struct vrrp_vrouter
*vr
;
152 vr
= nb_running_get_entry(args
->dnode
, NULL
, true);
153 vrrp_event(vr
->v4
, VRRP_EVENT_SHUTDOWN
);
154 vrrp_event(vr
->v6
, VRRP_EVENT_SHUTDOWN
);
155 version
= yang_dnode_get_enum(args
->dnode
, NULL
);
156 vr
->version
= version
;
158 vrrp_check_start(vr
);
164 * Helper function for address list OP_MODIFY callbacks.
166 static void vrrp_yang_add_del_virtual_address(const struct lyd_node
*dnode
,
169 struct vrrp_vrouter
*vr
;
172 vr
= nb_running_get_entry(dnode
, NULL
, true);
173 yang_dnode_get_ip(&ip
, dnode
, NULL
);
175 vrrp_add_ip(vr
, &ip
);
177 vrrp_del_ip(vr
, &ip
);
179 vrrp_check_start(vr
);
184 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/virtual-address
186 static int lib_interface_vrrp_vrrp_group_v4_virtual_address_create(
187 struct nb_cb_create_args
*args
)
189 if (args
->event
!= NB_EV_APPLY
)
192 vrrp_yang_add_del_virtual_address(args
->dnode
, true);
197 static int lib_interface_vrrp_vrrp_group_v4_virtual_address_destroy(
198 struct nb_cb_destroy_args
*args
)
200 if (args
->event
!= NB_EV_APPLY
)
203 vrrp_yang_add_del_virtual_address(args
->dnode
, false);
210 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/current-priority
212 static struct yang_data
*
213 lib_interface_vrrp_vrrp_group_v4_current_priority_get_elem(
214 struct nb_cb_get_elem_args
*args
)
216 const struct vrrp_vrouter
*vr
= args
->list_entry
;
218 return yang_data_new_uint8(args
->xpath
, vr
->v4
->priority
);
223 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/vrrp-interface
225 static struct yang_data
*
226 lib_interface_vrrp_vrrp_group_v4_vrrp_interface_get_elem(
227 struct nb_cb_get_elem_args
*args
)
229 const struct vrrp_vrouter
*vr
= args
->list_entry
;
231 struct yang_data
*val
= NULL
;
234 val
= yang_data_new_string(args
->xpath
, vr
->v4
->mvl_ifp
->name
);
241 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/source-address
243 static struct yang_data
*
244 lib_interface_vrrp_vrrp_group_v4_source_address_get_elem(
245 struct nb_cb_get_elem_args
*args
)
247 const struct vrrp_vrouter
*vr
= args
->list_entry
;
248 struct yang_data
*val
= NULL
;
250 if (!ipaddr_is_zero(&vr
->v4
->src
))
251 val
= yang_data_new_ip(args
->xpath
, &vr
->v4
->src
);
257 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/state
259 static struct yang_data
*lib_interface_vrrp_vrrp_group_v4_state_get_elem(
260 struct nb_cb_get_elem_args
*args
)
262 const struct vrrp_vrouter
*vr
= args
->list_entry
;
264 return yang_data_new_enum(args
->xpath
, vr
->v4
->fsm
.state
);
269 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/master-advertisement-interval
271 static struct yang_data
*
272 lib_interface_vrrp_vrrp_group_v4_master_advertisement_interval_get_elem(
273 struct nb_cb_get_elem_args
*args
)
275 const struct vrrp_vrouter
*vr
= args
->list_entry
;
277 return yang_data_new_uint16(args
->xpath
, vr
->v4
->master_adver_interval
);
281 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/skew-time
283 static struct yang_data
*lib_interface_vrrp_vrrp_group_v4_skew_time_get_elem(
284 struct nb_cb_get_elem_args
*args
)
286 const struct vrrp_vrouter
*vr
= args
->list_entry
;
288 return yang_data_new_uint16(args
->xpath
, vr
->v4
->skew_time
);
293 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/counter/state-transition
295 static struct yang_data
*
296 lib_interface_vrrp_vrrp_group_v4_counter_state_transition_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
.trans_cnt
);
306 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/counter/tx/advertisement
308 static struct yang_data
*
309 lib_interface_vrrp_vrrp_group_v4_counter_tx_advertisement_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
.adver_tx_cnt
);
319 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/counter/tx/gratuitous-arp
321 static struct yang_data
*
322 lib_interface_vrrp_vrrp_group_v4_counter_tx_gratuitous_arp_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
.garp_tx_cnt
);
332 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/counter/rx/advertisement
334 static struct yang_data
*
335 lib_interface_vrrp_vrrp_group_v4_counter_rx_advertisement_get_elem(
336 struct nb_cb_get_elem_args
*args
)
338 const struct vrrp_vrouter
*vr
= args
->list_entry
;
340 return yang_data_new_uint32(args
->xpath
, vr
->v4
->stats
.adver_rx_cnt
);
345 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/virtual-address
347 static int lib_interface_vrrp_vrrp_group_v6_virtual_address_create(
348 struct nb_cb_create_args
*args
)
350 if (args
->event
!= NB_EV_APPLY
)
353 vrrp_yang_add_del_virtual_address(args
->dnode
, true);
358 static int lib_interface_vrrp_vrrp_group_v6_virtual_address_destroy(
359 struct nb_cb_destroy_args
*args
)
361 if (args
->event
!= NB_EV_APPLY
)
364 vrrp_yang_add_del_virtual_address(args
->dnode
, false);
371 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/current-priority
373 static struct yang_data
*
374 lib_interface_vrrp_vrrp_group_v6_current_priority_get_elem(
375 struct nb_cb_get_elem_args
*args
)
377 const struct vrrp_vrouter
*vr
= args
->list_entry
;
379 return yang_data_new_uint8(args
->xpath
, vr
->v6
->priority
);
384 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/vrrp-interface
386 static struct yang_data
*
387 lib_interface_vrrp_vrrp_group_v6_vrrp_interface_get_elem(
388 struct nb_cb_get_elem_args
*args
)
390 const struct vrrp_vrouter
*vr
= args
->list_entry
;
391 struct yang_data
*val
= NULL
;
394 val
= yang_data_new_string(args
->xpath
, vr
->v6
->mvl_ifp
->name
);
401 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/source-address
403 static struct yang_data
*
404 lib_interface_vrrp_vrrp_group_v6_source_address_get_elem(
405 struct nb_cb_get_elem_args
*args
)
407 const struct vrrp_vrouter
*vr
= args
->list_entry
;
408 struct yang_data
*val
= NULL
;
410 if (!ipaddr_is_zero(&vr
->v6
->src
))
411 val
= yang_data_new_ip(args
->xpath
, &vr
->v6
->src
);
417 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/state
419 static struct yang_data
*lib_interface_vrrp_vrrp_group_v6_state_get_elem(
420 struct nb_cb_get_elem_args
*args
)
422 const struct vrrp_vrouter
*vr
= args
->list_entry
;
424 return yang_data_new_enum(args
->xpath
, vr
->v6
->fsm
.state
);
429 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/master-advertisement-interval
431 static struct yang_data
*
432 lib_interface_vrrp_vrrp_group_v6_master_advertisement_interval_get_elem(
433 struct nb_cb_get_elem_args
*args
)
435 const struct vrrp_vrouter
*vr
= args
->list_entry
;
437 return yang_data_new_uint16(args
->xpath
, vr
->v6
->master_adver_interval
);
441 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/skew-time
443 static struct yang_data
*lib_interface_vrrp_vrrp_group_v6_skew_time_get_elem(
444 struct nb_cb_get_elem_args
*args
)
446 const struct vrrp_vrouter
*vr
= args
->list_entry
;
448 return yang_data_new_uint16(args
->xpath
, vr
->v6
->skew_time
);
453 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/counter/state-transition
455 static struct yang_data
*
456 lib_interface_vrrp_vrrp_group_v6_counter_state_transition_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
.trans_cnt
);
466 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/counter/tx/advertisement
468 static struct yang_data
*
469 lib_interface_vrrp_vrrp_group_v6_counter_tx_advertisement_get_elem(
470 struct nb_cb_get_elem_args
*args
)
472 const struct vrrp_vrouter
*vr
= args
->list_entry
;
474 return yang_data_new_uint32(args
->xpath
, vr
->v6
->stats
.adver_tx_cnt
);
479 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/counter/tx/neighbor-advertisement
481 static struct yang_data
*
482 lib_interface_vrrp_vrrp_group_v6_counter_tx_neighbor_advertisement_get_elem(
483 struct nb_cb_get_elem_args
*args
)
485 /* TODO: implement me. */
491 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/counter/rx/advertisement
493 static struct yang_data
*
494 lib_interface_vrrp_vrrp_group_v6_counter_rx_advertisement_get_elem(
495 struct nb_cb_get_elem_args
*args
)
497 /* TODO: implement me. */
502 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/priority
505 lib_interface_vrrp_vrrp_group_priority_modify(struct nb_cb_modify_args
*args
)
507 if (args
->event
!= NB_EV_APPLY
)
510 struct vrrp_vrouter
*vr
;
513 vr
= nb_running_get_entry(args
->dnode
, NULL
, true);
514 priority
= yang_dnode_get_uint8(args
->dnode
, NULL
);
515 vrrp_set_priority(vr
, priority
);
521 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/preempt
524 lib_interface_vrrp_vrrp_group_preempt_modify(struct nb_cb_modify_args
*args
)
526 if (args
->event
!= NB_EV_APPLY
)
529 struct vrrp_vrouter
*vr
;
532 vr
= nb_running_get_entry(args
->dnode
, NULL
, true);
533 preempt
= yang_dnode_get_bool(args
->dnode
, NULL
);
534 vr
->preempt_mode
= preempt
;
540 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/accept-mode
543 lib_interface_vrrp_vrrp_group_accept_mode_modify(struct nb_cb_modify_args
*args
)
545 if (args
->event
!= NB_EV_APPLY
)
548 struct vrrp_vrouter
*vr
;
551 vr
= nb_running_get_entry(args
->dnode
, NULL
, true);
552 accept
= yang_dnode_get_bool(args
->dnode
, NULL
);
553 vr
->accept_mode
= accept
;
560 * /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/advertisement-interval
562 static int lib_interface_vrrp_vrrp_group_advertisement_interval_modify(
563 struct nb_cb_modify_args
*args
)
565 if (args
->event
!= NB_EV_APPLY
)
568 struct vrrp_vrouter
*vr
;
571 vr
= nb_running_get_entry(args
->dnode
, NULL
, true);
572 advert_int
= yang_dnode_get_uint16(args
->dnode
, NULL
);
573 vrrp_set_advertisement_interval(vr
, advert_int
);
579 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/shutdown
582 lib_interface_vrrp_vrrp_group_shutdown_modify(struct nb_cb_modify_args
*args
)
584 if (args
->event
!= NB_EV_APPLY
)
587 struct vrrp_vrouter
*vr
;
590 vr
= nb_running_get_entry(args
->dnode
, NULL
, true);
591 shutdown
= yang_dnode_get_bool(args
->dnode
, NULL
);
593 vr
->shutdown
= shutdown
;
596 vrrp_event(vr
->v4
, VRRP_EVENT_SHUTDOWN
);
597 vrrp_event(vr
->v6
, VRRP_EVENT_SHUTDOWN
);
599 vrrp_check_start(vr
);
606 * XPath: /frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/checksum-with-
609 static int lib_interface_vrrp_vrrp_group_checksum_with_ipv4_pseudoheader_modify(
610 struct nb_cb_modify_args
*args
)
612 if (args
->event
!= NB_EV_APPLY
)
615 struct vrrp_vrouter
*vr
;
616 bool checksum_with_ipv4_ph
;
618 vr
= nb_running_get_entry(args
->dnode
, NULL
, true);
619 checksum_with_ipv4_ph
= yang_dnode_get_bool(args
->dnode
, NULL
);
620 vr
->checksum_with_ipv4_pseudoheader
= checksum_with_ipv4_ph
;
625 /* clang-format off */
626 const struct frr_yang_module_info frr_vrrpd_info
= {
630 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group",
632 .create
= lib_interface_vrrp_vrrp_group_create
,
633 .destroy
= lib_interface_vrrp_vrrp_group_destroy
,
634 .get_next
= lib_interface_vrrp_vrrp_group_get_next
,
635 .get_keys
= lib_interface_vrrp_vrrp_group_get_keys
,
636 .lookup_entry
= lib_interface_vrrp_vrrp_group_lookup_entry
,
637 .cli_show
= cli_show_vrrp
,
641 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/version",
643 .modify
= lib_interface_vrrp_vrrp_group_version_modify
,
647 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/priority",
649 .modify
= lib_interface_vrrp_vrrp_group_priority_modify
,
650 .cli_show
= cli_show_priority
,
654 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/preempt",
656 .modify
= lib_interface_vrrp_vrrp_group_preempt_modify
,
657 .cli_show
= cli_show_preempt
,
661 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/accept-mode",
663 .modify
= lib_interface_vrrp_vrrp_group_accept_mode_modify
,
667 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/checksum-with-ipv4-pseudoheader",
669 .modify
= lib_interface_vrrp_vrrp_group_checksum_with_ipv4_pseudoheader_modify
,
670 .cli_show
= cli_show_checksum_with_ipv4_pseudoheader
,
674 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/advertisement-interval",
676 .modify
= lib_interface_vrrp_vrrp_group_advertisement_interval_modify
,
677 .cli_show
= cli_show_advertisement_interval
,
681 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/shutdown",
683 .modify
= lib_interface_vrrp_vrrp_group_shutdown_modify
,
684 .cli_show
= cli_show_shutdown
,
688 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/virtual-address",
690 .create
= lib_interface_vrrp_vrrp_group_v4_virtual_address_create
,
691 .destroy
= lib_interface_vrrp_vrrp_group_v4_virtual_address_destroy
,
692 .cli_show
= cli_show_ip
,
696 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/current-priority",
698 .get_elem
= lib_interface_vrrp_vrrp_group_v4_current_priority_get_elem
,
702 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/vrrp-interface",
704 .get_elem
= lib_interface_vrrp_vrrp_group_v4_vrrp_interface_get_elem
,
708 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/source-address",
710 .get_elem
= lib_interface_vrrp_vrrp_group_v4_source_address_get_elem
,
714 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/state",
716 .get_elem
= lib_interface_vrrp_vrrp_group_v4_state_get_elem
,
720 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/master-advertisement-interval",
722 .get_elem
= lib_interface_vrrp_vrrp_group_v4_master_advertisement_interval_get_elem
,
726 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/skew-time",
728 .get_elem
= lib_interface_vrrp_vrrp_group_v4_skew_time_get_elem
,
732 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/counter/state-transition",
734 .get_elem
= lib_interface_vrrp_vrrp_group_v4_counter_state_transition_get_elem
,
738 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/counter/tx/advertisement",
740 .get_elem
= lib_interface_vrrp_vrrp_group_v4_counter_tx_advertisement_get_elem
,
744 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/counter/tx/gratuitous-arp",
746 .get_elem
= lib_interface_vrrp_vrrp_group_v4_counter_tx_gratuitous_arp_get_elem
,
750 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v4/counter/rx/advertisement",
752 .get_elem
= lib_interface_vrrp_vrrp_group_v4_counter_rx_advertisement_get_elem
,
756 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/virtual-address",
758 .create
= lib_interface_vrrp_vrrp_group_v6_virtual_address_create
,
759 .destroy
= lib_interface_vrrp_vrrp_group_v6_virtual_address_destroy
,
760 .cli_show
= cli_show_ipv6
,
764 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/current-priority",
766 .get_elem
= lib_interface_vrrp_vrrp_group_v6_current_priority_get_elem
,
770 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/vrrp-interface",
772 .get_elem
= lib_interface_vrrp_vrrp_group_v6_vrrp_interface_get_elem
,
776 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/source-address",
778 .get_elem
= lib_interface_vrrp_vrrp_group_v6_source_address_get_elem
,
782 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/state",
784 .get_elem
= lib_interface_vrrp_vrrp_group_v6_state_get_elem
,
788 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/master-advertisement-interval",
790 .get_elem
= lib_interface_vrrp_vrrp_group_v6_master_advertisement_interval_get_elem
,
794 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/skew-time",
796 .get_elem
= lib_interface_vrrp_vrrp_group_v6_skew_time_get_elem
,
800 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/counter/state-transition",
802 .get_elem
= lib_interface_vrrp_vrrp_group_v6_counter_state_transition_get_elem
,
806 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/counter/tx/advertisement",
808 .get_elem
= lib_interface_vrrp_vrrp_group_v6_counter_tx_advertisement_get_elem
,
812 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/counter/tx/neighbor-advertisement",
814 .get_elem
= lib_interface_vrrp_vrrp_group_v6_counter_tx_neighbor_advertisement_get_elem
,
818 .xpath
= "/frr-interface:lib/interface/frr-vrrpd:vrrp/vrrp-group/v6/counter/rx/advertisement",
820 .get_elem
= lib_interface_vrrp_vrrp_group_v6_counter_rx_advertisement_get_elem
,