From f6bd206607d9fcad3572841813d7376bd2df4952 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Sun, 6 Dec 1998 23:13:31 +0000 Subject: All static routes except for device ones should work and appear/disappear when their destination comes on/off link. Deserves better testing :) See example in bird.conf. --- proto/static/config.Y | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'proto/static/config.Y') diff --git a/proto/static/config.Y b/proto/static/config.Y index a9eaa87..ff50651 100644 --- a/proto/static/config.Y +++ b/proto/static/config.Y @@ -10,9 +10,11 @@ CF_HDR #include "proto/static/static.h" +static struct static_route *this_srt; + CF_DECLS -CF_KEYWORDS(STATIC) +CF_KEYWORDS(STATIC, ROUTE, VIA, DROP, REJECT, PROHIBIT, PREFERENCE) CF_GRAMMAR @@ -27,6 +29,32 @@ static_proto_start: proto_start STATIC { static_proto: static_proto_start proto_name '{' | static_proto proto_item ';' + | static_proto stat_route ';' + ; + +stat_route0: ROUTE IPA pxlen { + this_srt = cfg_allocz(sizeof(struct static_route)); + add_tail(&((struct static_proto *) this_proto)->other_routes, &this_srt->n); + if (!ip_is_prefix($2, $3)) cf_error("Invalid network prefix: %I/%d", $2, $3); + this_srt->net = $2; + this_srt->masklen = $3; + } + ; + +stat_route: + stat_route0 VIA IPA { + this_srt->dest = RTD_ROUTER; + this_srt->via = $3; + } + | stat_route0 VIA TEXT { + this_srt->dest = RTD_DEVICE; + this_srt->if_name = $3; + rem_node(&this_srt->n); + add_tail(&((struct static_proto *) this_proto)->iface_routes, &this_srt->n); + } + | stat_route0 DROP { this_srt->dest = RTD_BLACKHOLE; } + | stat_route0 REJECT { this_srt->dest = RTD_UNREACHABLE; } + | stat_route0 PROHIBIT { this_srt->dest = RTD_PROHIBIT; } ; CF_CODE -- cgit v1.2.3