]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Lib: Check size of nets
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Sun, 10 Dec 2017 12:18:36 +0000 (13:18 +0100)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Sun, 10 Dec 2017 12:18:36 +0000 (13:18 +0100)
lib/net.c
lib/net.h
sysdep/unix/main.c

index a00ff2721254a4a0caca1f0bca49d4f91de114ca..9335b78f5ece5172d0261ee3ed3a803ab15ea60f 100644 (file)
--- a/lib/net.c
+++ b/lib/net.c
@@ -288,3 +288,21 @@ net_in_netX(const net_addr *a, const net_addr *n)
 
   return (net_pxlen(n) <= net_pxlen(a)) && ipa_in_netX(net_prefix(a), n);
 }
+
+#define CHECK_NET(T,S) \
+  ({ if (sizeof(T) != S) die("sizeof %s is %d/%d", #T, (int) sizeof(T), S); })
+
+void
+net_init(void)
+{
+  CHECK_NET(net_addr,          24);
+  CHECK_NET(net_addr_ip4,       8);
+  CHECK_NET(net_addr_ip6,      20);
+  CHECK_NET(net_addr_vpn4,     16);
+  CHECK_NET(net_addr_vpn6,     32);
+  CHECK_NET(net_addr_roa4,     16);
+  CHECK_NET(net_addr_roa6,     28);
+  CHECK_NET(net_addr_flow4,     8);
+  CHECK_NET(net_addr_flow6,    20);
+  CHECK_NET(net_addr_mpls,      8);
+}
index 2138f275d6269a2aa6f7c4423565e2c4b0a90e92..4b2077ae4935844a895299cc46878d4df8053d56 100644 (file)
--- a/lib/net.h
+++ b/lib/net.h
@@ -45,7 +45,7 @@ typedef struct net_addr {
   u8 type;
   u8 pxlen;
   u16 length;
-  u8 data[16];
+  u8 data[20];
   u64 align[0];
 } net_addr;
 
@@ -76,6 +76,7 @@ typedef struct net_addr_vpn6 {
   u8 pxlen;
   u16 length;
   ip6_addr prefix;
+  u32 padding;
   u64 rd;
 } net_addr_vpn6;
 
@@ -152,7 +153,7 @@ extern const u16 net_max_text_length[];
   ((net_addr_vpn4) { NET_VPN4, pxlen, sizeof(net_addr_vpn4), prefix, rd })
 
 #define NET_ADDR_VPN6(prefix,pxlen,rd) \
-  ((net_addr_vpn6) { NET_VPN6, pxlen, sizeof(net_addr_vpn6), prefix, rd })
+  ((net_addr_vpn6) { NET_VPN6, pxlen, sizeof(net_addr_vpn6), prefix, 0, rd })
 
 #define NET_ADDR_ROA4(prefix,pxlen,max_pxlen,asn) \
   ((net_addr_roa4) { NET_ROA4, pxlen, sizeof(net_addr_roa4), prefix, max_pxlen, asn })
@@ -544,5 +545,6 @@ static inline int net_in_net_ip6(const net_addr_ip6 *a, const net_addr_ip6 *b)
 int ipa_in_netX(const ip_addr A, const net_addr *N);
 int net_in_netX(const net_addr *A, const net_addr *N);
 
+void net_init(void);
 
 #endif
index e3252b436faf7404c6d8adaa326c3a9f2f279396..2251d3fb7a1f6d23c32935909e2f76e32ade45d3 100644 (file)
@@ -820,6 +820,7 @@ main(int argc, char **argv)
     log_init_debug("");
   log_switch(debug_flag, NULL, NULL);
 
+  net_init();
   resource_init();
   timer_init();
   olock_init();