Annotation of embedaddon/bird/sysdep/unix/krt.Y, revision 1.1
1.1 ! misho 1: /*
! 2: * BIRD -- UNIX Kernel Syncer Configuration
! 3: *
! 4: * (c) 1998--2000 Martin Mares <mj@ucw.cz>
! 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:
! 13: CF_DEFINES
! 14:
! 15: #define THIS_KRT ((struct krt_config *) this_proto)
! 16: #define THIS_KIF ((struct kif_config *) this_proto)
! 17:
! 18: CF_DECLS
! 19:
! 20: CF_KEYWORDS(KERNEL, PERSIST, SCAN, TIME, LEARN, DEVICE, ROUTES, GRACEFUL, RESTART, KRT_SOURCE, KRT_METRIC, MERGE, PATHS)
! 21:
! 22: %type <i> kern_mp_limit
! 23:
! 24: CF_GRAMMAR
! 25:
! 26: /* Kernel syncer protocol */
! 27:
! 28: CF_ADDTO(proto, kern_proto '}')
! 29:
! 30: kern_proto_start: proto_start KERNEL { this_proto = krt_init_config($1); }
! 31: ;
! 32:
! 33: CF_ADDTO(kern_proto, kern_proto_start proto_name '{')
! 34: CF_ADDTO(kern_proto, kern_proto proto_item ';')
! 35: CF_ADDTO(kern_proto, kern_proto kern_item ';')
! 36:
! 37: kern_mp_limit:
! 38: /* empty */ { $$ = KRT_DEFAULT_ECMP_LIMIT; }
! 39: | LIMIT expr { $$ = $2; if (($2 <= 0) || ($2 > 255)) cf_error("Merge paths limit must be in range 1-255"); }
! 40: ;
! 41:
! 42: kern_item:
! 43: PERSIST bool { THIS_KRT->persist = $2; }
! 44: | SCAN TIME expr {
! 45: /* Scan time of 0 means scan on startup only */
! 46: THIS_KRT->scan_time = $3;
! 47: }
! 48: | LEARN bool {
! 49: THIS_KRT->learn = $2;
! 50: #ifndef KRT_ALLOW_LEARN
! 51: if ($2)
! 52: cf_error("Learning of kernel routes not supported on this platform");
! 53: #endif
! 54: }
! 55: | DEVICE ROUTES bool { THIS_KRT->devroutes = $3; }
! 56: | GRACEFUL RESTART bool { THIS_KRT->graceful_restart = $3; }
! 57: | MERGE PATHS bool kern_mp_limit {
! 58: THIS_KRT->merge_paths = $3 ? $4 : 0;
! 59: #ifndef KRT_ALLOW_MERGE_PATHS
! 60: if ($3)
! 61: cf_error("Path merging not supported on this platform");
! 62: #endif
! 63: }
! 64: ;
! 65:
! 66: /* Kernel interface protocol */
! 67:
! 68: CF_ADDTO(proto, kif_proto '}')
! 69:
! 70: kif_proto_start: proto_start DEVICE { this_proto = kif_init_config($1); }
! 71: ;
! 72:
! 73: CF_ADDTO(kif_proto, kif_proto_start proto_name '{')
! 74: CF_ADDTO(kif_proto, kif_proto proto_item ';')
! 75: CF_ADDTO(kif_proto, kif_proto kif_item ';')
! 76:
! 77: kif_item:
! 78: SCAN TIME expr {
! 79: /* Scan time of 0 means scan on startup only */
! 80: THIS_KIF->scan_time = $3;
! 81: }
! 82: | PRIMARY text_or_none prefix_or_ipa {
! 83: struct kif_primary_item *kpi = cfg_alloc(sizeof (struct kif_primary_item));
! 84: kpi->pattern = $2;
! 85: kpi->prefix = $3.addr;
! 86: kpi->pxlen = $3.len;
! 87: add_tail(&THIS_KIF->primary, &kpi->n);
! 88: }
! 89: ;
! 90:
! 91: CF_ADDTO(dynamic_attr, KRT_SOURCE { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_KRT_SOURCE); })
! 92: CF_ADDTO(dynamic_attr, KRT_METRIC { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_KRT_METRIC); })
! 93:
! 94: CF_CODE
! 95:
! 96: CF_END
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>