]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Allow a generic pointer in route extended attributes
authorMaria Matejka <mq@ucw.cz>
Tue, 11 Feb 2020 12:25:04 +0000 (13:25 +0100)
committerMaria Matejka <mq@ucw.cz>
Sat, 20 Mar 2021 19:54:10 +0000 (20:54 +0100)
nest/route.h
nest/rt-attr.c

index 571cd3fe7ec17cc9a96b114582e72c122264dde1..f62ad7d344d449545d02fa8678ebc5d74db1f4c3 100644 (file)
@@ -529,8 +529,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;
 
@@ -561,6 +561,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 */
@@ -615,7 +616,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 94f8970185b8904e01ef12881d7fe3f8c61e88a2..41e497b90e37583118c6fd031a13bac09b330871 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)