Statistics
| Branch: | Revision:

iof-bird-daemon / proto / bgp / config.Y @ 6cf72d7a

History | View | Annotate | Download (7.96 KB)

1 2638249d Martin Mares
/*
2
 *	BIRD -- Border Gateway Protocol Configuration
3
 *
4
 *	(c) 2000 Martin Mares <mj@ucw.cz>
5
 *
6
 *	Can be freely distributed and used under the terms of the GNU GPL.
7
 */
8
9
CF_HDR
10
11
#include "proto/bgp/bgp.h"
12
13 cea63664 Martin Mares
CF_DEFINES
14
15 2638249d Martin Mares
#define BGP_CFG ((struct bgp_config *) this_proto)
16
17
CF_DECLS
18
19 087cecd0 Ondrej Zajicek
CF_KEYWORDS(BGP, LOCAL, NEIGHBOR, AS, HOLD, TIME, CONNECT, RETRY,
20
	KEEPALIVE, MULTIHOP, STARTUP, VIA, NEXT, HOP, SELF, DEFAULT,
21
	PATH, METRIC, ERROR, START, DELAY, FORGET, WAIT, ENABLE,
22
	DISABLE, AFTER, BGP_PATH, BGP_LOCAL_PREF, BGP_MED, BGP_ORIGIN,
23
	BGP_NEXT_HOP, BGP_ATOMIC_AGGR, BGP_AGGREGATOR, BGP_COMMUNITY,
24 42a0c054 Ondrej Zajicek
	BGP_EXT_COMMUNITY, SOURCE, ADDRESS, PASSWORD, RR, RS, CLIENT,
25
	CLUSTER, ID, AS4, ADVERTISE, IPV4, CAPABILITIES, LIMIT, PASSIVE,
26
	PREFER, OLDER, MISSING, LLADDR, DROP, IGNORE, ROUTE, REFRESH,
27
	INTERPRET, COMMUNITIES, BGP_ORIGINATOR_ID, BGP_CLUSTER_LIST, IGP,
28 00a09f3c Ondrej Zajicek
	TABLE, GATEWAY, DIRECT, RECURSIVE, MED, TTL, SECURITY, DETERMINISTIC,
29 523f020b Ondrej Zajicek
	SECONDARY, ALLOW, BFD, ADD, PATHS, RX, TX, GRACEFUL, RESTART, AWARE,
30 a1beb8f3 Ondrej Zajicek
	CHECK, LINK, PORT)
31 2638249d Martin Mares
32
CF_GRAMMAR
33
34 a7f23f58 Ondrej Zajicek
CF_ADDTO(proto, bgp_proto '}' { bgp_check_config(BGP_CFG); } )
35 2638249d Martin Mares
36
bgp_proto_start: proto_start BGP {
37 2bbc3083 Ondrej Zajicek
     this_proto = proto_config_new(&proto_bgp, $1);
38 a1beb8f3 Ondrej Zajicek
     BGP_CFG->remote_port = BGP_PORT;
39 f3e59178 Ondrej Zajicek
     BGP_CFG->multihop = -1;	/* undefined */
40 c01e3741 Martin Mares
     BGP_CFG->hold_time = 240;
41 b552ecc4 Martin Mares
     BGP_CFG->initial_hold_time = 240;
42 56a2bed4 Martin Mares
     BGP_CFG->compare_path_lengths = 1;
43 d1e146f2 Ondrej Zajicek
     BGP_CFG->igp_metric = 1;
44 6cf72d7a Ondrej Zajicek
     BGP_CFG->connect_delay_time = 5;
45
     BGP_CFG->connect_retry_time = 120;
46 6fd766c1 Martin Mares
     BGP_CFG->error_amnesia_time = 300;
47
     BGP_CFG->error_delay_time_min = 60;
48
     BGP_CFG->error_delay_time_max = 300;
49 bf47fe4b Ondrej Zajicek
     BGP_CFG->enable_refresh = 1;
50 43c1cecc Ondrej Zajicek
     BGP_CFG->enable_as4 = 1;
51 e8ba557c Ondrej Zajicek
     BGP_CFG->capabilities = 2;
52
     BGP_CFG->advertise_ipv4 = 1;
53 41677025 Ondrej Zajicek
     BGP_CFG->interpret_communities = 1;
54 fbcb7d5f Ondrej Zajicek
     BGP_CFG->default_local_pref = 100;
55 0c791f87 Ondrej Zajicek
     BGP_CFG->gr_mode = BGP_GR_AWARE;
56
     BGP_CFG->gr_time = 120;
57 6fd766c1 Martin Mares
 }
