summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--filter/filter.c4
-rw-r--r--nest/a-path.c10
-rw-r--r--proto/bgp/attrs.c4
3 files changed, 9 insertions, 9 deletions
diff --git a/filter/filter.c b/filter/filter.c
index 7bcf383..07a25f4 100644
--- a/filter/filter.c
+++ b/filter/filter.c
@@ -734,7 +734,7 @@ interpret(struct f_inst *what)
runtime( "AS Path expected" );
as = 0;
- as_path_get_last(v1.val.ad, &as); /* really last */
+ as_path_get_first(v1.val.ad, &as);
res.type = T_INT;
res.val.i = as;
break;
@@ -744,7 +744,7 @@ interpret(struct f_inst *what)
runtime( "AS path expected" );
as = 0;
- as_path_get_first(v1.val.ad, &as); /* really first */
+ as_path_get_last(v1.val.ad, &as);
res.type = T_INT;
res.val.i = as;
break;
diff --git a/nest/a-path.c b/nest/a-path.c
index 19d61f0..c804619 100644
--- a/nest/a-path.c
+++ b/nest/a-path.c
@@ -213,7 +213,7 @@ as_path_getlen_int(struct adata *path, int bs)
}
int
-as_path_get_first(struct adata *path, u32 *orig_as)
+as_path_get_last(struct adata *path, u32 *orig_as)
{
int bs = bgp_as4_support ? 4 : 2;
int found = 0;
@@ -229,8 +229,7 @@ as_path_get_first(struct adata *path, u32 *orig_as)
case AS_PATH_SET:
if (len = *p++)
{
- found = 1;
- res = get_as(p);
+ found = 0;
p += bs * len;
}
break;
@@ -246,12 +245,13 @@ as_path_get_first(struct adata *path, u32 *orig_as)
}
}
- *orig_as = res;
+ if (found)
+ *orig_as = res;
return found;
}
int
-as_path_get_last(struct adata *path, u32 *last_as)
+as_path_get_first(struct adata *path, u32 *last_as)
{
u8 *p = path->data;
diff --git a/proto/bgp/attrs.c b/proto/bgp/attrs.c
index 831ada5..d839ed0 100644
--- a/proto/bgp/attrs.c
+++ b/proto/bgp/attrs.c
@@ -996,7 +996,7 @@ bgp_get_neighbor(rte *r)
eattr *e = ea_find(r->attrs->eattrs, EA_CODE(EAP_BGP, BA_AS_PATH));
u32 as;
- if (e && as_path_get_last(e->u.ptr, &as))
+ if (e && as_path_get_first(e->u.ptr, &as))
return as;
else
return ((struct bgp_proto *) r->attrs->proto)->remote_as;
@@ -1470,7 +1470,7 @@ bgp_get_route_info(rte *e, byte *buf, ea_list *attrs)
u32 origas;
buf += bsprintf(buf, " (%d) [", e->pref);
- if (p && as_path_get_first(p->u.ptr, &origas))
+ if (p && as_path_get_last(p->u.ptr, &origas))
buf += bsprintf(buf, "AS%u", origas);
if (o)
buf += bsprintf(buf, "%c", "ie?"[o->u.data]);