]>
Commit | Line | Data |
---|---|---|
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 | ||
9 | CF_HDR | |
10 | ||
11 | #include "lib/krt.h" | |
12 | ||
2edb31b0 MM |
13 | CF_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 |
18 | CF_DECLS |
19 | ||
9ba2798c | 20 | CF_KEYWORDS(KERNEL, PERSIST, SCAN, TIME, LEARN, DEVICE, ROUTES, KRT_SOURCE, KRT_METRIC) |
980ffedb MM |
21 | |
22 | CF_GRAMMAR | |
23 | ||
7e5f5ffd | 24 | /* Kernel syncer protocol */ |
980ffedb MM |
25 | |
26 | CF_ADDTO(proto, kern_proto '}') | |
27 | ||
396dfa90 | 28 | kern_proto_start: proto_start KERNEL { this_proto = krt_init_config($1); } |
980ffedb MM |
29 | ; |
30 | ||
7e5f5ffd | 31 | CF_ADDTO(kern_proto, kern_proto_start proto_name '{') |
980ffedb | 32 | CF_ADDTO(kern_proto, kern_proto proto_item ';') |
2d140452 MM |
33 | CF_ADDTO(kern_proto, kern_proto kern_item ';') |
34 | ||
35 | kern_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 | ||
53 | CF_ADDTO(proto, kif_proto '}') | |
54 | ||
396dfa90 | 55 | kif_proto_start: proto_start DEVICE { this_proto = kif_init_config($1); } |
7e5f5ffd MM |
56 | ; |
57 | ||
d272fe22 | 58 | CF_ADDTO(kif_proto, kif_proto_start proto_name '{') |
7e5f5ffd MM |
59 | CF_ADDTO(kif_proto, kif_proto proto_item ';') |
60 | CF_ADDTO(kif_proto, kif_proto kif_item ';') | |
61 | ||
62 | kif_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 |
76 | CF_ADDTO(dynamic_attr, KRT_SOURCE { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_KRT_SOURCE); }) |
77 | CF_ADDTO(dynamic_attr, KRT_METRIC { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_KRT_METRIC); }) | |
72aed1a0 | 78 | |
980ffedb MM |
79 | CF_CODE |
80 | ||
81 | CF_END |