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>