mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 17:51:53 +00:00
56a2bed46b
Added real comparison of BGP routes (inspired by the Cisco one). Default local preference and default MED are now settable. Defined filter keywords for all BGP attributes we know.
80 lines
2.9 KiB
Plaintext
80 lines
2.9 KiB
Plaintext
/*
|
|
* BIRD -- Border Gateway Protocol Configuration
|
|
*
|
|
* (c) 2000 Martin Mares <mj@ucw.cz>
|
|
*
|
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
|
*/
|
|
|
|
CF_HDR
|
|
|
|
#include "proto/bgp/bgp.h"
|
|
|
|
#define BGP_CFG ((struct bgp_config *) this_proto)
|
|
|
|
CF_DECLS
|
|
|
|
CF_KEYWORDS(BGP, LOCAL, NEIGHBOR, AS, HOLD, TIME, CONNECT, RETRY, KEEPALIVE,
|
|
MULTIHOP, STARTUP, VIA, NEXT, HOP, SELF, DEFAULT, PATH, METRIC,
|
|
BGP_PATH, BGP_LOCAL_PREF, BGP_MED, BGP_ORIGIN, BGP_NEXT_HOP,
|
|
BGP_ATOMIC_AGGR, BGP_AGGREGATOR, BGP_COMMUNITY)
|
|
|
|
CF_GRAMMAR
|
|
|
|
CF_ADDTO(proto, bgp_proto '}' { bgp_check(BGP_CFG); } )
|
|
|
|
bgp_proto_start: proto_start BGP {
|
|
this_proto = proto_config_new(&proto_bgp, sizeof(struct bgp_config));
|
|
this_proto->preference = DEF_PREF_BGP;
|
|
BGP_CFG->hold_time = 240;
|
|
BGP_CFG->connect_retry_time = 120;
|
|
BGP_CFG->initial_hold_time = 240;
|
|
BGP_CFG->default_med = ~0;
|
|
BGP_CFG->compare_path_lengths = 1;
|
|
}
|
|
;
|
|
|
|
bgp_proto:
|
|
bgp_proto_start proto_name '{'
|
|
| bgp_proto proto_item ';'
|
|
| bgp_proto LOCAL AS NUM ';' {
|
|
if ($4 < 0 || $4 > 65535) cf_error("AS number out of range");
|
|
BGP_CFG->local_as = $4;
|
|
}
|
|
| bgp_proto NEIGHBOR IPA AS NUM ';' {
|
|
if ($5 < 0 || $5 > 65535) cf_error("AS number out of range");
|
|
BGP_CFG->remote_ip = $3;
|
|
BGP_CFG->remote_as = $5;
|
|
}
|
|
| bgp_proto HOLD TIME NUM ';' { BGP_CFG->hold_time = $4; }
|
|
| bgp_proto STARTUP HOLD TIME NUM ';' { BGP_CFG->initial_hold_time = $5; }
|
|
| bgp_proto CONNECT RETRY TIME NUM ';' { BGP_CFG->connect_retry_time = $5; }
|
|
| bgp_proto KEEPALIVE TIME NUM ';' { BGP_CFG->connect_retry_time = $4; }
|
|
| bgp_proto MULTIHOP NUM VIA IPA ';' { BGP_CFG->multihop = $3; BGP_CFG->multihop_via = $5; }
|
|
| bgp_proto NEXT HOP SELF ';' { BGP_CFG->next_hop_self = 1; }
|
|
| bgp_proto PATH METRIC NUM ';' { BGP_CFG->compare_path_lengths = $4; }
|
|
| bgp_proto DEFAULT BGP_MED NUM ';' { BGP_CFG->default_med = $4; }
|
|
| bgp_proto DEFAULT BGP_LOCAL_PREF NUM ';' { BGP_CFG->default_local_pref = $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_INT, EA_CODE(EAP_BGP, BA_ORIGIN)); })
|
|
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_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_CODE
|
|
|
|
CF_END
|