Module Name: src Committed By: christos Date: Sat Mar 10 22:22:38 UTC 2012
Modified Files: src/sys/net/npf: npf_ncode.h Log Message: definitions used by the disassembler. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/net/npf/npf_ncode.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/npf/npf_ncode.h diff -u src/sys/net/npf/npf_ncode.h:1.5 src/sys/net/npf/npf_ncode.h:1.6 --- src/sys/net/npf/npf_ncode.h:1.5 Thu Nov 3 21:00:27 2011 +++ src/sys/net/npf/npf_ncode.h Sat Mar 10 17:22:38 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: npf_ncode.h,v 1.5 2011/11/04 01:00:27 zoltan Exp $ */ +/* $NetBSD: npf_ncode.h,v 1.6 2012/03/10 22:22:38 christos Exp $ */ /*- * Copyright (c) 2009-2010 The NetBSD Foundation, Inc. @@ -122,4 +122,237 @@ int npf_ncode_validate(const void *, siz #define NPF_OPCODE_UDP_PORTS 0xa1 #define NPF_OPCODE_TCP_FLAGS 0xa2 -#endif +#ifdef NPF_OPCODES_STRINGS + +# define NPF_OPERAND_NONE 0 +# define NPF_OPERAND_REGISTER 1 +# define NPF_OPERAND_KEY 2 +# define NPF_OPERAND_VALUE 3 +# define NPF_OPERAND_SD 4 +# define NPF_OPERAND_SD_SRC 1 +# define NPF_OPERAND_SD_DST 0 +# define NPF_OPERAND_REL_ADDRESS 5 +# define NPF_OPERAND_NET_ADDRESS4 6 +# define NPF_OPERAND_NET_ADDRESS6 7 +# define NPF_OPERAND_ETHER_TYPE 8 +# define NPF_OPERAND_SUBNET 9 +# define NPF_OPERAND_LENGTH 10 +# define NPF_OPERAND_TABLE_ID 11 +# define NPF_OPERAND_ICMP4_TYPE_CODE 12 +# define NPF_OPERAND_TCP_FLAGS_MASK 13 +# define NPF_OPERAND_PORT_RANGE 14 + +static const struct npf_instruction { + const char *name; + uint8_t op[4]; +} npf_instructions[256] = { + [NPF_OPCODE_RET] = { + .name = "ret", + .op = { + [0] = NPF_OPERAND_VALUE, + }, + }, + [NPF_OPCODE_ADVR] = { + .name = "advr", + .op = { + [0] = NPF_OPERAND_REGISTER, + }, + }, + [NPF_OPCODE_J] = { + .name = "j", + .op = { + [0] = NPF_OPERAND_REL_ADDRESS, + }, + }, + [NPF_OPCODE_INVL] = { + .name = "invl", + }, + [NPF_OPCODE_TAG] = { + .name = "tag", + .op = { + [0] = NPF_OPERAND_KEY, + [1] = NPF_OPERAND_VALUE, + }, + }, + [NPF_OPCODE_MOVE] = { + .name = "move", + .op = { + [0] = NPF_OPERAND_VALUE, + [1] = NPF_OPERAND_REGISTER, + }, + }, + [NPF_OPCODE_LW] = { + .name = "lw", + .op = { + [0] = NPF_OPERAND_LENGTH, + [1] = NPF_OPERAND_REGISTER, + }, + }, + [NPF_OPCODE_CMP] = { + .name = "cmp", + .op = { + [0] = NPF_OPERAND_VALUE, + [1] = NPF_OPERAND_REGISTER, + }, + }, + [NPF_OPCODE_CMPR] = { + .name = "cmpr", + .op = { + [0] = NPF_OPERAND_REGISTER, + [1] = NPF_OPERAND_REGISTER, + }, + }, + [NPF_OPCODE_BEQ] = { + .name = "beq", + .op = { + [0] = NPF_OPERAND_REL_ADDRESS, + }, + }, + [NPF_OPCODE_BNE] = { + .name = "bne", + .op = { + [0] = NPF_OPERAND_REL_ADDRESS, + }, + }, + [NPF_OPCODE_BGT] = { + .name = "bge", + .op = { + [0] = NPF_OPERAND_REL_ADDRESS, + }, + }, + [NPF_OPCODE_BLT] = { + .name = "blt", + .op = { + [0] = NPF_OPERAND_REL_ADDRESS, + }, + }, + [NPF_OPCODE_ADD] = { + .name = "add", + .op = { + [0] = NPF_OPERAND_VALUE, + [1] = NPF_OPERAND_REGISTER, + }, + }, + [NPF_OPCODE_SUB] = { + .name = "sub", + .op = { + [0] = NPF_OPERAND_VALUE, + [1] = NPF_OPERAND_REGISTER, + }, + }, + [NPF_OPCODE_MULT] = { + .name = "mult", + .op = { + [0] = NPF_OPERAND_VALUE, + [1] = NPF_OPERAND_REGISTER, + }, + }, + [NPF_OPCODE_DIV] = { .name = "div", + .op = { + [0] = NPF_OPERAND_VALUE, + [1] = NPF_OPERAND_REGISTER, + }, + }, + [NPF_OPCODE_NOT] = { + .name = "not", + .op = { + [0] = NPF_OPERAND_VALUE, + [1] = NPF_OPERAND_REGISTER, + }, + }, + [NPF_OPCODE_AND] = { + .name = "and", + .op = { + [0] = NPF_OPERAND_VALUE, + [1] = NPF_OPERAND_REGISTER, + }, + }, + [NPF_OPCODE_OR] = { + .name = "or", + .op = { + [0] = NPF_OPERAND_VALUE, + [1] = NPF_OPERAND_REGISTER, + }, + }, + [NPF_OPCODE_XOR] = { + .name = "xor", + .op = { + [0] = NPF_OPERAND_VALUE, + [1] = NPF_OPERAND_REGISTER, + }, + }, + [NPF_OPCODE_SLL] = { + .name = "sll", + .op = { + [0] = NPF_OPERAND_VALUE, + [1] = NPF_OPERAND_REGISTER, + }, + }, + [NPF_OPCODE_SRL] = { + .name = "srl", + .op = { + [0] = NPF_OPERAND_VALUE, + [1] = NPF_OPERAND_REGISTER, + }, + }, + [NPF_OPCODE_ETHER] = { + .name = "ether", + .op = { + [0] = NPF_OPERAND_SD, + [1] = NPF_OPERAND_NET_ADDRESS4, + [2] = NPF_OPERAND_ETHER_TYPE, + }, + }, + [NPF_OPCODE_IP4MASK] = { + .name = "ip4mask", + .op = { + [0] = NPF_OPERAND_SD, + [1] = NPF_OPERAND_NET_ADDRESS4, + [2] = NPF_OPERAND_SUBNET, + }, + }, + [NPF_OPCODE_TABLE] = { + .name = "table", + .op = { + [0] = NPF_OPERAND_SD, + [1] = NPF_OPERAND_TABLE_ID, + }, + }, + [NPF_OPCODE_ICMP4] = { + .name = "icmp4", + .op = { + [0] = NPF_OPERAND_ICMP4_TYPE_CODE, + }, + }, + [NPF_OPCODE_IP6MASK] = { + .name = "ip6mask", + .op = { + [0] = NPF_OPERAND_SD, + [1] = NPF_OPERAND_NET_ADDRESS6, + [2] = NPF_OPERAND_SUBNET, + }, + }, + [NPF_OPCODE_TCP_PORTS] = { + .name = "tcp_ports", + .op = { + [0] = NPF_OPERAND_SD, + [1] = NPF_OPERAND_PORT_RANGE, + }, + }, + [NPF_OPCODE_UDP_PORTS] = { + .name = "udp_ports", + .op = { + [0] = NPF_OPERAND_SD, + [1] = NPF_OPERAND_PORT_RANGE, + }, + }, + [NPF_OPCODE_TCP_FLAGS] = { + .name = "tcp_flags", + .op = { + [0] = NPF_OPERAND_TCP_FLAGS_MASK, + }, + }, +}; +#endif /* NPF_OPCODES_STRINGS */ + +#endif /* _NET_NPF_NCODE_H_ */