58 2638249d Martin Mares
 ;
59
60 a1beb8f3 Ondrej Zajicek
bgp_nbr_opts:
61
   /* empty */
62
 | bgp_nbr_opts PORT expr { BGP_CFG->remote_port = $3; if (($3<1) || ($3>65535)) cf_error("Invalid port number");  }
63
 | bgp_nbr_opts AS expr { BGP_CFG->remote_as = $3; }
64
 ;
65
66 2638249d Martin Mares
bgp_proto:
67
   bgp_proto_start proto_name '{'
68
 | bgp_proto proto_item ';'
69 11cb6202 Ondrej Zajicek
 | bgp_proto LOCAL AS expr ';' { BGP_CFG->local_as = $4; }
70 9be9a264 Ondrej Zajicek
 | bgp_proto LOCAL ipa AS expr ';' { BGP_CFG->source_addr = $3; BGP_CFG->local_as = $5; }
71 a1beb8f3 Ondrej Zajicek
 | bgp_proto NEIGHBOR bgp_nbr_opts ';'
72
 | bgp_proto NEIGHBOR ipa ipa_scope bgp_nbr_opts ';' {
73 53ffbff3 Ondrej Zajicek
     if (ipa_nonzero(BGP_CFG->remote_ip))
74
       cf_error("Only one neighbor per BGP instance is allowed");
75 2638249d Martin Mares
     BGP_CFG->remote_ip = $3;
76 a1beb8f3 Ondrej Zajicek
     if ($4) BGP_CFG->iface = $4;
77 2638249d Martin Mares
   }
78 a1beb8f3 Ondrej Zajicek
 | bgp_proto INTERFACE TEXT ';' { BGP_CFG->iface = if_get_by_name($3); }
79 89534cda Ondrej Filip
 | bgp_proto RR CLUSTER ID idval ';' { BGP_CFG->rr_cluster_id = $5; }
80 4847a894 Ondrej Zajicek
 | bgp_proto RR CLIENT ';' { BGP_CFG->rr_client = 1; }
81 a92fe607 Ondrej Zajicek
 | bgp_proto RS CLIENT ';' { BGP_CFG->rs_client = 1; }
82 e3f2d5fc Martin Mares
 | bgp_proto HOLD TIME expr ';' { BGP_CFG->hold_time = $4; }
83
 | bgp_proto STARTUP HOLD TIME expr ';' { BGP_CFG->initial_hold_time = $5; }
84 f3e59178 Ondrej Zajicek
 | bgp_proto DIRECT ';' { BGP_CFG->multihop = 0; }
85 9be9a264 Ondrej Zajicek
 | bgp_proto MULTIHOP ';' { BGP_CFG->multihop = 64; }
86 b1b19433 Ondrej Zajicek
 | bgp_proto MULTIHOP expr ';' { BGP_CFG->multihop = $3; if (($3<1) || ($3>255)) cf_error("Multihop must be in range 1-255"); }
87 48bc232f Ondrej Zajicek
 | bgp_proto NEXT HOP SELF ';' { BGP_CFG->next_hop_self = 1; BGP_CFG->next_hop_keep = 0; }
88
 | bgp_proto NEXT HOP KEEP ';' { BGP_CFG->next_hop_keep = 1; BGP_CFG->next_hop_self = 0; }
89 3f9b7bfe Ondrej Zajicek
 | bgp_proto MISSING LLADDR SELF ';' { BGP_CFG->missing_lladdr = MLL_SELF; }
90
 | bgp_proto MISSING LLADDR DROP ';' { BGP_CFG->missing_lladdr = MLL_DROP; }
91
 | bgp_proto MISSING LLADDR IGNORE ';' { BGP_CFG->missing_lladdr = MLL_IGNORE; }
92 087cecd0 Ondrej Zajicek
 | bgp_proto GATEWAY DIRECT ';' { BGP_CFG->gw_mode = GW_DIRECT; }
93
 | bgp_proto GATEWAY RECURSIVE ';' { BGP_CFG->gw_mode = GW_RECURSIVE; }
94 7294f68b Martin Mares
 | bgp_proto PATH METRIC bool ';' { BGP_CFG->compare_path_lengths = $4; }
