]> git.ipfire.org Git - thirdparty/bird.git/blame - proto/bgp/config.Y
Merge branch 'socket2' into new
[thirdparty/bird.git] / proto / bgp / config.Y
CommitLineData
2638249d
MM
1/*
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
9CF_HDR
10
11#include "proto/bgp/bgp.h"
12
cea63664
MM
13CF_DEFINES
14
2638249d
MM
15#define BGP_CFG ((struct bgp_config *) this_proto)
16
17CF_DECLS
18
c01e3741 19CF_KEYWORDS(BGP, LOCAL, NEIGHBOR, AS, HOLD, TIME, CONNECT, RETRY, KEEPALIVE,
56a2bed4 20 MULTIHOP, STARTUP, VIA, NEXT, HOP, SELF, DEFAULT, PATH, METRIC,
ba5ed6f3 21 ERROR, START, DELAY, FORGET, WAIT, ENABLE, DISABLE, AFTER,
56a2bed4 22 BGP_PATH, BGP_LOCAL_PREF, BGP_MED, BGP_ORIGIN, BGP_NEXT_HOP,
4847a894 23 BGP_ATOMIC_AGGR, BGP_AGGREGATOR, BGP_COMMUNITY, SOURCE, ADDRESS,
e8ba557c 24 PASSWORD, RR, RS, CLIENT, CLUSTER, ID, AS4, ADVERTISE, IPV4,
3f9b7bfe 25 CAPABILITIES, LIMIT, PASSIVE, PREFER, OLDER, MISSING, LLADDR,
41677025 26 DROP, IGNORE, ROUTE, REFRESH, INTERPRET, COMMUNITIES)
2638249d
MM
27
28CF_GRAMMAR
29
30CF_ADDTO(proto, bgp_proto '}' { bgp_check(BGP_CFG); } )
31
32bgp_proto_start: proto_start BGP {
33 this_proto = proto_config_new(&proto_bgp, sizeof(struct bgp_config));
34 this_proto->preference = DEF_PREF_BGP;
c01e3741
MM
35 BGP_CFG->hold_time = 240;
36 BGP_CFG->connect_retry_time = 120;
b552ecc4 37 BGP_CFG->initial_hold_time = 240;
56a2bed4 38 BGP_CFG->compare_path_lengths = 1;
6fd766c1
MM
39 BGP_CFG->start_delay_time = 5;
40 BGP_CFG->error_amnesia_time = 300;
41 BGP_CFG->error_delay_time_min = 60;
42 BGP_CFG->error_delay_time_max = 300;
bf47fe4b 43 BGP_CFG->enable_refresh = 1;
43c1cecc 44 BGP_CFG->enable_as4 = 1;
e8ba557c
OZ
45 BGP_CFG->capabilities = 2;
46 BGP_CFG->advertise_ipv4 = 1;
41677025 47 BGP_CFG->interpret_communities = 1;
fbcb7d5f 48 BGP_CFG->default_local_pref = 100;
6fd766c1 49 }
2638249d
MM
50 ;
51
52bgp_proto:
53 bgp_proto_start proto_name '{'
54 | bgp_proto proto_item ';'
11cb6202 55 | bgp_proto LOCAL AS expr ';' { BGP_CFG->local_as = $4; }
e3f2d5fc 56 | bgp_proto NEIGHBOR ipa AS expr ';' {
11cb6202
OZ
57 if (ipa_nonzero(BGP_CFG->remote_ip)) cf_error("Only one neighbor per BGP instance is allowed");
58
2638249d
MM
59 BGP_CFG->remote_ip = $3;
60 BGP_CFG->remote_as = $5;
61 }
89534cda 62 | bgp_proto RR CLUSTER ID idval ';' { BGP_CFG->rr_cluster_id = $5; }
4847a894 63 | bgp_proto RR CLIENT ';' { BGP_CFG->rr_client = 1; }
a92fe607 64 | bgp_proto RS CLIENT ';' { BGP_CFG->rs_client = 1; }
e3f2d5fc
MM
65 | bgp_proto HOLD TIME expr ';' { BGP_CFG->hold_time = $4; }
66 | bgp_proto STARTUP HOLD TIME expr ';' { BGP_CFG->initial_hold_time = $5; }
67 | bgp_proto CONNECT RETRY TIME expr ';' { BGP_CFG->connect_retry_time = $5; }
68 | bgp_proto KEEPALIVE TIME expr ';' { BGP_CFG->keepalive_time = $4; }
69 | bgp_proto MULTIHOP expr VIA ipa ';' { BGP_CFG->multihop = $3; BGP_CFG->multihop_via = $5; }
48e842cc 70 | bgp_proto NEXT HOP SELF ';' { BGP_CFG->next_hop_self = 1; }
3f9b7bfe
OZ
71 | bgp_proto MISSING LLADDR SELF ';' { BGP_CFG->missing_lladdr = MLL_SELF; }
72 | bgp_proto MISSING LLADDR DROP ';' { BGP_CFG->missing_lladdr = MLL_DROP; }
73 | bgp_proto MISSING LLADDR IGNORE ';' { BGP_CFG->missing_lladdr = MLL_IGNORE; }
7294f68b 74 | bgp_proto PATH METRIC bool ';' { BGP_CFG->compare_path_lengths = $4; }
3228c72c 75 | bgp_proto PREFER OLDER bool ';' { BGP_CFG->prefer_older = $4; }
e3f2d5fc
MM
76 | bgp_proto DEFAULT BGP_MED expr ';' { BGP_CFG->default_med = $4; }
77 | bgp_proto DEFAULT BGP_LOCAL_PREF expr ';' { BGP_CFG->default_local_pref = $4; }
78 | bgp_proto SOURCE ADDRESS ipa ';' { BGP_CFG->source_addr = $4; }
79 | bgp_proto START DELAY TIME expr ';' { BGP_CFG->start_delay_time = $5; }
80 | bgp_proto ERROR FORGET TIME expr ';' { BGP_CFG->error_amnesia_time = $5; }
81 | bgp_proto ERROR WAIT TIME expr ',' expr ';' { BGP_CFG->error_delay_time_min = $5; BGP_CFG->error_delay_time_max = $7; }
7294f68b 82 | bgp_proto DISABLE AFTER ERROR bool ';' { BGP_CFG->disable_after_error = $5; }
bf47fe4b 83 | bgp_proto ENABLE ROUTE REFRESH bool ';' { BGP_CFG->enable_refresh = $5; }
ba5ed6f3 84 | bgp_proto ENABLE AS4 bool ';' { BGP_CFG->enable_as4 = $4; }
e8ba557c
OZ
85 | bgp_proto CAPABILITIES bool ';' { BGP_CFG->capabilities = $3; }
86 | bgp_proto ADVERTISE IPV4 bool ';' { BGP_CFG->advertise_ipv4 = $4; }
d51aa281 87 | bgp_proto PASSWORD TEXT ';' { BGP_CFG->password = $3; }
72b28a04 88 | bgp_proto ROUTE LIMIT expr ';' { BGP_CFG->route_limit = $4; }
be6e39eb 89 | bgp_proto PASSIVE bool ';' { BGP_CFG->passive = $3; }
41677025 90 | bgp_proto INTERPRET COMMUNITIES bool ';' { BGP_CFG->interpret_communities = $4; }
2638249d
MM
91 ;
92
56a2bed4
MM
93CF_ADDTO(dynamic_attr, BGP_PATH
94 { $$ = f_new_dynamic_attr(EAF_TYPE_AS_PATH, T_PATH, EA_CODE(EAP_BGP, BA_AS_PATH)); })
95CF_ADDTO(dynamic_attr, BGP_LOCAL_PREF
96 { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(EAP_BGP, BA_LOCAL_PREF)); })
97CF_ADDTO(dynamic_attr, BGP_MED
98 { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(EAP_BGP, BA_MULTI_EXIT_DISC)); })
99CF_ADDTO(dynamic_attr, BGP_ORIGIN
cea63664 100 { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_ENUM_BGP_ORIGIN, EA_CODE(EAP_BGP, BA_ORIGIN)); })
56a2bed4
MM
101CF_ADDTO(dynamic_attr, BGP_NEXT_HOP
102 { $$ = f_new_dynamic_attr(EAF_TYPE_IP_ADDRESS, T_IP, EA_CODE(EAP_BGP, BA_NEXT_HOP)); })
103CF_ADDTO(dynamic_attr, BGP_ATOMIC_AGGR
104 { $$ = f_new_dynamic_attr(EAF_TYPE_OPAQUE, T_ENUM_EMPTY, EA_CODE(EAP_BGP, BA_ATOMIC_AGGR)); })
105CF_ADDTO(dynamic_attr, BGP_AGGREGATOR
106 { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_CODE(EAP_BGP, BA_AGGREGATOR)); })
107CF_ADDTO(dynamic_attr, BGP_COMMUNITY
108 { $$ = f_new_dynamic_attr(EAF_TYPE_INT_SET, T_CLIST, EA_CODE(EAP_BGP, BA_COMMUNITY)); })
12d5677a 109
cea63664
MM
110CF_ENUM(T_ENUM_BGP_ORIGIN, ORIGIN_, IGP, EGP, INCOMPLETE)
111
2638249d
MM
112CF_CODE
113
114CF_END