diff options
author | Ondrej Zajicek <santiago@crfreenet.org> | 2010-03-29 19:29:03 +0200 |
---|---|---|
committer | Ondrej Zajicek <santiago@crfreenet.org> | 2010-03-29 19:29:03 +0200 |
commit | 126683feeda03ffb5a4ce23611e59a4598382d49 (patch) | |
tree | 9aeb9632949113b218b485100a9e52e008e8c1b9 /proto | |
parent | eb0f129fcedcecbee85403095abad8f59b82683c (diff) | |
download | bird-126683feeda03ffb5a4ce23611e59a4598382d49.tar bird-126683feeda03ffb5a4ce23611e59a4598382d49.zip |
Filter language updates; new route attributes and datatype.
- Adds bgp_originator_id and bgp_cluster_list route attributes.
- Adds dotted quad filter datatype (for router IDs, used by
bgp_originator_id and ospf_router_id route attributes).
- Fixes pair ~ pair set matching.
- Documentation updates.
Diffstat (limited to 'proto')
-rw-r--r-- | proto/bgp/config.Y | 20 | ||||
-rw-r--r-- | proto/ospf/config.Y | 2 | ||||
-rw-r--r-- | proto/ospf/ospf.c | 10 |
3 files changed, 19 insertions, 13 deletions
diff --git a/proto/bgp/config.Y b/proto/bgp/config.Y index f882aaa..c4ed103 100644 --- a/proto/bgp/config.Y +++ b/proto/bgp/config.Y @@ -23,7 +23,8 @@ CF_KEYWORDS(BGP, LOCAL, NEIGHBOR, AS, HOLD, TIME, CONNECT, RETRY, KEEPALIVE, BGP_ATOMIC_AGGR, BGP_AGGREGATOR, BGP_COMMUNITY, SOURCE, ADDRESS, PASSWORD, RR, RS, CLIENT, CLUSTER, ID, AS4, ADVERTISE, IPV4, CAPABILITIES, LIMIT, PASSIVE, PREFER, OLDER, MISSING, LLADDR, - DROP, IGNORE, ROUTE, REFRESH, INTERPRET, COMMUNITIES) + DROP, IGNORE, ROUTE, REFRESH, INTERPRET, COMMUNITIES, + BGP_ORIGINATOR_ID, BGP_CLUSTER_LIST) CF_GRAMMAR @@ -90,22 +91,27 @@ bgp_proto: | bgp_proto INTERPRET COMMUNITIES bool ';' { BGP_CFG->interpret_communities = $4; } ; -CF_ADDTO(dynamic_attr, BGP_PATH - { $$ = f_new_dynamic_attr(EAF_TYPE_AS_PATH, T_PATH, EA_CODE(EAP_BGP, BA_AS_PATH)); }) -CF_ADDTO(dynamic_attr, BGP_LOCAL_PREF - { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(EAP_BGP, BA_LOCAL_PREF)); }) -CF_ADDTO(dynamic_attr, BGP_MED - { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(EAP_BGP, BA_MULTI_EXIT_DISC)); }) CF_ADDTO(dynamic_attr, BGP_ORIGIN { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_ENUM_BGP_ORIGIN, EA_CODE(EAP_BGP, BA_ORIGIN)); }) +CF_ADDTO(dynamic_attr, BGP_PATH + { $$ = f_new_dynamic_attr(EAF_TYPE_AS_PATH, T_PATH, EA_CODE(EAP_BGP, BA_AS_PATH)); }) CF_ADDTO(dynamic_attr, BGP_NEXT_HOP { $$ = f_new_dynamic_attr(EAF_TYPE_IP_ADDRESS, T_IP, EA_CODE(EAP_BGP, BA_NEXT_HOP)); }) +CF_ADDTO(dynamic_attr, BGP_MED + { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(EAP_BGP, BA_MULTI_EXIT_DISC)); }) +CF_ADDTO(dynamic_attr, BGP_LOCAL_PREF + { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(EAP_BGP, BA_LOCAL_PREF)); }) CF_ADDTO(dynamic_attr, BGP_ATOMIC_AGGR { $$ = f_new_dynamic_attr(EAF_TYPE_OPAQUE, T_ENUM_EMPTY, EA_CODE(EAP_BGP, BA_ATOMIC_AGGR)); }) CF_ADDTO(dynamic_attr, BGP_AGGREGATOR { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(EAP_BGP, BA_AGGREGATOR)); }) CF_ADDTO(dynamic_attr, BGP_COMMUNITY { $$ = f_new_dynamic_attr(EAF_TYPE_INT_SET, T_CLIST, EA_CODE(EAP_BGP, BA_COMMUNITY)); }) +CF_ADDTO(dynamic_attr, BGP_ORIGINATOR_ID + { $$ = f_new_dynamic_attr(EAF_TYPE_ROUTER_ID, T_QUAD, EA_CODE(EAP_BGP, BA_ORIGINATOR_ID)); }) +CF_ADDTO(dynamic_attr, BGP_CLUSTER_LIST + { $$ = f_new_dynamic_attr(EAF_TYPE_INT_SET, T_CLIST, EA_CODE(EAP_BGP, BA_CLUSTER_LIST)); }) + CF_ENUM(T_ENUM_BGP_ORIGIN, ORIGIN_, IGP, EGP, INCOMPLETE) diff --git a/proto/ospf/config.Y b/proto/ospf/config.Y index aeb8a0d..da7c97e 100644 --- a/proto/ospf/config.Y +++ b/proto/ospf/config.Y @@ -304,7 +304,7 @@ opttext: CF_ADDTO(dynamic_attr, OSPF_METRIC1 { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_OSPF_METRIC1); }) CF_ADDTO(dynamic_attr, OSPF_METRIC2 { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_OSPF_METRIC2); }) CF_ADDTO(dynamic_attr, OSPF_TAG { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_OSPF_TAG); }) -CF_ADDTO(dynamic_attr, OSPF_ROUTER_ID { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_OSPF_ROUTER_ID); }) +CF_ADDTO(dynamic_attr, OSPF_ROUTER_ID { $$ = f_new_dynamic_attr(EAF_TYPE_ROUTER_ID | EAF_TEMP, T_QUAD, EA_OSPF_ROUTER_ID); }) CF_CLI(SHOW OSPF, optsym, [<name>], [[Show information about OSPF protocol]]) { ospf_sh(proto_get_named($3, &proto_ospf)); }; diff --git a/proto/ospf/ospf.c b/proto/ospf/ospf.c index d345e49..5ed8abb 100644 --- a/proto/ospf/ospf.c +++ b/proto/ospf/ospf.c @@ -333,7 +333,7 @@ ospf_build_attrs(ea_list * next, struct linpool *pool, u32 m1, u32 m2, l->attrs[2].u.data = tag; l->attrs[3].id = EA_OSPF_ROUTER_ID; l->attrs[3].flags = 0; - l->attrs[3].type = EAF_TYPE_INT | EAF_TEMP; + l->attrs[3].type = EAF_TYPE_ROUTER_ID | EAF_TEMP; l->attrs[3].u.data = rid; return l; } @@ -598,11 +598,11 @@ ospf_get_attr(eattr * a, byte * buf, int buflen UNUSED) bsprintf(buf, "metric2"); return GA_NAME; case EA_OSPF_TAG: - bsprintf(buf, "tag: %08x (%u)", a->u.data, a->u.data); - return GA_FULL; - case EA_OSPF_ROUTER_ID: - bsprintf(buf, "router_id: %R (%u)", a->u.data, a->u.data); + bsprintf(buf, "tag: 0x%08x", a->u.data); return GA_FULL; + case EA_OSPF_ROUTER_ID: + bsprintf(buf, "router_id"); + return GA_NAME; default: return GA_UNKNOWN; } |