mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-26 02:13:04 +00:00

Having a fixed set of parameters for each northbound callback isn't a good idea since it makes it difficult to add new parameters whenever that becomes necessary, as several hundreds or thousands of existing callbacks need to be updated accordingly. To remediate this issue, this commit changes the signature of all northbound callbacks to have a single parameter: a pointer to a 'nb_cb_x_args' structure (where x is different for each type of callback). These structures encapsulate all real parameters (both input and output) the callbacks need to have access to. And adding a new parameter to a given callback is as simple as adding a new field to the corresponding 'nb_cb_x_args' structure, without needing to update any instance of that callback in any daemon. This commit includes a .cocci semantic patch that can be used to update old code to the new format automatically. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
613 lines
15 KiB
C
613 lines
15 KiB
C
/*
|
|
* Copyright (C) 2020 Cumulus Networks, Inc.
|
|
* Chirag Shah
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the Free
|
|
* Software Foundation; either version 2 of the License, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; see the file COPYING; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#include <zebra.h>
|
|
#include "northbound.h"
|
|
#include "libfrr.h"
|
|
#include "zebra_nb.h"
|
|
#include "zebra/interface.h"
|
|
|
|
/*
|
|
* XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/up-count
|
|
*/
|
|
struct yang_data *
|
|
lib_interface_zebra_state_up_count_get_elem(struct nb_cb_get_elem_args *args)
|
|
{
|
|
const struct interface *ifp = args->list_entry;
|
|
struct zebra_if *zebra_if;
|
|
|
|
zebra_if = ifp->info;
|
|
|
|
return yang_data_new_uint16(args->xpath, zebra_if->up_count);
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/down-count
|
|
*/
|
|
struct yang_data *
|
|
lib_interface_zebra_state_down_count_get_elem(struct nb_cb_get_elem_args *args)
|
|
{
|
|
const struct interface *ifp = args->list_entry;
|
|
struct zebra_if *zebra_if;
|
|
|
|
zebra_if = ifp->info;
|
|
|
|
return yang_data_new_uint16(args->xpath, zebra_if->down_count);
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/zif-type
|
|
*/
|
|
struct yang_data *
|
|
lib_interface_zebra_state_zif_type_get_elem(struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/ptm-status
|
|
*/
|
|
struct yang_data *
|
|
lib_interface_zebra_state_ptm_status_get_elem(struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/vlan-id
|
|
*/
|
|
struct yang_data *
|
|
lib_interface_zebra_state_vlan_id_get_elem(struct nb_cb_get_elem_args *args)
|
|
{
|
|
const struct interface *ifp = args->list_entry;
|
|
struct zebra_if *zebra_if;
|
|
struct zebra_l2info_vlan *vlan_info;
|
|
|
|
if (!IS_ZEBRA_IF_VLAN(ifp))
|
|
return NULL;
|
|
|
|
zebra_if = ifp->info;
|
|
vlan_info = &zebra_if->l2info.vl;
|
|
|
|
return yang_data_new_uint16(args->xpath, vlan_info->vid);
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/vni-id
|
|
*/
|
|
struct yang_data *
|
|
lib_interface_zebra_state_vni_id_get_elem(struct nb_cb_get_elem_args *args)
|
|
{
|
|
const struct interface *ifp = args->list_entry;
|
|
struct zebra_if *zebra_if;
|
|
struct zebra_l2info_vxlan *vxlan_info;
|
|
|
|
if (!IS_ZEBRA_IF_VXLAN(ifp))
|
|
return NULL;
|
|
|
|
zebra_if = ifp->info;
|
|
vxlan_info = &zebra_if->l2info.vxl;
|
|
|
|
return yang_data_new_uint32(args->xpath, vxlan_info->vni);
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/remote-vtep
|
|
*/
|
|
struct yang_data *
|
|
lib_interface_zebra_state_remote_vtep_get_elem(struct nb_cb_get_elem_args *args)
|
|
{
|
|
const struct interface *ifp = args->list_entry;
|
|
struct zebra_if *zebra_if;
|
|
struct zebra_l2info_vxlan *vxlan_info;
|
|
|
|
if (!IS_ZEBRA_IF_VXLAN(ifp))
|
|
return NULL;
|
|
|
|
zebra_if = ifp->info;
|
|
vxlan_info = &zebra_if->l2info.vxl;
|
|
|
|
return yang_data_new_ipv4(args->xpath, &vxlan_info->vtep_ip);
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-interface:lib/interface/frr-zebra:zebra/state/mcast-group
|
|
*/
|
|
struct yang_data *
|
|
lib_interface_zebra_state_mcast_group_get_elem(struct nb_cb_get_elem_args *args)
|
|
{
|
|
const struct interface *ifp = args->list_entry;
|
|
struct zebra_if *zebra_if;
|
|
struct zebra_l2info_vxlan *vxlan_info;
|
|
|
|
if (!IS_ZEBRA_IF_VXLAN(ifp))
|
|
return NULL;
|
|
|
|
zebra_if = ifp->info;
|
|
vxlan_info = &zebra_if->l2info.vxl;
|
|
|
|
return yang_data_new_ipv4(args->xpath, &vxlan_info->mcast_grp);
|
|
}
|
|
|
|
const void *lib_vrf_ribs_rib_get_next(struct nb_cb_get_next_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
int lib_vrf_ribs_rib_get_keys(struct nb_cb_get_keys_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NB_OK;
|
|
}
|
|
|
|
const void *lib_vrf_ribs_rib_lookup_entry(struct nb_cb_lookup_entry_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route
|
|
*/
|
|
const void *lib_vrf_ribs_rib_route_get_next(struct nb_cb_get_next_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
int lib_vrf_ribs_rib_route_get_keys(struct nb_cb_get_keys_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NB_OK;
|
|
}
|
|
|
|
const void *
|
|
lib_vrf_ribs_rib_route_lookup_entry(struct nb_cb_lookup_entry_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/prefix
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_prefix_get_elem(struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry
|
|
*/
|
|
const void *
|
|
lib_vrf_ribs_rib_route_route_entry_get_next(struct nb_cb_get_next_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
int lib_vrf_ribs_rib_route_route_entry_get_keys(
|
|
struct nb_cb_get_keys_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NB_OK;
|
|
}
|
|
|
|
const void *lib_vrf_ribs_rib_route_route_entry_lookup_entry(
|
|
struct nb_cb_lookup_entry_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/protocol
|
|
*/
|
|
struct yang_data *lib_vrf_ribs_rib_route_route_entry_protocol_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/instance
|
|
*/
|
|
struct yang_data *lib_vrf_ribs_rib_route_route_entry_instance_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/distance
|
|
*/
|
|
struct yang_data *lib_vrf_ribs_rib_route_route_entry_distance_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/metric
|
|
*/
|
|
struct yang_data *lib_vrf_ribs_rib_route_route_entry_metric_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/tag
|
|
*/
|
|
struct yang_data *lib_vrf_ribs_rib_route_route_entry_tag_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/selected
|
|
*/
|
|
struct yang_data *lib_vrf_ribs_rib_route_route_entry_selected_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/installed
|
|
*/
|
|
struct yang_data *lib_vrf_ribs_rib_route_route_entry_installed_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/failed
|
|
*/
|
|
struct yang_data *lib_vrf_ribs_rib_route_route_entry_failed_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/queued
|
|
*/
|
|
struct yang_data *lib_vrf_ribs_rib_route_route_entry_queued_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/internal-flags
|
|
*/
|
|
struct yang_data *lib_vrf_ribs_rib_route_route_entry_internal_flags_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/internal-status
|
|
*/
|
|
struct yang_data *lib_vrf_ribs_rib_route_route_entry_internal_status_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/uptime
|
|
*/
|
|
struct yang_data *lib_vrf_ribs_rib_route_route_entry_uptime_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath: /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group
|
|
*/
|
|
const void *lib_vrf_ribs_rib_route_route_entry_nexthop_group_get_next(
|
|
struct nb_cb_get_next_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
int lib_vrf_ribs_rib_route_route_entry_nexthop_group_get_keys(
|
|
struct nb_cb_get_keys_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NB_OK;
|
|
}
|
|
|
|
const void *lib_vrf_ribs_rib_route_route_entry_nexthop_group_lookup_entry(
|
|
struct nb_cb_lookup_entry_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/name
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_name_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop
|
|
*/
|
|
const void *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_get_next(
|
|
struct nb_cb_get_next_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
int lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_get_keys(
|
|
struct nb_cb_get_keys_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NB_OK;
|
|
}
|
|
|
|
const void *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_lookup_entry(
|
|
struct nb_cb_lookup_entry_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/nh-type
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_nh_type_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/vrf
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_vrf_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/gateway
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_gateway_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/interface
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_interface_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/bh-type
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_bh_type_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/onlink
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_onlink_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/mpls-label-stack/entry
|
|
*/
|
|
const void *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_get_next(
|
|
struct nb_cb_get_next_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
int lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_get_keys(
|
|
struct nb_cb_get_keys_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NB_OK;
|
|
}
|
|
|
|
const void *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_lookup_entry(
|
|
struct nb_cb_lookup_entry_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/mpls-label-stack/entry/id
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_id_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/mpls-label-stack/entry/label
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_label_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/mpls-label-stack/entry/ttl
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_ttl_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/mpls-label-stack/entry/traffic-class
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_mpls_label_stack_entry_traffic_class_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/duplicate
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_duplicate_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/recursive
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_recursive_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/active
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_active_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/fib
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_fib_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|
|
|
|
/*
|
|
* XPath:
|
|
* /frr-vrf:lib/vrf/frr-zebra:ribs/rib/route/route-entry/nexthop-group/frr-nexthops/nexthop/weight
|
|
*/
|
|
struct yang_data *
|
|
lib_vrf_ribs_rib_route_route_entry_nexthop_group_frr_nexthops_nexthop_weight_get_elem(
|
|
struct nb_cb_get_elem_args *args)
|
|
{
|
|
/* TODO: implement me. */
|
|
return NULL;
|
|
}
|