Fixes bug related to AS2->AS4 conversion.
This commit is contained in:
parent
a0c405501f
commit
949bd34e81
3 changed files with 8 additions and 1 deletions
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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))
|
||||||
|
|
Loading…
Reference in a new issue