summaryrefslogtreecommitdiffstats
path: root/usr.sbin/atm/scspd/scsp_config_lex.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/atm/scspd/scsp_config_lex.c')
-rw-r--r--usr.sbin/atm/scspd/scsp_config_lex.c530
1 files changed, 0 insertions, 530 deletions
diff --git a/usr.sbin/atm/scspd/scsp_config_lex.c b/usr.sbin/atm/scspd/scsp_config_lex.c
deleted file mode 100644
index 20002b2..0000000
--- a/usr.sbin/atm/scspd/scsp_config_lex.c
+++ /dev/null
@@ -1,530 +0,0 @@
-/*
- *
- * ===================================
- * 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$
- *
- */
-
-/*
- * Server Cache Synchronization Protocol (SCSP) Support
- * ----------------------------------------------------
- *
- * Parse a configuration file into tokens
- *
- */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <netatm/port.h>
-#include <netatm/queue.h>
-#include <netatm/atm.h>
-#include <netatm/atm_if.h>
-#include <netatm/atm_sap.h>
-#include <netatm/atm_sys.h>
-#include <netatm/atm_ioctl.h>
-
-#include <ctype.h>
-#include <errno.h>
-#include <libatm.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-
-#include "scsp_msg.h"
-#include "scsp_if.h"
-#include "scsp_var.h"
-#include "scsp_config_parse.h"
-
-#ifndef lint
-__RCSID("@(#) $FreeBSD$");
-#endif
-
-
-/*
- * Global variables
- */
-int parse_line = 1;
-
-/*
- * Local definitions
- */
-#define TOK_MAX_LEN 128
-
-/*
- * Character classes
- */
-#define CHAR_INVALID 0 /* Not allowed */
-#define CHAR_ALPHA 1 /* G-W, Y, Z */
-#define CHAR_HEX_DIGIT 2 /* A-F */
-#define CHAR_X 3 /* X */
-#define CHAR_0 4 /* '0' */
-#define CHAR_DIGIT 5 /* 1-9 */
-#define CHAR_SPACE 6 /* space, tab */
-#define CHAR_DECIMAL 7 /* period */
-#define CHAR_SLASH 8 /* slash */
-#define CHAR_ASTERISK 9 /* asterisk */
-#define CHAR_HASH 10 /* pound sign */
-#define CHAR_SPECIAL 11 /* semicolon, braces */
-#define CHAR_MISC 12 /* chars allowd in file names */
-#define CHAR_EOL 13 /* new line */
-#define CHAR_EOF 14 /* EOF */
-#define CHAR_CNT CHAR_EOF + 1
-
-/*
- * Character class table (initialized by init_class_tbl())
- */
-static char class_tbl[128];
-
-/*
- * State table element structure
- */
-struct state_entry {
- int action;
- int next;
-};
-
-/*
- * Scanner states
- */
-#define TS_INIT 0
-#define TS_ALPHA 1
-#define TS_INT_1 2
-#define TS_INT 3
-#define TS_HEX 4
-#define TS_SLASH_1 5
-#define TS_COMMENT 6
-#define TS_COMMENT_1 7
-#define TS_FLUSH 8
-#define TS_HEX_1 9
-#define TS_CNT TS_HEX_1 + 1
-
-/*
- * Token scanner state table
- */
-static struct state_entry token_state_tbl[CHAR_CNT][TS_CNT] = {
-/* 0 1 2 3 4 5 6 7 8 9 */
-/* bad */{{2,0},{2,0},{2,0},{2,0},{2,0},{2,0},{0,6},{0,6},{0,8},{2,0}},
-/* g-z */{{1,1},{1,1},{1,1},{1,1},{2,0},{1,1},{0,6},{0,6},{0,8},{2,0}},
-/* a-f */{{1,1},{1,1},{1,1},{1,1},{1,9},{1,1},{0,6},{0,6},{0,8},{1,4}},
-/* x */{{1,1},{1,1},{1,4},{1,4},{2,0},{1,1},{0,6},{0,6},{0,8},{2,0}},
-/* 0 */{{1,2},{1,1},{1,3},{1,3},{1,9},{1,1},{0,6},{0,6},{0,8},{1,4}},
-/* 1-9 */{{1,3},{1,1},{1,3},{1,3},{1,9},{1,1},{0,6},{0,6},{0,8},{1,4}},
-/* sp */{{0,0},{6,0},{8,0},{8,0},{7,0},{6,0},{0,6},{0,6},{0,8},{2,0}},
-/* . */{{2,0},{1,1},{1,1},{1,1},{1,4},{1,1},{0,6},{0,6},{0,8},{2,0}},
-/* / */{{1,5},{1,1},{1,1},{1,1},{7,0},{4,8},{0,6},{0,0},{0,8},{2,0}},
-/* * */{{2,0},{6,0},{8,0},{8,0},{7,0},{4,6},{0,7},{0,7},{0,8},{2,0}},
-/* # */{{0,8},{6,0},{8,0},{8,0},{7,0},{6,0},{0,6},{0,6},{0,8},{2,0}},
-/* ;{} */{{3,0},{6,0},{8,0},{8,0},{7,0},{6,0},{0,6},{0,6},{0,8},{2,0}},
-/* Msc */{{2,0},{1,1},{1,1},{1,1},{2,0},{1,1},{0,6},{0,6},{0,8},{2,0}},
-/* EOL */{{0,0},{6,0},{8,0},{8,0},{7,0},{6,0},{0,6},{0,6},{0,0},{2,0}},
-/* EOF */{{9,0},{6,0},{8,0},{8,0},{7,0},{6,0},{2,0},{2,0},{9,0},{2,0}},
-};
-
-
-/*
- * Reserved words
- */
-static struct {
- char *word;
- int token;
-} rsvd_word_tbl[] = {
- { "ATMaddr", TOK_DCS_ADDR },
- { "ATMARP", TOK_ATMARP },
- { "CAReXmitInt", TOK_DCS_CA_REXMIT_INT },
- { "CSUSReXmitInt", TOK_DCS_CSUS_REXMIT_INT },
- { "CSUReXmitInt", TOK_DCS_CSU_REXMIT_INT },
- { "CSUReXmitMax", TOK_DCS_CSU_REXMIT_MAX },
- { "DCS", TOK_DCS },
- { "DHCP", TOK_DHCP },
- { "familyID", TOK_FAMILY },
- { "file", TOK_LFN },
- { "hops", TOK_DCS_HOP_CNT },
- { "HelloDead", TOK_DCS_HELLO_DF },
- { "HelloInt", TOK_DCS_HELLO_INT },
- { "ID", TOK_DCS_ID },
- { "LNNI", TOK_LNNI },
- { "log", TOK_LOG },
- { "MARS", TOK_MARS },
- { "netif", TOK_NETIF },
- { "NHRP", TOK_NHRP },
- { "protocol", TOK_PROTOCOL },
- { "server", TOK_SERVER },
- { "ServerGroupID", TOK_SRVGRP },
- { "syslog", TOK_SYSLOG },
- { (char *)0, 0 },
-};
-
-
-/*
- * Copy a character string
- *
- * Make a copy of a character string, using strdup. If strdup fails,
- * meaning we're out of memory, then print an error message and exit.
- *
- * Arguments:
- * s string to be copied
- *
- * Returns:
- * char * pointer to area provided by strdup
- *
- */
-static char *
-copy_buffer(s)
- char *s;
-{
- char *t;
-
- t = strdup(s);
-
- if (!t) {
- fprintf(stderr, "%s: strdup failed\n", prog);
- exit(1);
- }
-
- return(t);
-}
-
-
-/*
- * Push a character back onto the input stream.
- *
- * Arguments:
- * c character to be pushed
- *
- * Returns:
- * none
- *
- */
-static void
-push_char(c)
- char c;
-{
- if (c == '\n')
- parse_line--;
-
- ungetc(c, cfg_file);
-}
-
-
-/*
- * Initialize the character class table.
- *
- * Set each entry in the character class table to the class
- * corresponding to the character.
- *
- * Arguments:
- * tbl pointer to table to be initialized
- *
- * Returns:
- * None
- */
-static void
-init_class_tbl(tbl)
- char *tbl;
-{
- int i;
- char c;
-
- /*
- * Set up the table for all ASCII characters
- */
- for (i=0; isascii((char)i); i++) {
- /*
- * Clear entry
- */
- tbl[i] = CHAR_INVALID;
-
- /*
- * Set entries depending on character type
- */
- c = (char)i;
- if (c == 'a' || c == 'b' || c == 'c' ||
- c == 'd' || c == 'e' || c == 'f' ||
- c == 'A' || c == 'B' || c == 'C' ||
- c == 'D' || c == 'E' || c == 'F')
- tbl[i] = CHAR_HEX_DIGIT;
- else if (c == 'x' || c == 'X')
- tbl[i] = CHAR_X;
- else if (isalpha(c))
- tbl[i] = CHAR_ALPHA;
- else if (c == '0')
- tbl[i] = CHAR_0;
- else if (isdigit(c))
- tbl[i] = CHAR_DIGIT;
- else if (c == '\n')
- tbl[i] = CHAR_EOL;
- else if (c == ' ' || c == '\t')
- tbl[i] = CHAR_SPACE;
- else if (c == '#')
- tbl[i] = CHAR_HASH;
- else if (c == '*')
- tbl[i] = CHAR_ASTERISK;
- else if (c == '.')
- tbl[i] = CHAR_DECIMAL;
- else if (c == '/')
- tbl[i] = CHAR_SLASH;
- else if (c == ';' || c == '{' || c == '}')
- tbl[i] = CHAR_SPECIAL;
- else if (c == '-' || c == '_' || c == '&' || c == '@' ||
- c == '~')
- tbl[i] = CHAR_MISC;
- }
-}
-
-
-/*
- * Get the class of a character.
- *
- * Arguments:
- * c character being scanned
- *
- * Returns:
- * int character class
- */
-static int
-char_class(c)
- char c;
-{
- int class = CHAR_INVALID;
-
- if (c == EOF) {
- class = CHAR_EOF;
- } else if (c < 0 || !isascii(c)) {
- class = CHAR_INVALID;
- } else {
- class = class_tbl[(int)c];
- }
-
- return(class);
-}
-
-
-/*
- * Print an error message when the scanner finds an error
- *
- * Arguments:
- * c character on which the error was recognized
- * state scanner state at error
- *
- * Returns:
- * None
- */
-static void
-scan_error(c, state)
- char c;
- int state;
-{
- /*
- * Check for invalid character
- */
- if (char_class(c) == CHAR_INVALID) {
- parse_error("Invalid character 0x%x encountered",
- c);
- return;
- }
-
- /*
- * Check for unexpected EOF
- */
- if (char_class(c) == CHAR_EOF) {
- parse_error("Unexpected end of file");
- return;
- }
-
- /*
- * Error depends on state
- */
- switch(state) {
- case TS_INIT:
- parse_error("Syntax error at '%c'", c);
- break;
- case TS_ALPHA:
- case TS_INT_1:
- case TS_INT:
- case TS_SLASH_1:
- case TS_COMMENT:
- case TS_COMMENT_1:
- case TS_FLUSH:
- parse_error("Syntax error");
- break;
- case TS_HEX:
- case TS_HEX_1:
- parse_error("Syntax error in hex string");
- break;
- }
-}
-
-
-/*
- * Assemble a token
- *
- * Read a character at a time from the input file, assembling the
- * characters into tokens as specified by the token scanner state
- * table. Return the completed token.
- *
- * Arguments:
- * None
- *
- * Returns:
- * token the type of the token found
- */
-int
-yylex()
-{
- int i, state;
- char c, token_buffer[TOK_MAX_LEN];
-
- /*
- * Initialize
- */
- if (class_tbl['A'] != CHAR_HEX_DIGIT)
- init_class_tbl(class_tbl);
- state = TS_INIT;
- bzero(token_buffer, sizeof(token_buffer));
- bzero(&yylval, sizeof(yylval));
-
- /*
- * Handle a character at a time until a token is built
- */
- while(1) {
- /*
- * Read a character from the input file.
- */
- c = (char)getc(cfg_file);
- if (c == '\n') {
- parse_line++;
- }
-
-#ifdef NOTDEF
- printf("token_state: state=%d, char=%c, class=%d, action=%d, next=%d\n",
- state,
- c,
- char_class(c),
- token_state_tbl[char_class][state].action,
- token_state_tbl[char_class][state].next);
-#endif
-
- /*
- * Perform an action based on the state table
- */
- switch(token_state_tbl[char_class(c)][state].action) {
- case 0:
- /*
- * Ignore the character
- */
- break;
- case 1:
- /*
- * Add character to buffer
- */
- if (strlen(token_buffer) < TOK_MAX_LEN) {
- token_buffer[strlen(token_buffer)] = c;
- }
- break;
- case 2:
- /*
- * Error--print a message and start over
- */
- scan_error(c, state);
- break;
- case 3:
- /*
- * Return special character
- */
- return(c);
- break;
- case 4:
- /*
- * Clear the token buffer
- */
- bzero(token_buffer, sizeof(token_buffer));
- break;
- case 5:
- /*
- * Not used
- */
- break;
- case 6:
- /*
- * Return character token
- */
- push_char(c);
-
- /*
- * Check for reserved words
- */
- for (i=0; rsvd_word_tbl[i].word; i++) {
- if (strcasecmp(token_buffer,
- rsvd_word_tbl[i].word) == 0)
- break;
- }
- if (rsvd_word_tbl[i].word) {
- return(rsvd_word_tbl[i].token);
- }
-
- /*
- * Word isn't reserved, return alpha string
- */
- yylval.tv_alpha = copy_buffer(token_buffer);
- return(TOK_NAME);
- break;
- case 7:
- /*
- * Return hex string (ATM address)
- */
- push_char(c);
- yylval.tv_hex = copy_buffer(token_buffer);
- return(TOK_HEX);
- break;
- case 8:
- /*
- * Return integer
- */
- push_char(c);
- yylval.tv_int = atoi(token_buffer);
- return(TOK_INTEGER);
- break;
- case 9:
- /*
- * Return EOF
- */
- return(0);
- break;
- default:
- fprintf(stderr, "Invalid action indicator, state=%d, char=0x%02x\n",
- state, c);
- break;
- }
-
- /*
- * Set the next state and bump to the next character
- */
- state = token_state_tbl[char_class(c)][state].next;
- }
-}
OpenPOWER on IntegriCloud