]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Protocol: Introducing an enum protocol_class
authorJan Maria Matejka <mq@ucw.cz>
Mon, 7 May 2018 12:47:00 +0000 (14:47 +0200)
committerJan Maria Matejka <mq@ucw.cz>
Tue, 29 May 2018 10:35:06 +0000 (12:35 +0200)
This supersedes the EAP_* constants.

27 files changed:
filter/filter.c
nest/proto.c
nest/protocol.h
nest/route.h
nest/rt-attr.c
nest/rt-dev.c
proto/babel/babel.c
proto/babel/babel.h
proto/bfd/bfd.c
proto/bgp/attrs.c
proto/bgp/bgp.c
proto/bgp/bgp.h
proto/bgp/config.Y
proto/ospf/ospf.c
proto/ospf/ospf.h
proto/pipe/pipe.c
proto/radv/radv.c
proto/radv/radv.h
proto/rip/rip.c
proto/rip/rip.h
proto/rpki/rpki.c
proto/static/static.c
sysdep/linux/krt-sys.h
sysdep/linux/netlink.c
sysdep/unix/krt.c
sysdep/unix/krt.h
test/bt-utils.c

index 66a9e05ee09ca5148fd691d29b1634eca4301715..6381550ea89da498684ed4807f7596cca6e020da 100644 (file)
@@ -1522,7 +1522,7 @@ interpret(struct f_inst *what)
 
       /* We ignore temporary attributes, probably not a problem here */
       /* 0x02 is a value of BA_AS_PATH, we don't want to include BGP headers */
-      eattr *e = ea_find((*f_rte)->attrs->eattrs, EA_CODE(EAP_BGP, 0x02));
+      eattr *e = ea_find((*f_rte)->attrs->eattrs, EA_CODE(PROTOCOL_BGP, 0x02));
 
       if (!e || e->type != EAF_TYPE_AS_PATH)
        runtime("Missing AS_PATH attribute");
index 15d6f4de6d9d056b77c5bbe3ab49c0ed64da7c67..49f71304b61c6acdaa4e2af602564d4d2f3b4e8c 100644 (file)
@@ -25,6 +25,7 @@ pool *proto_pool;
 list  proto_list;
 
 static list protocol_list;
+struct protocol *class_to_protocol[PROTOCOL__MAX];
 
 #define PD(pr, msg, args...) do { if (pr->debug & D_STATES) { log(L_TRACE "%s: " msg, pr->name , ## args); } } while(0)
 
@@ -1256,11 +1257,9 @@ void
 proto_build(struct protocol *p)
 {
   add_tail(&protocol_list, &p->n);
-  if (p->attr_class)
-    {
-      ASSERT(!attr_class_to_protocol[p->attr_class]);
-      attr_class_to_protocol[p->attr_class] = p;
-    }
+  ASSERT(p->class);
+  ASSERT(!class_to_protocol[p->class]);
+  class_to_protocol[p->class] = p;
 }
 
 /* FIXME: convert this call to some protocol hook */
index 8a22d76b860ca5a3dc241881c1deae6601baebeb..d790e90e363698b7ab3b7d55dc8ce4c0c0fe7e0b 100644 (file)
@@ -37,12 +37,31 @@ struct symbol;
  *     Routing Protocol
  */
 