95 73272f04 Ondrej Zajicek
 | bgp_proto MED METRIC bool ';' { BGP_CFG->med_metric = $4; }
96 d1e146f2 Ondrej Zajicek
 | bgp_proto IGP METRIC bool ';' { BGP_CFG->igp_metric = $4; }
97 3228c72c Ondrej Zajicek
 | bgp_proto PREFER OLDER bool ';' { BGP_CFG->prefer_older = $4; }
98 be4cd99a Ondrej Zajicek
 | bgp_proto DETERMINISTIC MED bool ';' { BGP_CFG->deterministic_med = $4; }
99 e3f2d5fc Martin Mares
 | bgp_proto DEFAULT BGP_MED expr ';' { BGP_CFG->default_med = $4; }
100
 | bgp_proto DEFAULT BGP_LOCAL_PREF expr ';' { BGP_CFG->default_local_pref = $4; }
101
 | bgp_proto SOURCE ADDRESS ipa ';' { BGP_CFG->source_addr = $4; }
102 6cf72d7a Ondrej Zajicek
 | bgp_proto START DELAY TIME expr ';' { BGP_CFG->connect_delay_time = $5; log(L_WARN "%s: Start delay time option is deprecated, use connect delay time", this_proto->name); }
103
 | bgp_proto CONNECT DELAY TIME expr ';' { BGP_CFG->connect_delay_time = $5; }
104
 | bgp_proto CONNECT RETRY TIME expr ';' { BGP_CFG->connect_retry_time = $5; }
105
 | bgp_proto KEEPALIVE TIME expr ';' { BGP_CFG->keepalive_time = $4; }
106 523f020b Ondrej Zajicek
 | bgp_proto ERROR FORGET TIME expr ';' { BGP_CFG->error_amnesia_time = $5; }
107 e3f2d5fc Martin Mares
 | bgp_proto ERROR WAIT TIME expr ',' expr ';' { BGP_CFG->error_delay_time_min = $5; BGP_CFG->error_delay_time_max = $7; }
108 7294f68b Martin Mares
 | bgp_proto DISABLE AFTER ERROR bool ';' { BGP_CFG->disable_after_error = $5; }
109 bf47fe4b Ondrej Zajicek
 | bgp_proto ENABLE ROUTE REFRESH bool ';' { BGP_CFG->enable_refresh = $5; }
110 ba5ed6f3 Ondrej Zajicek
 | bgp_proto ENABLE AS4 bool ';' { BGP_CFG->enable_as4 = $4; }
111 e8ba557c Ondrej Zajicek
 | bgp_proto CAPABILITIES bool ';' { BGP_CFG->capabilities = $3; }
112
 | bgp_proto ADVERTISE IPV4 bool ';' { BGP_CFG->advertise_ipv4 = $4; }
113 9eceab33 Ondrej Zajicek
 | bgp_proto PASSWORD text ';' { BGP_CFG->password = $3; }
114 ebecb6f6 Ondrej Zajicek
 | bgp_proto ROUTE LIMIT expr ';' {
115
     this_proto->in_limit = cfg_allocz(sizeof(struct proto_limit));
116
     this_proto->in_limit->limit = $4;
117
     this_proto->in_limit->action = PLA_RESTART;
118 6cf72d7a Ondrej Zajicek
     log(L_WARN "%s: Route limit option is deprecated, use import limit", this_proto->name);
119 ebecb6f6 Ondrej Zajicek
   }
120 be6e39eb Ondrej Zajicek
 | bgp_proto PASSIVE bool ';' { BGP_CFG->passive = $3; }
121 41677025 Ondrej Zajicek
 | bgp_proto INTERPRET COMMUNITIES bool ';' { BGP_CFG->interpret_communities = $4; }
122 00a09f3c Ondrej Zajicek
 | bgp_proto SECONDARY bool ';' { BGP_CFG->secondary = $3; }
123 094d2bdb Ondrej Zajicek
 | bgp_proto ADD PATHS RX ';' { BGP_CFG->add_path = ADD_PATH_RX; }
124
 | bgp_proto ADD PATHS TX ';' { BGP_CFG->add_path = ADD_PATH_TX; }
125
 | bgp_proto ADD PATHS bool ';' { BGP_CFG->add_path = $4 ? ADD_PATH_FULL : 0; }
126 a15dab76 Ondrej Zajicek
 | bgp_proto ALLOW LOCAL AS ';' { BGP_CFG->allow_local_as = -1; }
