%{ /* * * =================================== * HARP | Host ATM Research Platform * =================================== * * * This Host ATM Research Platform ("HARP") file (the "Software") is * made available by Network Computing Services, Inc. ("NetworkCS") * "AS IS". NetworkCS does not provide maintenance, improvements or * support of any kind. * * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED, * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE. * In no event shall NetworkCS be responsible for any damages, including * but not limited to consequential damages, arising from or relating to * any use of the Software or related support. * * Copyright 1994-1998 Network Computing Services, Inc. * * Copies of this Software may be made, however, the above copyright * notice must be reproduced on all copies. * * @(#) $FreeBSD: src/usr.sbin/atm/scspd/scsp_config_parse.y,v 1.3 1999/08/28 01:15:32 peter Exp $ * @(#) $DragonFly: src/usr.sbin/atm/scspd/scsp_config_parse.y,v 1.4 2008/11/12 21:44:59 swildner Exp $ */ /* * Server Cache Synchronization Protocol (SCSP) Support * ---------------------------------------------------- * * YACC input for configuration file processing * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #if __STDC__ #include #else #include #endif #include #include #include #include #include "scsp_msg.h" #include "scsp_if.h" #include "scsp_var.h" void yyerror(char *); %} /* * Token value definition */ %union { char *tv_alpha; int tv_int; char *tv_hex; } /* * Token types returned by scanner */ %token TOK_NAME %token TOK_INTEGER %token TOK_HEX /* * Reserved words */ %token TOK_ATMARP %token TOK_DCS %token TOK_DCS_ADDR %token TOK_DCS_CA_REXMIT_INT %token TOK_DCS_CSUS_REXMIT_INT %token TOK_DCS_CSU_REXMIT_INT %token TOK_DCS_CSU_REXMIT_MAX %token TOK_DCS_HELLO_DF %token TOK_DCS_HELLO_INT %token TOK_DCS_HOP_CNT %token TOK_DCS_ID %token TOK_DHCP %token TOK_FAMILY %token TOK_LFN %token TOK_LNNI %token TOK_LOG %token TOK_MARS %token TOK_NETIF %token TOK_NHRP %token TOK_PROTOCOL %token TOK_SERVER %token TOK_SRVGRP %token TOK_SYSLOG %% cfg_file: /* Empty */ | stmt_seq stmt_seq: stmt | stmt_seq stmt ; stmt: server_stmt ';' | log_stmt ';' ; /* * SCSP server definition statements */ server_stmt: TOK_SERVER TOK_NAME { int rc; rc = start_server($2); UM_FREE($2); if (rc) return(rc); } '{' server_def '}' { int rc; rc = finish_server(); if (rc) return(rc); } ; server_def: server_spec ';' | server_def server_spec ';' ; server_spec: /* Nothing */ | dcs_stmt | TOK_NETIF TOK_NAME { int rc; /* * Configure the network interface */ rc = set_intf($2); UM_FREE($2); if (rc) return(rc); } | TOK_PROTOCOL TOK_ATMARP { int rc; /* * Configure the protocol */ rc = set_protocol(SCSP_PROTO_ATMARP); if (rc) return(rc); } | TOK_PROTOCOL TOK_DHCP | TOK_LNNI | TOK_MARS | TOK_NHRP { yyerror("Protocol not implemented"); return(1); } | TOK_SRVGRP TOK_INTEGER { int rc; /* * Configure the SCSP server group ID */ rc = set_server_group($2); if (rc) return(rc); } ; /* * SCSP DCS definition statements */ dcs_stmt: TOK_DCS { int rc; rc = start_dcs(); if (rc) return(rc); } '{' dcs_def '}' { int rc; rc = finish_dcs(); if (rc) return(rc); } ; dcs_def: dcs_spec ';' | dcs_def dcs_spec ';' ; dcs_spec: /* Nothing */ | TOK_DCS_ADDR TOK_HEX { int rc; /* * Set DCS address */ rc = set_dcs_addr($2, NULL); UM_FREE($2); if (rc) return(rc); } | TOK_DCS_ADDR TOK_HEX TOK_HEX { int rc; /* * Set DCS address and subaddress */ rc = set_dcs_addr($2, $3); UM_FREE($2); UM_FREE($3); if (rc) return(rc); } | TOK_DCS_CA_REXMIT_INT TOK_INTEGER { int rc; /* * Configure the CA retransmit interval */ rc = set_dcs_ca_rexmit($2); if (rc) return(rc); } | TOK_DCS_CSUS_REXMIT_INT TOK_INTEGER { int rc; /* * Configure the CSUS retransmit interval */ rc = set_dcs_csus_rexmit($2); if (rc) return(rc); } | TOK_DCS_CSU_REXMIT_INT TOK_INTEGER { int rc; /* * Configure the CSU retransmit interval */ rc = set_dcs_csu_rexmit($2); if (rc) return(rc); } | TOK_DCS_CSU_REXMIT_MAX TOK_INTEGER { int rc; /* * Configure the CSU retransmit limit */ rc = set_dcs_csu_rexmit_max($2); if (rc) return(rc); } | TOK_DCS_HELLO_DF TOK_INTEGER { int rc; /* * Configure the Hello dead factor */ rc = set_dcs_hello_df($2); if (rc) return(rc); } | TOK_DCS_HELLO_INT TOK_INTEGER { int rc; /* * Configure the Hello interval */ rc = set_dcs_hello_int($2); if (rc) return(rc); } | TOK_DCS_HOP_CNT TOK_INTEGER { int rc; /* * Configure the hop count */ rc = set_dcs_hops($2); if (rc) return(rc); } | TOK_DCS_ID TOK_NAME { int rc; /* * Configure the DCS ID */ rc = set_dcs_id($2); UM_FREE($2); if (rc) return(rc); } ; /* * Logging option statements */ log_stmt: TOK_LOG '{' log_spec '}' ; log_spec: /* Nothing */ | TOK_LFN TOK_NAME ';' { /* * Configure the log file name */ int rc; rc = set_log_file($2); UM_FREE($2); if (rc) return(rc); } ; | TOK_SYSLOG ';' { /* * Configure logging to syslog */ scsp_log_syslog = 1; } ; %% void parse_error(const char *fmt, ...) { va_list ap; char buff[256]; va_start(ap, fmt); vsprintf(buff, fmt, ap); scsp_log(LOG_ERR, "%s: Config file error at line %d: %s\n", prog, parse_line, buff); #ifdef NOTDEF fprintf(stderr, "%s: Config file error at line %d: %s\n", prog, parse_line, buff); #endif va_end(ap); } void yyerror(char *s) { parse_error(s); }