+enum protocol_class {
+  PROTOCOL_NONE,
+  PROTOCOL_BABEL,
+  PROTOCOL_BFD,
+  PROTOCOL_BGP,
+  PROTOCOL_DEVICE,
+  PROTOCOL_DIRECT,
+  PROTOCOL_KERNEL,
+  PROTOCOL_OSPF,
+  PROTOCOL_PIPE,
+  PROTOCOL_RADV,
+  PROTOCOL_RIP,
+  PROTOCOL_RPKI,
+  PROTOCOL_STATIC,
+  PROTOCOL__MAX
+};
+
+extern struct protocol *class_to_protocol[PROTOCOL__MAX];
+
 struct protocol {
   node n;
   char *name;
   char *template;                      /* Template for automatic generation of names */
   int name_counter;                    /* Counter for automatic name generation */
-  int attr_class;                      /* Attribute class known to this protocol */
+  enum protocol_class class;           /* Machine readable protocol class */
   uint preference;                     /* Default protocol preference */
   uint channel_mask;                   /* Mask of accepted channel types (NB_*) */
   uint proto_size;                     /* Size of protocol data structure */
index 791275195d9e2efb7d973ed1175658836b334da0..1391b357a6199413f6da03ae4fbceb22c1420e03 100644 (file)
@@ -457,7 +457,7 @@ static inline int rte_is_reachable(rte *r)
  */
 
 typedef struct eattr {
-  word id;                             /* EA_CODE(EAP_..., protocol-dependent ID) */
+  word id;                             /* EA_CODE(PROTOCOL_..., protocol-dependent ID) */
   byte flags;                          /* Protocol-dependent flags */
   byte type;                           /* Attribute type and several flags (EAF_...) */
   union {
@@ -466,20 +466,11 @@ typedef struct eattr {
   } u;
 } eattr;
 
-#define EAP_GENERIC 0                  /* Generic attributes */
-#define EAP_BGP 1                      /* BGP attributes */
-#define EAP_RIP 2                      /* RIP */
-#define EAP_OSPF 3                     /* OSPF */
-#define EAP_KRT 4                      /* Kernel route attributes */
-#define EAP_BABEL 5                    /* Babel attributes */
-#define EAP_RADV 6                     /* Router advertisment attributes */
-#define EAP_MAX 7
-
 #define EA_CODE(proto,id) (((proto) << 8) | (id))
 #define EA_PROTO(ea) ((ea) >> 8)
 #define EA_ID(ea) ((ea) & 0xff)
 
-#define EA_GEN_IGP_METRIC EA_CODE(EAP_GENERIC, 0)
+#define EA_GEN_IGP_METRIC EA_CODE(PROTOCOL_NONE, 0)
 
 #define EA_CODE_MASK 0xffff
 #define EA_ALLOW_UNDEF 0x10000         /* ea_find: allow EAF_TYPE_UNDEF */
@@ -656,9 +647,6 @@ rta_set_recursive_next_hop(rtable *dep, rta *a, rtable *tab, ip_addr gw, ip_addr
 static inline void rt_lock_hostentry(struct hostentry *he) { if (he) he->uc++; }
 static inline void rt_unlock_hostentry(struct hostentry *he) { if (he) he->uc--; }
 
-
-extern struct protocol *attr_class_to_protocol[EAP_MAX];
-
 /*
  *     Default protocol preferences
  */
index 881687de5c9d7dfc4cedd02dec878166316f2d9c..f92efc2e446d414e30e46d8f0ce3cbd35ce42b15 100644 (file)
@@ -88,9 +88,6 @@ static struct idm src_ids;
 
 static HASH(struct rte_src) src_hash;
 
-struct protocol *attr_class_to_protocol[EAP_MAX];
-
-
 static void
 rte_src_init(void)
 {
@@ -851,7 +848,7 @@ ea_show(struct cli *c, eattr *e)
   byte buf[CLI_MSG_SIZE];
   byte *pos = buf, *end = buf + sizeof(buf);
 
-  if (p = attr_class_to_protocol[EA_PROTO(e->id)])
+  if (p = class_to_protocol[EA_PROTO(e->id)])
     {
       pos += bsprintf(pos, "%s.", p->name);
       if (p->get_attr)
index 66f458e7fc3c40ff896a3f2e4319a50de294974c..61f025cea8a28a974e9542dc579db83934f5184e 100644 (file)
@@ -185,6 +185,7 @@ dev_copy_config(struct proto_config *dest, struct proto_config *src)
 struct protocol proto_device = {
   .name =              "Direct",
   .template =          "direct%d",
+  .class =             PROTOCOL_DIRECT,
   .preference =                DEF_PREF_DIRECT,
   .channel_mask =      NB_IP | NB_IP6_SADR,
   .proto_size =                sizeof(struct rt_dev_proto),
index 44c6adb86ae19fc54a9fad1d5a9d58f9e178f4df..83986cb9cff1d67d8d751d8cc87cbb8081fb17af 100644 (file)
@@ -2312,7 +2312,7 @@ babel_reconfigure(struct proto *P, struct proto_config *CF)
 struct protocol proto_babel = {
   .name =              "Babel",
   .template =          "babel%d",
-  .attr_class =                EAP_BABEL,
+  .class =             PROTOCOL_BABEL,
   .preference =                DEF_PREF_BABEL,
   .channel_mask =      NB_IP | NB_IP6_SADR,
   .proto_size =                sizeof(struct babel_proto),
index e5c9cd5b6e08d863de4509bd5a85f824a62de7df..14765c60f41a43147a1f4b566ec674f028b33cd2 100644 (file)
@@ -25,8 +25,8 @@
 #include "lib/string.h"
 #include "lib/timer.h"
 
-#define EA_BABEL_METRIC                EA_CODE(EAP_BABEL, 0)
-#define EA_BABEL_ROUTER_ID     EA_CODE(EAP_BABEL, 1)
+#define EA_BABEL_METRIC                EA_CODE(PROTOCOL_BABEL, 0)
+#define EA_BABEL_ROUTER_ID     EA_CODE(PROTOCOL_BABEL, 1)
 
 #define BABEL_MAGIC            42
 #define BABEL_VERSION          2
index 67ec227059402ef4b304c2ae7bd8eaa4412aac7f..64d5007bb007450beaa4e9e574a81c835fbe3a48 100644 (file)
@@ -1116,6 +1116,7 @@ bfd_show_sessions(struct proto *P)
 struct protocol proto_bfd = {
   .name =              "BFD",
   .template =          "bfd%d",
+  .class =             PROTOCOL_BFD,
   .proto_size =                sizeof(struct bfd_proto),
   .config_size =       sizeof(struct bfd_config),
   .init =              bfd_init,
index 9003feb2dcc0df2f392cef8d7a85b99ea7fedda8..5695e1c1aeedc56c5c235a34658614bdfb469ba6 100644 (file)
@@ -92,7 +92,7 @@ bgp_set_attr(ea_list **attrs, struct linpool *pool, uint code, uint flags, uintp
   a->next = *attrs;
   *attrs = a;
 
-  e->id = EA_CODE(EAP_BGP, code);
+  e->id = EA_CODE(PROTOCOL_BGP, code);
   e->type = bgp_attr_table[code].type;
   e->flags = flags;
 
@@ -702,7 +702,7 @@ static inline void
 bgp_decode_unknown(struct bgp_parse_state *s, uint code, uint flags, byte *data, uint len, ea_list **to)
 {
   /* Cannot use bgp_set_attr_data() as it works on known attributes only */
-  ea_set_attr_data(to, s->pool, EA_CODE(EAP_BGP, code), flags, EAF_TYPE_OPAQUE, data, len);
+  ea_set_attr_data(to, s->pool, EA_CODE(PROTOCOL_BGP, code), flags, EAF_TYPE_OPAQUE, data, len);
 }
 
 
@@ -857,7 +857,7 @@ bgp_attr_known(uint code)
 static inline void
 bgp_export_attr(struct bgp_export_state *s, eattr *a, ea_list *to)
 {
-  if (EA_PROTO(a->id) != EAP_BGP)
+  if (EA_PROTO(a->id) != PROTOCOL_BGP)
     return;
 
   uint code = EA_ID(a->id);
@@ -937,7 +937,7 @@ bgp_export_attrs(struct bgp_export_state *s, ea_list *attrs)
 static inline int
 bgp_encode_attr(struct bgp_write_state *s, eattr *a, byte *buf, uint size)
 {
-  ASSERT(EA_PROTO(a->id) == EAP_BGP);
+  ASSERT(EA_PROTO(a->id) == PROTOCOL_BGP);
 
   uint code = EA_ID(a->id);
 
@@ -1405,7 +1405,7 @@ bgp_import_control(struct proto *P, rte **new, ea_list **attrs UNUSED, struct li
   /* Handle well-known communities, RFC 1997 */
   struct eattr *c;
   if (p->cf->interpret_communities &&
-      (c = ea_find(e->attrs->eattrs, EA_CODE(EAP_BGP, BA_COMMUNITY))))
+      (c = ea_find(e->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_COMMUNITY))))
   {
     struct adata *d = c->u.ptr;
 
@@ -1570,7 +1570,7 @@ bgp_rt_notify(struct proto *P, struct channel *C, net *n, rte *new, rte *old, ea
 static inline u32
 bgp_get_neighbor(rte *r)
 {
-  eattr *e = ea_find(r->attrs->eattrs, EA_CODE(EAP_BGP, BA_AS_PATH));
+  eattr *e = ea_find(r->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_AS_PATH));
   u32 as;
 
   if (e && as_path_get_first_regular(e->u.ptr, &as))
@@ -1612,8 +1612,8 @@ bgp_rte_better(rte *new, rte *old)
     return 0;
 
   /* Start with local preferences */
-  x = ea_find(new->attrs->eattrs, EA_CODE(EAP_BGP, BA_LOCAL_PREF));
-  y = ea_find(old->attrs->eattrs, EA_CODE(EAP_BGP, BA_LOCAL_PREF));
+  x = ea_find(new->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_LOCAL_PREF));
+  y = ea_find(old->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_LOCAL_PREF));
   n = x ? x->u.data : new_bgp->cf->default_local_pref;
   o = y ? y->u.data : old_bgp->cf->default_local_pref;
   if (n > o)
@@ -1624,8 +1624,8 @@ bgp_rte_better(rte *new, rte *old)
   /* RFC 4271 9.1.2.2. a)  Use AS path lengths */
   if (new_bgp->cf->compare_path_lengths || old_bgp->cf->compare_path_lengths)
   {
-    x = ea_find(new->attrs->eattrs, EA_CODE(EAP_BGP, BA_AS_PATH));
-    y = ea_find(old->attrs->eattrs, EA_CODE(EAP_BGP, BA_AS_PATH));
+    x = ea_find(new->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_AS_PATH));
+    y = ea_find(old->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_AS_PATH));
     n = x ? as_path_getlen(x->u.ptr) : AS_PATH_MAXLEN;
     o = y ? as_path_getlen(y->u.ptr) : AS_PATH_MAXLEN;
     if (n < o)
@@ -1635,8 +1635,8 @@ bgp_rte_better(rte *new, rte *old)
   }
 
   /* RFC 4271 9.1.2.2. b) Use origins */
-  x = ea_find(new->attrs->eattrs, EA_CODE(EAP_BGP, BA_ORIGIN));
-  y = ea_find(old->attrs->eattrs, EA_CODE(EAP_BGP, BA_ORIGIN));
+  x = ea_find(new->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_ORIGIN));
+  y = ea_find(old->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_ORIGIN));
   n = x ? x->u.data : ORIGIN_INCOMPLETE;
   o = y ? y->u.data : ORIGIN_INCOMPLETE;
   if (n < o)
@@ -1658,8 +1658,8 @@ bgp_rte_better(rte *new, rte *old)
   if (new_bgp->cf->med_metric || old_bgp->cf->med_metric ||
       (bgp_get_neighbor(new) == bgp_get_neighbor(old)))
   {
-    x = ea_find(new->attrs->eattrs, EA_CODE(EAP_BGP, BA_MULTI_EXIT_DISC));
-    y = ea_find(old->attrs->eattrs, EA_CODE(EAP_BGP, BA_MULTI_EXIT_DISC));
+    x = ea_find(new->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_MULTI_EXIT_DISC));
+    y = ea_find(old->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_MULTI_EXIT_DISC));
     n = x ? x->u.data : new_bgp->cf->default_med;
     o = y ? y->u.data : old_bgp->cf->default_med;
     if (n < o)
@@ -1684,8 +1684,8 @@ bgp_rte_better(rte *new, rte *old)
 
   /* RFC 4271 9.1.2.2. f) Compare BGP identifiers */
   /* RFC 4456 9. a) Use ORIGINATOR_ID instead of local neighbor ID */
-  x = ea_find(new->attrs->eattrs, EA_CODE(EAP_BGP, BA_ORIGINATOR_ID));
-  y = ea_find(old->attrs->eattrs, EA_CODE(EAP_BGP, BA_ORIGINATOR_ID));
+  x = ea_find(new->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_ORIGINATOR_ID));
+  y = ea_find(old->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_ORIGINATOR_ID));
   n = x ? x->u.data : new_bgp->remote_id;
   o = y ? y->u.data : old_bgp->remote_id;
 
@@ -1702,8 +1702,8 @@ bgp_rte_better(rte *new, rte *old)
     return 0;
 
   /* RFC 4456 9. b) Compare cluster list lengths */
-  x = ea_find(new->attrs->eattrs, EA_CODE(EAP_BGP, BA_CLUSTER_LIST));
-  y = ea_find(old->attrs->eattrs, EA_CODE(EAP_BGP, BA_CLUSTER_LIST));
+  x = ea_find(new->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_CLUSTER_LIST));
+  y = ea_find(old->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_CLUSTER_LIST));
   n = x ? int_set_get_size(x->u.ptr) : 0;
   o = y ? int_set_get_size(y->u.ptr) : 0;
   if (n < o)
@@ -1733,8 +1733,8 @@ bgp_rte_mergable(rte *pri, rte *sec)
     return 0;
 
   /* Start with local preferences */
-  x = ea_find(pri->attrs->eattrs, EA_CODE(EAP_BGP, BA_LOCAL_PREF));
-  y = ea_find(sec->attrs->eattrs, EA_CODE(EAP_BGP, BA_LOCAL_PREF));
+  x = ea_find(pri->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_LOCAL_PREF));
+  y = ea_find(sec->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_LOCAL_PREF));
   p = x ? x->u.data : pri_bgp->cf->default_local_pref;
   s = y ? y->u.data : sec_bgp->cf->default_local_pref;
   if (p != s)
