1aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger%{ 2aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 3aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include <stdio.h> 443cc93e3470017f51f20adbef023bd9b53de3a7bosdl.org!shemminger#include <stdlib.h> 5aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include <malloc.h> 6aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include <string.h> 7aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include "ssfilter.h" 8aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 9aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingertypedef struct ssfilter * ssfilter_t; 10aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 11aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define YYSTYPE ssfilter_t 12aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 13aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerstatic struct ssfilter * alloc_node(int type, void *pred) 14aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger{ 15aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger struct ssfilter *n = malloc(sizeof(*n)); 16aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (n == NULL) 17aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger abort(); 18aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger n->type = type; 19aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger n->pred = pred; 20aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger n->post = NULL; 21aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return n; 22aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger} 23aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 24aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerstatic char **yy_argv; 25aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerstatic int yy_argc; 26aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerstatic FILE *yy_fp; 27aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerstatic ssfilter_t *yy_ret; 28aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 29aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerstatic int yylex(void); 30aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 31aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerstatic void yyerror(char *s) 32aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger{ 33aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger fprintf(stderr, "ss: bison bellows (while parsing filter): \"%s!\"", s); 34aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger} 35aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 36aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger%} 37aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 38aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger%token HOSTCOND DCOND SCOND DPORT SPORT LEQ GEQ NEQ AUTOBOUND 39aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger%left '|' 40aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger%left '&' 41aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger%nonassoc '!' 42aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 43aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger%% 44aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerapplet: null expr 45aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 46aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger *yy_ret = $2; 47aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = $2; 48aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 49aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | null 50aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger ; 51aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingernull: /* NOTHING */ { $$ = NULL; } 52aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger ; 53aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerexpr: DCOND HOSTCOND 54aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 55aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_DCOND, $2); 56aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 57aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | SCOND HOSTCOND 58ae665a522bd46bea44c5ea84c89c8b1731954170Stephen Hemminger { 59aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_SCOND, $2); 60aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 61aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | DPORT GEQ HOSTCOND 62aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 63aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_D_GE, $3); 64aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 65aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | DPORT LEQ HOSTCOND 66aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 67aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_D_LE, $3); 68aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 69aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | DPORT '>' HOSTCOND 70aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 71aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_NOT, alloc_node(SSF_D_LE, $3)); 72aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 73aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | DPORT '<' HOSTCOND 74aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 75aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_NOT, alloc_node(SSF_D_GE, $3)); 76aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 77aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | DPORT '=' HOSTCOND 78aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 79aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_DCOND, $3); 80aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 81aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | DPORT NEQ HOSTCOND 82aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 83aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_NOT, alloc_node(SSF_DCOND, $3)); 84aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 85aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 86aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | SPORT GEQ HOSTCOND 87aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 88aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_S_GE, $3); 89aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 90aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | SPORT LEQ HOSTCOND 91aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 92aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_S_LE, $3); 93aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 94aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | SPORT '>' HOSTCOND 95aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 96aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_NOT, alloc_node(SSF_S_LE, $3)); 97aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 98aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | SPORT '<' HOSTCOND 99aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 100aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_NOT, alloc_node(SSF_S_GE, $3)); 101aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 102aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | SPORT '=' HOSTCOND 103aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 104aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_SCOND, $3); 105aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 106aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | SPORT NEQ HOSTCOND 107aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 108aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_NOT, alloc_node(SSF_SCOND, $3)); 109aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 110aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 111aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | AUTOBOUND 112aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 113aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_S_AUTO, NULL); 114aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 115aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | expr '|' expr 116aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 117aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_OR, $1); 118aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$->post = $3; 119aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 120aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | expr expr 121aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 122aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_AND, $1); 123aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$->post = $2; 124aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 125aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | expr '&' expr 126aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 127aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 128aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_AND, $1); 129aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$->post = $3; 130aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 131aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | '!' expr 132aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 133aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = alloc_node(SSF_NOT, $2); 134aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 135aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger | '(' expr ')' 136aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger { 137aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger $$ = $2; 138aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 139aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger; 140aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger%% 141aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 142aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerstatic char *get_token_from_line(char **ptr) 143aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger{ 144aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger char *tok, *cp = *ptr; 145aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 146aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger while (*cp == ' ' || *cp == '\t') cp++; 147aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 148aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (*cp == 0) { 149aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger *ptr = cp; 150aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return NULL; 151aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 152aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 153aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger tok = cp; 154aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 155aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger while (*cp != 0 && *cp != ' ' && *cp != '\t') { 156aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger /* Backslash escapes everything. */ 157aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (*cp == '\\') { 158aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger char *tp; 159aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger for (tp = cp; tp != tok; tp--) 160aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger *tp = *(tp-1); 161aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger cp++; 162aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger tok++; 163aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (*cp == 0) 164aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger break; 165aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 166aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger cp++; 167aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 168aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (*cp) 169aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger *cp++ = 0; 170aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger *ptr = cp; 171aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return tok; 172aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger} 173aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 174aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerint yylex(void) 175aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger{ 176aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger static char argbuf[1024]; 177aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger static char *tokptr = argbuf; 178aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger static int argc; 179aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger char *curtok; 180aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 181aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger do { 182aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger while (*tokptr == 0) { 183aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger tokptr = NULL; 184aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (argc < yy_argc) { 185aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger tokptr = yy_argv[argc]; 186aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger argc++; 187aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } else if (yy_fp) { 188aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger while (tokptr == NULL) { 189aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (fgets(argbuf, sizeof(argbuf)-1, yy_fp) == NULL) 190aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return 0; 191aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger argbuf[sizeof(argbuf)-1] = 0; 192aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strlen(argbuf) == sizeof(argbuf) - 1) { 193aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger fprintf(stderr, "Too long line in filter"); 194aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger exit(-1); 195aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 196aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (argbuf[strlen(argbuf)-1] == '\n') 197aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger argbuf[strlen(argbuf)-1] = 0; 198aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (argbuf[0] == '#' || argbuf[0] == '0') 199aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger continue; 200aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger tokptr = argbuf; 201aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 202aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } else { 203aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return 0; 204aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 205aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 206aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } while ((curtok = get_token_from_line(&tokptr)) == NULL); 207aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 208aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strcmp(curtok, "!") == 0 || 209aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger strcmp(curtok, "not") == 0) 210aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return '!'; 211aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strcmp(curtok, "&") == 0 || 212aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger strcmp(curtok, "&&") == 0 || 213aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger strcmp(curtok, "and") == 0) 214aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return '&'; 215aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strcmp(curtok, "|") == 0 || 216aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger strcmp(curtok, "||") == 0 || 217aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger strcmp(curtok, "or") == 0) 218aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return '|'; 219aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strcmp(curtok, "(") == 0) 220aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return '('; 221aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strcmp(curtok, ")") == 0) 222aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return ')'; 223aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strcmp(curtok, "dst") == 0) 224aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return DCOND; 225aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strcmp(curtok, "src") == 0) 226aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return SCOND; 227aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strcmp(curtok, "dport") == 0) 228aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return DPORT; 229aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strcmp(curtok, "sport") == 0) 230aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return SPORT; 231aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strcmp(curtok, ">=") == 0 || 232aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger strcmp(curtok, "ge") == 0 || 233aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger strcmp(curtok, "geq") == 0) 234aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return GEQ; 235aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strcmp(curtok, "<=") == 0 || 236aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger strcmp(curtok, "le") == 0 || 237aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger strcmp(curtok, "leq") == 0) 238aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return LEQ; 239aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strcmp(curtok, "!=") == 0 || 240aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger strcmp(curtok, "ne") == 0 || 241aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger strcmp(curtok, "neq") == 0) 242aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return NEQ; 243aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strcmp(curtok, "=") == 0 || 244aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger strcmp(curtok, "==") == 0 || 245aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger strcmp(curtok, "eq") == 0) 246aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return '='; 247aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strcmp(curtok, ">") == 0 || 248aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger strcmp(curtok, "gt") == 0) 249aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return '>'; 250aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strcmp(curtok, "<") == 0 || 251aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger strcmp(curtok, "lt") == 0) 252aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return '<'; 253aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (strcmp(curtok, "autobound") == 0) 254aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return AUTOBOUND; 255aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger yylval = (void*)parse_hostcond(curtok); 256aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (yylval == NULL) { 257aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger fprintf(stderr, "Cannot parse dst/src address.\n"); 258aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger exit(1); 259aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 260aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return HOSTCOND; 261aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger} 262aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 263aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerint ssfilter_parse(struct ssfilter **f, int argc, char **argv, FILE *fp) 264aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger{ 265aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger yy_argc = argc; 266aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger yy_argv = argv; 267aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger yy_fp = fp; 268aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger yy_ret = f; 269aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger 270aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger if (yyparse()) { 271aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger fprintf(stderr, " Sorry.\n"); 272aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return -1; 273aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger } 274aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger return 0; 275aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger} 276