Annotation of embedaddon/bird/proto/babel/config.Y, revision 1.1

1.1     ! misho       1: /*
        !             2:  *     BIRD -- Babel Configuration
        !             3:  *
        !             4:  *     Copyright (c) 2015-2016 Toke Hoiland-Jorgensen
        !             5:  *
        !             6:  *     Can be freely distributed and used under the terms of the GNU GPL.
        !             7:  */
        !             8: 
        !             9: 
        !            10: 
        !            11: CF_HDR
        !            12: 
        !            13: #include "proto/babel/babel.h"
        !            14: #include "nest/iface.h"
        !            15: 
        !            16: CF_DEFINES
        !            17: 
        !            18: #define BABEL_CFG ((struct babel_config *) this_proto)
        !            19: #define BABEL_IFACE ((struct babel_iface_config *) this_ipatt)
        !            20: 
        !            21: CF_DECLS
        !            22: 
        !            23: CF_KEYWORDS(BABEL, METRIC, RXCOST, HELLO, UPDATE, INTERVAL, PORT, WIRED,
        !            24: WIRELESS, RX, TX, BUFFER, LENGTH, CHECK, LINK, BABEL_METRIC)
        !            25: 
        !            26: CF_GRAMMAR
        !            27: 
        !            28: CF_ADDTO(proto, babel_proto)
        !            29: 
        !            30: babel_proto_start: proto_start BABEL
        !            31: {
        !            32:   this_proto = proto_config_new(&proto_babel, $1);
        !            33:   init_list(&BABEL_CFG->iface_list);
        !            34: };
        !            35: 
        !            36: babel_proto_item:
        !            37:    proto_item
        !            38:  | INTERFACE babel_iface
        !            39:  ;
        !            40: 
        !            41: babel_proto_opts:
        !            42:    /* empty */
        !            43:  | babel_proto_opts babel_proto_item ';'
        !            44:  ;
        !            45: 
        !            46: babel_proto:
        !            47:    babel_proto_start proto_name '{' babel_proto_opts '}';
        !            48: 
        !            49: 
        !            50: babel_iface_start:
        !            51: {
        !            52:   this_ipatt = cfg_allocz(sizeof(struct babel_iface_config));
        !            53:   add_tail(&BABEL_CFG->iface_list, NODE this_ipatt);
        !            54:   init_list(&this_ipatt->ipn_list);
        !            55:   BABEL_IFACE->port = BABEL_PORT;
        !            56:   BABEL_IFACE->type = BABEL_IFACE_TYPE_WIRED;
        !            57:   BABEL_IFACE->tx_tos = IP_PREC_INTERNET_CONTROL;
        !            58:   BABEL_IFACE->tx_priority = sk_priority_control;
        !            59:   BABEL_IFACE->check_link = 1;
        !            60: };
        !            61: 
        !            62: 
        !            63: babel_iface_finish:
        !            64: {
        !            65:   if (BABEL_IFACE->type == BABEL_IFACE_TYPE_WIRELESS)
        !            66:   {
        !            67:     if (!BABEL_IFACE->hello_interval)
        !            68:       BABEL_IFACE->hello_interval = BABEL_HELLO_INTERVAL_WIRELESS;
        !            69:     if (!BABEL_IFACE->rxcost)
        !            70:       BABEL_IFACE->rxcost = BABEL_RXCOST_WIRELESS;
        !            71:   }
        !            72:   else
        !            73:   {
        !            74:     if (!BABEL_IFACE->hello_interval)
        !            75:       BABEL_IFACE->hello_interval = BABEL_HELLO_INTERVAL_WIRED;
        !            76:     if (!BABEL_IFACE->rxcost)
        !            77:       BABEL_IFACE->rxcost = BABEL_RXCOST_WIRED;
        !            78:   }
        !            79: 
        !            80:   /* Make sure we do not overflow the 16-bit centisec fields */
        !            81:   if (!BABEL_IFACE->update_interval)
        !            82:     BABEL_IFACE->update_interval = MIN_(BABEL_IFACE->hello_interval*BABEL_UPDATE_INTERVAL_FACTOR, BABEL_MAX_INTERVAL);
        !            83:   BABEL_IFACE->ihu_interval = MIN_(BABEL_IFACE->hello_interval*BABEL_IHU_INTERVAL_FACTOR, BABEL_MAX_INTERVAL);
        !            84: };
        !            85: 
        !            86: 
        !            87: babel_iface_item:
        !            88:  | PORT expr { BABEL_IFACE->port = $2; if (($2<1) || ($2>65535)) cf_error("Invalid port number"); }
        !            89:  | RXCOST expr { BABEL_IFACE->rxcost = $2; if (($2<1) || ($2>65535)) cf_error("Invalid rxcost"); }
        !            90:  | HELLO INTERVAL expr { BABEL_IFACE->hello_interval = $3; if (($3<1) || ($3>BABEL_MAX_INTERVAL)) cf_error("Invalid hello interval"); }
        !            91:  | UPDATE INTERVAL expr { BABEL_IFACE->update_interval = $3; if (($3<1) || ($3>BABEL_MAX_INTERVAL)) cf_error("Invalid update interval"); }
        !            92:  | TYPE WIRED { BABEL_IFACE->type = BABEL_IFACE_TYPE_WIRED; }
        !            93:  | TYPE WIRELESS { BABEL_IFACE->type = BABEL_IFACE_TYPE_WIRELESS; }
        !            94:  | RX BUFFER expr { BABEL_IFACE->rx_buffer = $3; if (($3<256) || ($3>65535)) cf_error("RX buffer must be in range 256-65535"); }
        !            95:  | TX LENGTH expr { BABEL_IFACE->tx_length = $3; if (($3<256) || ($3>65535)) cf_error("TX length must be in range 256-65535"); }
        !            96:  | TX tos { BABEL_IFACE->tx_tos = $2; }
        !            97:  | TX PRIORITY expr { BABEL_IFACE->tx_priority = $3; }
        !            98:  | CHECK LINK bool { BABEL_IFACE->check_link = $3; }
        !            99:  ;
        !           100: 
        !           101: babel_iface_opts:
        !           102:    /* empty */
        !           103:  | babel_iface_opts babel_iface_item ';'
        !           104:  ;
        !           105: 
        !           106: babel_iface_opt_list:
        !           107:    /* empty */
        !           108:  | '{' babel_iface_opts '}'
        !           109:  ;
        !           110: 
        !           111: 
        !           112: babel_iface:
        !           113:   babel_iface_start iface_patt_list_nopx babel_iface_opt_list babel_iface_finish;
        !           114: 
        !           115: CF_ADDTO(dynamic_attr, BABEL_METRIC { $$ = f_new_dynamic_attr(EAF_TYPE_INT | EAF_TEMP, T_INT, EA_BABEL_METRIC); })
        !           116: 
        !           117: CF_CLI_HELP(SHOW BABEL, ..., [[Show information about Babel protocol]]);
        !           118: 
        !           119: CF_CLI(SHOW BABEL INTERFACES, optsym opttext, [<name>] [\"<interface>\"], [[Show information about Babel interfaces]])
        !           120: { babel_show_interfaces(proto_get_named($4, &proto_babel), $5); };
        !           121: 
        !           122: CF_CLI(SHOW BABEL NEIGHBORS, optsym opttext, [<name>] [\"<interface>\"], [[Show information about Babel neighbors]])
        !           123: { babel_show_neighbors(proto_get_named($4, &proto_babel), $5); };
        !           124: 
        !           125: CF_CLI(SHOW BABEL ENTRIES, optsym opttext, [<name>], [[Show information about Babel prefix entries]])
        !           126: { babel_show_entries(proto_get_named($4, &proto_babel)); };
        !           127: 
        !           128: CF_CODE
        !           129: 
        !           130: CF_END

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