aboutsummaryrefslogtreecommitdiffstats
path: root/dfilter-int.h
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>1999-08-12 21:16:32 +0000
committerGuy Harris <guy@alum.mit.edu>1999-08-12 21:16:32 +0000
commita5acc58fe3e5d2b5e8dde83ccda2ad5b5f3246c8 (patch)
tree71aec9fd65577bbfdb84577438cea36b5f528db2 /dfilter-int.h
parent6c9276f03cb74f068bc7b7a671aef99667ec5450 (diff)
Create a "dfilter-int.h" file, containing stuff used internally to the
display filter code but not outside it (and not static to one of the modules in the display filter code), with most of that stuff moved there from "dfilter.h". Add a declaration of "byte_str_to_guint8_array()" to "dfilter-int.h". svn path=/trunk/; revision=479
Diffstat (limited to 'dfilter-int.h')
-rw-r--r--dfilter-int.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/dfilter-int.h b/dfilter-int.h
new file mode 100644
index 0000000000..1ad1502795
--- /dev/null
+++ b/dfilter-int.h
@@ -0,0 +1,108 @@
+/* dfilter-int.h
+ * Definitions for routines common to multiple modules in the display
+ * filter code, but not used outside that code.
+ *
+ * $Id: dfilter-int.h,v 1.1 1999/08/12 21:16:31 guy Exp $
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@zing.org>
+ * Copyright 1998 Gerald Combs
+ *
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __DFILTER_INT_H__
+#define __DFILTER_INT_H__
+
+/* in dfilter-scanner.l */
+GByteArray *byte_str_to_guint8_array(const char *s);
+
+/* in dfilter-grammar.y */
+extern GSList *dfilter_list_byte_arrays;
+
+/* Here we provide interfaces to make our scanner act and look like lex */
+int yylex(void);
+void yyerror(char *s);
+void dfilter_yyerror(char *fmt, ...);
+
+/* functions that dfilter-grammar.y needs during parsing*/
+gboolean check_relation_numeric(gint operand, GArray *a, GArray *b);
+gboolean check_relation_ether(gint operand, GArray *a, GArray *b);
+gboolean check_relation_bytes(gint operand, GArray *a, GArray *b);
+gboolean check_relation_boolean(gint operand, GArray *a, GArray *b);
+
+gboolean fill_array_numeric_value(GNode *gnode, gpointer data);
+gboolean fill_array_numeric_variable(GNode *gnode, gpointer data);
+gboolean fill_array_ether_value(GNode *gnode, gpointer data);
+gboolean fill_array_ether_variable(GNode *gnode, gpointer data);
+gboolean fill_array_bytes_value(GNode *gnode, gpointer data);
+gboolean fill_array_bytes_variable(GNode *gnode, gpointer data);
+gboolean fill_array_boolean_value(GNode *gnode, gpointer data);
+gboolean fill_array_boolean_variable(GNode *gnode, gpointer data);
+
+enum node_type {
+ relation, /* eq, ne, gt, ge, lt, le */
+ logical, /* and, or, not, xor */
+ variable, /* protocol or header field id */
+ existence, /* existence of a variable (protocol or hf) */
+ alternation, /* &, | */
+ boolean, /* true, false */
+ numeric, /* uint8, uint16, or uint32 value */
+ abs_time,
+ string,
+ ether,
+ bytes,
+ ipv4,
+ ipxnet
+};
+
+typedef gboolean(*CheckRelationFunc) (gint operand, GArray *a, GArray *b);
+
+/* This struct is the parse tree node created by this grammary and used
+ * directly in the display filter routines to filter packets.
+ */
+typedef struct dfilter_node {
+ enum node_type ntype; /* from dfilter-grammar.h */
+ int elem_size; /* computed at dfilter parse time rather than
+ when finding elements for each packet. Saves time
+ in get_values_from_ptree() */
+ CheckRelationFunc check_relation_func;
+ GNodeTraverseFunc fill_array_func;
+
+ /* copied from proto.h */
+ union {
+ gint relation; /* if type == relation (eq, ne, gt, ge, lt, le) */
+ gint logical; /* if type == logical (and, or, not, xor) */
+ gint variable; /* if type == variable (protocol or header field abbrev) */
+ gint alternation; /* if type == alternation (& or |) */
+
+ gboolean boolean;
+ guint32 numeric;
+ struct timeval abs_time; /* the whole struct, not a pointer */
+ gchar *string;
+ guint8 ether[6];
+ GByteArray *bytes;
+ } value;
+
+ /* used for byte-ranges */
+ gint offset;
+ guint length;
+} dfilter_node;
+
+/* lookup an abbreviation in our token hash, returing the ID # */
+int dfilter_lookup_token(char *abbrev);
+
+#endif /* ! __DFILTER_INT_H__ */