127
 | bgp_proto ALLOW LOCAL AS expr ';' { BGP_CFG->allow_local_as = $5; }
128 0c791f87 Ondrej Zajicek
 | bgp_proto GRACEFUL RESTART bool ';' { BGP_CFG->gr_mode = $4; }
129
 | bgp_proto GRACEFUL RESTART AWARE ';' { BGP_CFG->gr_mode = BGP_GR_AWARE; }
130
 | bgp_proto GRACEFUL RESTART TIME expr ';' { BGP_CFG->gr_time = $5; }
131 cfe34a31 Ondrej Zajicek
 | bgp_proto IGP TABLE rtable ';' { BGP_CFG->igp_table = $4; }
132 b1b19433 Ondrej Zajicek
 | bgp_proto TTL SECURITY bool ';' { BGP_CFG->ttl_security = $4; }
133 523f020b Ondrej Zajicek
 | bgp_proto CHECK LINK bool ';' { BGP_CFG->check_link = $4; }
134 1ec52253 Ondrej Zajicek
 | bgp_proto BFD bool ';' { BGP_CFG->bfd = $3; cf_check_bfd($3); }
135 2638249d Martin Mares
 ;
136
137 56a2bed4 Martin Mares
CF_ADDTO(dynamic_attr, BGP_ORIGIN
138 cea63664 Martin Mares
	{ $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_ENUM_BGP_ORIGIN, EA_CODE(EAP_BGP, BA_ORIGIN)); })
139 126683fe Ondrej Zajicek
CF_ADDTO(dynamic_attr, BGP_PATH
140
	{ $$ = f_new_dynamic_attr(EAF_TYPE_AS_PATH, T_PATH, EA_CODE(EAP_BGP, BA_AS_PATH)); })
141 56a2bed4 Martin Mares
CF_ADDTO(dynamic_attr, BGP_NEXT_HOP
142
	{ $$ = f_new_dynamic_attr(EAF_TYPE_IP_ADDRESS, T_IP, EA_CODE(EAP_BGP, BA_NEXT_HOP)); })
143 126683fe Ondrej Zajicek
CF_ADDTO(dynamic_attr, BGP_MED
144
	{ $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(EAP_BGP, BA_MULTI_EXIT_DISC)); })
145
CF_ADDTO(dynamic_attr, BGP_LOCAL_PREF
146
	{ $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(EAP_BGP, BA_LOCAL_PREF)); })
147 56a2bed4 Martin Mares
CF_ADDTO(dynamic_attr, BGP_ATOMIC_AGGR
148
	{ $$ = f_new_dynamic_attr(EAF_TYPE_OPAQUE, T_ENUM_EMPTY, EA_CODE(EAP_BGP, BA_ATOMIC_AGGR)); })
149
CF_ADDTO(dynamic_attr, BGP_AGGREGATOR
150
	{ $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(EAP_BGP, BA_AGGREGATOR)); })
151
CF_ADDTO(dynamic_attr, BGP_COMMUNITY
152
	{ $$ = f_new_dynamic_attr(EAF_TYPE_INT_SET, T_CLIST, EA_CODE(EAP_BGP, BA_COMMUNITY)); })
153 126683fe Ondrej Zajicek
CF_ADDTO(dynamic_attr, BGP_ORIGINATOR_ID
154
	{ $$ = f_new_dynamic_attr(EAF_TYPE_ROUTER_ID, T_QUAD, EA_CODE(EAP_BGP, BA_ORIGINATOR_ID)); })
155
CF_ADDTO(dynamic_attr, BGP_CLUSTER_LIST
156
	{ $$ = f_new_dynamic_attr(EAF_TYPE_INT_SET, T_CLIST, EA_CODE(EAP_BGP, BA_CLUSTER_LIST)); })
157 42a0c054 Ondrej Zajicek
CF_ADDTO(dynamic_attr, BGP_EXT_COMMUNITY
158
	{ $$ = f_new_dynamic_attr(EAF_TYPE_EC_SET, T_ECLIST, EA_CODE(EAP_BGP, BA_EXT_COMMUNITY)); })
159
160 126683fe Ondrej Zajicek
161 12d5677a Martin Mares
162 cea63664 Martin Mares
CF_ENUM(T_ENUM_BGP_ORIGIN, ORIGIN_, IGP, EGP, INCOMPLETE)
163
164 2638249d Martin Mares
CF_CODE
165
166
CF_END