Here is a preparation diff that just does some stylistic cleanup in parse.y
This moves the globals a bit down (I want to add a struct define later and those are below the current place). Move the mrt and network statements to the grammar. Swap order of restricted to follow the common idiom of empty rule first. -- :wq Claudio Index: parse.y =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/parse.y,v retrieving revision 1.443 diff -u -p -r1.443 parse.y --- parse.y 3 Apr 2023 10:48:00 -0000 1.443 +++ parse.y 4 Apr 2023 15:16:23 -0000 @@ -89,24 +89,6 @@ struct sym { int symset(const char *, const char *, int); char *symget(const char *); -static struct bgpd_config *conf; -static struct network_head *netconf; -static struct peer_head *new_peers, *cur_peers; -static struct rtr_config_head *cur_rtrs; -static struct peer *curpeer; -static struct peer *curgroup; -static struct rde_rib *currib; -static struct l3vpn *curvpn; -static struct prefixset *curpset, *curoset; -static struct roa_tree *curroatree; -static struct rtr_config *currtr; -static struct filter_head *filter_l; -static struct filter_head *peerfilter_l; -static struct filter_head *groupfilter_l; -static struct filter_rule *curpeer_filter[2]; -static struct filter_rule *curgroup_filter[2]; -static int noexpires; - struct filter_rib_l { struct filter_rib_l *next; char name[PEER_DESCR_LEN]; @@ -180,6 +162,24 @@ static struct rtr_config *get_rtr(struct static int insert_rtr(struct rtr_config *); static int merge_aspa_set(uint32_t, struct aspa_tas_l *, time_t); +static struct bgpd_config *conf; +static struct network_head *netconf; +static struct peer_head *new_peers, *cur_peers; +static struct rtr_config_head *cur_rtrs; +static struct peer *curpeer; +static struct peer *curgroup; +static struct rde_rib *currib; +static struct l3vpn *curvpn; +static struct prefixset *curpset, *curoset; +static struct roa_tree *curroatree; +static struct rtr_config *currtr; +static struct filter_head *filter_l; +static struct filter_head *peerfilter_l; +static struct filter_head *groupfilter_l; +static struct filter_rule *curpeer_filter[2]; +static struct filter_rule *curgroup_filter[2]; +static int noexpires; + typedef struct { union { long long number; @@ -278,6 +278,8 @@ grammar : /* empty */ | grammar origin_set '\n' | grammar rtr '\n' | grammar rib '\n' + | grammar network '\n' + | grammar mrtdump '\n' | grammar conf_main '\n' | grammar l3vpn '\n' | grammar neighbor '\n' @@ -807,7 +809,6 @@ conf_main : AS as4number { } free($2); } - | network | DUMP STRING STRING optnumber { int action; @@ -868,7 +869,6 @@ conf_main : AS as4number { free($3); free($5); } - | mrtdump | RDE STRING EVALUATE { if (!strcmp($2, "route-age")) conf->flags |= BGPD_FLAG_DECISION_ROUTEAGE; @@ -1151,8 +1151,8 @@ inout : IN { $$ = 1; } | OUT { $$ = 0; } ; -restricted : RESTRICTED { $$ = 1; } - | /* nothing */ { $$ = 0; } +restricted : /* empty */ { $$ = 0; } + | RESTRICTED { $$ = 1; } ; address : STRING {