forked from osmocom/wireshark
Removed the "exists" keyword from the grammar. The name of a protocol or a
field by itself assumes you are checking for the existence of that protocol or field. Changed the format of the list of filterable fields in the man page. Developers: run "./configure" so that your configure script will re-create dfilter2pod from the new dfilter2pod.in svn path=/trunk/; revision=426
This commit is contained in:
parent
feaab633b5
commit
aebcf2eb32
|
@ -3,7 +3,7 @@
|
|||
/* dfilter-grammar.y
|
||||
* Parser for display filters
|
||||
*
|
||||
* $Id: dfilter-grammar.y,v 1.4 1999/08/02 06:34:23 gram Exp $
|
||||
* $Id: dfilter-grammar.y,v 1.5 1999/08/03 15:04:25 gram Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
|
@ -112,7 +112,7 @@ GSList *dfilter_list_byte_arrays = NULL;
|
|||
%type <node> ether_value ether_variable
|
||||
%type <node> ipxnet_value ipxnet_variable
|
||||
%type <node> ipv4_value ipv4_variable
|
||||
%type <node> protocol_name
|
||||
%type <node> variable_name
|
||||
%type <node> bytes_value bytes_variable
|
||||
%type <node> boolean_value boolean_variable
|
||||
|
||||
|
@ -121,7 +121,6 @@ GSList *dfilter_list_byte_arrays = NULL;
|
|||
%type <operand> bytes_relation
|
||||
|
||||
%type <variable> any_variable_type
|
||||
%type <operand> exists_operand
|
||||
|
||||
%token <variable> T_FT_UINT8
|
||||
%token <variable> T_FT_UINT16
|
||||
|
@ -134,14 +133,13 @@ GSList *dfilter_list_byte_arrays = NULL;
|
|||
%token <variable> T_FT_STRING
|
||||
%token <variable> T_FT_IPXNET
|
||||
|
||||
%token <id> T_VAL_ID
|
||||
%token <id> T_VAL_UNQUOTED_STRING
|
||||
%token <ether> T_VAL_ETHER
|
||||
%token <bytes> T_VAL_BYTES
|
||||
%token <byte_range> T_VAL_BYTE_RANGE
|
||||
|
||||
%token <operand> TOK_AND TOK_OR TOK_NOT TOK_XOR
|
||||
%token <operand> TOK_EQ TOK_NE TOK_GT TOK_GE TOK_LT TOK_LE
|
||||
%token <operand> TOK_EXIST
|
||||
%token <operand> TOK_TRUE TOK_FALSE
|
||||
|
||||
%left TOK_AND
|
||||
|
@ -161,9 +159,10 @@ statement: expression
|
|||
expression: '(' expression ')' { $$ = $2; }
|
||||
| expression TOK_AND expression { $$ = dfilter_mknode_join($1, logical, $2, $3); }
|
||||
| expression TOK_OR expression { $$ = dfilter_mknode_join($1, logical, $2, $3); }
|
||||
| expression TOK_XOR expression { $$ = dfilter_mknode_join($1, logical, $2, $3); }
|
||||
| TOK_NOT expression { $$ = dfilter_mknode_unary(TOK_NOT, $2); }
|
||||
| relation { $$ = $1; }
|
||||
| protocol_name { $$ = $1; }
|
||||
| variable_name { $$ = $1; }
|
||||
;
|
||||
|
||||
relation: numeric_variable numeric_relation numeric_value
|
||||
|
@ -221,12 +220,10 @@ relation: numeric_variable numeric_relation numeric_value
|
|||
$$ = dfilter_mknode_join($1, relation, $2, $3);
|
||||
}
|
||||
|
||||
| exists_operand any_variable_type { $$ = dfilter_mknode_existence($2); }
|
||||
|
||||
;
|
||||
|
||||
|
||||
numeric_value: T_VAL_ID
|
||||
numeric_value: T_VAL_UNQUOTED_STRING
|
||||
{
|
||||
$$ = dfilter_mknode_numeric_value(string_to_value($1));
|
||||
g_free($1);
|
||||
|
@ -239,13 +236,13 @@ ether_value: T_VAL_ETHER
|
|||
}
|
||||
;
|
||||
|
||||
ipxnet_value: T_VAL_ID
|
||||
ipxnet_value: T_VAL_UNQUOTED_STRING
|
||||
{
|
||||
$$ = dfilter_mknode_ipxnet_value(string_to_value($1));
|
||||
}
|
||||
;
|
||||
|
||||
ipv4_value: T_VAL_ID
|
||||
ipv4_value: T_VAL_UNQUOTED_STRING
|
||||
{
|
||||
$$ = dfilter_mknode_ipv4_value($1);
|
||||
g_free($1);
|
||||
|
@ -257,7 +254,7 @@ bytes_value: T_VAL_BYTES
|
|||
$$ = dfilter_mknode_bytes_value($1);
|
||||
}
|
||||
|
||||
| T_VAL_ID
|
||||
| T_VAL_UNQUOTED_STRING
|
||||
{ /* one byte */
|
||||
GByteArray *barray = g_byte_array_new();
|
||||
guint8 val;
|
||||
|
@ -300,7 +297,7 @@ ipxnet_variable: T_FT_IPXNET { $$ = dfilter_mknode_ipxnet_variable($1); }
|
|||
ipv4_variable: T_FT_IPv4 { $$ = dfilter_mknode_ipv4_variable($1); }
|
||||
;
|
||||
|
||||
protocol_name: T_FT_NONE { $$ = dfilter_mknode_existence($1); }
|
||||
variable_name: any_variable_type { $$ = dfilter_mknode_existence($1); }
|
||||
;
|
||||
|
||||
bytes_variable: any_variable_type T_VAL_BYTE_RANGE
|
||||
|
@ -323,26 +320,22 @@ any_variable_type: T_FT_UINT8 { $$ = $1; }
|
|||
| T_FT_STRING { $$ = $1; }
|
||||
;
|
||||
|
||||
numeric_relation: TOK_EQ { $$ = $1; }
|
||||
| TOK_NE { $$ = $1; }
|
||||
| TOK_GT { $$ = $1; }
|
||||
| TOK_GE { $$ = $1; }
|
||||
| TOK_LT { $$ = $1; }
|
||||
| TOK_LE { $$ = $1; }
|
||||
numeric_relation: TOK_EQ { $$ = TOK_EQ; }
|
||||
| TOK_NE { $$ = TOK_NE; }
|
||||
| TOK_GT { $$ = TOK_GT; }
|
||||
| TOK_GE { $$ = TOK_GE; }
|
||||
| TOK_LT { $$ = TOK_LT; }
|
||||
| TOK_LE { $$ = TOK_LE; }
|
||||
;
|
||||
|
||||
equality_relation: TOK_EQ { $$ = $1; }
|
||||
| TOK_NE { $$ = $1; }
|
||||
equality_relation: TOK_EQ { $$ = TOK_EQ; }
|
||||
| TOK_NE { $$ = TOK_NE; }
|
||||
;
|
||||
|
||||
bytes_relation: TOK_EQ { $$ = $1; }
|
||||
| TOK_NE { $$ = $1; }
|
||||
| TOK_GT { $$ = $1; }
|
||||
| TOK_LT { $$ = $1; }
|
||||
;
|
||||
|
||||
exists_operand: TOK_EXIST { $$ = $1; }
|
||||
| '?' { $$ = TOK_EXIST; }
|
||||
bytes_relation: TOK_EQ { $$ = TOK_EQ; }
|
||||
| TOK_NE { $$ = TOK_NE; }
|
||||
| TOK_GT { $$ = TOK_GT; }
|
||||
| TOK_LT { $$ = TOK_LT; }
|
||||
;
|
||||
|
||||
%%
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
/* dfilter-scanner.l
|
||||
* Scanner for display filters
|
||||
*
|
||||
* $Id: dfilter-scanner.l,v 1.1 1999/08/01 04:28:07 gram Exp $
|
||||
* $Id: dfilter-scanner.l,v 1.2 1999/08/03 15:04:25 gram Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
|
@ -98,38 +98,17 @@ hexsep [-:.]
|
|||
[\t\n ]+ /* ignore whitespace */
|
||||
|
||||
|
||||
\&\& { yylval.operand = TOK_AND; return TOK_AND; }
|
||||
and { yylval.operand = TOK_AND; return TOK_AND; }
|
||||
and|\&\& { return TOK_AND; }
|
||||
or|\|\| { return TOK_OR; }
|
||||
not|\! { return TOK_NOT; }
|
||||
xor|\^\^ { return TOK_XOR; }
|
||||
eq|\=\= { return TOK_EQ; }
|
||||
ne|\!\= { return TOK_NE; }
|
||||
gt|\> { return TOK_GT; }
|
||||
ge|\>\= { return TOK_GE; }
|
||||
lt|\< { return TOK_LT; }
|
||||
le|\<\= { return TOK_LE; }
|
||||
|
||||
\|\| { yylval.operand = TOK_OR; return TOK_OR; }
|
||||
or { yylval.operand = TOK_OR; return TOK_OR; }
|
||||
|
||||
\! { yylval.operand = TOK_NOT; return TOK_NOT; }
|
||||
not { yylval.operand = TOK_NOT; return TOK_NOT; }
|
||||
|
||||
\^\^ { yylval.operand = TOK_XOR; return TOK_XOR; }
|
||||
xor { yylval.operand = TOK_XOR; return TOK_XOR; }
|
||||
|
||||
\=\= { yylval.operand = TOK_EQ; return TOK_EQ; }
|
||||
eq { yylval.operand = TOK_EQ; return TOK_EQ; }
|
||||
|
||||
\!\= { yylval.operand = TOK_NE; return TOK_NE; }
|
||||
ne { yylval.operand = TOK_NE; return TOK_NE; }
|
||||
|
||||
\> { yylval.operand = TOK_GT; return TOK_GT; }
|
||||
gt { yylval.operand = TOK_GT; return TOK_GT; }
|
||||
|
||||
\>\= { yylval.operand = TOK_GE; return TOK_GE; }
|
||||
ge { yylval.operand = TOK_GE; return TOK_GE; }
|
||||
|
||||
\< { yylval.operand = TOK_LT; return TOK_LT; }
|
||||
lt { yylval.operand = TOK_LT; return TOK_LT; }
|
||||
|
||||
\<\= { yylval.operand = TOK_LE; return TOK_LE; }
|
||||
le { yylval.operand = TOK_LE; return TOK_LE; }
|
||||
|
||||
exist { yylval.operand = TOK_EXIST; return TOK_EXIST; }
|
||||
exists { yylval.operand = TOK_EXIST; return TOK_EXIST; }
|
||||
true { yylval.operand = TOK_TRUE; return TOK_TRUE; }
|
||||
false { yylval.operand = TOK_FALSE; return TOK_FALSE; }
|
||||
|
||||
|
@ -192,7 +171,8 @@ false { yylval.operand = TOK_FALSE; return TOK_FALSE; }
|
|||
enum ftenum ftype;
|
||||
yylval.variable = dfilter_lookup_token(yytext);
|
||||
if (yylval.variable == 0) {
|
||||
return 0;
|
||||
yylval.id = g_strdup(yytext);
|
||||
return T_VAL_UNQUOTED_STRING;
|
||||
}
|
||||
|
||||
ftype = proto_registrar_get_ftype(yylval.variable);
|
||||
|
@ -238,18 +218,18 @@ false { yylval.operand = TOK_FALSE; return TOK_FALSE; }
|
|||
|
||||
[0-9]+ { /* decimal or octal values */
|
||||
yylval.id = g_strdup(yytext);
|
||||
return T_VAL_ID;
|
||||
return T_VAL_UNQUOTED_STRING;
|
||||
}
|
||||
|
||||
|
||||
0[xX][A-Fa-f0-9]+ { /* hex values */
|
||||
yylval.id = g_strdup(yytext);
|
||||
return T_VAL_ID;
|
||||
return T_VAL_UNQUOTED_STRING;
|
||||
}
|
||||
|
||||
[0-9\:\.]+ {
|
||||
yylval.id = g_strdup(yytext);
|
||||
return T_VAL_ID;
|
||||
return T_VAL_UNQUOTED_STRING;
|
||||
}
|
||||
|
||||
%%
|
||||
|
|
39
dfilter.c
39
dfilter.c
|
@ -1,7 +1,7 @@
|
|||
/* dfilter.c
|
||||
* Routines for display filters
|
||||
*
|
||||
* $Id: dfilter.c,v 1.5 1999/08/01 04:28:07 gram Exp $
|
||||
* $Id: dfilter.c,v 1.6 1999/08/03 15:04:25 gram Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
|
@ -158,7 +158,8 @@ clear_byte_array(gpointer data, gpointer user_data)
|
|||
void
|
||||
yyerror(char *s)
|
||||
{
|
||||
fprintf(stderr, "%s\n", s);
|
||||
/* fprintf(stderr, "%s\n", s);
|
||||
Do not report the error, just let yyparse() return 1 */
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -210,13 +211,10 @@ dfilter_apply_node(GNode *gnode, proto_tree *ptree, const guint8* pd)
|
|||
|
||||
switch(dnode->ntype) {
|
||||
case variable:
|
||||
/* the only time we'll see a 'variable' at this point is if the display filter
|
||||
* checks the value of a single field: "tr.sr", for example. Inside a relation,
|
||||
* the relation code will retrieve the value of the variable
|
||||
*/
|
||||
g_assert(!gnode_a && !gnode_b);
|
||||
/* We'll never see this case because if the parser finds the name of
|
||||
* a variable, it will cause it to be an 'existence' operation.
|
||||
*/
|
||||
g_assert_not_reached();
|
||||
/*return check_single_variable(gnode, ptree, pd);*/
|
||||
|
||||
case logical:
|
||||
return check_logical(dnode->value.logical, gnode_a, gnode_b, ptree, pd);
|
||||
|
@ -233,13 +231,13 @@ dfilter_apply_node(GNode *gnode, proto_tree *ptree, const guint8* pd)
|
|||
case ipv4:
|
||||
case boolean:
|
||||
case ether:
|
||||
case ether_vendor:
|
||||
case string:
|
||||
case abs_time:
|
||||
case bytes:
|
||||
case ipxnet:
|
||||
/* the only time we'll see these at this point is if the display filter
|
||||
* is really wacky. Just return TRUE */
|
||||
* is really wacky. (like simply "192.168.1.1"). The parser as it stands
|
||||
* now let these by. Just return TRUE */
|
||||
g_assert(!gnode_a && !gnode_b);
|
||||
return TRUE;
|
||||
|
||||
|
@ -310,27 +308,6 @@ check_relation(gint operand, GNode *a, GNode *b, proto_tree *ptree, const guint8
|
|||
return retval;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static gboolean
|
||||
check_single_variable(GNode *gnode, proto_tree *ptree, guint8* pd)
|
||||
{
|
||||
dfilter_node *node = (dfilter_node*) (gnode->data);
|
||||
GArray *vals;
|
||||
gboolean retval;
|
||||
|
||||
|
||||
bytes_length = node->length;
|
||||
bytes_offset = node->offset;
|
||||
vals = get_values_from_ptree(node, ptree, pd);
|
||||
|
||||
retval = node_a->check_relation_func(operand, vals_a, vals_b);
|
||||
|
||||
g_array_free(vals, FALSE);
|
||||
|
||||
return retval;
|
||||
}
|
||||
#endif
|
||||
|
||||
static gboolean
|
||||
check_existence_in_ptree(dfilter_node *dnode, proto_tree *ptree)
|
||||
{
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* dfilter.h
|
||||
* Definitions for display filters
|
||||
*
|
||||
* $Id: dfilter.h,v 1.4 1999/08/01 04:28:08 gram Exp $
|
||||
* $Id: dfilter.h,v 1.5 1999/08/03 15:04:26 gram Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.org>
|
||||
|
@ -66,7 +66,6 @@ enum node_type {
|
|||
abs_time,
|
||||
string,
|
||||
ether,
|
||||
ether_vendor,
|
||||
bytes,
|
||||
ipv4,
|
||||
ipxnet
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
# will be replaced by the pod-formatted glossary
|
||||
# STDOUT is the output
|
||||
#
|
||||
# $Id: dfilter2pod.in,v 1.2 1999/08/01 04:28:20 gram Exp $
|
||||
# $Id: dfilter2pod.in,v 1.3 1999/08/03 15:04:33 gram Exp $
|
||||
|
||||
%ftenum_names = (
|
||||
'FT_NONE', 'No value',
|
||||
|
@ -86,13 +86,11 @@ sub create_dfilter_table {
|
|||
|
||||
# If this proto has children fields, print those
|
||||
if ($field_abbrev{$proto_abbrev{$proto_name}}) {
|
||||
print "=over 4\n\n";
|
||||
|
||||
for $field_abbrev (sort @{$field_abbrev{$proto_abbrev{$proto_name}}}) {
|
||||
print "=item ", $field_info{$field_abbrev}[0]," ($field_abbrev)\n\n";
|
||||
print $ftenum_names{$field_info{$field_abbrev}[1]}, "\n\n";
|
||||
print " $field_abbrev ", $field_info{$field_abbrev}[0],"\n";
|
||||
print " ", $ftenum_names{$field_info{$field_abbrev}[1]}, "\n\n";
|
||||
}
|
||||
print "=back\n\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue