wireshark/epan/dfilter/dfvm.h

109 lines
2.0 KiB
C

/*
* $Id$
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 2001 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef DFVM_H
#define DFVM_H
#include <stdio.h>
#include <epan/proto.h>
#include "dfilter-int.h"
#include "syntax-tree.h"
#include "drange.h"
#include "dfunctions.h"
typedef enum {
EMPTY,
FVALUE,
HFINFO,
INSN_NUMBER,
REGISTER,
INTEGER,
DRANGE,
FUNCTION_DEF
} dfvm_value_type_t;
typedef struct {
dfvm_value_type_t type;
union {
fvalue_t *fvalue;
guint32 numeric;
drange_t *drange;
header_field_info *hfinfo;
df_func_def_t *funcdef;
} value;
} dfvm_value_t;
typedef enum {
IF_TRUE_GOTO,
IF_FALSE_GOTO,
CHECK_EXISTS,
NOT,
RETURN,
READ_TREE,
PUT_FVALUE,
ANY_EQ,
ANY_NE,
ANY_GT,
ANY_GE,
ANY_LT,
ANY_LE,
ANY_BITWISE_AND,
ANY_CONTAINS,
ANY_MATCHES,
MK_RANGE,
CALL_FUNCTION
} dfvm_opcode_t;
typedef struct {
int id;
dfvm_opcode_t op;
dfvm_value_t *arg1;
dfvm_value_t *arg2;
dfvm_value_t *arg3;
dfvm_value_t *arg4;
} dfvm_insn_t;
dfvm_insn_t*
dfvm_insn_new(dfvm_opcode_t op);
void
dfvm_insn_free(dfvm_insn_t *insn);
dfvm_value_t*
dfvm_value_new(dfvm_value_type_t type);
void
dfvm_dump(FILE *f, dfilter_t *df);
gboolean
dfvm_apply(dfilter_t *df, proto_tree *tree);
void
dfvm_init_const(dfilter_t *df);
#endif