Add extern to *_main global variable declarations in header files. 72/8972/1
authorDave Wallace <dwallacelf@gmail.com>
Tue, 24 Oct 2017 05:32:41 +0000 (01:32 -0400)
committerDave Wallace <dwallacelf@gmail.com>
Tue, 24 Oct 2017 05:32:41 +0000 (01:32 -0400)
- 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:
src/examples/sample-plugin/sample/sample.h
src/examples/srv6-sample-localsid/srv6_localsid_sample.h
src/plugins/dpdk/device/dpdk.h
src/plugins/dpdk/device/init.c
src/plugins/dpdk/ipsec/ipsec.c
src/plugins/dpdk/ipsec/ipsec.h
src/plugins/gtpu/gtpu.h
src/plugins/ioam/ip6/ioam_cache.c
src/plugins/ioam/ip6/ioam_cache.h
src/plugins/ixge/ixge.h
src/plugins/sixrd/sixrd.c
src/plugins/sixrd/sixrd.h
src/vat/plugin.h
src/vlib/lex.h
src/vnet/cdp/cdp_node.h
src/vnet/classify/flow_classify.c
src/vnet/classify/flow_classify.h
src/vnet/classify/policer_classify.c
src/vnet/classify/policer_classify.h
src/vnet/cop/cop.h
src/vnet/devices/af_packet/af_packet.c
src/vnet/devices/af_packet/af_packet.h
src/vnet/devices/netmap/netmap.c
src/vnet/devices/netmap/netmap.h
src/vnet/devices/ssvm/ssvm_eth.h
src/vnet/dhcp/client.h
src/vnet/ethernet/ethernet.h
src/vnet/geneve/geneve.h
src/vnet/gre/gre.h
src/vnet/ip/ip4_source_and_port_range_check.c
src/vnet/ip/ip_source_and_port_range_check.h
src/vnet/ip/ping.c
src/vnet/ip/ping.h
src/vnet/ipsec-gre/ipsec_gre.h
src/vnet/ipsec/esp.h
src/vnet/ipsec/esp_encrypt.c
src/vnet/ipsec/ikev2.c
src/vnet/ipsec/ikev2_priv.h
src/vnet/ipsec/ipsec.c
src/vnet/ipsec/ipsec.h
src/vnet/l2/l2_learn.c
src/vnet/l2/l2_learn.h
src/vnet/l2/l2_output.h
src/vnet/l2tp/l2tp.h
src/vnet/lawful-intercept/lawful_intercept.c
src/vnet/lawful-intercept/lawful_intercept.h
src/vnet/lisp-gpe/lisp_gpe.h
src/vnet/map/map.c
src/vnet/map/map.h
src/vnet/misc.c
src/vnet/policer/policer.c
src/vnet/policer/policer.h
src/vnet/snap/snap.h
src/vnet/span/span.c
src/vnet/span/span.h
src/vnet/srp/node.c
src/vnet/srp/srp.h
src/vnet/tcp/builtin_client.c
src/vnet/tcp/builtin_client.h
src/vnet/tcp/builtin_proxy.h
src/vnet/vnet.h
src/vnet/vxlan-gpe/vxlan_gpe.h
src/vnet/vxlan/vxlan.h
src/vpp/api/plugin.h
src/vpp/stats/stats.h

index c9778f7..a5dd5bf 100644 (file)
@@ -31,7 +31,7 @@ typedef struct {
     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;
 
index ef74ea3..1649449 100644 (file)
@@ -48,7 +48,7 @@ typedef struct {
        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;
index 9762c71..a0c57ea 100644 (file)
@@ -332,7 +332,7 @@ typedef struct
 
 } dpdk_config_main_t;
 
-dpdk_config_main_t dpdk_config_main;
+extern dpdk_config_main_t dpdk_config_main;
 
 typedef struct
 {
index e94d2fa..9e7bb75 100755 (executable)
@@ -37,6 +37,7 @@
 #include <dpdk/device/dpdk_priv.h>
 
 dpdk_main_t dpdk_main;
+dpdk_config_main_t dpdk_config_main;
 
 #define LINK_STATE_ELOGS       0
 
index 4bae8c1..6aa5fae 100644 (file)
@@ -21,6 +21,8 @@
 #include <dpdk/device/dpdk.h>
 #include <dpdk/ipsec/ipsec.h>
 
+dpdk_crypto_main_t dpdk_crypto_main;
+
 #define EMPTY_STRUCT {0}
 
 static void
index 98e5ad5..2289062 100644 (file)
@@ -144,7 +144,7 @@ typedef struct
   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 };
index 744d21d..b1e677d 100644 (file)
@@ -228,7 +228,7 @@ typedef struct
   vnet_main_t *vnet_main;
 } gtpu_main_t;
 
