File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / bird / proto / babel / config.Y
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Mar 17 19:50:23 2021 UTC (4 years, 1 month ago) by misho
Branches: bird, MAIN
CVS tags: v1_6_8p3, HEAD
bird 1.6.8

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

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