]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Support for address family constants
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Sun, 3 Nov 2019 19:26:54 +0000 (20:26 +0100)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Sun, 3 Nov 2019 21:25:44 +0000 (22:25 +0100)
We already had them defined on BGP level, but they are more general.

bird-gdb.py
conf/gen_keywords.m4
conf/gen_parser.m4
filter/data.h
lib/ip.h
nest/config.Y

index a85ef8c666c28d419db60939495f8bb815293107..3cf65a9cca0168fc9be709dfab49d2b8dfac7e63 100644 (file)
@@ -30,6 +30,7 @@ class BIRDFValPrinter(BIRDPrinter):
             "T_ENUM_ROA": "i",
             "T_ENUM_NETTYPE": "i",
             "T_ENUM_RA_PREFERENCE": "i",
+            "T_ENUM_AF": "i",
             "T_IP": "ip",
             "T_NET": "net",
             "T_STRING": "s",
index cf3fb58ecb37bb6137a0e89d869294172e40ecbd..0c1dc545b52835a46cfb4e6ee160e7101f18bffe 100644 (file)
@@ -34,9 +34,11 @@ m4_define(CF_CLI, `CF_KEYWORDS(m4_translit($1, [[ ]], [[,]]))
 ')
 
 # Enums are translated to C initializers: use CF_ENUM(typename, prefix, values)
-m4_define(CF_enum, `m4_divert(1){ "CF_enum_prefix[[]]$1", -((CF_enum_type<<16) | CF_enum_prefix[[]]$1), NULL },
+# For different prefix: CF_ENUM_PX(typename, external prefix, C prefix, values)
+m4_define(CF_enum, `m4_divert(1){ "CF_enum_prefix_ext[[]]$1", -((CF_enum_type<<16) | CF_enum_prefix_int[[]]$1), NULL },
 m4_divert(-1)')
-m4_define(CF_ENUM, `m4_define([[CF_enum_type]],$1)m4_define([[CF_enum_prefix]],$2)CF_iterate([[CF_enum]], [[m4_shift(m4_shift($@))]])DNL')
+m4_define(CF_ENUM, `m4_define([[CF_enum_type]],$1)m4_define([[CF_enum_prefix_ext]],$2)m4_define([[CF_enum_prefix_int]],$2)CF_iterate([[CF_enum]], [[m4_shift(m4_shift($@))]])DNL')
+m4_define(CF_ENUM_PX, `m4_define([[CF_enum_type]],$1)m4_define([[CF_enum_prefix_ext]],$2)m4_define([[CF_enum_prefix_int]],$3)CF_iterate([[CF_enum]], [[m4_shift(m4_shift(m4_shift($@)))]])DNL')
 
 # After all configuration templates end, we generate the 
 m4_m4wrap(`
index af43d96f0c9b132ae31e136025f518050a257ba1..5b378a93e97dcbe9d2004e4bb6113dab1b8f6d94 100644 (file)
@@ -44,6 +44,7 @@ m4_define(CF_CLI_HELP, `')
 
 # ENUM declarations are ignored
 m4_define(CF_ENUM, `')
+m4_define(CF_ENUM_PX, `')
 
 # After all configuration templates end, we finally generate the grammar file.
 m4_m4wrap(`
index 083595f4c2937da059e902adcb096b8320a8546c..db6b6e121e02d79b25e13e40989acaebe7f87881 100644 (file)
@@ -38,6 +38,7 @@ enum f_type {
   T_ENUM_ROA = 0x35,
   T_ENUM_NETTYPE = 0x36,
   T_ENUM_RA_PREFERENCE = 0x37,
+  T_ENUM_AF = 0x38,
 
 /* new enums go here */
   T_ENUM_EMPTY = 0x3f, /* Special hack for atomic_aggr */
index 945f289363bd45e8f35eb10ca559b4166830b6d7..f3b1cc31f99372df073ebf3f81b43f0713e939a7 100644 (file)
--- a/lib/ip.h
+++ b/lib/ip.h
 #define UDP_HEADER_LENGTH      8
 
 
+/* IANA Address Family Numbers */
+/* https://www.iana.org/assignments/address-family-numbers/address-family-numbers.xhtml */
+/* Would use AF_ prefix, but that collides with POSIX address family numbers */
+#define AFI_IPV4               1
+#define AFI_IPV6               2
+
+
 #ifdef DEBUGGING
 
 typedef struct ip4_addr {
index 1bc203ddf9d891953fe4f55807808d2f37e2bb29..8fe060c522d77e42d1cd0e3929293fda14f90442 100644 (file)
@@ -85,6 +85,7 @@ CF_ENUM(T_ENUM_RTS, RTS_, DUMMY, STATIC, INHERIT, DEVICE, STATIC_DEVICE, REDIREC
 CF_ENUM(T_ENUM_SCOPE, SCOPE_, HOST, LINK, SITE, ORGANIZATION, UNIVERSE, UNDEFINED)
 CF_ENUM(T_ENUM_RTD, RTD_, UNICAST, BLACKHOLE, UNREACHABLE, PROHIBIT)
 CF_ENUM(T_ENUM_ROA, ROA_, UNKNOWN, VALID, INVALID)
+CF_ENUM_PX(T_ENUM_AF, AF_, AFI_, IPV4, IPV6)
 
 %type <i32> idval
 %type <f> imexport