-/*
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
*
* Copyright 2009-2016, LabN Consulting, L.L.C.
*
- *
- * 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; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
*/
#ifndef _QUAGGA_BGP_RFAPI_H
#define _QUAGGA_BGP_RFAPI_H
-#if ENABLE_BGP_VNC
+#ifdef ENABLE_BGP_VNC
#include <stdint.h>
#include <netinet/in.h>
#include "bgpd/bgp_encap_types.h"
/* probably ought to have a field-specific define in config.h */
-# ifndef s6_addr32 /* for solaris/bsd */
-# ifdef SOLARIS_IPV6
-# define s6_addr32 _S6_un._S6_u32
-# else
+#ifndef s6_addr32 /* for solaris/bsd */
# define s6_addr32 __u6_addr.__u6_addr32
-# endif
-# endif
+#endif
#define RFAPI_V4_ADDR 0x04
#define RFAPI_V6_ADDR 0x06
#define RFAPI_SHOW_STR "VNC information\n"
-struct rfapi_ip_addr
-{
- uint8_t addr_family; /* AF_INET | AF_INET6 */
- union
- {
- struct in_addr v4; /* in network order */
- struct in6_addr v6; /* in network order */
- } addr;
+struct rfapi_ip_addr {
+ uint8_t addr_family; /* AF_INET | AF_INET6 */
+ union {
+ struct in_addr v4; /* in network order */
+ struct in6_addr v6; /* in network order */
+ } addr;
};
-struct rfapi_ip_prefix
-{
- uint8_t length;
- uint8_t cost; /* bgp local pref = 255 - cost */
- struct rfapi_ip_addr prefix;
+struct rfapi_ip_prefix {
+ uint8_t length;
+ uint8_t cost; /* bgp local pref = 255 - cost */
+ struct rfapi_ip_addr prefix;
};
-struct rfapi_nexthop
-{
- struct prefix addr;
- uint8_t cost;
+struct rfapi_nexthop {
+ struct prefix addr;
+ uint8_t cost;
};
-struct rfapi_next_hop_entry
-{
- struct rfapi_next_hop_entry *next;
- struct rfapi_ip_prefix prefix;
- uint32_t lifetime;
- struct rfapi_ip_addr un_address;
- struct rfapi_ip_addr vn_address;
- struct rfapi_vn_option *vn_options;
- struct rfapi_un_option *un_options;
+struct rfapi_next_hop_entry {
+ struct rfapi_next_hop_entry *next;
+ struct rfapi_ip_prefix prefix;
+ uint32_t lifetime;
+ struct rfapi_ip_addr un_address;
+ struct rfapi_ip_addr vn_address;
+ struct rfapi_vn_option *vn_options;
+ struct rfapi_un_option *un_options;
};
#define RFAPI_REMOVE_RESPONSE_LIFETIME 0
#define RFAPI_INFINITE_LIFETIME 0xFFFFFFFF
-struct rfapi_l2address_option
-{
- struct ethaddr macaddr; /* use 0 to assign label to IP prefix */
- uint32_t label; /* 20bit label in low bits, no TC, S, or TTL */
- uint32_t logical_net_id; /* ~= EVPN Ethernet Segment Id,
- must not be zero for mac regis. */
- uint8_t local_nve_id;
- uint16_t tag_id; /* EVPN Ethernet Tag ID, 0 = none */
+struct rfapi_l2address_option {
+ struct ethaddr macaddr; /* use 0 to assign label to IP prefix */
+ uint32_t label; /* 20bit label in low bits, no TC, S, or TTL */
+ uint32_t logical_net_id; /* ~= EVPN Ethernet Segment Id,
+ must not be zero for mac regis. */
+ uint8_t local_nve_id;
+ uint16_t tag_id; /* EVPN Ethernet Tag ID, 0 = none */
};
-typedef enum
-{
- RFAPI_UN_OPTION_TYPE_PROVISIONAL, /* internal use only */
- RFAPI_UN_OPTION_TYPE_TUNNELTYPE,
+typedef enum {
+ RFAPI_UN_OPTION_TYPE_PROVISIONAL, /* internal use only */
+ RFAPI_UN_OPTION_TYPE_TUNNELTYPE,
} rfapi_un_option_type;
-struct rfapi_tunneltype_option
-{
- bgp_encap_types type;
- union
- {
- struct bgp_encap_type_reserved reserved;
- struct bgp_encap_type_l2tpv3_over_ip l2tpv3_ip;
- struct bgp_encap_type_gre gre;
- struct bgp_encap_type_transmit_tunnel_endpoint transmit_tunnel_endpoint;
- struct bgp_encap_type_ipsec_in_tunnel_mode ipsec_tunnel;
- struct bgp_encap_type_ip_in_ip_tunnel_with_ipsec_transport_mode ip_ipsec;
- struct bgp_encap_type_mpls_in_ip_tunnel_with_ipsec_transport_mode mpls_ipsec;
- struct bgp_encap_type_ip_in_ip ip_ip;
- struct bgp_encap_type_vxlan vxlan;
- struct bgp_encap_type_nvgre nvgre;
- struct bgp_encap_type_mpls mpls;
- struct bgp_encap_type_mpls_in_gre mpls_gre;
- struct bgp_encap_type_vxlan_gpe vxlan_gpe;
- struct bgp_encap_type_mpls_in_udp mpls_udp;
- struct bgp_encap_type_pbb pbb;
- } bgpinfo;
+struct rfapi_tunneltype_option {
+ bgp_encap_types type;
+ union {
+ struct bgp_encap_type_reserved reserved;
+ struct bgp_encap_type_l2tpv3_over_ip l2tpv3_ip;
+ struct bgp_encap_type_gre gre;
+ struct bgp_encap_type_transmit_tunnel_endpoint
+ transmit_tunnel_endpoint;
+ struct bgp_encap_type_ipsec_in_tunnel_mode ipsec_tunnel;
+ struct bgp_encap_type_ip_in_ip_tunnel_with_ipsec_transport_mode
+ ip_ipsec;
+ struct bgp_encap_type_mpls_in_ip_tunnel_with_ipsec_transport_mode
+ mpls_ipsec;
+ struct bgp_encap_type_ip_in_ip ip_ip;
+ struct bgp_encap_type_vxlan vxlan;
+ struct bgp_encap_type_nvgre nvgre;
+ struct bgp_encap_type_mpls mpls;
+ struct bgp_encap_type_mpls_in_gre mpls_gre;
+ struct bgp_encap_type_vxlan_gpe vxlan_gpe;
+ struct bgp_encap_type_mpls_in_udp mpls_udp;
+ struct bgp_encap_type_pbb pbb;
+ } bgpinfo;
};
-struct rfapi_un_option
-{
- struct rfapi_un_option *next;
- rfapi_un_option_type type;
- union
- {
- struct rfapi_tunneltype_option tunnel;
- } v;
+struct rfapi_un_option {
+ struct rfapi_un_option *next;
+ rfapi_un_option_type type;
+ union {
+ struct rfapi_tunneltype_option tunnel;
+ } v;
};
-typedef enum
-{
- RFAPI_VN_OPTION_TYPE_L2ADDR = 3, /* Layer 2 address, 3 for legacy compatibility */
- RFAPI_VN_OPTION_TYPE_LOCAL_NEXTHOP, /* for static routes */
- RFAPI_VN_OPTION_TYPE_INTERNAL_RD, /* internal use only */
+typedef enum {
+ RFAPI_VN_OPTION_TYPE_L2ADDR =
+ 3, /* Layer 2 address, 3 for legacy compatibility */
+ RFAPI_VN_OPTION_TYPE_LOCAL_NEXTHOP, /* for static routes */
+ RFAPI_VN_OPTION_TYPE_INTERNAL_RD, /* internal use only */
} rfapi_vn_option_type;
-struct rfapi_vn_option
-{
- struct rfapi_vn_option *next;
+struct rfapi_vn_option {
+ struct rfapi_vn_option *next;
- rfapi_vn_option_type type;
+ rfapi_vn_option_type type;
- union
- {
- struct rfapi_l2address_option l2addr;
+ union {
+ struct rfapi_l2address_option l2addr;
- /*
- * If this option is present, the next hop is local to the
- * client NVE (i.e., not via a tunnel).
- */
- struct rfapi_nexthop local_nexthop;
+ /*
+ * If this option is present, the next hop is local to the
+ * client NVE (i.e., not via a tunnel).
+ */
+ struct rfapi_nexthop local_nexthop;
- /*
- * For rfapi internal use only
- */
- struct prefix_rd internal_rd;
- } v;
+ /*
+ * For rfapi internal use only
+ */
+ struct prefix_rd internal_rd;
+ } v;
};
-struct rfapi_l2address_option_match
-{
- struct rfapi_l2address_option o;
- uint32_t flags;
+struct rfapi_l2address_option_match {
+ struct rfapi_l2address_option o;
+ uint32_t flags;
#define RFAPI_L2O_MACADDR 0x00000001
#define RFAPI_L2O_LABEL 0x00000002
/*------------------------------------------
* rfapi_response_cb_t (callback typedef)
*
- * Callbacks of this type are used to provide asynchronous
+ * Callbacks of this type are used to provide asynchronous
* route updates from RFAPI to the RFP client.
*
* response_cb
* has been added or deleted. Deleted routes are indicated
* with lifetime==RFAPI_REMOVE_RESPONSE_LIFETIME.
*
- * input:
+ * input:
* next_hops a list of possible next hops.
* This is a linked list allocated within the
* rfapi. The response_cb callback function is responsible
* rfapi_open()
*
*------------------------------------------*/
-typedef void (rfapi_response_cb_t) (struct rfapi_next_hop_entry * next_hops,
- void *userdata);
+typedef void(rfapi_response_cb_t)(struct rfapi_next_hop_entry *next_hops,
+ void *userdata);
/*------------------------------------------
* rfapi_nve_close_cb_t (callback typedef)
*
- * Callbacks of this type are used to provide asynchronous
+ * Callbacks of this type are used to provide asynchronous
* notification that an rfapi_handle was invalidated
*
- * input:
+ * input:
* pHandle Firmerly valid rfapi_handle returned to
* client via rfapi_open().
*
* ESTALE handle invalidated by configuration change
*
*------------------------------------------*/
-typedef void (rfapi_nve_close_cb_t) (rfapi_handle pHandle, int reason);
+typedef void(rfapi_nve_close_cb_t)(rfapi_handle pHandle, int reason);
/*------------------------------------------
* rfp_cfg_write_cb_t (callback typedef)
*
* This callback is used to generate output for any config parameters
- * that may supported by RFP via RFP defined vty commands at the bgp
+ * that may supported by RFP via RFP defined vty commands at the bgp
* level. See loglevel as an example.
*
- * input:
+ * input:
* vty -- quagga vty context
* rfp_start_val -- value returned by rfp_start
*
* output:
* to vty, rfp related configuration
*
- * return value:
+ * return value:
* lines written
--------------------------------------------*/
-typedef int (rfp_cfg_write_cb_t) (struct vty * vty, void *rfp_start_val);
+typedef int(rfp_cfg_write_cb_t)(struct vty *vty, void *rfp_start_val);
/*------------------------------------------
* rfp_cfg_group_write_cb_t (callback typedef)
*
* This callback is used to generate output for any config parameters
- * that may supported by RFP via RFP defined vty commands at the
+ * that may supported by RFP via RFP defined vty commands at the
* L2 or NVE level. See loglevel as an example.
*
- * input:
+ * input:
* vty quagga vty context
* rfp_start_val value returned by rfp_start
* type group type
* name group name
- * rfp_cfg_group Pointer to configuration structure
+ * rfp_cfg_group Pointer to configuration structure
*
* output:
* to vty, rfp related configuration
*
- * return value:
+ * return value:
* lines written
--------------------------------------------*/
-typedef enum
-{
- RFAPI_RFP_CFG_GROUP_DEFAULT,
- RFAPI_RFP_CFG_GROUP_NVE,
- RFAPI_RFP_CFG_GROUP_L2
+typedef enum {
+ RFAPI_RFP_CFG_GROUP_DEFAULT,
+ RFAPI_RFP_CFG_GROUP_NVE,
+ RFAPI_RFP_CFG_GROUP_L2
} rfapi_rfp_cfg_group_type;
-typedef int (rfp_cfg_group_write_cb_t) (struct vty * vty,
- void *rfp_start_val,
- rfapi_rfp_cfg_group_type type,
- const char *name,
- void *rfp_cfg_group);
+typedef int(rfp_cfg_group_write_cb_t)(struct vty *vty, void *rfp_start_val,
+ rfapi_rfp_cfg_group_type type,
+ const char *name, void *rfp_cfg_group);
/***********************************************************************
* Configuration related defines and structures
***********************************************************************/
-struct rfapi_rfp_cb_methods
-{
- rfp_cfg_write_cb_t *cfg_cb; /* show top level config */
- rfp_cfg_group_write_cb_t *cfg_group_cb; /* show group level config */
- rfapi_response_cb_t *response_cb; /* unsolicited responses */
- rfapi_response_cb_t *local_cb; /* local route add/delete */
- rfapi_nve_close_cb_t *close_cb; /* handle closed */
-
+struct rfapi_rfp_cb_methods {
+ rfp_cfg_write_cb_t *cfg_cb; /* show top level config */
+ rfp_cfg_group_write_cb_t *cfg_group_cb; /* show group level config */
+ rfapi_response_cb_t *response_cb; /* unsolicited responses */
+ rfapi_response_cb_t *local_cb; /* local route add/delete */
+ rfapi_nve_close_cb_t *close_cb; /* handle closed */
};
/*
*/
#define RFAPI_LIFETIME_INFINITE_WITHDRAW_DELAY (60*120)
-/*
+/*
* the factor that should be applied to a prefix's <lifetime> value
* before using it to expire a withdrawn prefix, expressed as a percent.
* Thus, a value of 100 means to use the exact value of <lifetime>,
#define RFAPI_RFP_CFG_DEFAULT_HOLDDOWN_FACTOR 150
/*
- * This is used by rfapi to determine if RFP is using/supports
+ * This is used by rfapi to determine if RFP is using/supports
* a partial (i.e., cache) or full table download approach for
* mapping information. When full table download approach is
* used all information is passed to RFP after an initial
- * rfapi_query. When partial table download is used, only
- * information matching a query is passed.
+ * rfapi_query. When partial table download is used, only
+ * information matching a query is passed.
*/
-typedef enum
-{
- RFAPI_RFP_DOWNLOAD_PARTIAL = 0,
- RFAPI_RFP_DOWNLOAD_FULL
+typedef enum {
+ RFAPI_RFP_DOWNLOAD_PARTIAL = 0,
+ RFAPI_RFP_DOWNLOAD_FULL
} rfapi_rfp_download_type;
#define RFAPI_RFP_CFG_DEFAULT_FTD_ADVERTISEMENT_INTERVAL 1
-struct rfapi_rfp_cfg
-{
- /* partial or full table download */
- rfapi_rfp_download_type download_type; /* default=partial */
- /*
- * When full-table-download is enabled, this is the minimum
- * number of seconds between times a non-queried prefix will
- * be updated to a particular NVE.
- * default: RFAPI_RFP_CFG_DEFAULT_FTD_ADVERTISEMENT_INTERVAL
- */
- uint32_t ftd_advertisement_interval;
- /*
- * percentage of registration lifetime to continue to use information
- * post soft-state refresh timeout
- default: RFAPI_RFP_CFG_DEFAULT_HOLDDOWN_FACTOR
- */
- uint32_t holddown_factor;
- /* Control generation of updated RFP responses */
- uint8_t use_updated_response; /* default=0/no */
- /* when use_updated_response, also generate remove responses */
- uint8_t use_removes; /* default=0/no */
+struct rfapi_rfp_cfg {
+ /* partial or full table download */
+ rfapi_rfp_download_type download_type; /* default=partial */
+ /*
+ * When full-table-download is enabled, this is the minimum
+ * number of seconds between times a non-queried prefix will
+ * be updated to a particular NVE.
+ * default: RFAPI_RFP_CFG_DEFAULT_FTD_ADVERTISEMENT_INTERVAL
+ */
+ uint32_t ftd_advertisement_interval;
+ /*
+ * percentage of registration lifetime to continue to use information
+ * post soft-state refresh timeout
+ default: RFAPI_RFP_CFG_DEFAULT_HOLDDOWN_FACTOR
+ */
+ uint32_t holddown_factor;
+ /* Control generation of updated RFP responses */
+ uint8_t use_updated_response; /* default=0/no */
+ /* when use_updated_response, also generate remove responses */
+ uint8_t use_removes; /* default=0/no */
};
/***********************************************************************
- * Process related functions -- MUST be provided by the RFAPI user <<===
+ * Process related functions -- MUST be provided by the RFAPI user <<===
***********************************************************************/
/*------------------------------------------
*
* This function will start the RFP code
*
- * input:
+ * input:
* master quagga thread_master to tie into bgpd threads
- *
+ *
* output:
- * cfgp Pointer to rfapi_rfp_cfg (null = use defaults),
+ * cfgp Pointer to rfapi_rfp_cfg (null = use defaults),
* copied by caller, updated via rfp_set_configuration
* cbmp Pointer to rfapi_rfp_cb_methods, may be null
* copied by caller, updated via rfapi_rfp_set_cb_methods
- * return value:
+ * return value:
* rfp_start_val rfp returned value passed on rfp_stop and other rfapi calls
--------------------------------------------*/
-extern void *
-rfp_start (
- struct thread_master *master,
- struct rfapi_rfp_cfg **cfgp,
- struct rfapi_rfp_cb_methods **cbmp);
+extern void *rfp_start(struct thread_master *master,
+ struct rfapi_rfp_cfg **cfgp,
+ struct rfapi_rfp_cb_methods **cbmp);
/*------------------------------------------
* rfp_stop
*
* This function is called on shutdown to trigger RFP cleanup
*
- * input:
+ * input:
* rfp_start_val
*
* output:
* none
*
- * return value:
+ * return value:
--------------------------------------------*/
-extern void
-rfp_stop (void *rfp_start_val);
+extern void rfp_stop(void *rfp_start_val);
/***********************************************************************
* RFP processing behavior configuration
/*------------------------------------------
* rfapi_rfp_set_configuration
*
- * This is used to change rfapi's processing behavior based on
- * RFP requirements.
+ * This is used to change rfapi's processing behavior based on
+ * RFP requirements.
*
- * input:
+ * input:
* rfp_start_val value returned by rfp_start
* rfapi_rfp_cfg Pointer to configuration structure
*
* output:
* none
*
- * return value:
+ * return value:
* 0 Success
* ENXIO Unabled to locate configured BGP/VNC
--------------------------------------------*/
-extern int
-rfapi_rfp_set_configuration (
- void *rfp_start_val,
- struct rfapi_rfp_cfg *rfp_cfg);
+extern int rfapi_rfp_set_configuration(void *rfp_start_val,
+ struct rfapi_rfp_cfg *rfp_cfg);
/*------------------------------------------
* rfapi_rfp_set_cb_methods
*
- * Change registered callback functions for asynchronous notifications
+ * Change registered callback functions for asynchronous notifications
* from RFAPI to the RFP client.
*
- * input:
+ * input:
* rfp_start_val value by rfp_start
* methods Pointer to struct rfapi_rfp_cb_methods containing
* pointers to callback methods as described above
*
- * return value:
+ * return value:
* 0 Success
* ENXIO BGP or VNC not configured
*------------------------------------------*/
-extern int
-rfapi_rfp_set_cb_methods (
- void *rfp_start_val,
- struct rfapi_rfp_cb_methods *methods);
+extern int rfapi_rfp_set_cb_methods(void *rfp_start_val,
+ struct rfapi_rfp_cb_methods *methods);
/***********************************************************************
* RFP group specific configuration
* rfapi_rfp_init_group_config_ptr_vty
*
* This is used to init or return a previously init'ed group specific
- * configuration pointer. Group is identified by vty context.
+ * configuration pointer. Group is identified by vty context.
* NOTE: size is ignored when a previously init'ed value is returned.
* RFAPI frees rfp_cfg_group when group is deleted during reconfig,
* bgp restart or shutdown.
*
- * input:
+ * input:
* rfp_start_val value returned by rfp_start
* type group type
* vty quagga vty context
* output:
* none
*
- * return value:
+ * return value:
* rfp_cfg_group NULL or Pointer to configuration structure
--------------------------------------------*/
-extern void *
-rfapi_rfp_init_group_config_ptr_vty (
- void *rfp_start_val,
- rfapi_rfp_cfg_group_type type,
- struct vty *vty,
- uint32_t size);
+extern void *rfapi_rfp_init_group_config_ptr_vty(void *rfp_start_val,
+ rfapi_rfp_cfg_group_type type,
+ struct vty *vty,
+ uint32_t size);
/*------------------------------------------
* rfapi_rfp_get_group_config_ptr_vty
*
* This is used to get group specific configuration pointer.
- * Group is identified by type and vty context.
+ * Group is identified by type and vty context.
* RFAPI frees rfp_cfg_group when group is deleted during reconfig,
* bgp restart or shutdown.
*
- * input:
+ * input:
* rfp_start_val value returned by rfp_start
* type group type
* vty quagga vty context
* none
*
* return value:
- * rfp_cfg_group Pointer to configuration structure
+ * rfp_cfg_group Pointer to configuration structure
--------------------------------------------*/
-extern void *
-rfapi_rfp_get_group_config_ptr_vty (
- void *rfp_start_val,
- rfapi_rfp_cfg_group_type type,
- struct vty *vty);
+extern void *rfapi_rfp_get_group_config_ptr_vty(void *rfp_start_val,
+ rfapi_rfp_cfg_group_type type,
+ struct vty *vty);
/*------------------------------------------
* rfp_group_config_search_cb_t (callback typedef)
*
- * This callback is used to called from within a
+ * This callback is used to called from within a
* rfapi_rfp_get_group_config_ptr to check if the rfp_cfg_group
* matches the search criteria
*
- * input:
+ * input:
* criteria RFAPI caller provided serach criteria
* rfp_cfg_group Pointer to configuration structure | NULL
*
* output:
*
- * return value:
+ * return value:
* 0 Match/Success
* ENOENT No matching
--------------------------------------------*/
-typedef int (rfp_group_config_search_cb_t) (void *criteria,
- void *rfp_cfg_group);
+typedef int(rfp_group_config_search_cb_t)(void *criteria, void *rfp_cfg_group);
/*------------------------------------------
* rfapi_rfp_get_group_config_ptr_name
*
* This is used to get group specific configuration pointer.
- * Group is identified by type and name context.
+ * Group is identified by type and name context.
* RFAPI frees rfp_cfg_group when group is deleted during reconfig,
* bgp restart or shutdown.
*
- * input:
+ * input:
* rfp_start_val value returned by rfp_start
* type group type
* name group name
* none
*
* return value:
- * rfp_cfg_group Pointer to configuration structure
+ * rfp_cfg_group Pointer to configuration structure
--------------------------------------------*/
-extern void *
-rfapi_rfp_get_group_config_ptr_name (
- void *rfp_start_val,
- rfapi_rfp_cfg_group_type type,
- const char *name,
- void *criteria,
- rfp_group_config_search_cb_t *search_cb);
+extern void *rfapi_rfp_get_group_config_ptr_name(
+ void *rfp_start_val, rfapi_rfp_cfg_group_type type, const char *name,
+ void *criteria, rfp_group_config_search_cb_t *search_cb);
/*------------------------------------------
* rfapi_rfp_get_l2_group_config_ptr_lni
* This is used to get group specific configuration pointer.
* Group is identified by type and logical network identifier.
* RFAPI frees rfp_cfg_group when group is deleted during reconfig,
- * bgp restart or shutdown.
+ * bgp restart or shutdown.
*
- * input:
+ * input:
* rfp_start_val value returned by rfp_start
* logical_net_id group logical network identifier
* criteria RFAPI caller provided serach criteria
* none
*
* return value:
- * rfp_cfg_group Pointer to configuration structure
+ * rfp_cfg_group Pointer to configuration structure
--------------------------------------------*/
extern void *
-rfapi_rfp_get_l2_group_config_ptr_lni (
- void *rfp_start_val,
- uint32_t logical_net_id,
- void *criteria,
- rfp_group_config_search_cb_t *search_cb);
+rfapi_rfp_get_l2_group_config_ptr_lni(void *rfp_start_val,
+ uint32_t logical_net_id, void *criteria,
+ rfp_group_config_search_cb_t *search_cb);
/***********************************************************************
* NVE Sessions
* This function initializes a NVE record and associates it with
* the specified VN and underlay network addresses
*
- * input:
+ * input:
* rfp_start_val value returned by rfp_start
* vn NVE virtual network address
*
*
* output:
* response_lifetime The length of time that responses sent to this
- * NVE are valid.
+ * NVE are valid.
*
* pHandle pointer to location to store rfapi handle. The
* handle must be passed on subsequent rfapi_ calls.
*
*
- * return value:
+ * return value:
* 0 Success
* EEXIST NVE with this {vn,un} already open
* ENOENT No matching nve group config
* but underlay network address is not IPv4
* EDEADLK Called from within a callback procedure
*------------------------------------------*/
-extern int
-rfapi_open (
- void *rfp_start_val,
- struct rfapi_ip_addr *vn,
- struct rfapi_ip_addr *un,
- struct rfapi_un_option *default_options,
- uint32_t *response_lifetime,
- void *userdata,
- rfapi_handle *pHandle);
+extern int rfapi_open(void *rfp_start_val, struct rfapi_ip_addr *vn,
+ struct rfapi_ip_addr *un,
+ struct rfapi_un_option *default_options,
+ uint32_t *response_lifetime, void *userdata,
+ rfapi_handle *pHandle);
/*------------------------------------------
* from within a rfapi callback procedure is permitted (the close
* will be completed asynchronously after the callback finishes).
*
- * input:
+ * input:
* rfd: rfapi descriptor returned by rfapi_open
*
* output:
* EBADF invalid handle
* ENXIO BGP or VNC not configured
*------------------------------------------*/
-extern int
-rfapi_close (rfapi_handle rfd);
+extern int rfapi_close(rfapi_handle rfd);
/*------------------------------------------
* rfapi_check
*
* Test rfapi descriptor
*
- * input:
+ * input:
* rfd: rfapi descriptor returned by rfapi_open
*
* output:
* ENXIO BGP or VNC not configured
* EAFNOSUPPORT Internal addressing error
*------------------------------------------*/
-extern int
-rfapi_check (rfapi_handle rfd);
+extern int rfapi_check(rfapi_handle rfd);
/***********************************************************************
* NVE Routes
/*------------------------------------------
* rfapi_query
*
- * This function queries the RIB for a
- * particular route. Note that this call may result in subsequent
+ * This function queries the RIB for a
+ * particular route. Note that this call may result in subsequent
* callbacks to response_cb. Response callbacks can be cancelled
* by calling rfapi_query_done. A duplicate query using the same target
* will result in only one callback per change in next_hops. (i.e.,
* cancel/replace the prior query results.)
*
- * input:
+ * input:
* rfd: rfapi descriptor returned by rfapi_open
* target: the destination address
* l2o ptr to L2 Options struct, NULL if not present in query
* ESTALE descriptor is no longer usable; should be closed
* EDEADLK Called from within a callback procedure
--------------------------------------------*/
-extern int
-rfapi_query (
- rfapi_handle rfd,
- struct rfapi_ip_addr *target,
- struct rfapi_l2address_option *l2o,
- struct rfapi_next_hop_entry **ppNextHopEntry);
+extern int rfapi_query(rfapi_handle rfd, struct rfapi_ip_addr *target,
+ struct rfapi_l2address_option *l2o,
+ struct rfapi_next_hop_entry **ppNextHopEntry);
/*------------------------------------------
* rfapi_query_done
*
- * Notifies the rfapi that the user is no longer interested
- * in the specified target.
+ * Notifies the rfapi that the user is no longer interested
+ * in the specified target.
*
- * input:
+ * input:
* rfd: rfapi descriptor returned by rfapi_open
* target: the destination address
*
* ESTALE descriptor is no longer usable; should be closed
* EDEADLK Called from within a callback procedure
--------------------------------------------*/
-extern int
-rfapi_query_done (rfapi_handle rfd, struct rfapi_ip_addr *target);
+extern int rfapi_query_done(rfapi_handle rfd, struct rfapi_ip_addr *target);
/*------------------------------------------
* rfapi_query_done_all
*
- * Notifies the rfapi that the user is no longer interested
- * in any target.
+ * Notifies the rfapi that the user is no longer interested
+ * in any target.
*
- * input:
+ * input:
* rfd: rfapi descriptor returned by rfapi_open
*
* output:
* ESTALE descriptor is no longer usable; should be closed
* EDEADLK Called from within a callback procedure
--------------------------------------------*/
-extern int
-rfapi_query_done_all (rfapi_handle rfd, int *count);
+extern int rfapi_query_done_all(rfapi_handle rfd, int *count);
/*------------------------------------------
* rfapi_register
* Requests that reachability to the indicated prefix via this NVE
* be advertised by BGP. If <unregister> is non-zero, then the previously-
* advertised prefix should be withdrawn.
- *
- * (This function should NOT be called if the rfapi_open() function
+ *
+ * (This function should NOT be called if the rfapi_open() function
* returns NULL)
*
- * input:
+ * input:
* rfd: rfapi descriptor returned by rfapi_open
* prefix: A prefix to be registered or deregistered
* lifetime Prefix lifetime in seconds, host byte order
* EDEADLK Called from within a callback procedure
--------------------------------------------*/
-typedef enum
-{
- RFAPI_REGISTER_ADD,
- RFAPI_REGISTER_WITHDRAW,
- RFAPI_REGISTER_KILL
+typedef enum {
+ RFAPI_REGISTER_ADD,
+ RFAPI_REGISTER_WITHDRAW,
+ RFAPI_REGISTER_KILL
} rfapi_register_action;
-extern int
-rfapi_register (
- rfapi_handle rfd,
- struct rfapi_ip_prefix *prefix,
- uint32_t lifetime,
- struct rfapi_un_option *options_un,
- struct rfapi_vn_option *options_vn,
- rfapi_register_action action);
+extern int rfapi_register(rfapi_handle rfd, struct rfapi_ip_prefix *prefix,
+ uint32_t lifetime, struct rfapi_un_option *options_un,
+ struct rfapi_vn_option *options_vn,
+ rfapi_register_action action);
/***********************************************************************
* Helper / Utility functions
*
* Get the virtual network address used by an NVE based on it's RFD
*
- * input:
+ * input:
* rfd: rfapi descriptor returned by rfapi_open or rfapi_create_generic
*
* output:
*
- * return value:
+ * return value:
* vn NVE virtual network address
*------------------------------------------*/
-extern struct rfapi_ip_addr *
-rfapi_get_vn_addr (void *);
+extern struct rfapi_ip_addr *rfapi_get_vn_addr(void *);
/*------------------------------------------
* rfapi_get_un_addr
*
* Get the underlay network address used by an NVE based on it's RFD
*
- * input:
+ * input:
* rfd: rfapi descriptor returned by rfapi_open or rfapi_create_generic
*
* output:
*
- * return value:
+ * return value:
* un NVE underlay network address
*------------------------------------------*/
-extern struct rfapi_ip_addr *
-rfapi_get_un_addr (void *);
+extern struct rfapi_ip_addr *rfapi_get_un_addr(void *);
/*------------------------------------------
* rfapi_error_str
*
* const char * String
*------------------------------------------*/
-extern const char *
-rfapi_error_str (int code);
+extern const char *rfapi_error_str(int code);
/*------------------------------------------
* rfapi_get_rfp_start_val
* void * bgp structure
*
* returns:
- * void *
+ * void *
*------------------------------------------*/
-extern void *
-rfapi_get_rfp_start_val (void *bgpv);
+extern void *rfapi_get_rfp_start_val(void *bgpv);
/*------------------------------------------
* rfapi_compare_rfds
*
* Compare two generic rfapi descriptors.
*
- * input:
+ * input:
* rfd1: rfapi descriptor returned by rfapi_open or rfapi_create_generic
* rfd2: rfapi descriptor returned by rfapi_open or rfapi_create_generic
*
* 0 Mismatch
* 1 Match
*------------------------------------------*/
-extern int
-rfapi_compare_rfds (void *rfd1, void *rfd2);
+extern int rfapi_compare_rfds(void *rfd1, void *rfd2);
/*------------------------------------------
* rfapi_free_next_hop_list
*
* Frees a next_hop_list returned by a rfapi_query invocation
*
- * input:
- * list: a pointer to a response list (as a
+ * input:
+ * list: a pointer to a response list (as a
* struct rfapi_next_hop_entry) to free.
*
* output:
*
* return value: None
--------------------------------------------*/
-extern void
-rfapi_free_next_hop_list (struct rfapi_next_hop_entry *list);
+extern void rfapi_free_next_hop_list(struct rfapi_next_hop_entry *list);
/*------------------------------------------
* rfapi_get_response_lifetime_default
* rfp_start_val value returned by rfp_start or
* NULL (=use default instance)
*
- * input:
+ * input:
* None
*
* output:
*
* return value: The bgp instance default lifetime for a response.
--------------------------------------------*/
-extern int
-rfapi_get_response_lifetime_default (void *rfp_start_val);
+extern int rfapi_get_response_lifetime_default(void *rfp_start_val);
/*------------------------------------------
* rfapi_is_vnc_configured
*
- * Returns if VNC (BGP VPN messaging /VPN & encap SAFIs) are configured
+ * Returns if VNC is configured
*
- * input:
+ * input:
* rfp_start_val value returned by rfp_start or
* NULL (=use default instance)
*
* 0 Success
* ENXIO VNC not configured
--------------------------------------------*/
-extern int
-rfapi_is_vnc_configured (void *rfp_start_val);
+extern int rfapi_is_vnc_configured(void *rfp_start_val);
/*------------------------------------------
* rfapi_bgp_lookup_by_rfp
*
* Find bgp instance pointer based on value returned by rfp_start
*
- * input:
+ * input:
* rfp_start_val value returned by rfp_startor
* NULL (=get default instance)
*
* NULL = not found
*
--------------------------------------------*/
-extern struct bgp *
-rfapi_bgp_lookup_by_rfp (void *rfp_start_val);
+extern struct bgp *rfapi_bgp_lookup_by_rfp(void *rfp_start_val);
/*------------------------------------------
* rfapi_get_rfp_start_val_by_bgp
*
* Find bgp instance pointer based on value returned by rfp_start
*
- * input:
+ * input:
* bgp bgp instance pointer
*
* output:
* NULL = not found
*
--------------------------------------------*/
-extern void *
-rfapi_get_rfp_start_val_by_bgp (struct bgp *bgp);
+extern void *rfapi_get_rfp_start_val_by_bgp(struct bgp *bgp);
#endif /* ENABLE_BGP_VNC */