mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-18 17:18:42 +00:00
Special attribute types for enums
This commit is contained in:
parent
e261b32511
commit
22f95d9889
@ -165,7 +165,7 @@ f_generate_empty(struct f_dynamic_attr dyn)
|
|||||||
{
|
{
|
||||||
struct f_val empty;
|
struct f_val empty;
|
||||||
|
|
||||||
switch (dyn.type & EAF_TYPE_MASK) {
|
switch (dyn.type) {
|
||||||
case EAF_TYPE_AS_PATH:
|
case EAF_TYPE_AS_PATH:
|
||||||
empty = f_const_empty_path;
|
empty = f_const_empty_path;
|
||||||
break;
|
break;
|
||||||
|
@ -696,7 +696,7 @@
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (e->type & EAF_TYPE_MASK) {
|
switch (e->type) {
|
||||||
case EAF_TYPE_INT:
|
case EAF_TYPE_INT:
|
||||||
RESULT_(da.f_type, i, e->u.data);
|
RESULT_(da.f_type, i, e->u.data);
|
||||||
break;
|
break;
|
||||||
|
@ -540,6 +540,9 @@ const char *ea_custom_name(uint ea);
|
|||||||
#define EAF_TYPE_EC_SET 0x0e /* Set of pairs of u32's - ext. community list */
|
#define EAF_TYPE_EC_SET 0x0e /* Set of pairs of u32's - ext. community list */
|
||||||
#define EAF_TYPE_LC_SET 0x08 /* Set of triplets of u32's - large community list */
|
#define EAF_TYPE_LC_SET 0x08 /* Set of triplets of u32's - large community list */
|
||||||
#define EAF_TYPE_IFACE 0x0c /* Interface pointer stored in adata */
|
#define EAF_TYPE_IFACE 0x0c /* Interface pointer stored in adata */
|
||||||
|
#define EAF_TYPE_BGP_ORIGIN 0x11 /* BGP Origin enum */
|
||||||
|
#define EAF_TYPE_RA_PREFERENCE 0x13 /* RA Preference enum */
|
||||||
|
|
||||||
#define EAF_EMBEDDED 0x01 /* Data stored in eattr.u.data (part of type spec) */
|
#define EAF_EMBEDDED 0x01 /* Data stored in eattr.u.data (part of type spec) */
|
||||||
/* Otherwise, attribute data is adata */
|
/* Otherwise, attribute data is adata */
|
||||||
|
|
||||||
|
@ -948,7 +948,7 @@ ea_show(struct cli *c, const eattr *e)
|
|||||||
if (e->undef)
|
if (e->undef)
|
||||||
bsprintf(pos, "undefined");
|
bsprintf(pos, "undefined");
|
||||||
else
|
else
|
||||||
switch (e->type & EAF_TYPE_MASK)
|
switch (e->type)
|
||||||
{
|
{
|
||||||
case EAF_TYPE_INT:
|
case EAF_TYPE_INT:
|
||||||
bsprintf(pos, "%u", e->u.data);
|
bsprintf(pos, "%u", e->u.data);
|
||||||
@ -1008,7 +1008,10 @@ ea_dump(ea_list *e)
|
|||||||
{
|
{
|
||||||
eattr *a = &e->attrs[i];
|
eattr *a = &e->attrs[i];
|
||||||
debug(" %02x:%02x.%02x", EA_PROTO(a->id), EA_ID(a->id), a->flags);
|
debug(" %02x:%02x.%02x", EA_PROTO(a->id), EA_ID(a->id), a->flags);
|
||||||
debug("=%c", "?iO?I?P???S?????" [a->type & EAF_TYPE_MASK]);
|
debug("=%c",
|
||||||
|
"?iO?IRP???S??pE?"
|
||||||
|
"??L???N?????????"
|
||||||
|
"?o???r??????????" [a->type]);
|
||||||
if (a->originated)
|
if (a->originated)
|
||||||
debug("o");
|
debug("o");
|
||||||
if (a->type & EAF_EMBEDDED)
|
if (a->type & EAF_EMBEDDED)
|
||||||
|
@ -987,7 +987,7 @@ bgp_decode_unknown(struct bgp_parse_state *s, uint code, uint flags, byte *data,
|
|||||||
static const struct bgp_attr_desc bgp_attr_table[] = {
|
static const struct bgp_attr_desc bgp_attr_table[] = {
|
||||||
[BA_ORIGIN] = {
|
[BA_ORIGIN] = {
|
||||||
.name = "origin",
|
.name = "origin",
|
||||||
.type = EAF_TYPE_INT,
|
.type = EAF_TYPE_BGP_ORIGIN,
|
||||||
.flags = BAF_TRANSITIVE,
|
.flags = BAF_TRANSITIVE,
|
||||||
.export = bgp_export_origin,
|
.export = bgp_export_origin,
|
||||||
.encode = bgp_encode_u8,
|
.encode = bgp_encode_u8,
|
||||||
|
@ -318,7 +318,7 @@ bgp_proto_channel: bgp_channel_start bgp_channel_opt_list bgp_channel_end;
|
|||||||
|
|
||||||
|
|
||||||
dynamic_attr: BGP_ORIGIN
|
dynamic_attr: BGP_ORIGIN
|
||||||
{ $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_ENUM_BGP_ORIGIN, EA_CODE(PROTOCOL_BGP, BA_ORIGIN)); } ;
|
{ $$ = f_new_dynamic_attr(EAF_TYPE_BGP_ORIGIN, T_ENUM_BGP_ORIGIN, EA_CODE(PROTOCOL_BGP, BA_ORIGIN)); } ;
|
||||||
dynamic_attr: BGP_PATH
|
dynamic_attr: BGP_PATH
|
||||||
{ $$ = f_new_dynamic_attr(EAF_TYPE_AS_PATH, T_PATH, EA_CODE(PROTOCOL_BGP, BA_AS_PATH)); } ;
|
{ $$ = f_new_dynamic_attr(EAF_TYPE_AS_PATH, T_PATH, EA_CODE(PROTOCOL_BGP, BA_AS_PATH)); } ;
|
||||||
dynamic_attr: BGP_NEXT_HOP
|
dynamic_attr: BGP_NEXT_HOP
|
||||||
|
@ -336,7 +336,7 @@ radv_sensitive:
|
|||||||
| SENSITIVE bool { $$ = $2; }
|
| SENSITIVE bool { $$ = $2; }
|
||||||
;
|
;
|
||||||
|
|
||||||
dynamic_attr: RA_PREFERENCE { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_ENUM_RA_PREFERENCE, EA_RA_PREFERENCE); } ;
|
dynamic_attr: RA_PREFERENCE { $$ = f_new_dynamic_attr(EAF_TYPE_RA_PREFERENCE, T_ENUM_RA_PREFERENCE, EA_RA_PREFERENCE); } ;
|
||||||
dynamic_attr: RA_LIFETIME { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_RA_LIFETIME); } ;
|
dynamic_attr: RA_LIFETIME { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_RA_LIFETIME); } ;
|
||||||
|
|
||||||
CF_CODE
|
CF_CODE
|
||||||
|
Loading…
Reference in New Issue
Block a user