mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-08 12:18:42 +00:00
BFD: Fix build when BFD is disabled
Move bfd_opts grammar inside BFD parser code to avoid dependences between nest and BFD grammars, which breaks when BFD build is disabled. Add dummy bfd_opts grammar rule, so protocols can use this nonterminal even with BFD disabled. Thanks to Yuri Honegger for the bugreport.
This commit is contained in:
parent
765debf523
commit
e29f134ad9
@ -124,7 +124,6 @@ CF_KEYWORDS(BGP, PASSWORDS, DESCRIPTION)
|
|||||||
CF_KEYWORDS(RELOAD, IN, OUT, MRTDUMP, MESSAGES, RESTRICT, MEMORY, IGP_METRIC, CLASS, DSCP)
|
CF_KEYWORDS(RELOAD, IN, OUT, MRTDUMP, MESSAGES, RESTRICT, MEMORY, IGP_METRIC, CLASS, DSCP)
|
||||||
CF_KEYWORDS(TIMEFORMAT, ISO, SHORT, LONG, ROUTE, PROTOCOL, BASE, LOG, S, MS, US)
|
CF_KEYWORDS(TIMEFORMAT, ISO, SHORT, LONG, ROUTE, PROTOCOL, BASE, LOG, S, MS, US)
|
||||||
CF_KEYWORDS(GRACEFUL, RESTART, WAIT, MAX, AS)
|
CF_KEYWORDS(GRACEFUL, RESTART, WAIT, MAX, AS)
|
||||||
CF_KEYWORDS(MIN, IDLE, RX, TX, INTERVAL, MULTIPLIER, PASSIVE)
|
|
||||||
CF_KEYWORDS(CHECK, LINK)
|
CF_KEYWORDS(CHECK, LINK)
|
||||||
CF_KEYWORDS(SORTED, TRIE, MIN, MAX, SETTLE, TIME, GC, THRESHOLD, PERIOD)
|
CF_KEYWORDS(SORTED, TRIE, MIN, MAX, SETTLE, TIME, GC, THRESHOLD, PERIOD)
|
||||||
CF_KEYWORDS(MPLS_LABEL, MPLS_POLICY, MPLS_CLASS)
|
CF_KEYWORDS(MPLS_LABEL, MPLS_POLICY, MPLS_CLASS)
|
||||||
@ -602,51 +601,8 @@ password_item_end:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* BFD options */
|
/* BFD options - just dummy rule, rest in proto/bfd/config.Y */
|
||||||
|
bfd_opts: '{' INVALID_TOKEN '}';
|
||||||
bfd_item:
|
|
||||||
INTERVAL expr_us { this_bfd_opts->min_rx_int = this_bfd_opts->min_tx_int = $2; }
|
|
||||||
| MIN RX INTERVAL expr_us { this_bfd_opts->min_rx_int = $4; }
|
|
||||||
| MIN TX INTERVAL expr_us { this_bfd_opts->min_tx_int = $4; }
|
|
||||||
| IDLE TX INTERVAL expr_us { this_bfd_opts->idle_tx_int = $4; }
|
|
||||||
| MULTIPLIER expr { this_bfd_opts->multiplier = $2; }
|
|
||||||
| PASSIVE bool { this_bfd_opts->passive = $2; this_bfd_opts->passive_set = 1; }
|
|
||||||
| GRACEFUL { this_bfd_opts->mode = BGP_BFD_GRACEFUL; }
|
|
||||||
| AUTHENTICATION bfd_auth_type { this_bfd_opts->auth_type = $2; }
|
|
||||||
| password_list {}
|
|
||||||
;
|
|
||||||
|
|
||||||
bfd_items:
|
|
||||||
/* empty */
|
|
||||||
| bfd_items bfd_item ';'
|
|
||||||
;
|
|
||||||
|
|
||||||
bfd_opts_start:
|
|
||||||
{ reset_passwords(); } ;
|
|
||||||
|
|
||||||
bfd_opts_end:
|
|
||||||
{
|
|
||||||
this_bfd_opts->passwords = get_passwords();
|
|
||||||
|
|
||||||
if (!this_bfd_opts->auth_type != !this_bfd_opts->passwords)
|
|
||||||
cf_warn("Authentication and password options should be used together");
|
|
||||||
|
|
||||||
if (this_bfd_opts->passwords)
|
|
||||||
{
|
|
||||||
struct password_item *pass;
|
|
||||||
WALK_LIST(pass, *this_bfd_opts->passwords)
|
|
||||||
{
|
|
||||||
if (pass->alg)
|
|
||||||
cf_error("Password algorithm option not available in BFD protocol");
|
|
||||||
|
|
||||||
pass->alg = bfd_auth_type_to_hash_alg[this_bfd_opts->auth_type];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
bfd_opts:
|
|
||||||
bfd_opts_start '{' bfd_items '}' bfd_opts_end
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
/* Core commands */
|
/* Core commands */
|
||||||
|
@ -183,6 +183,52 @@ bfd_neighbor: ipa bfd_neigh_iface bfd_neigh_local bfd_neigh_multihop
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* BFD options */
|
||||||
|
|
||||||
|
bfd_item:
|
||||||
|
INTERVAL expr_us { this_bfd_opts->min_rx_int = this_bfd_opts->min_tx_int = $2; }
|
||||||
|
| MIN RX INTERVAL expr_us { this_bfd_opts->min_rx_int = $4; }
|
||||||
|
| MIN TX INTERVAL expr_us { this_bfd_opts->min_tx_int = $4; }
|
||||||
|
| IDLE TX INTERVAL expr_us { this_bfd_opts->idle_tx_int = $4; }
|
||||||
|
| MULTIPLIER expr { this_bfd_opts->multiplier = $2; }
|
||||||
|
| PASSIVE bool { this_bfd_opts->passive = $2; this_bfd_opts->passive_set = 1; }
|
||||||
|
| GRACEFUL { this_bfd_opts->mode = BGP_BFD_GRACEFUL; }
|
||||||
|
| AUTHENTICATION bfd_auth_type { this_bfd_opts->auth_type = $2; }
|
||||||
|
| password_list {}
|
||||||
|
;
|
||||||
|
|
||||||
|
bfd_items:
|
||||||
|
/* empty */
|
||||||
|
| bfd_items bfd_item ';'
|
||||||
|
;
|
||||||
|
|
||||||
|
bfd_opts_start:
|
||||||
|
{ reset_passwords(); } ;
|
||||||
|
|
||||||
|
bfd_opts_end:
|
||||||
|
{
|
||||||
|
this_bfd_opts->passwords = get_passwords();
|
||||||
|
|
||||||
|
if (!this_bfd_opts->auth_type != !this_bfd_opts->passwords)
|
||||||
|
cf_warn("Authentication and password options should be used together");
|
||||||
|
|
||||||
|
if (this_bfd_opts->passwords)
|
||||||
|
{
|
||||||
|
struct password_item *pass;
|
||||||
|
WALK_LIST(pass, *this_bfd_opts->passwords)
|
||||||
|
{
|
||||||
|
if (pass->alg)
|
||||||
|
cf_error("Password algorithm option not available in BFD protocol");
|
||||||
|
|
||||||
|
pass->alg = bfd_auth_type_to_hash_alg[this_bfd_opts->auth_type];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
bfd_opts:
|
||||||
|
'{' bfd_opts_start bfd_items '}' bfd_opts_end;
|
||||||
|
|
||||||
|
|
||||||
CF_CLI_HELP(SHOW BFD, ..., [[Show information about BFD protocol]]);
|
CF_CLI_HELP(SHOW BFD, ..., [[Show information about BFD protocol]]);
|
||||||
|
|
||||||
CF_CLI_HELP(SHOW BFD SESSIONS, ..., [[Show information about BFD sessions]]);
|
CF_CLI_HELP(SHOW BFD SESSIONS, ..., [[Show information about BFD sessions]]);
|
||||||
|
Loading…
Reference in New Issue
Block a user