Fixes bug related to AS2->AS4 conversion.

This commit is contained in:
Ondrej Zajicek 2009-08-25 19:01:37 +02:00
parent a0c405501f
commit 949bd34e81
3 changed files with 8 additions and 1 deletions

View file

@ -188,6 +188,12 @@ int
as_path_getlen(struct adata *path) as_path_getlen(struct adata *path)
{ {
int bs = bgp_as4_support ? 4 : 2; int bs = bgp_as4_support ? 4 : 2;
return as_path_getlen_int(path, bs);
}
int
as_path_getlen_int(struct adata *path, int bs)
{
int res = 0; int res = 0;
u8 *p = path->data; u8 *p = path->data;
u8 *q = p+path->length; u8 *q = p+path->length;

View file

@ -28,6 +28,7 @@ int as_path_convert_to_old(struct adata *path, byte *dst, int *new_used);
int as_path_convert_to_new(struct adata *path, byte *dst, int req_as); int as_path_convert_to_new(struct adata *path, byte *dst, int req_as);
void as_path_format(struct adata *path, byte *buf, unsigned int size); void as_path_format(struct adata *path, byte *buf, unsigned int size);
int as_path_getlen(struct adata *path); int as_path_getlen(struct adata *path);
int as_path_getlen_int(struct adata *path, int bs);
int as_path_get_first(struct adata *path, u32 *orig_as); int as_path_get_first(struct adata *path, u32 *orig_as);
int as_path_get_last(struct adata *path, u32 *last_as); int as_path_get_last(struct adata *path, u32 *last_as);
int as_path_is_member(struct adata *path, u32 as); int as_path_is_member(struct adata *path, u32 as);

View file

@ -1189,7 +1189,7 @@ bgp_reconstruct_4b_atts(struct bgp_proto *p, rta *a, struct linpool *pool)
if (a4) if (a4)
log(L_WARN "%s: AS4_AGGREGATOR attribute received, but AGGREGATOR attribute is missing", p->p.name); log(L_WARN "%s: AS4_AGGREGATOR attribute received, but AGGREGATOR attribute is missing", p->p.name);
int p2_len = as_path_getlen(p2->u.ptr); int p2_len = as_path_getlen_int(p2->u.ptr, 2);
int p4_len = p4 ? validate_as4_path(p, p4->u.ptr) : -1; int p4_len = p4 ? validate_as4_path(p, p4->u.ptr) : -1;
if (p4 && (p4_len < 0)) if (p4 && (p4_len < 0))