2 * netsniff-ng - the packet sniffing beast
3 * By Daniel Borkmann <daniel@netsniff-ng.org>
4 * Copyright 2011 Daniel Borkmann <dborkma@tik.ee.ethz.ch>,
5 * Swiss federal institute of technology (ETH Zurich)
6 * Subject to the GPL, version 2.
16 #include "bpf_parser.tab.h"
19 extern void yyerror(const char *);
40 number_dec {digit_n}|{digit_s}{digit}*
41 number_oct {digit_n}{digit}+
42 number_hex {digit_n}{hex_x}{hex}+
43 number_bin {digit_n}{bindigit_b}{bindigit}+
47 label {label_s}{label_me}+
51 "ldb" { return OP_LDB; }
52 "ldh" { return OP_LDH; }
53 "ld" { return OP_LD; }
54 "ldx" { return OP_LDX; }
55 "ldxb" { return OP_LDXB; }
56 "st" { return OP_ST; }
57 "stx" { return OP_STX; }
58 "jmp"|"ja" { return OP_JMP; }
59 "jeq" { return OP_JEQ; }
60 "jgt" { return OP_JGT; }
61 "jge" { return OP_JGE; }
62 "jset" { return OP_JSET; }
63 "add" { return OP_ADD; }
64 "sub" { return OP_SUB; }
65 "mul" { return OP_MUL; }
66 "div" { return OP_DIV; }
67 "mod" { return OP_MOD; }
68 "neg" { return OP_NEG; }
69 "and" { return OP_AND; }
70 "xor" { return OP_XOR; }
71 "or" { return OP_OR; }
72 "lsh" { return OP_LSH; }
73 "rsh" { return OP_RSH; }
74 "ret" { return OP_RET; }
75 "tax" { return OP_TAX; }
76 "txa" { return OP_TXA; }
77 "len"|"pktlen" { return K_PKT_LEN; }
78 "proto" { return K_PROTO; }
79 "type" { return K_TYPE; }
80 "ifidx" { return K_IFIDX; }
81 "nla" { return K_NLATTR; }
82 "nlan" { return K_NLATTR_NEST; }
83 "mark" { return K_MARK; }
84 "queue" { return K_QUEUE; }
85 "hatype" { return K_HATYPE; }
86 "rxhash" { return K_RXHASH; }
87 "cpu" { return K_CPU; }
102 "/*"([^\*]|\*[^/])*"*/" { return K_COMMENT; }
104 {number_hex} { yylval.number = strtoul(yytext, NULL, 16);
107 {number_dec} { yylval.number = strtol(yytext, NULL, 10);
110 {number_oct} { yylval.number = strtol(yytext, NULL, 8);
113 {number_bin} { yylval.number = strtol(yytext + 2, NULL, 2);
116 {label} { yylval.label = xstrdup(yytext);
119 ";"[^\n]* {/* NOP */}
122 . { printf("Unknown character '%s'", yytext);
123 yyerror("lex Unknown character"); }