@@ -1743,8 +1743,8 @@ bgp_rte_mergable(rte *pri, rte *sec)
   /* RFC 4271 9.1.2.2. a)  Use AS path lengths */
   if (pri_bgp->cf->compare_path_lengths || sec_bgp->cf->compare_path_lengths)
   {
-    x = ea_find(pri->attrs->eattrs, EA_CODE(EAP_BGP, BA_AS_PATH));
-    y = ea_find(sec->attrs->eattrs, EA_CODE(EAP_BGP, BA_AS_PATH));
+    x = ea_find(pri->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_AS_PATH));
+    y = ea_find(sec->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_AS_PATH));
     p = x ? as_path_getlen(x->u.ptr) : AS_PATH_MAXLEN;
     s = y ? as_path_getlen(y->u.ptr) : AS_PATH_MAXLEN;
 
@@ -1756,8 +1756,8 @@ bgp_rte_mergable(rte *pri, rte *sec)
   }
 
   /* RFC 4271 9.1.2.2. b) Use origins */
-  x = ea_find(pri->attrs->eattrs, EA_CODE(EAP_BGP, BA_ORIGIN));
-  y = ea_find(sec->attrs->eattrs, EA_CODE(EAP_BGP, BA_ORIGIN));
+  x = ea_find(pri->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_ORIGIN));
+  y = ea_find(sec->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_ORIGIN));
   p = x ? x->u.data : ORIGIN_INCOMPLETE;
   s = y ? y->u.data : ORIGIN_INCOMPLETE;
   if (p != s)
