1 #ifndef _X_TABLES_H 2 #define _X_TABLES_H 3 4 #define XT_FUNCTION_MAXNAMELEN 30 5 #define XT_TABLE_MAXNAMELEN 32 6 7 struct xt_entry_match 8 { 9 union { 10 struct { 11 u_int16_t match_size; 12 13 /* Used by userspace */ 14 char name[XT_FUNCTION_MAXNAMELEN-1]; 15 16 u_int8_t revision; 17 } user; 18 struct { 19 u_int16_t match_size; 20 21 /* Used inside the kernel */ 22 struct xt_match *match; 23 } kernel; 24 25 /* Total length */ 26 u_int16_t match_size; 27 } u; 28 29 unsigned char data[0]; 30 }; 31 32 struct xt_entry_target 33 { 34 union { 35 struct { 36 u_int16_t target_size; 37 38 /* Used by userspace */ 39 char name[XT_FUNCTION_MAXNAMELEN-1]; 40 41 u_int8_t revision; 42 } user; 43 struct { 44 u_int16_t target_size; 45 46 /* Used inside the kernel */ 47 struct xt_target *target; 48 } kernel; 49 50 /* Total length */ 51 u_int16_t target_size; 52 } u; 53 54 unsigned char data[0]; 55 }; 56 57 #define XT_TARGET_INIT(__name, __size) \ 58 { \ 59 .target.u.user = { \ 60 .target_size = XT_ALIGN(__size), \ 61 .name = __name, \ 62 }, \ 63 } 64 65 struct xt_standard_target 66 { 67 struct xt_entry_target target; 68 int verdict; 69 }; 70 71 /* The argument to IPT_SO_GET_REVISION_*. Returns highest revision 72 * kernel supports, if >= revision. */ 73 struct xt_get_revision 74 { 75 char name[XT_FUNCTION_MAXNAMELEN-1]; 76 77 u_int8_t revision; 78 }; 79 80 /* CONTINUE verdict for targets */ 81 #define XT_CONTINUE 0xFFFFFFFF 82 83 /* For standard target */ 84 #define XT_RETURN (-NF_REPEAT - 1) 85 86 /* this is a dummy structure to find out the alignment requirement for a struct 87 * containing all the fundamental data types that are used in ipt_entry, 88 * ip6t_entry and arpt_entry. This sucks, and it is a hack. It will be my 89 * personal pleasure to remove it -HW 90 */ 91 struct _xt_align 92 { 93 u_int8_t u8; 94 u_int16_t u16; 95 u_int32_t u32; 96 u_int64_t u64; 97 }; 98 99 #define XT_ALIGN(s) (((s) + (__alignof__(struct _xt_align)-1)) \ 100 & ~(__alignof__(struct _xt_align)-1)) 101 102 /* Standard return verdict, or do jump. */ 103 #define XT_STANDARD_TARGET "" 104 /* Error verdict. */ 105 #define XT_ERROR_TARGET "ERROR" 106 107 #define SET_COUNTER(c,b,p) do { (c).bcnt = (b); (c).pcnt = (p); } while(0) 108 #define ADD_COUNTER(c,b,p) do { (c).bcnt += (b); (c).pcnt += (p); } while(0) 109 110 struct xt_counters 111 { 112 u_int64_t pcnt, bcnt; /* Packet and byte counters */ 113 }; 114 115 /* The argument to IPT_SO_ADD_COUNTERS. */ 116 struct xt_counters_info 117 { 118 /* Which table. */ 119 char name[XT_TABLE_MAXNAMELEN]; 120 121 unsigned int num_counters; 122 123 /* The counters (actually `number' of these). */ 124 struct xt_counters counters[0]; 125 }; 126 127 #define XT_INV_PROTO 0x40 /* Invert the sense of PROTO. */ 128 129 130 #endif /* _X_TABLES_H */ 131