diff options
author | Martin Mares <mj@ucw.cz> | 2000-04-25 21:13:25 +0000 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 2000-04-25 21:13:25 +0000 |
commit | efcece2da3054d9a0e5b5d2233549b3323428023 (patch) | |
tree | 835c92c6f7c6691c22cc998607251ce12431dcbd /proto/bgp/attrs.c | |
parent | a47a01083b6ff9196f39136d68ed32ac70b31d15 (diff) |
Better reporting of both local and remote errors.
Diffstat (limited to 'proto/bgp/attrs.c')
-rw-r--r-- | proto/bgp/attrs.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/proto/bgp/attrs.c b/proto/bgp/attrs.c index 1a75884e..8bf730bc 100644 --- a/proto/bgp/attrs.c +++ b/proto/bgp/attrs.c @@ -22,7 +22,7 @@ #include "bgp.h" -static int bgp_mandatory_attrs[] = { BA_ORIGIN, BA_AS_PATH, BA_NEXT_HOP }; +static byte bgp_mandatory_attrs[] = { BA_ORIGIN, BA_AS_PATH, BA_NEXT_HOP }; struct attr_desc { char *name; /* FIXME: Use the same names as in filters */ @@ -805,12 +805,12 @@ bgp_decode_attrs(struct bgp_conn *conn, byte *attr, unsigned int len, struct lin /* Check if all mandatory attributes are present */ if (mandatory) { - for(i=0; i < sizeof(bgp_mandatory_attrs)/sizeof(bgp_mandatory_attrs[0]); i++) + for(i=0; i < ARRAY_SIZE(bgp_mandatory_attrs); i++) { code = bgp_mandatory_attrs[i]; if (!(seen[code/8] & (1 << (code%8)))) { - bgp_error(conn, 3, 3, code, 1); + bgp_error(conn, 3, 3, &bgp_mandatory_attrs[i], 1); return NULL; } } @@ -854,11 +854,11 @@ bgp_decode_attrs(struct bgp_conn *conn, byte *attr, unsigned int len, struct lin return a; malformed: - bgp_error(conn, 3, 1, len, 0); + bgp_error(conn, 3, 1, NULL, 0); return NULL; err: - bgp_error(conn, 3, errcode, code, 0); /* FIXME: Return attribute data! */ + bgp_error(conn, 3, errcode, z-2, l+2); return NULL; } @@ -868,7 +868,7 @@ bgp_get_attr(eattr *a, byte *buf) unsigned int i = EA_ID(a->id); struct attr_desc *d; - if (i && i < sizeof(bgp_attr_table)/sizeof(bgp_attr_table[0])) + if (i && i < ARRAY_SIZE(bgp_attr_table)) { d = &bgp_attr_table[i]; buf += bsprintf(buf, "%s", d->name); |