I got many warnings at the link step with gcc version 5.3.1
20160225 (Ubuntu 5.3.1-10ubuntu2):
/usr/bin/ld: Warning: size of symbol `cop_input_node' changed from 112 in vnet/cop/.libs/cop.o to 168 in vnet/cop/.libs/node1.o
/usr/bin/ld: Warning: size of symbol `ethernet_input_node' changed from 112 in vnet/.libs/interface.o to 136 in vnet/ethernet/.libs/node.o
/usr/bin/ld: Warning: size of symbol `l2output_node' changed from 112 in vnet/l2/.libs/l2_efp_filter.o to 120 in vnet/l2/.libs/l2_output.o
/usr/bin/ld: Warning: size of symbol `srp_input_node' changed from 112 in vnet/srp/.libs/format.o to 136 in vnet/srp/.libs/node.o
/usr/bin/ld: Warning: size of symbol `vxlan_encap_node' changed from 112 in vnet/vxlan/.libs/vxlan.o to 128 in vnet/vxlan/.libs/encap.o
/usr/bin/ld: Warning: size of symbol `vxlan_input_node' changed from 112 in vnet/vxlan/.libs/vxlan.o to 144 in vnet/vxlan/.libs/decap.o
...
Looking at vlib_node_registration_t, I think the reason is that
the char * next_nodes[] could be bigger where the variable is defined
in .c file.
We should mark global variables as external in header files.
Some of them can be made static.
Change-Id: Ieb6961fd08180c9a69e1d884852703f3eb23f23f
Signed-off-by: Jean-Mickael Guerin <jean-mickael.guerin@6wind.com>
#include <vppinfra/cache.h>
#include <vppinfra/xxhash.h>
-vlib_node_registration_t ip4_classify_node;
-vlib_node_registration_t ip6_classify_node;
+extern vlib_node_registration_t ip4_classify_node;
+extern vlib_node_registration_t ip6_classify_node;
#define CLASSIFY_TRACE 0
cop_main_t cop_main;
-vlib_node_registration_t cop_input_node;
+extern vlib_node_registration_t cop_input_node;
int cop_interface_enable_disable (u32 sw_if_index, int enable_disable);
#define NB_MBUF (32<<10)
vnet_device_class_t dpdk_device_class;
-vlib_node_registration_t dpdk_input_node;
-vlib_node_registration_t dpdk_io_input_node;
-vlib_node_registration_t handoff_dispatch_node;
+extern vlib_node_registration_t dpdk_input_node;
+extern vlib_node_registration_t dpdk_io_input_node;
+extern vlib_node_registration_t handoff_dispatch_node;
typedef enum {
VNET_DPDK_DEV_ETH = 1, /* Standard DPDK PMD driver */
#include <ssvm.h>
vnet_device_class_t ssvm_eth_device_class;
-vlib_node_registration_t ssvm_eth_input_node;
+extern vlib_node_registration_t ssvm_eth_input_node;
#define SSVM_BUFFER_SIZE \
(VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES + VLIB_BUFFER_PRE_DATA_SIZE)
uword type_opaque,
uword data, int is_add);
-vlib_node_registration_t ethernet_input_node;
+extern vlib_node_registration_t ethernet_input_node;
#endif /* included_ethernet_h */
format_function_t format_gre_header;
format_function_t format_gre_header_with_length;
-vlib_node_registration_t gre_input_node;
+extern vlib_node_registration_t gre_input_node;
vnet_device_class_t gre_device_class;
/* Parse gre protocol as 0xXXXX or protocol name.
return s;
}
-vlib_node_registration_t ikev2_node;
+static vlib_node_registration_t ikev2_node;
#define foreach_ikev2_error \
_(PROCESSED, "IKEv2 packets processed") \
return frame->n_vectors;
}
-VLIB_REGISTER_NODE (ikev2_node) = {
+VLIB_REGISTER_NODE (ikev2_node,static) = {
.function = ikev2_node_fn,
.name = "ikev2",
.vector_size = sizeof (u32),
typedef u8 v8;
-vlib_node_registration_t ikev2_node;
-
typedef CLIB_PACKED (struct {
u64 ispi;
u64 rspi;
ipsec_main_t ipsec_main;
-vlib_node_registration_t ipsec_input_ip4_node;
-vlib_node_registration_t ipsec_input_ip6_node;
-vlib_node_registration_t ipsec_output_node;
-vlib_node_registration_t esp_encrypt_node;
-vlib_node_registration_t esp_decrypt_node;
-vlib_node_registration_t ipsec_if_output_node;
-vlib_node_registration_t ipsec_if_input_node;
+extern vlib_node_registration_t esp_encrypt_node;
+extern vlib_node_registration_t esp_decrypt_node;
+extern vlib_node_registration_t ipsec_if_output_node;
+extern vlib_node_registration_t ipsec_if_input_node;
/*
#undef _
};
-vlib_node_registration_t ipsec_input_node;
-
typedef struct {
u32 tunnel_index;
u32 spi;
return 0;
}
+static vlib_node_registration_t ipsec_input_ip4_node;
+
static uword
ipsec_input_ip4_node_fn (vlib_main_t * vm,
vlib_node_runtime_t * node,
}
-VLIB_REGISTER_NODE (ipsec_input_ip4_node) = {
+VLIB_REGISTER_NODE (ipsec_input_ip4_node,static) = {
.function = ipsec_input_ip4_node_fn,
.name = "ipsec-input-ip4",
.vector_size = sizeof (u32),
};
+static vlib_node_registration_t ipsec_input_ip6_node;
+
static uword
ipsec_input_ip6_node_fn (vlib_main_t * vm,
vlib_node_runtime_t * node,
}
-VLIB_REGISTER_NODE (ipsec_input_ip6_node) = {
+VLIB_REGISTER_NODE (ipsec_input_ip6_node,static) = {
.function = ipsec_input_ip6_node_fn,
.name = "ipsec-input-ip6",
.vector_size = sizeof (u32),
#undef _
};
-vlib_node_registration_t ipsec_output_node;
+static vlib_node_registration_t ipsec_output_node;
typedef struct {
u32 spd_id;
return from_frame->n_vectors;
}
-VLIB_REGISTER_NODE (ipsec_output_node) = {
+VLIB_REGISTER_NODE (ipsec_output_node,static) = {
.function = ipsec_output_node_fn,
.name = "ipsec-output",
.vector_size = sizeof (u32),
l2_classify_main_t l2_classify_main;
-vlib_node_registration_t l2_classify_node;
+extern vlib_node_registration_t l2_classify_node;
void vnet_l2_classify_enable_disable (u32 sw_if_index,
int enable_disable);
}
+static vlib_node_registration_t l2output_node;
+
static uword
l2output_node_fn (vlib_main_t * vm,
vlib_node_runtime_t * node,
}
-VLIB_REGISTER_NODE (l2output_node) = {
+VLIB_REGISTER_NODE (l2output_node,static) = {
.function = l2output_node_fn,
.name = "l2-output",
.vector_size = sizeof (u32),
} l2output_main_t;
l2output_main_t l2output_main;
-vlib_node_registration_t l2output_node;
// L2 output features
} l2t_trace_t;
l2t_main_t l2t_main;
-vlib_node_registration_t l2t_encap_node;
-vlib_node_registration_t l2t_decap_node;
+extern vlib_node_registration_t l2t_encap_node;
+extern vlib_node_registration_t l2t_decap_node;
enum {
SESSION_COUNTER_USER_TO_NETWORK=0,
udp_header_t udp;
}) ip4_udp_header_t;
-vlib_node_registration_t li_hit_node;
+extern vlib_node_registration_t li_hit_node;
#endif /* __lawful_intercept_h__ */
lisp_gpe_main_t lisp_gpe_main;
-vlib_node_registration_t lisp_gpe_input_node;
-vlib_node_registration_t lisp_gpe_encap_node;
+extern vlib_node_registration_t lisp_gpe_input_node;
+extern vlib_node_registration_t lisp_gpe_encap_node;
u8 * format_lisp_gpe_encap_trace (u8 * s, va_list * args);
u8 * format_lisp_gpe_header_with_length (u8 * s, va_list * args);
*/
#include "sixrd.h"
-vlib_node_registration_t ip4_sixrd_node;
+static vlib_node_registration_t ip4_sixrd_node;
typedef enum {
IP4_SIXRD_NEXT_IP6_LOOKUP,
#undef _
};
-VLIB_REGISTER_NODE(ip4_sixrd_node) = {
+VLIB_REGISTER_NODE(ip4_sixrd_node,static) = {
.function = ip4_sixrd,
.name = "ip4-sixrd",
.vector_size = sizeof(u32),
#include "sixrd.h"
-vlib_node_registration_t ip6_sixrd_node;
+static vlib_node_registration_t ip6_sixrd_node;
typedef enum {
IP6_SIXRD_NEXT_IP4_LOOKUP,
#undef _
};
-VLIB_REGISTER_NODE(ip6_sixrd_node) = {
+VLIB_REGISTER_NODE(ip6_sixrd_node,static) = {
.function = ip6_sixrd,
.name = "ip6-sixrd",
.vector_size = sizeof(u32),
map_main_t map_main;
-vlib_node_registration_t ip4_map_node;
-vlib_node_registration_t ip6_map_node;
-
-vlib_node_registration_t ip4_map_t_node;
-vlib_node_registration_t ip4_map_t_fragmented_node;
-vlib_node_registration_t ip4_map_t_tcp_udp_node;
-vlib_node_registration_t ip4_map_t_icmp_node;
-
-vlib_node_registration_t ip6_map_t_node;
-vlib_node_registration_t ip6_map_t_fragmented_node;
-vlib_node_registration_t ip6_map_t_tcp_udp_node;
-vlib_node_registration_t ip6_map_t_icmp_node;
+extern vlib_node_registration_t ip4_map_node;
+extern vlib_node_registration_t ip6_map_node;
+
+extern vlib_node_registration_t ip4_map_t_node;
+extern vlib_node_registration_t ip4_map_t_fragmented_node;
+extern vlib_node_registration_t ip4_map_t_tcp_udp_node;
+extern vlib_node_registration_t ip4_map_t_icmp_node;
+
+extern vlib_node_registration_t ip6_map_t_node;
+extern vlib_node_registration_t ip6_map_t_fragmented_node;
+extern vlib_node_registration_t ip6_map_t_tcp_udp_node;
+extern vlib_node_registration_t ip6_map_t_icmp_node;
/*
* map_get_pfx
#include <vnet/vnet.h>
#include <vnet/ip/ip.h>
-vlib_node_registration_t ip6_sixrd_node;
-vlib_node_registration_t ip4_sixrd_node;
-
int sixrd_create_domain(ip6_address_t *ip6_prefix, u8 ip6_prefix_len,
ip4_address_t *ip4_prefix, u8 ip4_prefix_len,
ip4_address_t *ip4_src, u32 *sixrd_domain_index, u16 mtu);
format_function_t format_mpls_unicast_label;
format_function_t format_mpls_encap_index;
-vlib_node_registration_t mpls_input_node;
-vlib_node_registration_t mpls_policy_encap_node;
+extern vlib_node_registration_t mpls_input_node;
+extern vlib_node_registration_t mpls_policy_encap_node;
vnet_device_class_t mpls_gre_device_class;
nsh_gre_main_t nsh_gre_main;
-vlib_node_registration_t nsh_gre_input_node;
-vlib_node_registration_t nsh_gre_encap_node;
+extern vlib_node_registration_t nsh_gre_input_node;
+extern vlib_node_registration_t nsh_gre_encap_node;
u8 * format_nsh_gre_encap_trace (u8 * s, va_list * args);
nsh_vxlan_gpe_main_t nsh_vxlan_gpe_main;
-vlib_node_registration_t nsh_vxlan_gpe_input_node;
-vlib_node_registration_t nsh_vxlan_gpe_encap_node;
+extern vlib_node_registration_t nsh_vxlan_gpe_input_node;
+extern vlib_node_registration_t nsh_vxlan_gpe_encap_node;
u8 * format_nsh_vxlan_gpe_encap_trace (u8 * s, va_list * args);
#undef _
};
-vlib_node_registration_t srp_input_node = {
+static vlib_node_registration_t srp_input_node = {
.function = srp_input,
.name = "srp-input",
/* Takes a vector of packets. */
void srp_interface_set_hw_enable_function (u32 hw_if_index, srp_hw_enable_function_t * f);
-vlib_node_registration_t srp_ips_process_node;
-vlib_node_registration_t srp_input_node;
+extern vlib_node_registration_t srp_ips_process_node;
/* Called when an IPS control packet is received on given interface. */
void srp_ips_rx_packet (u32 sw_if_index, srp_ips_header_t * ips_packet);
vxlan_main_t vxlan_main;
-vlib_node_registration_t vxlan_input_node;
-vlib_node_registration_t vxlan_encap_node;
+extern vlib_node_registration_t vxlan_input_node;
+extern vlib_node_registration_t vxlan_encap_node;
u8 * format_vxlan_encap_trace (u8 * s, va_list * args);