Annotation of embedaddon/bird2/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 "sysdep/unix/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: #define KIF_IFACE ((struct kif_iface_config *) this_ipatt)
        !            18: 
        !            19: static void
        !            20: kif_set_preferred(ip_addr ip)
        !            21: {
        !            22:   if (ipa_is_ip4(ip))
        !            23:     KIF_IFACE->pref_v4 = ip;
        !            24:   else if (!ipa_is_link_local(ip))
        !            25:     KIF_IFACE->pref_v6 = ip;
        !            26:   else
        !            27:     KIF_IFACE->pref_ll = ip;
        !            28: }
        !            29: 
        !            30: CF_DECLS
        !            31: 
        !            32: CF_KEYWORDS(KERNEL, PERSIST, SCAN, TIME, LEARN, DEVICE, ROUTES, GRACEFUL, RESTART, KRT_SOURCE, KRT_METRIC, MERGE, PATHS)
        !            33: CF_KEYWORDS(INTERFACE, PREFERRED)
        !            34: 
        !            35: %type <i> kern_mp_limit
        !            36: 
        !            37: CF_GRAMMAR
        !            38: 
        !            39: /* Kernel syncer protocol */
        !            40: 
        !            41: proto: kern_proto '}' ;
        !            42: 
        !            43: kern_proto_start: proto_start KERNEL {
        !            44:      this_proto = krt_init_config($1);
        !            45: }
        !            46:  ;
        !            47: 
        !            48: kern_proto: kern_proto_start proto_name '{' ;
        !            49: kern_proto: kern_proto kern_item ';' ;
        !            50: 
        !            51: kern_mp_limit:
        !            52:    /* empty */ { $$ = KRT_DEFAULT_ECMP_LIMIT; }
        !            53:  | LIMIT expr  { $$ = $2; if (($2 <= 0) || ($2 > 255)) cf_error("Merge paths limit must be in range 1-255"); }
        !            54:  ;
        !            55: 
        !            56: kern_item:
        !            57:    proto_item
        !            58:  | proto_channel { this_proto->net_type = $1->net_type; }
        !            59:  | PERSIST bool { THIS_KRT->persist = $2; }
        !            60:  | SCAN TIME expr {
        !            61:       /* Scan time of 0 means scan on startup only */
        !            62:       THIS_KRT->scan_time = $3 S_;
        !            63:    }
        !            64:  | LEARN bool {
        !            65:       THIS_KRT->learn = $2;
        !            66: #ifndef KRT_ALLOW_LEARN
        !            67:       if ($2)
        !            68:        cf_error("Learning of kernel routes not supported on this platform");
        !            69: #endif
        !            70:    }
        !            71:  | GRACEFUL RESTART bool { THIS_KRT->graceful_restart = $3; }
        !            72:  | MERGE PATHS bool kern_mp_limit {
        !            73:       THIS_KRT->merge_paths = $3 ? $4 : 0;
        !            74: #ifndef KRT_ALLOW_MERGE_PATHS
        !            75:       if ($3)
        !            76:        cf_error("Path merging not supported on this platform");
        !            77: #endif
        !            78:    }
        !            79:  ;
        !            80: 
        !            81: /* Kernel interface protocol */
        !            82: 
        !            83: proto: kif_proto '}' ;
        !            84: 
        !            85: kif_proto_start: proto_start DEVICE { this_proto = kif_init_config($1); }
        !            86:  ;
        !            87: 
        !            88: kif_proto: kif_proto_start proto_name '{' ;
        !            89: kif_proto: kif_proto kif_item ';' ;
        !            90: 
        !            91: kif_item:
        !            92:    proto_item
        !            93:  | INTERFACE kif_iface
        !            94:  | SCAN TIME expr {
        !            95:       /* Scan time of 0 means scan on startup only */
        !            96:       THIS_KIF->scan_time = $3 S_;
        !            97:    }
        !            98:  ;
        !            99: 
        !           100: kif_iface_start:
        !           101: {
        !           102:   this_ipatt = cfg_allocz(sizeof(struct kif_iface_config));
        !           103:   add_tail(&THIS_KIF->iface_list, NODE this_ipatt);
        !           104:   init_list(&this_ipatt->ipn_list);
        !           105: }
        !           106: 
        !           107: kif_iface_item:
        !           108:    PREFERRED ipa { kif_set_preferred($2); }
        !           109:  ;
        !           110: 
        !           111: kif_iface_opts:
        !           112:    /* empty */
        !           113:  | kif_iface_opts kif_iface_item ';'
        !           114:  ;
        !           115: 
        !           116: kif_iface_opt_list:
        !           117:    /* empty */
        !           118:  | '{' kif_iface_opts '}'
        !           119:  ;
        !           120: 
        !           121: kif_iface:
        !           122:   kif_iface_start iface_patt_list_nopx kif_iface_opt_list;
        !           123: 
        !           124: 
        !           125: dynamic_attr: KRT_SOURCE { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_SOURCE); } ;
        !           126: dynamic_attr: KRT_METRIC { $$ = f_new_dynamic_attr(EAF_TYPE_INT, T_INT, EA_KRT_METRIC); } ;
        !           127: 
        !           128: CF_CODE
        !           129: 
        !           130: CF_END

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>