]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Extended route attributes may include also pointers
authorMaria Matejka <mq@ucw.cz>
Tue, 14 Sep 2021 17:53:03 +0000 (19:53 +0200)
committerMaria Matejka <mq@ucw.cz>
Wed, 13 Oct 2021 17:09:04 +0000 (19:09 +0200)
nest/route.h
nest/rt-attr.c

index 1dea058f163407c66070d1d1c5611e3754ab1f65..67df1ce0950d5c471270c93bac85043488ae3297 100644 (file)
@@ -501,8 +501,8 @@ typedef struct eattr {
   byte flags;                          /* Protocol-dependent flags */
   byte type;                           /* Attribute type and several flags (EAF_...) */
   union {
-    u32 data;
-    const struct adata *ptr;                   /* Attribute data elsewhere */
+    uintptr_t data;
+    const struct adata *ptr;           /* Attribute data elsewhere */
   } u;
 } eattr;
 
@@ -533,6 +533,7 @@ const char *ea_custom_name(uint ea);
 #define EAF_TYPE_AS_PATH 0x06          /* BGP AS path (encoding per RFC 1771:4.3) */
 #define EAF_TYPE_BITFIELD 0x09         /* 32-bit embedded bitfield */
 #define EAF_TYPE_INT_SET 0x0a          /* Set of u32's (e.g., a community list) */
+#define EAF_TYPE_PTR 0x0d              /* Pointer to an object */
 #define EAF_TYPE_EC_SET 0x0e           /* Set of pairs of u32's - ext. community list */
 #define EAF_TYPE_LC_SET 0x12           /* Set of triplets of u32's - large community list */
 #define EAF_TYPE_UNDEF 0x1f            /* `force undefined' entry */
@@ -587,7 +588,7 @@ struct ea_walk_state {
 
 eattr *ea_find(ea_list *, unsigned ea);
 eattr *ea_walk(struct ea_walk_state *s, uint id, uint max);
-int ea_get_int(ea_list *, unsigned ea, int def);
+uintptr_t ea_get_int(ea_list *, unsigned ea, uintptr_t def);
 void ea_dump(ea_list *);
 void ea_sort(ea_list *);               /* Sort entries in all sub-lists */
 unsigned ea_scan(ea_list *);           /* How many bytes do we need for merged ea_list */
index 4057bf37ba9805e0a06595633de5bf7b8bdd3046..00744bea2c32e941c10ff0855743a211396930a7 100644 (file)
@@ -541,8 +541,8 @@ ea_walk(struct ea_walk_state *s, uint id, uint max)
  * by calling ea_find() to find the attribute, extracting its value or returning
  * a provided default if no such attribute is present.
  */
-int
-ea_get_int(ea_list *e, unsigned id, int def)
+uintptr_t
+ea_get_int(ea_list *e, unsigned id, uintptr_t def)
 {
   eattr *a = ea_find(e, id);
   if (!a)