]> git.ipfire.org Git - thirdparty/bird.git/blame - sysdep/unix/krt.Y
Workaround thread-unsafeness of cli_echo().
[thirdparty/bird.git] / sysdep / unix / krt.Y
CommitLineData
980ffedb
MM
1/*
2 * BIRD -- UNIX Kernel Syncer Configuration
3 *
d272fe22 4 * (c) 1998--2000 Martin Mares <mj@ucw.cz>
980ffedb
MM
5 *
6 * Can be freely distributed and used under the terms of the GNU GPL.
7 */
8
9CF_HDR
10
11#include "lib/krt.h"
12
2edb31b0
MM
13CF_DEFINES
14
2d140452 15#define THIS_KRT ((struct krt_config *) this_proto)
7e5f5ffd 16#define THIS_KIF ((struct kif_config *) this_proto)
2d140452 17
980ffedb
MM
18CF_DECLS
19
9ba2798c 20CF_KEYWORDS(KERNEL, PERSIST, SCAN, TIME, LEARN, DEVICE, ROUTES, KRT_SOURCE, KRT_METRIC)
980ffedb
MM
21
22CF_GRAMMAR
23
7e5f5ffd 24/* Kernel syncer protocol */
980ffedb
MM
25
26CF_ADDTO(proto, kern_proto '}')
27
396dfa90 28kern_proto_start: proto_start KERNEL { this_proto = krt_init_config($1); }
980ffedb
MM
29 ;
30
7e5f5ffd 31CF_ADDTO(kern_proto, kern_proto_start proto_name '{')
980ffedb 32CF_ADDTO(kern_proto, kern_proto proto_item ';')
2d140452
MM
33CF_ADDTO(kern_proto, kern_proto kern_item ';')
34
35kern_item:
36 PERSIST bool { THIS_KRT->persist = $2; }
37 | SCAN TIME expr {
38 /* Scan time of 0 means scan on startup only */
39 THIS_KRT->scan_time = $3;
40 }
c10421d3
MM
41 | LEARN bool {
42 THIS_KRT->learn = $2;
43#ifndef KRT_ALLOW_LEARN
44 if ($2)
45 cf_error("Learning of kernel routes not supported in this configuration");
46#endif
47 }
c429d4a4 48 | DEVICE ROUTES bool { THIS_KRT->devroutes = $3; }
2d140452 49 ;
980ffedb 50
7e5f5ffd
MM
51/* Kernel interface protocol */
52
53CF_ADDTO(proto, kif_proto '}')
54
396dfa90 55kif_proto_start: proto_start DEVICE { this_proto = kif_init_config($1); }
7e5f5ffd
MM
56 ;
57
d272fe22 58CF_ADDTO(kif_proto, kif_proto_start proto_name '{')
7e5f5ffd
MM
59CF_ADDTO(kif_proto, kif_proto proto_item ';')
60CF_ADDTO(kif_proto, kif_proto kif_item ';')
61
62kif_item:
63 SCAN TIME expr {
64 /* Scan time of 0 means scan on startup only */
65 THIS_KIF->scan_time = $3;
66 }
874b8685 67 | PRIMARY text_or_none prefix_or_ipa {
6f68f066
OZ
68 struct kif_primary_item *kpi = cfg_alloc(sizeof (struct kif_primary_item));
69 kpi->pattern = $2;
70 kpi->prefix = $3.addr;
71 kpi->pxlen = $3.len;
72 add_tail(&THIS_KIF->primary, &kpi->n);
73 }
7e5f5ffd
MM
74 ;
75
9ba2798c
OZ
76CF_ADDTO(dynamic_attr, KRT_SOURCE { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_KRT_SOURCE); })
77CF_ADDTO(dynamic_attr, KRT_METRIC { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_KRT_METRIC); })
72aed1a0 78
980ffedb
MM
79CF_CODE
80
81CF_END