@@ -1767,8 +1767,8 @@ bgp_rte_mergable(rte *pri, rte *sec)
   if (pri_bgp->cf->med_metric || sec_bgp->cf->med_metric ||
       (bgp_get_neighbor(pri) == bgp_get_neighbor(sec)))
   {
-    x = ea_find(pri->attrs->eattrs, EA_CODE(EAP_BGP, BA_MULTI_EXIT_DISC));
-    y = ea_find(sec->attrs->eattrs, EA_CODE(EAP_BGP, BA_MULTI_EXIT_DISC));
+    x = ea_find(pri->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_MULTI_EXIT_DISC));
+    y = ea_find(sec->attrs->eattrs, EA_CODE(PROTOCOL_BGP, BA_MULTI_EXIT_DISC));
     p = x ? x->u.data : pri_bgp->cf->default_med;
     s = y ? y->u.data : sec_bgp->cf->default_med;
     if (p != s)
@@ -2009,8 +2009,8 @@ bgp_get_attr(eattr *a, byte *buf, int buflen)
 void
 bgp_get_route_info(rte *e, byte *buf, ea_list *attrs)
 {
-  eattr *p = ea_find(attrs, EA_CODE(EAP_BGP, BA_AS_PATH));
-  eattr *o = ea_find(attrs, EA_CODE(EAP_BGP, BA_ORIGIN));
+  eattr *p = ea_find(attrs, EA_CODE(PROTOCOL_BGP, BA_AS_PATH));
+  eattr *o = ea_find(attrs, EA_CODE(PROTOCOL_BGP, BA_ORIGIN));
   u32 origas;
 
   buf += bsprintf(buf, " (%d", e->pref);
index 9db26050cc5b1a89ed96186540b6bf7a7f0b5f70..932ad9f3d6adba3924c40e0f541740415915b53c 100644 (file)
@@ -2148,7 +2148,7 @@ struct channel_class channel_bgp = {
 struct protocol proto_bgp = {
   .name =              "BGP",
   .template =          "bgp%d",
-  .attr_class =        EAP_BGP,
+  .class =             PROTOCOL_BGP,
   .preference =        DEF_PREF_BGP,
   .channel_mask =      NB_IP | NB_VPN | NB_FLOW,
   .proto_size =                sizeof(struct bgp_proto),
index 30424abb852cc52fd7cd974554a3c4ff8b34397b..de05dcfb26adb8f7b4aee8affb499538611e9455 100644 (file)
@@ -462,7 +462,7 @@ struct rte_source *bgp_get_source(struct bgp_proto *p, u32 path_id);
 static inline eattr *
 bgp_find_attr(ea_list *attrs, uint code)
 {
-  return ea_find(attrs, EA_CODE(EAP_BGP, code));
+  return ea_find(attrs, EA_CODE(PROTOCOL_BGP, code));
 }
 
 eattr *
index 41eaa729bc9155a737756cae57ce2707d53d9202..c731c4c705e76fd2805f0340184dc1ce8b51362a 100644 (file)
@@ -253,29 +253,29 @@ bgp_proto_channel: bgp_channel_start bgp_channel_opt_list bgp_channel_end;
 
 
 CF_ADDTO(dynamic_attr, BGP_ORIGIN
-       { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_ENUM_BGP_ORIGIN, EA_CODE(EAP_BGP, BA_ORIGIN)); })
+       { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_ENUM_BGP_ORIGIN, EA_CODE(PROTOCOL_BGP, BA_ORIGIN)); })
 CF_ADDTO(dynamic_attr, BGP_PATH
-       { $$ = f_new_dynamic_attr(EAF_TYPE_AS_PATH, T_PATH, EA_CODE(EAP_BGP, BA_AS_PATH)); })
+       { $$ = f_new_dynamic_attr(EAF_TYPE_AS_PATH, T_PATH, EA_CODE(PROTOCOL_BGP, BA_AS_PATH)); })
 CF_ADDTO(dynamic_attr, BGP_NEXT_HOP
-       { $$ = f_new_dynamic_attr(EAF_TYPE_IP_ADDRESS, T_IP, EA_CODE(EAP_BGP, BA_NEXT_HOP)); })
+       { $$ = f_new_dynamic_attr(EAF_TYPE_IP_ADDRESS, T_IP, EA_CODE(PROTOCOL_BGP, BA_NEXT_HOP)); })
 CF_ADDTO(dynamic_attr, BGP_MED
-       { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(EAP_BGP, BA_MULTI_EXIT_DISC)); })
+       { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(PROTOCOL_BGP, BA_MULTI_EXIT_DISC)); })
 CF_ADDTO(dynamic_attr, BGP_LOCAL_PREF
-       { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(EAP_BGP, BA_LOCAL_PREF)); })
+       { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(PROTOCOL_BGP, BA_LOCAL_PREF)); })
 CF_ADDTO(dynamic_attr, BGP_ATOMIC_AGGR
-       { $$ = f_new_dynamic_attr(EAF_TYPE_OPAQUE, T_ENUM_EMPTY, EA_CODE(EAP_BGP, BA_ATOMIC_AGGR)); })
+       { $$ = f_new_dynamic_attr(EAF_TYPE_OPAQUE, T_ENUM_EMPTY, EA_CODE(PROTOCOL_BGP, BA_ATOMIC_AGGR)); })
 CF_ADDTO(dynamic_attr, BGP_AGGREGATOR
-       { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(EAP_BGP, BA_AGGREGATOR)); })
+       { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(PROTOCOL_BGP, BA_AGGREGATOR)); })
 CF_ADDTO(dynamic_attr, BGP_COMMUNITY
-       { $$ = f_new_dynamic_attr(EAF_TYPE_INT_SET, T_CLIST, EA_CODE(EAP_BGP, BA_COMMUNITY)); })
+       { $$ = f_new_dynamic_attr(EAF_TYPE_INT_SET, T_CLIST, EA_CODE(PROTOCOL_BGP, BA_COMMUNITY)); })
 CF_ADDTO(dynamic_attr, BGP_ORIGINATOR_ID
-       { $$ = f_new_dynamic_attr(EAF_TYPE_ROUTER_ID, T_QUAD, EA_CODE(EAP_BGP, BA_ORIGINATOR_ID)); })
+       { $$ = f_new_dynamic_attr(EAF_TYPE_ROUTER_ID, T_QUAD, EA_CODE(PROTOCOL_BGP, BA_ORIGINATOR_ID)); })
 CF_ADDTO(dynamic_attr, BGP_CLUSTER_LIST
-       { $$ = f_new_dynamic_attr(EAF_TYPE_INT_SET, T_CLIST, EA_CODE(EAP_BGP, BA_CLUSTER_LIST)); })
+       { $$ = f_new_dynamic_attr(EAF_TYPE_INT_SET, T_CLIST, EA_CODE(PROTOCOL_BGP, BA_CLUSTER_LIST)); })
 CF_ADDTO(dynamic_attr, BGP_EXT_COMMUNITY
-       { $$ = f_new_dynamic_attr(EAF_TYPE_EC_SET, T_ECLIST, EA_CODE(EAP_BGP, BA_EXT_COMMUNITY)); })
+       { $$ = f_new_dynamic_attr(EAF_TYPE_EC_SET, T_ECLIST, EA_CODE(PROTOCOL_BGP, BA_EXT_COMMUNITY)); })
 CF_ADDTO(dynamic_attr, BGP_LARGE_COMMUNITY
-       { $$ = f_new_dynamic_attr(EAF_TYPE_LC_SET, T_LCLIST, EA_CODE(EAP_BGP, BA_LARGE_COMMUNITY)); })
+       { $$ = f_new_dynamic_attr(EAF_TYPE_LC_SET, T_LCLIST, EA_CODE(PROTOCOL_BGP, BA_LARGE_COMMUNITY)); })
 
 
 