-gtpu_main_t gtpu_main;
+extern gtpu_main_t gtpu_main;
 
 extern vlib_node_registration_t gtpu4_input_node;
 extern vlib_node_registration_t gtpu6_input_node;
index 4e147da..627f8b6 100644 (file)
@@ -55,6 +55,8 @@
 #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)
index 25a8fb6..338ed98 100644 (file)
@@ -203,7 +203,7 @@ typedef struct
   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;
index 42c1bfa..a87af1a 100644 (file)
@@ -1270,8 +1270,8 @@ typedef struct
   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;
 
 typedef enum
 {
index 9838752..ee198f2 100644 (file)
@@ -32,6 +32,8 @@
  *   ea_bits_len = 0
  */
 
+sixrd_main_t sixrd_main;
+
 int
 sixrd_create_domain (ip6_address_t *ip6_prefix,
                     u8 ip6_prefix_len,
index 56714c9..f911461 100644 (file)
@@ -79,7 +79,7 @@ typedef struct {
   u32 sixrd_domain_index;
 } sixrd_trace_t;
 
-sixrd_main_t sixrd_main;
+extern sixrd_main_t sixrd_main;
 
 /*
  * sixrd_get_addr
index 559ec52..c691862 100644 (file)
@@ -45,7 +45,7 @@ typedef struct
 
 } plugin_main_t;
 
-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);
index 4ae58f4..18289ee 100644 (file)
@@ -114,7 +114,7 @@ typedef struct
   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)
index 7028ddc..21086c0 100644 (file)
@@ -95,7 +95,7 @@ typedef struct
   vnet_main_t *vnet_main;
 } cdp_main_t;
 
-cdp_main_t cdp_main;
+extern cdp_main_t cdp_main;
 
 /* Packet counters */
 #define foreach_cdp_error                                       \
index 0a62420..6c067f5 100644 (file)
@@ -14,6 +14,8 @@
  */
 #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,
index 3ae04cd..14430df 100644 (file)
@@ -42,7 +42,7 @@ typedef struct {
   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,
index 569234f..2a4fa62 100644 (file)
@@ -14,6 +14,8 @@
  */
 #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,
index 3065644..6ab424f 100644 (file)
@@ -46,7 +46,7 @@ typedef struct {
   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,
index eb5f1df..ee848ce 100644 (file)
@@ -70,7 +70,7 @@ typedef struct {
   vnet_main_t * vnet_main;
 } cop_main_t;
 
-cop_main_t cop_main;
+extern cop_main_t cop_main;
 
 extern vlib_node_registration_t cop_input_node;
 
index e7bbdfd..d0a241e 100644 (file)
@@ -32,6 +32,8 @@
 
 #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
index 66e2dea..b095e7f 100644 (file)
@@ -56,7 +56,7 @@ typedef struct
   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;
 
index fc49ed6..25a3af7 100644 (file)
@@ -27,6 +27,8 @@
 #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)
index 0473189..29f855f 100644 (file)
@@ -98,7 +98,7 @@ typedef struct
   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;
 
index f877df3..7f9aaad 100644 (file)
@@ -82,7 +82,7 @@ typedef struct
   elog_main_t *elog_main;
 } ssvm_eth_main_t;
 
-ssvm_eth_main_t ssvm_eth_main;
+extern ssvm_eth_main_t ssvm_eth_main;
 
 typedef enum
 {
index 509d5d4..68c3d7b 100644 (file)
@@ -100,7 +100,7 @@ typedef struct {
   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
 
index a6846b1..2a3383a 100644 (file)
@@ -271,7 +271,7 @@ typedef struct
   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)
index 2976043..cce57c8 100644 (file)
@@ -175,7 +175,7 @@ typedef struct
   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;
index ad3e025..9c12eb4 100644 (file)
@@ -195,7 +195,7 @@ gre_get_protocol_info (gre_main_t * em, gre_protocol_t protocol)
   return p ? vec_elt_at_index (em->protocol_infos, p[0]) : 0;
 }
 
-gre_main_t gre_main;
+extern gre_main_t gre_main;
 
 /* Register given node index to take input for given gre type. */
 void
index 4829079..d1f18dd 100644 (file)
@@ -18,6 +18,8 @@
 #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.
index fefe5ff..b04fe61 100644 (file)
@@ -24,7 +24,7 @@ typedef struct
   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;
 
 typedef enum
 {
index 0fa537f..f438ce9 100755 (executable)
@@ -20,6 +20,8 @@
 #include <vnet/fib/fib_entry.h>
 #include <vlib/vlib.h>
 
+ping_main_t ping_main;
+
 /**
  * @file
  * @brief IPv4 and IPv6 ICMP Ping.
index b1b71f6..3f7488f 100644 (file)
@@ -56,7 +56,7 @@ typedef struct ping_main_t
   ping_run_t *ping_run_by_icmp_id;
 } ping_main_t;
 
-ping_main_t ping_main;
+extern ping_main_t ping_main;
 
 #define PING_DEFAULT_DATA_LEN 60
 #define PING_DEFAULT_INTERVAL 1.0
index a2ca64b..5d56b4e 100644 (file)
@@ -78,7 +78,7 @@ typedef struct
   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;
index 98db701..bc67f9d 100644 (file)
@@ -80,7 +80,7 @@ typedef struct
   esp_main_per_thread_data_t *per_thread_data;
 } esp_main_t;
 
-esp_main_t esp_main;
+extern esp_main_t esp_main;
 
 #define ESP_WINDOW_SIZE                (64)
 #define ESP_SEQ_MAX            (4294967295UL)
index b2bc4e0..b6ee258 100644 (file)
@@ -22,6 +22,7 @@
 #include <vnet/ipsec/ipsec.h>
 #include <vnet/ipsec/esp.h>
 
+esp_main_t esp_main;
 
 #define foreach_esp_encrypt_next                   \
 _(DROP, "error-drop")                              \
index a3dc7b8..49bae17 100644 (file)
@@ -24,6 +24,8 @@
 #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);
index 5a3dc52..b396965 100644 (file)
@@ -292,7 +292,7 @@ typedef struct
 
 } ikev2_main_t;
 
-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,
index 828bfe8..2adcfd0 100644 (file)
@@ -24,6 +24,8 @@
 #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)
 {
index f11bc56..222025d 100644 (file)
@@ -286,7 +286,7 @@ typedef struct
   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;
index fddab82..6ece1a3 100644 (file)
@@ -29,6 +29,8 @@
 #include <vppinfra/error.h>
 #include <vppinfra/hash.h>
 
+l2learn_main_t l2learn_main;
+
 /**
  * @file
  * @brief Ethernet Bridge Learning.
index 3aaf48e..c107145 100644 (file)
@@ -48,7 +48,7 @@ typedef struct
 
 #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;
 
index 1a73fdf..3b6e480 100644 (file)
@@ -75,7 +75,7 @@ typedef struct
   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;
 
index e7d2892..a91f00c 100644 (file)
@@ -91,7 +91,7 @@ typedef struct
   ip6_address_t client_address;
 } l2t_trace_t;
 
-l2t_main_t l2t_main;
+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;
index ef07a33..e48e1cf 100644 (file)
@@ -15,6 +15,8 @@
 
 #include <vnet/lawful-intercept/lawful_intercept.h>
 
+li_main_t li_main;
+
 static clib_error_t *
 set_li_command_fn (vlib_main_t * vm,
                 unformat_input_t * input,
index 89e699f..bcb18af 100644 (file)
@@ -33,7 +33,7 @@ typedef struct {
   vnet_main_t * vnet_main;
 } li_main_t;
 
-li_main_t li_main;
+extern li_main_t li_main;
 
 typedef CLIB_PACKED(struct {
   ip4_header_t ip4;
index 5eafdd5..fe51ed0 100644 (file)
@@ -177,7 +177,7 @@ typedef struct lisp_gpe_main
 } 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 ()
index 862f7cf..6d18a06 100644 (file)
@@ -23,6 +23,8 @@
 
 #include "map.h"
 
+map_main_t map_main;
+
 /*
  * This code supports the following MAP modes:
  *
index 208a58e..b9b3353 100644 (file)
@@ -329,7 +329,7 @@ typedef struct {
   u16 port;
 } map_trace_t;
 
-map_main_t map_main;
+extern map_main_t map_main;
 
 extern vlib_node_registration_t ip4_map_node;
 extern vlib_node_registration_t ip6_map_node;
index 9cfe839..ff85e3d 100644 (file)
@@ -41,6 +41,7 @@
 #include <vnet/ip/ip.h>
 
 vnet_main_t vnet_main;
+vnet_main_t **vnet_mains;
 
 vnet_main_t *
 vnet_get_main (void)
index 5a7b771..3738003 100644 (file)
@@ -16,6 +16,8 @@
 #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,
index 8e2d7c7..b7c1d61 100644 (file)
@@ -44,7 +44,7 @@ typedef struct
   vnet_main_t *vnet_main;
 } vnet_policer_main_t;
 
-vnet_policer_main_t vnet_policer_main;
+extern vnet_policer_main_t vnet_policer_main;
 
 typedef enum
 {
index 7cd453e..08c3a8b 100644 (file)
@@ -165,7 +165,7 @@ snap_get_protocol_info (snap_main_t * sm, snap_header_t * h)
   return p ? vec_elt_at_index (sm->protocols, p[0]) : 0;
 }
 
-snap_main_t snap_main;
+extern snap_main_t snap_main;
 
 /* Register given node index to take input for given snap type. */
 void
index 2fd9cd8..b7292cf 100644 (file)
@@ -21,6 +21,8 @@
 
 #include <vnet/span/span.h>
 
+span_main_t span_main;
+
 typedef enum
 {
   SPAN_DISABLE = 0,
index 10de827..ebdb498 100644 (file)
@@ -55,7 +55,7 @@ typedef struct
   vnet_main_t *vnet_main;
 } span_main_t;
 
-span_main_t span_main;
+extern span_main_t span_main;
 
 typedef struct
 {
index 897be25..9123c4c 100644 (file)
@@ -41,6 +41,8 @@
 #include <vnet/ip/ip_packet.h> /* for ip_csum_fold */
 #include <vnet/srp/srp.h>
 
+srp_main_t srp_main;
+
 typedef struct {
   u8 packet_data[32];
 } srp_input_trace_t;
index 5288ebe..8f59e06 100644 (file)
@@ -169,7 +169,7 @@ srp_ips_link_change (u32 sw_if_index, u32 link_is_up)
 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);
 
-srp_main_t srp_main;
+extern srp_main_t srp_main;
 
 always_inline srp_interface_t *
 srp_get_interface_from_vnet_hw_interface (u32 hw_if_index)
index 4258fc4..76c5c12 100644 (file)
@@ -23,6 +23,8 @@
 #include <vlibmemory/api.h>
 #include <vpp/app/version.h>
 
+tclient_main_t tclient_main;
+
 #define TCP_BUILTIN_CLIENT_DBG (0)
 
 static void
index 06d239e..400c55c 100644 (file)
@@ -106,7 +106,7 @@ typedef struct
   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;
 
index cf707a1..c8cde5f 100644 (file)
@@ -87,7 +87,7 @@ typedef struct
   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__ */
 
index 8405f61..153fdcc 100644 (file)
@@ -78,8 +78,8 @@ typedef struct 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>
index c348b5d..053bcbe 100644 (file)
@@ -209,7 +209,7 @@ typedef struct {
   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;
index dca1cd1..f428ee5 100644 (file)
@@ -158,7 +158,7 @@ typedef struct {
   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;
index 559ec52..c691862 100644 (file)
@@ -45,7 +45,7 @@ typedef struct
 
 } plugin_main_t;
 
-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);
index 042bcb6..452e305 100644 (file)
@@ -184,7 +184,7 @@ typedef struct
   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);