- Global variables declared in header files without
the use of the 'extern' keword will result in multiple
instances of the variable to be created by the compiler
-- one for each different source file in which the
the header file is included. This results in wasted
memory allocated in the BSS segments as well as
potentially introducing bugs in the application.
Change-Id: I6ef1790b60a0bd9dd3994f8510723decf258b0cc
Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
65 files changed:
vnet_main_t * vnet_main;
} sample_main_t;
vnet_main_t * vnet_main;
} sample_main_t;
-sample_main_t sample_main;
+extern sample_main_t sample_main;
extern vlib_node_registration_t sample_node;
extern vlib_node_registration_t sample_node;
u32 fib_table; /* Stupid index used as an example.. */
} srv6_localsid_sample_per_sid_memory_t ;
u32 fib_table; /* Stupid index used as an example.. */
} srv6_localsid_sample_per_sid_memory_t ;
-srv6_localsid_sample_main_t srv6_localsid_sample_main;
+extern srv6_localsid_sample_main_t srv6_localsid_sample_main;
format_function_t format_srv6_localsid_sample;
unformat_function_t unformat_srv6_localsid_sample;
format_function_t format_srv6_localsid_sample;
unformat_function_t unformat_srv6_localsid_sample;
-dpdk_config_main_t dpdk_config_main;
+extern dpdk_config_main_t dpdk_config_main;
#include <dpdk/device/dpdk_priv.h>
dpdk_main_t dpdk_main;
#include <dpdk/device/dpdk_priv.h>
dpdk_main_t dpdk_main;
+dpdk_config_main_t dpdk_config_main;
#define LINK_STATE_ELOGS 0
#define LINK_STATE_ELOGS 0
#include <dpdk/device/dpdk.h>
#include <dpdk/ipsec/ipsec.h>
#include <dpdk/device/dpdk.h>
#include <dpdk/ipsec/ipsec.h>
+dpdk_crypto_main_t dpdk_crypto_main;
+
#define EMPTY_STRUCT {0}
static void
#define EMPTY_STRUCT {0}
static void
u8 enabled;
} dpdk_crypto_main_t;
u8 enabled;
} dpdk_crypto_main_t;
-dpdk_crypto_main_t dpdk_crypto_main;
+extern dpdk_crypto_main_t dpdk_crypto_main;
static const u8 pad_data[] =
{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0 };
static const u8 pad_data[] =
{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0 };
vnet_main_t *vnet_main;
} gtpu_main_t;
vnet_main_t *vnet_main;
} gtpu_main_t;
+extern gtpu_main_t gtpu_main;
extern vlib_node_registration_t gtpu4_input_node;
extern vlib_node_registration_t gtpu6_input_node;
extern vlib_node_registration_t gtpu4_input_node;
extern vlib_node_registration_t gtpu6_input_node;
#define REPLY_MSG_ID_BASE cm->msg_id_base
#include <vlibapi/api_helper_macros.h>
#define REPLY_MSG_ID_BASE cm->msg_id_base
#include <vlibapi/api_helper_macros.h>
+ioam_cache_main_t ioam_cache_main;
+
/* List of message types that this plugin understands */
#define foreach_ioam_cache_plugin_api_msg \
_(IOAM_CACHE_IP6_ENABLE_DISABLE, ioam_cache_ip6_enable_disable)
/* List of message types that this plugin understands */
#define foreach_ioam_cache_plugin_api_msg \
_(IOAM_CACHE_IP6_ENABLE_DISABLE, ioam_cache_ip6_enable_disable)
u32 cleanup_process_node_index;
} ioam_cache_main_t;
u32 cleanup_process_node_index;
} ioam_cache_main_t;
-ioam_cache_main_t ioam_cache_main;
+extern ioam_cache_main_t ioam_cache_main;
extern vlib_node_registration_t ioam_cache_node;
extern vlib_node_registration_t ioam_cache_ts_node;
extern vlib_node_registration_t ioam_cache_node;
extern vlib_node_registration_t ioam_cache_ts_node;
vlib_physmem_region_index_t physmem_region;
} ixge_main_t;
vlib_physmem_region_index_t physmem_region;
} ixge_main_t;
-ixge_main_t ixge_main;
-vnet_device_class_t ixge_device_class;
+extern ixge_main_t ixge_main;
+extern vnet_device_class_t ixge_device_class;
+sixrd_main_t sixrd_main;
+
int
sixrd_create_domain (ip6_address_t *ip6_prefix,
u8 ip6_prefix_len,
int
sixrd_create_domain (ip6_address_t *ip6_prefix,
u8 ip6_prefix_len,
u32 sixrd_domain_index;
} sixrd_trace_t;
u32 sixrd_domain_index;
} sixrd_trace_t;
-sixrd_main_t sixrd_main;
+extern sixrd_main_t sixrd_main;
-plugin_main_t vat_plugin_main;
+extern plugin_main_t vat_plugin_main;
int vat_plugin_init (vat_main_t * vam);
int vat_load_new_plugins (plugin_main_t * pm);
int vat_plugin_init (vat_main_t * vam);
int vat_load_new_plugins (plugin_main_t * pm);
u8 *token_buffer;
} vlib_lex_main_t;
u8 *token_buffer;
} vlib_lex_main_t;
-vlib_lex_main_t vlib_lex_main;
+extern vlib_lex_main_t vlib_lex_main;
always_inline void
vlib_lex_cleanup_token (vlib_lex_token_t * t)
always_inline void
vlib_lex_cleanup_token (vlib_lex_token_t * t)
vnet_main_t *vnet_main;
} cdp_main_t;
vnet_main_t *vnet_main;
} cdp_main_t;
+extern cdp_main_t cdp_main;
/* Packet counters */
#define foreach_cdp_error \
/* Packet counters */
#define foreach_cdp_error \
*/
#include <vnet/classify/flow_classify.h>
*/
#include <vnet/classify/flow_classify.h>
+flow_classify_main_t flow_classify_main;
+
static void
vnet_flow_classify_feature_enable (vlib_main_t * vnm,
flow_classify_main_t * fcm,
static void
vnet_flow_classify_feature_enable (vlib_main_t * vnm,
flow_classify_main_t * fcm,
vnet_config_main_t * vnet_config_main [FLOW_CLASSIFY_N_TABLES];
} flow_classify_main_t;
vnet_config_main_t * vnet_config_main [FLOW_CLASSIFY_N_TABLES];
} flow_classify_main_t;
-flow_classify_main_t flow_classify_main;
+extern flow_classify_main_t flow_classify_main;
int vnet_set_flow_classify_intfc (vlib_main_t * vm, u32 sw_if_index,
u32 ip4_table_index, u32 ip6_table_index,
int vnet_set_flow_classify_intfc (vlib_main_t * vm, u32 sw_if_index,
u32 ip4_table_index, u32 ip6_table_index,
*/
#include <vnet/classify/policer_classify.h>
*/
#include <vnet/classify/policer_classify.h>
+policer_classify_main_t policer_classify_main;
+
static void
vnet_policer_classify_feature_enable (vlib_main_t * vnm,
policer_classify_main_t * pcm,
static void
vnet_policer_classify_feature_enable (vlib_main_t * vnm,
policer_classify_main_t * pcm,
vnet_config_main_t * vnet_config_main [POLICER_CLASSIFY_N_TABLES];
} policer_classify_main_t;
vnet_config_main_t * vnet_config_main [POLICER_CLASSIFY_N_TABLES];
} policer_classify_main_t;
-policer_classify_main_t policer_classify_main;
+extern policer_classify_main_t policer_classify_main;
int vnet_set_policer_classify_intfc (vlib_main_t * vm, u32 sw_if_index,
u32 ip4_table_index, u32 ip6_table_index,
int vnet_set_policer_classify_intfc (vlib_main_t * vm, u32 sw_if_index,
u32 ip4_table_index, u32 ip6_table_index,
vnet_main_t * vnet_main;
} cop_main_t;
vnet_main_t * vnet_main;
} cop_main_t;
+extern cop_main_t cop_main;
extern vlib_node_registration_t cop_input_node;
extern vlib_node_registration_t cop_input_node;
#include <vnet/devices/af_packet/af_packet.h>
#include <vnet/devices/af_packet/af_packet.h>
+af_packet_main_t af_packet_main;
+
#define AF_PACKET_DEBUG_SOCKET 0
#define AF_PACKET_TX_FRAMES_PER_BLOCK 1024
#define AF_PACKET_DEBUG_SOCKET 0
#define AF_PACKET_TX_FRAMES_PER_BLOCK 1024
mhash_t if_index_by_host_if_name;
} af_packet_main_t;
mhash_t if_index_by_host_if_name;
} af_packet_main_t;
-af_packet_main_t af_packet_main;
+extern af_packet_main_t af_packet_main;
extern vnet_device_class_t af_packet_device_class;
extern vlib_node_registration_t af_packet_input_node;
extern vnet_device_class_t af_packet_device_class;
extern vlib_node_registration_t af_packet_input_node;
#include <vnet/ethernet/ethernet.h>
#include <vnet/devices/netmap/netmap.h>
#include <vnet/ethernet/ethernet.h>
#include <vnet/devices/netmap/netmap.h>
+netmap_main_t netmap_main;
+
static u32
netmap_eth_flag_change (vnet_main_t * vnm, vnet_hw_interface_t * hi,
u32 flags)
static u32
netmap_eth_flag_change (vnet_main_t * vnm, vnet_hw_interface_t * hi,
u32 flags)
u32 input_cpu_count;
} netmap_main_t;
u32 input_cpu_count;
} netmap_main_t;
-netmap_main_t netmap_main;
+extern netmap_main_t netmap_main;
extern vnet_device_class_t netmap_device_class;
extern vlib_node_registration_t netmap_input_node;
extern vnet_device_class_t netmap_device_class;
extern vlib_node_registration_t netmap_input_node;
elog_main_t *elog_main;
} ssvm_eth_main_t;
elog_main_t *elog_main;
} ssvm_eth_main_t;
-ssvm_eth_main_t ssvm_eth_main;
+extern ssvm_eth_main_t ssvm_eth_main;
void * event_callback;
} dhcp_client_add_del_args_t;
void * event_callback;
} dhcp_client_add_del_args_t;
-dhcp_client_main_t dhcp_client_main;
+extern dhcp_client_main_t dhcp_client_main;
#define EVENT_DHCP_CLIENT_WAKEUP 1
#define EVENT_DHCP_CLIENT_WAKEUP 1
uword *bm_loopback_instances;
} ethernet_main_t;
uword *bm_loopback_instances;
} ethernet_main_t;
-ethernet_main_t ethernet_main;
+extern ethernet_main_t ethernet_main;
always_inline ethernet_type_info_t *
ethernet_get_type_info (ethernet_main_t * em, ethernet_type_t type)
always_inline ethernet_type_info_t *
ethernet_get_type_info (ethernet_main_t * em, ethernet_type_t type)
vnet_main_t *vnet_main;
} geneve_main_t;
vnet_main_t *vnet_main;
} geneve_main_t;
-geneve_main_t geneve_main;
+extern geneve_main_t geneve_main;
extern vlib_node_registration_t geneve4_input_node;
extern vlib_node_registration_t geneve6_input_node;
extern vlib_node_registration_t geneve4_input_node;
extern vlib_node_registration_t geneve6_input_node;
return p ? vec_elt_at_index (em->protocol_infos, p[0]) : 0;
}
return p ? vec_elt_at_index (em->protocol_infos, p[0]) : 0;
}
+extern gre_main_t gre_main;
/* Register given node index to take input for given gre type. */
void
/* Register given node index to take input for given gre type. */
void
#include <vnet/fib/fib_table.h>
#include <vnet/fib/ip4_fib.h>
#include <vnet/fib/fib_table.h>
#include <vnet/fib/ip4_fib.h>
+source_range_check_main_t source_range_check_main;
+
/**
* @file
* @brief IPv4 Source and Port Range Checking.
/**
* @file
* @brief IPv4 Source and Port Range Checking.
vnet_main_t *vnet_main;
} source_range_check_main_t;
vnet_main_t *vnet_main;
} source_range_check_main_t;
-source_range_check_main_t source_range_check_main;
+extern source_range_check_main_t source_range_check_main;
#include <vnet/fib/fib_entry.h>
#include <vlib/vlib.h>
#include <vnet/fib/fib_entry.h>
#include <vlib/vlib.h>
+ping_main_t ping_main;
+
/**
* @file
* @brief IPv4 and IPv6 ICMP Ping.
/**
* @file
* @brief IPv4 and IPv6 ICMP Ping.
ping_run_t *ping_run_by_icmp_id;
} ping_main_t;
ping_run_t *ping_run_by_icmp_id;
} ping_main_t;
+extern ping_main_t ping_main;
#define PING_DEFAULT_DATA_LEN 60
#define PING_DEFAULT_INTERVAL 1.0
#define PING_DEFAULT_DATA_LEN 60
#define PING_DEFAULT_INTERVAL 1.0
vnet_main_t *vnet_main; /**< convenience */
} ipsec_gre_main_t;
vnet_main_t *vnet_main; /**< convenience */
} ipsec_gre_main_t;
-ipsec_gre_main_t ipsec_gre_main;
+extern ipsec_gre_main_t ipsec_gre_main;
extern vlib_node_registration_t ipsec_gre_input_node;
extern vnet_device_class_t ipsec_gre_device_class;
extern vlib_node_registration_t ipsec_gre_input_node;
extern vnet_device_class_t ipsec_gre_device_class;
esp_main_per_thread_data_t *per_thread_data;
} esp_main_t;
esp_main_per_thread_data_t *per_thread_data;
} esp_main_t;
+extern esp_main_t esp_main;
#define ESP_WINDOW_SIZE (64)
#define ESP_SEQ_MAX (4294967295UL)
#define ESP_WINDOW_SIZE (64)
#define ESP_SEQ_MAX (4294967295UL)
#include <vnet/ipsec/ipsec.h>
#include <vnet/ipsec/esp.h>
#include <vnet/ipsec/ipsec.h>
#include <vnet/ipsec/esp.h>
#define foreach_esp_encrypt_next \
_(DROP, "error-drop") \
#define foreach_esp_encrypt_next \
_(DROP, "error-drop") \
#include <vnet/ipsec/ikev2_priv.h>
#include <openssl/sha.h>
#include <vnet/ipsec/ikev2_priv.h>
#include <openssl/sha.h>
+ikev2_main_t ikev2_main;
+
static int ikev2_delete_tunnel_interface (vnet_main_t * vnm,
ikev2_sa_t * sa,
ikev2_child_sa_t * child);
static int ikev2_delete_tunnel_interface (vnet_main_t * vnm,
ikev2_sa_t * sa,
ikev2_child_sa_t * child);
-ikev2_main_t ikev2_main;
+extern ikev2_main_t ikev2_main;
void ikev2_sa_free_proposal_vector (ikev2_sa_proposal_t ** v);
ikev2_sa_transform_t *ikev2_sa_get_td_for_type (ikev2_sa_proposal_t * p,
void ikev2_sa_free_proposal_vector (ikev2_sa_proposal_t ** v);
ikev2_sa_transform_t *ikev2_sa_get_td_for_type (ikev2_sa_proposal_t * p,
#include <vnet/ipsec/ikev2.h>
#include <vnet/ipsec/esp.h>
#include <vnet/ipsec/ikev2.h>
#include <vnet/ipsec/esp.h>
+ipsec_main_t ipsec_main;
+
u32
ipsec_get_sa_index_by_sa_id (u32 sa_id)
{
u32
ipsec_get_sa_index_by_sa_id (u32 sa_id)
{
ipsec_main_callbacks_t cb;
} ipsec_main_t;
ipsec_main_callbacks_t cb;
} ipsec_main_t;
-ipsec_main_t ipsec_main;
+extern ipsec_main_t ipsec_main;
extern vlib_node_registration_t esp_encrypt_node;
extern vlib_node_registration_t esp_decrypt_node;
extern vlib_node_registration_t esp_encrypt_node;
extern vlib_node_registration_t esp_decrypt_node;
#include <vppinfra/error.h>
#include <vppinfra/hash.h>
#include <vppinfra/error.h>
#include <vppinfra/hash.h>
+l2learn_main_t l2learn_main;
+
/**
* @file
* @brief Ethernet Bridge Learning.
/**
* @file
* @brief Ethernet Bridge Learning.
#define L2LEARN_DEFAULT_LIMIT (L2FIB_NUM_BUCKETS * 64)
#define L2LEARN_DEFAULT_LIMIT (L2FIB_NUM_BUCKETS * 64)
-l2learn_main_t l2learn_main;
+extern l2learn_main_t l2learn_main;
extern vlib_node_registration_t l2fib_mac_age_scanner_process_node;
extern vlib_node_registration_t l2fib_mac_age_scanner_process_node;
vnet_main_t *vnet_main;
} l2output_main_t;
vnet_main_t *vnet_main;
} l2output_main_t;
-l2output_main_t l2output_main;
+extern l2output_main_t l2output_main;
extern vlib_node_registration_t l2output_node;
extern vlib_node_registration_t l2output_node;
ip6_address_t client_address;
} l2t_trace_t;
ip6_address_t client_address;
} l2t_trace_t;
+extern l2t_main_t l2t_main;
extern vlib_node_registration_t l2t_encap_node;
extern vlib_node_registration_t l2t_decap_node;
extern vlib_node_registration_t l2t_decap_local_node;
extern vlib_node_registration_t l2t_encap_node;
extern vlib_node_registration_t l2t_decap_node;
extern vlib_node_registration_t l2t_decap_local_node;
#include <vnet/lawful-intercept/lawful_intercept.h>
#include <vnet/lawful-intercept/lawful_intercept.h>
static clib_error_t *
set_li_command_fn (vlib_main_t * vm,
unformat_input_t * input,
static clib_error_t *
set_li_command_fn (vlib_main_t * vm,
unformat_input_t * input,
vnet_main_t * vnet_main;
} li_main_t;
vnet_main_t * vnet_main;
} li_main_t;
+extern li_main_t li_main;
typedef CLIB_PACKED(struct {
ip4_header_t ip4;
typedef CLIB_PACKED(struct {
ip4_header_t ip4;
} lisp_gpe_main_t;
/** LISP-GPE global state*/
} lisp_gpe_main_t;
/** LISP-GPE global state*/
-lisp_gpe_main_t lisp_gpe_main;
+extern lisp_gpe_main_t lisp_gpe_main;
always_inline lisp_gpe_main_t *
vnet_lisp_gpe_get_main ()
always_inline lisp_gpe_main_t *
vnet_lisp_gpe_get_main ()
/*
* This code supports the following MAP modes:
*
/*
* This code supports the following MAP modes:
*
+extern map_main_t map_main;
extern vlib_node_registration_t ip4_map_node;
extern vlib_node_registration_t ip6_map_node;
extern vlib_node_registration_t ip4_map_node;
extern vlib_node_registration_t ip6_map_node;
#include <vnet/ip/ip.h>
vnet_main_t vnet_main;
#include <vnet/ip/ip.h>
vnet_main_t vnet_main;
+vnet_main_t **vnet_mains;
vnet_main_t *
vnet_get_main (void)
vnet_main_t *
vnet_get_main (void)
#include <vnet/policer/policer.h>
#include <vnet/classify/vnet_classify.h>
#include <vnet/policer/policer.h>
#include <vnet/classify/vnet_classify.h>
+vnet_policer_main_t vnet_policer_main;
+
clib_error_t *
policer_add_del (vlib_main_t * vm,
u8 * name,
clib_error_t *
policer_add_del (vlib_main_t * vm,
u8 * name,
vnet_main_t *vnet_main;
} vnet_policer_main_t;
vnet_main_t *vnet_main;
} vnet_policer_main_t;
-vnet_policer_main_t vnet_policer_main;
+extern vnet_policer_main_t vnet_policer_main;
return p ? vec_elt_at_index (sm->protocols, p[0]) : 0;
}
return p ? vec_elt_at_index (sm->protocols, p[0]) : 0;
}
+extern snap_main_t snap_main;
/* Register given node index to take input for given snap type. */
void
/* Register given node index to take input for given snap type. */
void
#include <vnet/span/span.h>
#include <vnet/span/span.h>
+span_main_t span_main;
+
typedef enum
{
SPAN_DISABLE = 0,
typedef enum
{
SPAN_DISABLE = 0,
vnet_main_t *vnet_main;
} span_main_t;
vnet_main_t *vnet_main;
} span_main_t;
+extern span_main_t span_main;
#include <vnet/ip/ip_packet.h> /* for ip_csum_fold */
#include <vnet/srp/srp.h>
#include <vnet/ip/ip_packet.h> /* for ip_csum_fold */
#include <vnet/srp/srp.h>
typedef struct {
u8 packet_data[32];
} srp_input_trace_t;
typedef struct {
u8 packet_data[32];
} srp_input_trace_t;
void srp_interface_get_interface_config (u32 hw_if_index, srp_interface_config_t * c);
void srp_interface_set_interface_config (u32 hw_if_index, srp_interface_config_t * c);
void srp_interface_get_interface_config (u32 hw_if_index, srp_interface_config_t * c);
void srp_interface_set_interface_config (u32 hw_if_index, srp_interface_config_t * c);
+extern srp_main_t srp_main;
always_inline srp_interface_t *
srp_get_interface_from_vnet_hw_interface (u32 hw_if_index)
always_inline srp_interface_t *
srp_get_interface_from_vnet_hw_interface (u32 hw_if_index)
#include <vlibmemory/api.h>
#include <vpp/app/version.h>
#include <vlibmemory/api.h>
#include <vpp/app/version.h>
+tclient_main_t tclient_main;
+
#define TCP_BUILTIN_CLIENT_DBG (0)
static void
#define TCP_BUILTIN_CLIENT_DBG (0)
static void
ethernet_main_t *ethernet_main;
} tclient_main_t;
ethernet_main_t *ethernet_main;
} tclient_main_t;
-tclient_main_t tclient_main;
+extern tclient_main_t tclient_main;
vlib_node_registration_t tclient_node;
vlib_node_registration_t tclient_node;
ethernet_main_t *ethernet_main;
} builtin_proxy_main_t;
ethernet_main_t *ethernet_main;
} builtin_proxy_main_t;
-builtin_proxy_main_t builtin_proxy_main;
+extern builtin_proxy_main_t builtin_proxy_main;
#endif /* __included_builtin_proxy_h__ */
#endif /* __included_builtin_proxy_h__ */
vlib_main_t *vlib_main;
} vnet_main_t;
vlib_main_t *vlib_main;
} vnet_main_t;
-vnet_main_t vnet_main;
-vnet_main_t **vnet_mains;
+extern vnet_main_t vnet_main;
+extern vnet_main_t **vnet_mains;
#include <vnet/interface_funcs.h>
#include <vnet/global_funcs.h>
#include <vnet/interface_funcs.h>
#include <vnet/global_funcs.h>
uword decap_next_node_list[VXLAN_GPE_PROTOCOL_MAX];
} vxlan_gpe_main_t;
uword decap_next_node_list[VXLAN_GPE_PROTOCOL_MAX];
} vxlan_gpe_main_t;
-vxlan_gpe_main_t vxlan_gpe_main;
+extern vxlan_gpe_main_t vxlan_gpe_main;
extern vlib_node_registration_t vxlan_gpe_encap_node;
extern vlib_node_registration_t vxlan4_gpe_input_node;
extern vlib_node_registration_t vxlan_gpe_encap_node;
extern vlib_node_registration_t vxlan4_gpe_input_node;
vnet_main_t * vnet_main;
} vxlan_main_t;
vnet_main_t * vnet_main;
} vxlan_main_t;
-vxlan_main_t vxlan_main;
+extern vxlan_main_t vxlan_main;
extern vlib_node_registration_t vxlan4_input_node;
extern vlib_node_registration_t vxlan6_input_node;
extern vlib_node_registration_t vxlan4_input_node;
extern vlib_node_registration_t vxlan6_input_node;
-plugin_main_t vat_plugin_main;
+extern plugin_main_t vat_plugin_main;
int vat_plugin_init (vat_main_t * vam);
int vat_load_new_plugins (plugin_main_t * pm);
int vat_plugin_init (vat_main_t * vam);
int vat_load_new_plugins (plugin_main_t * pm);
api_main_t *api_main;
} stats_main_t;
api_main_t *api_main;
} stats_main_t;
-stats_main_t stats_main;
+extern stats_main_t stats_main;
void dslock (stats_main_t * sm, int release_hint, int tag);
void dsunlock (stats_main_t * sm);
void dslock (stats_main_t * sm, int release_hint, int tag);
void dsunlock (stats_main_t * sm);