index 0a9efd195c677475704482a08510bd53cfa32e59..d9edc3e7e4937c86740629ea501960a3a253d675 100644 (file)
@@ -1463,7 +1463,7 @@ ospf_sh_lsadb(struct lsadb_show_data *ld)
 struct protocol proto_ospf = {
   .name =              "OSPF",
   .template =          "ospf%d",
-  .attr_class =                EAP_OSPF,
+  .class =             PROTOCOL_OSPF,
   .preference =                DEF_PREF_OSPF,
   .channel_mask =      NB_IP,
   .proto_size =                sizeof(struct ospf_proto),
index f26ed99ccb4a98aa32938691a492437c6c98b6d2..ff55621a467ad032764d4c4220275571fa1fa563 100644 (file)
@@ -863,10 +863,10 @@ struct lsadb_show_data {
 };
 
 
-#define EA_OSPF_METRIC1        EA_CODE(EAP_OSPF, 0)
-#define EA_OSPF_METRIC2        EA_CODE(EAP_OSPF, 1)
-#define EA_OSPF_TAG    EA_CODE(EAP_OSPF, 2)
-#define EA_OSPF_ROUTER_ID EA_CODE(EAP_OSPF, 3)
+#define EA_OSPF_METRIC1        EA_CODE(PROTOCOL_OSPF, 0)
+#define EA_OSPF_METRIC2        EA_CODE(PROTOCOL_OSPF, 1)
+#define EA_OSPF_TAG    EA_CODE(PROTOCOL_OSPF, 2)
+#define EA_OSPF_ROUTER_ID EA_CODE(PROTOCOL_OSPF, 3)
 
 
 /* ospf.c */
index 49ff52e28ee793bf208f2c4929fba13e8b3069d4..ffc677f42f4e930d09550394191568d3f51fb902 100644 (file)
@@ -275,6 +275,7 @@ pipe_show_proto_info(struct proto *P)
 struct protocol proto_pipe = {
   .name =              "Pipe",
   .template =          "pipe%d",
+  .class =             PROTOCOL_PIPE,
   .proto_size =                sizeof(struct pipe_proto),
   .config_size =       sizeof(struct pipe_config),
   .postconfig =                pipe_postconfig,
index 8a79dfaf245851f57768dafc14a5c40590dbce18..2f5f1c27996a8871717211515d0a3ba90d37b55b 100644 (file)
@@ -762,7 +762,7 @@ radv_get_attr(eattr *a, byte *buf, int buflen UNUSED)
 struct protocol proto_radv = {
   .name =              "RAdv",
   .template =          "radv%d",
-  .attr_class =                EAP_RADV,
+  .class =             PROTOCOL_RADV,
   .channel_mask =      NB_IP6,
   .proto_size =                sizeof(struct radv_proto),
   .config_size =       sizeof(struct radv_config),
index 66f785a74ad4ca9fa7a71946061788dc26a2e0de..719948d575e1c91064d4f1ebc1dce5e938ba2776 100644 (file)
@@ -192,8 +192,8 @@ struct radv_iface
 #define RA_PREF_MASK   0x18
 
 /* Attributes */
-#define EA_RA_PREFERENCE       EA_CODE(EAP_RADV, 0)
-#define EA_RA_LIFETIME         EA_CODE(EAP_RADV, 1)
+#define EA_RA_PREFERENCE       EA_CODE(PROTOCOL_RADV, 0)
+#define EA_RA_LIFETIME         EA_CODE(PROTOCOL_RADV, 1)
 
 #ifdef LOCAL_DEBUG
 #define RADV_FORCE_DEBUG 1
index baf987374e06c18ed12cd6097c89878482a8d066..adc2b47125a0a2334213fa6cd3fd79113418e5e1 100644 (file)
@@ -1274,7 +1274,7 @@ rip_dump(struct proto *P)
 struct protocol proto_rip = {
   .name =              "RIP",
   .template =          "rip%d",
-  .attr_class =                EAP_RIP,
+  .class =             PROTOCOL_RIP,
   .preference =                DEF_PREF_RIP,
   .channel_mask =      NB_IP,
   .proto_size =                sizeof(struct rip_proto),
index 5569633364411cf985ccd69612d58f6a4d4dc629..2dc348623e52a9d78305a9c9c4ac02e7747b2c47 100644 (file)
@@ -182,8 +182,8 @@ struct rip_rte
 #define RIP_ENTRY_VALID                1       /* Valid outgoing route */
 #define RIP_ENTRY_STALE                2       /* Stale outgoing route, waiting for GC */
 
-#define EA_RIP_METRIC          EA_CODE(EAP_RIP, 0)
-#define EA_RIP_TAG             EA_CODE(EAP_RIP, 1)
+#define EA_RIP_METRIC          EA_CODE(PROTOCOL_RIP, 0)
+#define EA_RIP_TAG             EA_CODE(PROTOCOL_RIP, 1)
 
 static inline int rip_is_v2(struct rip_proto *p)
 { return p->rip2; }
index 74860071aaa43d49414116930cad25265d33c10a..36097dc515fa7ac295c2fec40dbeea23fecc5caf 100644 (file)
@@ -913,6 +913,7 @@ rpki_copy_config(struct proto_config *dest UNUSED, struct proto_config *src UNUS
 struct protocol proto_rpki = {
   .name =              "RPKI",
   .template =          "rpki%d",
+  .class =             PROTOCOL_RPKI,
   .preference =        DEF_PREF_RPKI,
   .proto_size =        sizeof(struct rpki_proto),
   .config_size =       sizeof(struct rpki_config),
index ede4c7345bcd0c8359494bf4dc38a7da3f7b32e6..8dfa6f35e5dea85d8f97b73ee149e8dc218b981c 100644 (file)
@@ -656,6 +656,7 @@ static_show(struct proto *P)
 struct protocol proto_static = {
   .name =              "Static",
   .template =          "static%d",
+  .class =             PROTOCOL_STATIC,
   .preference =                DEF_PREF_STATIC,
   .channel_mask =      NB_ANY,
   .proto_size =                sizeof(struct static_proto),
index 76ae29b716e550b79a82081a524cf7413efbeb4b..2b8cdaa77c58c33a3da5365f0d97b0e346edd4d0 100644 (file)
@@ -34,9 +34,9 @@ static inline struct ifa * kif_get_primary_ip(struct iface *i UNUSED) { return N
 
 #define KRT_ALLOW_MERGE_PATHS  1
 
-#define EA_KRT_PREFSRC         EA_CODE(EAP_KRT, 0x10)
-#define EA_KRT_REALM           EA_CODE(EAP_KRT, 0x11)
-#define EA_KRT_SCOPE           EA_CODE(EAP_KRT, 0x12)
+#define EA_KRT_PREFSRC         EA_CODE(PROTOCOL_KERNEL, 0x10)
+#define EA_KRT_REALM           EA_CODE(PROTOCOL_KERNEL, 0x11)
+#define EA_KRT_SCOPE           EA_CODE(PROTOCOL_KERNEL, 0x12)
 
 
 #define KRT_METRICS_MAX                0x10    /* RTAX_QUICKACK+1 */
@@ -48,22 +48,22 @@ static inline struct ifa * kif_get_primary_ip(struct iface *i UNUSED) { return N
  * Following attributes are parts of RTA_METRICS kernel route attribute, their
  * ids must be consistent with their RTAX_* constants (+ KRT_METRICS_OFFSET)
  */
-#define EA_KRT_METRICS         EA_CODE(EAP_KRT, 0x20)  /* Dummy one */
-#define EA_KRT_LOCK            EA_CODE(EAP_KRT, 0x21)
-#define EA_KRT_MTU             EA_CODE(EAP_KRT, 0x22)
-#define EA_KRT_WINDOW          EA_CODE(EAP_KRT, 0x23)
-#define EA_KRT_RTT             EA_CODE(EAP_KRT, 0x24)
-#define EA_KRT_RTTVAR          EA_CODE(EAP_KRT, 0x25)
-#define EA_KRT_SSTRESH         EA_CODE(EAP_KRT, 0x26)
-#define EA_KRT_CWND            EA_CODE(EAP_KRT, 0x27)
-#define EA_KRT_ADVMSS          EA_CODE(EAP_KRT, 0x28)
-#define EA_KRT_REORDERING      EA_CODE(EAP_KRT, 0x29)
-#define EA_KRT_HOPLIMIT                EA_CODE(EAP_KRT, 0x2a)
-#define EA_KRT_INITCWND                EA_CODE(EAP_KRT, 0x2b)
-#define EA_KRT_FEATURES                EA_CODE(EAP_KRT, 0x2c)
-#define EA_KRT_RTO_MIN         EA_CODE(EAP_KRT, 0x2d)
-#define EA_KRT_INITRWND                EA_CODE(EAP_KRT, 0x2e)
-#define EA_KRT_QUICKACK                EA_CODE(EAP_KRT, 0x2f)
+#define EA_KRT_METRICS         EA_CODE(PROTOCOL_KERNEL, 0x20)  /* Dummy one */
+#define EA_KRT_LOCK            EA_CODE(PROTOCOL_KERNEL, 0x21)
+#define EA_KRT_MTU             EA_CODE(PROTOCOL_KERNEL, 0x22)
+#define EA_KRT_WINDOW          EA_CODE(PROTOCOL_KERNEL, 0x23)
+#define EA_KRT_RTT             EA_CODE(PROTOCOL_KERNEL, 0x24)
+#define EA_KRT_RTTVAR          EA_CODE(PROTOCOL_KERNEL, 0x25)
+#define EA_KRT_SSTRESH         EA_CODE(PROTOCOL_KERNEL, 0x26)
+#define EA_KRT_CWND            EA_CODE(PROTOCOL_KERNEL, 0x27)
+#define EA_KRT_ADVMSS          EA_CODE(PROTOCOL_KERNEL, 0x28)
+#define EA_KRT_REORDERING      EA_CODE(PROTOCOL_KERNEL, 0x29)
+#define EA_KRT_HOPLIMIT                EA_CODE(PROTOCOL_KERNEL, 0x2a)
+#define EA_KRT_INITCWND                EA_CODE(PROTOCOL_KERNEL, 0x2b)
+#define EA_KRT_FEATURES                EA_CODE(PROTOCOL_KERNEL, 0x2c)
+#define EA_KRT_RTO_MIN         EA_CODE(PROTOCOL_KERNEL, 0x2d)
+#define EA_KRT_INITRWND                EA_CODE(PROTOCOL_KERNEL, 0x2e)
+#define EA_KRT_QUICKACK                EA_CODE(PROTOCOL_KERNEL, 0x2f)
 
 /* Bits of EA_KRT_LOCK, also based on RTAX_* constants */
 #define EA_KRT_LOCK_MTU                EA_KRT_LOCK | EA_BIT(0x2)
index 84591eb2ec4885f4f3bd398447c8f2aaba129330..f5db1575b7838050b6bec023d5f5c894920f3fab 100644 (file)
@@ -1751,7 +1751,7 @@ nl_parse_route(struct nl_parse_state *s, struct nlmsghdr *h)
       for (t = 1; t < KRT_METRICS_MAX; t++)
        if (metrics[0] & (1 << t))
          {
-           ea->attrs[n].id = EA_CODE(EAP_KRT, KRT_METRICS_OFFSET + t);
+           ea->attrs[n].id = EA_CODE(PROTOCOL_KERNEL, KRT_METRICS_OFFSET + t);
            ea->attrs[n].flags = 0;
            ea->attrs[n].type = EAF_TYPE_INT; /* FIXME: Some are EAF_TYPE_BITFIELD */
            ea->attrs[n].u.data = metrics[t];
index b4fb196741c9d1f95af9792cbd2fba5d847aa861..ae51927e9844422311f6ba05354dcf43b263e6ab 100644 (file)
@@ -232,6 +232,7 @@ kif_copy_config(struct proto_config *dest, struct proto_config *src)
 struct protocol proto_unix_iface = {
   .name =              "Device",
   .template =          "device%d",
+  .class =             PROTOCOL_DEVICE,
   .proto_size =                sizeof(struct kif_proto),
   .config_size =       sizeof(struct kif_config),
   .preconfig =         kif_preconfig,
@@ -1235,7 +1236,7 @@ krt_get_attr(eattr *a, byte *buf, int buflen)
 struct protocol proto_unix_kernel = {
   .name =              "Kernel",
   .template =          "kernel%d",
-  .attr_class =                EAP_KRT,
+  .class =             PROTOCOL_KERNEL,
   .preference =                DEF_PREF_INHERITED,
   .channel_mask =      NB_IP | MAYBE_IP6_SADR | MAYBE_MPLS,
   .proto_size =                sizeof(struct krt_proto),
index b627882d655f42d977c4030c03bdcdc5fe8fb551..ff27bcf52d7ab2b6a8c1e81c6c2507cdd84ca612 100644 (file)
@@ -30,8 +30,8 @@ struct kif_proto;
 
 #define KRT_DEFAULT_ECMP_LIMIT 16
 
-#define EA_KRT_SOURCE  EA_CODE(EAP_KRT, 0)
-#define EA_KRT_METRIC  EA_CODE(EAP_KRT, 1)
+#define EA_KRT_SOURCE  EA_CODE(PROTOCOL_KERNEL, 0)
+#define EA_KRT_METRIC  EA_CODE(PROTOCOL_KERNEL, 1)
 
 /* Whenever we recognize our own routes, we allow learing of foreign routes */
 
index 571ef2fa9a1e8b69c63f1f7a83168f6bae9d6a30..7653abf64f0ae35abf433f6d79767ffabc45f1a3 100644 (file)
@@ -75,8 +75,8 @@ bt_bird_init(void)
 
 void bt_bird_cleanup(void)
 {
-  for (int i = 0; i < EAP_MAX; i++)
-    attr_class_to_protocol[i] = NULL;
+  for (int i = 0; i < PROTOCOL__MAX; i++)
+    class_to_protocol[i] = NULL;
 
   config = new_config = NULL;
 }