]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Added as_path_get_first().
authorMartin Mares <mj@ucw.cz>
Fri, 19 May 2000 11:01:06 +0000 (11:01 +0000)
committerMartin Mares <mj@ucw.cz>
Fri, 19 May 2000 11:01:06 +0000 (11:01 +0000)
nest/a-path.c
nest/attrs.h

index 0ea3e7b2c4897e53a29ae79b022727613100083d..0c4675518d81674150c97851764e01469c0f601d 100644 (file)
@@ -103,6 +103,34 @@ as_path_getlen(struct adata *path)
   return res;
 }
 
+int
+as_path_get_first(struct adata *path)
+{
+  int res = -1;
+  u8 *p = path->data;
+  u8 *q = p+path->length;
+  int len;
+
+  while (p<q)
+    {
+      switch (*p++)
+       {
+       case AS_PATH_SET:
+         if (len = *p++)
+           res = get_u16(p);
+         p += 2*len;
+         break;
+       case AS_PATH_SEQUENCE:
+         if (len = *p++)
+           res = get_u16(p+2*(len-1));
+         p += 2*len;
+         break;
+       default: bug("as_path_get_first: Invalid path segment");
+       }
+    }
+  return res;
+}
+
 #define MASK_PLUS do { mask = mask->next; if (!mask) return next == q; \
                       asterisk = (mask->val == PM_ANY); \
                        if (asterisk) { mask = mask->next; if (!mask) { return 1; } } \
index 2618fa35b965b82784c8548b0443684f67a7d1dd..abd6b9e9d4d20572e3bdd92ada76899577d019d7 100644 (file)
@@ -17,6 +17,7 @@
 struct adata *as_path_prepend(struct linpool *pool, struct adata *olda, int as);
 void as_path_format(struct adata *path, byte *buf, unsigned int size);
 int as_path_getlen(struct adata *path);
+int as_path_get_first(struct adata *path);
 
 struct f_path_mask {
   struct f_path_mask *next;