mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 09:41:54 +00:00
Fixed displaying BGP and RIP attributes after recent reworks
This commit is contained in:
parent
0f2f5ac58c
commit
d2142ad405
@ -1470,11 +1470,7 @@ bool t;
|
||||
bgp_community = -empty-;
|
||||
bgp_originator_id = 9.7.5.3;
|
||||
bgp_cluster_list = -empty-;
|
||||
t = defined(bgp_mp_reach_nlri);
|
||||
t = defined(bgp_mp_unreach_nlri);
|
||||
bgp_ext_community = --empty--;
|
||||
bgp_as4_path = +empty+;
|
||||
t = defined(bgp_as4_aggregator);
|
||||
t = defined(bgp_aigp);
|
||||
bgp_large_community = ---empty---;
|
||||
t = defined(bgp_mpls_label_stack);
|
||||
|
@ -172,6 +172,7 @@ struct ea_class {
|
||||
btype type; /* Data type ID */ \
|
||||
uint readonly:1; /* This attribute can't be changed by filters */ \
|
||||
uint conf:1; /* Requested by config */ \
|
||||
uint hidden:1; /* Technical attribute, do not show, do not expose to filters */ \
|
||||
void (*format)(const eattr *ea, byte *buf, uint size); \
|
||||
void (*stored)(const eattr *ea); /* When stored into global hash */ \
|
||||
void (*freed)(const eattr *ea); /* When released from global hash */ \
|
||||
|
@ -436,7 +436,8 @@ ea_class_free(struct ea_class *cl)
|
||||
/* No more ea class references. Unregister the attribute. */
|
||||
idm_free(&ea_class_idm, cl->id);
|
||||
ea_class_global[cl->id] = NULL;
|
||||
ea_lex_unregister(cl);
|
||||
if (!cl->hidden)
|
||||
ea_lex_unregister(cl);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -492,7 +493,8 @@ ea_register(pool *p, struct ea_class *def)
|
||||
ASSERT_DIE(def->id < ea_class_max);
|
||||
ea_class_global[def->id] = def;
|
||||
|
||||
ea_lex_register(def);
|
||||
if (!def->hidden)
|
||||
ea_lex_register(def);
|
||||
|
||||
return ea_ref_class(p, def);
|
||||
}
|
||||
@ -1017,37 +1019,40 @@ opaque_format(const struct adata *ad, byte *buf, uint size)
|
||||
}
|
||||
|
||||
static inline void
|
||||
ea_show_int_set(struct cli *c, const struct adata *ad, int way, byte *pos, byte *buf, byte *end)
|
||||
ea_show_int_set(struct cli *c, const char *name, const struct adata *ad, int way, byte *buf)
|
||||
{
|
||||
int i = int_set_format(ad, way, 0, pos, end - pos);
|
||||
cli_printf(c, -1012, "\t%s", buf);
|
||||
int nlen = strlen(name);
|
||||
int i = int_set_format(ad, way, 0, buf, CLI_MSG_SIZE - nlen - 3);
|
||||
cli_printf(c, -1012, "\t%s: %s", name, buf);
|
||||
while (i)
|
||||
{
|
||||
i = int_set_format(ad, way, i, buf, end - buf - 1);
|
||||
i = int_set_format(ad, way, i, buf, CLI_MSG_SIZE - 1);
|
||||
cli_printf(c, -1012, "\t\t%s", buf);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
ea_show_ec_set(struct cli *c, const struct adata *ad, byte *pos, byte *buf, byte *end)
|
||||
ea_show_ec_set(struct cli *c, const char *name, const struct adata *ad, byte *buf)
|
||||
{
|
||||
int i = ec_set_format(ad, 0, pos, end - pos);
|
||||
cli_printf(c, -1012, "\t%s", buf);
|
||||
int nlen = strlen(name);
|
||||
int i = ec_set_format(ad, 0, buf, CLI_MSG_SIZE - nlen - 3);
|
||||
cli_printf(c, -1012, "\t%s: %s", name, buf);
|
||||
while (i)
|
||||
{
|
||||
i = ec_set_format(ad, i, buf, end - buf - 1);
|
||||
i = ec_set_format(ad, i, buf, CLI_MSG_SIZE - 1);
|
||||
cli_printf(c, -1012, "\t\t%s", buf);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void
|
||||
ea_show_lc_set(struct cli *c, const struct adata *ad, byte *pos, byte *buf, byte *end)
|
||||
ea_show_lc_set(struct cli *c, const char *name, const struct adata *ad, byte *buf)
|
||||
{
|
||||
int i = lc_set_format(ad, 0, pos, end - pos);
|
||||
cli_printf(c, -1012, "\t%s", buf);
|
||||
int nlen = strlen(name);
|
||||
int i = lc_set_format(ad, 0, buf, CLI_MSG_SIZE - nlen - 3);
|
||||
cli_printf(c, -1012, "\t%s: %s", name, buf);
|
||||
while (i)
|
||||
{
|
||||
i = lc_set_format(ad, i, buf, end - buf - 1);
|
||||
i = lc_set_format(ad, i, buf, CLI_MSG_SIZE - 1);
|
||||
cli_printf(c, -1012, "\t\t%s", buf);
|
||||
}
|
||||
}
|
||||
@ -1075,7 +1080,7 @@ ea_show(struct cli *c, const eattr *e)
|
||||
struct ea_class *cls = ea_class_global[e->id];
|
||||
ASSERT_DIE(cls);
|
||||
|
||||
if (e->undef)
|
||||
if (e->undef || cls->hidden)
|
||||
return;
|
||||
else if (cls->format)
|
||||
cls->format(e, buf, end - buf);
|
||||
@ -1098,13 +1103,13 @@ ea_show(struct cli *c, const eattr *e)
|
||||
as_path_format(ad, pos, end - pos);
|
||||
break;
|
||||
case T_CLIST:
|
||||
ea_show_int_set(c, ad, 1, pos, buf, end);
|
||||
ea_show_int_set(c, cls->name, ad, 1, buf);
|
||||
return;
|
||||
case T_ECLIST:
|
||||
ea_show_ec_set(c, ad, pos, buf, end);
|
||||
ea_show_ec_set(c, cls->name, ad, buf);
|
||||
return;
|
||||
case T_LCLIST:
|
||||
ea_show_lc_set(c, ad, pos, buf, end);
|
||||
ea_show_lc_set(c, cls->name, ad, buf);
|
||||
return;
|
||||
default:
|
||||
bsprintf(pos, "<type %02x>", e->type);
|
||||
|
@ -1122,12 +1122,14 @@ static union bgp_attr_desc bgp_attr_table[BGP_ATTR_MAX] = {
|
||||
[BA_MP_REACH_NLRI] = {
|
||||
.name = "bgp_mp_reach_nlri",
|
||||
.type = T_OPAQUE,
|
||||
.hidden = 1,
|
||||
.flags = BAF_OPTIONAL,
|
||||
.decode = bgp_decode_mp_reach_nlri,
|
||||
},
|
||||
[BA_MP_UNREACH_NLRI] = {
|
||||
.name = "bgp_mp_unreach_nlri",
|
||||
.type = T_OPAQUE,
|
||||
.hidden = 1,
|
||||
.flags = BAF_OPTIONAL,
|
||||
.decode = bgp_decode_mp_unreach_nlri,
|
||||
},
|
||||
@ -1142,6 +1144,7 @@ static union bgp_attr_desc bgp_attr_table[BGP_ATTR_MAX] = {
|
||||
[BA_AS4_PATH] = {
|
||||
.name = "bgp_as4_path",
|
||||
.type = T_PATH,
|
||||
.hidden = 1,
|
||||
.flags = BAF_OPTIONAL | BAF_TRANSITIVE,
|
||||
.encode = bgp_encode_raw,
|
||||
.decode = bgp_decode_as4_path,
|
||||
@ -1149,6 +1152,7 @@ static union bgp_attr_desc bgp_attr_table[BGP_ATTR_MAX] = {
|
||||
[BA_AS4_AGGREGATOR] = {
|
||||
.name = "bgp_as4_aggregator",
|
||||
.type = T_OPAQUE,
|
||||
.hidden = 1,
|
||||
.flags = BAF_OPTIONAL | BAF_TRANSITIVE,
|
||||
.encode = bgp_encode_raw,
|
||||
.decode = bgp_decode_as4_aggregator,
|
||||
|
@ -1240,7 +1240,7 @@ rip_get_route_info(rte *rte, byte *buf)
|
||||
static void
|
||||
rip_tag_format(const eattr *a, byte *buf, uint buflen)
|
||||
{
|
||||
bsnprintf(buf, buflen, "tag: %04x", a->u.data);
|
||||
bsnprintf(buf, buflen, "%04x", a->u.data);
|
||||
}
|
||||
|
||||
static struct ea_class ea_rip_metric = {
|
||||
|
Loading…
Reference in New Issue
Block a user