1b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#ifndef _XTABLES_H 2b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#define _XTABLES_H 3b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 4b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall/* 5b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * Changing any structs/functions may incur a needed change 6b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * in libxtables_vcurrent/vage too. 7b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall */ 8b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 9b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#include <sys/socket.h> /* PF_* */ 10b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#include <sys/types.h> 11b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#include <limits.h> 12b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#include <stdbool.h> 13b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#include <stddef.h> 14b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#include <stdint.h> 15b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#include <netinet/in.h> 16b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#include <net/if.h> 17b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#include <linux/types.h> 18b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#include <linux/netfilter.h> 19b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#include <linux/netfilter/x_tables.h> 20b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 21b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#ifndef IPPROTO_SCTP 22b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#define IPPROTO_SCTP 132 23b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#endif 24b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#ifndef IPPROTO_DCCP 25b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#define IPPROTO_DCCP 33 26b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#endif 27b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#ifndef IPPROTO_MH 28b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall# define IPPROTO_MH 135 29b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#endif 30b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#ifndef IPPROTO_UDPLITE 31b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#define IPPROTO_UDPLITE 136 32b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#endif 33b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 34b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#define XTABLES_VERSION "libxtables.so.6" 35b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#define XTABLES_VERSION_CODE 6 36b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 37b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallstruct in_addr; 38b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 39b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall/* 40b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * .size is here so that there is a somewhat reasonable check 41b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * against the chosen .type. 42b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall */ 43b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#define XTOPT_POINTER(stype, member) \ 44b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall .ptroff = offsetof(stype, member), \ 45b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall .size = sizeof(((stype *)NULL)->member) 46b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#define XTOPT_TABLEEND {.name = NULL} 47b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 48b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall/** 49b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * Select the format the input has to conform to, as well as the target type 50b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * (area pointed to with XTOPT_POINTER). Note that the storing is not always 51b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * uniform. @cb->val will be populated with as much as there is space, i.e. 52b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * exactly 2 items for ranges, but the target area can receive more values 53b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * (e.g. in case of ranges), or less values (e.g. %XTTYPE_HOSTMASK). 54b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * 55b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTTYPE_NONE: option takes no argument 56b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTTYPE_UINT*: standard integer 57b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTTYPE_UINT*RC: colon-separated range of standard integers 58b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTTYPE_DOUBLE: double-precision floating point number 59b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTTYPE_STRING: arbitrary string 60b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTTYPE_TOSMASK: 8-bit TOS value with optional mask 61b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTTYPE_MARKMASK32: 32-bit mark with optional mask 62b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTTYPE_SYSLOGLEVEL: syslog level by name or number 63b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTTYPE_HOST: one host or address (ptr: union nf_inet_addr) 64b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTTYPE_HOSTMASK: one host or address, with an optional prefix length 65b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * (ptr: union nf_inet_addr; only host portion is stored) 66b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTTYPE_PROTOCOL: protocol number/name from /etc/protocols (ptr: uint8_t) 678b4807f0a1d98f1d980d3d616ad565c9b72d7c49JP Abgrall * %XTTYPE_PORT: 16-bit port name or number (supports %XTOPT_NBO) 688b4807f0a1d98f1d980d3d616ad565c9b72d7c49JP Abgrall * %XTTYPE_PORTRC: colon-separated port range (names acceptable), 698b4807f0a1d98f1d980d3d616ad565c9b72d7c49JP Abgrall * (supports %XTOPT_NBO) 70b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTTYPE_PLEN: prefix length 71b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTTYPE_PLENMASK: prefix length (ptr: union nf_inet_addr) 72b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTTYPE_ETHERMAC: Ethernet MAC address in hex form 73b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall */ 74b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallenum xt_option_type { 75b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_NONE, 76b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_UINT8, 77b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_UINT16, 78b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_UINT32, 79b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_UINT64, 80b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_UINT8RC, 81b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_UINT16RC, 82b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_UINT32RC, 83b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_UINT64RC, 84b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_DOUBLE, 85b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_STRING, 86b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_TOSMASK, 87b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_MARKMASK32, 88b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_SYSLOGLEVEL, 89b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_HOST, 90b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_HOSTMASK, 91b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_PROTOCOL, 92b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_PORT, 93b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_PORTRC, 94b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_PLEN, 95b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_PLENMASK, 96b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTTYPE_ETHERMAC, 97b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall}; 98b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 99b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall/** 100b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTOPT_INVERT: option is invertible (usable with !) 101b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTOPT_MAND: option is mandatory 102b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTOPT_MULTI: option may be specified multiple times 103b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * %XTOPT_PUT: store value into memory at @ptroff 1048b4807f0a1d98f1d980d3d616ad565c9b72d7c49JP Abgrall * %XTOPT_NBO: store value in network-byte order 1058b4807f0a1d98f1d980d3d616ad565c9b72d7c49JP Abgrall * (only certain XTTYPEs recognize this) 106b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall */ 107b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallenum xt_option_flags { 108b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTOPT_INVERT = 1 << 0, 109b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTOPT_MAND = 1 << 1, 110b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTOPT_MULTI = 1 << 2, 111b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTOPT_PUT = 1 << 3, 1128b4807f0a1d98f1d980d3d616ad565c9b72d7c49JP Abgrall XTOPT_NBO = 1 << 4, 113b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall}; 114b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 115b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall/** 116b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @name: name of option 117b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @type: type of input and validation method, see %XTTYPE_* 118b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @id: unique number (within extension) for option, 0-31 119b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @excl: bitmask of flags that cannot be used with this option 120b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @also: bitmask of flags that must be used with this option 121b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @flags: bitmask of option flags, see %XTOPT_* 122b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @ptroff: offset into private structure for member 123b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @size: size of the item pointed to by @ptroff; this is a safeguard 124b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @min: lowest allowed value (for singular integral types) 125b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @max: highest allowed value (for singular integral types) 126b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall */ 127b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallstruct xt_option_entry { 128b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const char *name; 129b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall enum xt_option_type type; 130b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall unsigned int id, excl, also, flags; 131b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall unsigned int ptroff; 132b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall size_t size; 133b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall unsigned int min, max; 134b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall}; 135b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 136b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall/** 137b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @arg: input from command line 138b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @ext_name: name of extension currently being processed 139b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @entry: current option being processed 140b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @data: per-extension data block 141b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @xflags: options of the extension that have been used 142b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @invert: whether option was used with ! 143b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @nvals: number of results in uXX_multi 144b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @val: parsed result 145b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall */ 146b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallstruct xt_option_call { 147b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const char *arg, *ext_name; 148b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const struct xt_option_entry *entry; 149b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void *data; 150b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall unsigned int xflags; 151b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall bool invert; 152b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall uint8_t nvals; 153b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall union { 154b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall uint8_t u8, u8_range[2], syslog_level, protocol; 155b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall uint16_t u16, u16_range[2], port, port_range[2]; 156b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall uint32_t u32, u32_range[2]; 157b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall uint64_t u64, u64_range[2]; 158b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall double dbl; 159b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct { 160b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall union nf_inet_addr haddr, hmask; 161b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall uint8_t hlen; 162b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall }; 163b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct { 164b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall uint8_t tos_value, tos_mask; 165b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall }; 166b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct { 167b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall uint32_t mark, mask; 168b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall }; 169b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall uint8_t ethermac[6]; 170b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall } val; 171b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Wished for a world where the ones below were gone: */ 172b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall union { 173b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct xt_entry_match **match; 174b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct xt_entry_target **target; 175b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall }; 176b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void *xt_entry; 177b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall}; 178b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 179b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall/** 180b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @ext_name: name of extension currently being processed 181b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @data: per-extension data block 182b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * @xflags: options of the extension that have been used 183b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall */ 184b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallstruct xt_fcheck_call { 185b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const char *ext_name; 186b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void *data; 187b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall unsigned int xflags; 188b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall}; 189b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 190b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall/** 191b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * A "linear"/linked-list based name<->id map, for files similar to 192b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * /etc/iproute2/. 193b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall */ 194b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallstruct xtables_lmap { 195b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall char *name; 196b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall int id; 197b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct xtables_lmap *next; 198b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall}; 199b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 200b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall/* Include file for additions: new matches and targets. */ 201b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallstruct xtables_match 202b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall{ 203b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* 204b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * ABI/API version this module requires. Must be first member, 205b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * as the rest of this struct may be subject to ABI changes. 206b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall */ 207b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const char *version; 208b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 209b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct xtables_match *next; 210b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 211b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const char *name; 212b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 213b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Revision of match (0 by default). */ 214b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall u_int8_t revision; 215b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 216b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall u_int16_t family; 217b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 218b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Size of match data. */ 219b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall size_t size; 220b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 221b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Size of match data relevent for userspace comparison purposes */ 222b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall size_t userspacesize; 223b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 224b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Function which prints out usage message. */ 225b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void (*help)(void); 226b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 227b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Initialize the match. */ 228b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void (*init)(struct xt_entry_match *m); 229b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 230b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Function which parses command options; returns true if it 231b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall ate an option */ 232b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* entry is struct ipt_entry for example */ 233b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall int (*parse)(int c, char **argv, int invert, unsigned int *flags, 234b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const void *entry, 235b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct xt_entry_match **match); 236b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 237b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Final check; exit if not ok. */ 238b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void (*final_check)(unsigned int flags); 239b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 240b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Prints out the match iff non-NULL: put space at end */ 241b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* ip is struct ipt_ip * for example */ 242b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void (*print)(const void *ip, 243b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const struct xt_entry_match *match, int numeric); 244b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 245b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Saves the match info in parsable form to stdout. */ 246b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* ip is struct ipt_ip * for example */ 247b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void (*save)(const void *ip, const struct xt_entry_match *match); 248b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 249b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Pointer to list of extra command-line options */ 250b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const struct option *extra_opts; 251b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 252b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* New parser */ 253b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void (*x6_parse)(struct xt_option_call *); 254b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void (*x6_fcheck)(struct xt_fcheck_call *); 255b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const struct xt_option_entry *x6_options; 256b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 257b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Ignore these men behind the curtain: */ 258b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall unsigned int option_offset; 259b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct xt_entry_match *m; 260b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall unsigned int mflags; 261b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall unsigned int loaded; /* simulate loading so options are merged properly */ 262b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall}; 263b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 264b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallstruct xtables_target 265b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall{ 266b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* 267b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * ABI/API version this module requires. Must be first member, 268b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * as the rest of this struct may be subject to ABI changes. 269b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall */ 270b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const char *version; 271b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 272b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct xtables_target *next; 273b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 274b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 275b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const char *name; 276b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 277b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Revision of target (0 by default). */ 278b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall u_int8_t revision; 279b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 280b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall u_int16_t family; 281b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 282b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 283b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Size of target data. */ 284b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall size_t size; 285b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 286b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Size of target data relevent for userspace comparison purposes */ 287b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall size_t userspacesize; 288b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 289b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Function which prints out usage message. */ 290b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void (*help)(void); 291b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 292b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Initialize the target. */ 293b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void (*init)(struct xt_entry_target *t); 294b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 295b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Function which parses command options; returns true if it 296b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall ate an option */ 297b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* entry is struct ipt_entry for example */ 298b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall int (*parse)(int c, char **argv, int invert, unsigned int *flags, 299b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const void *entry, 300b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct xt_entry_target **targetinfo); 301b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 302b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Final check; exit if not ok. */ 303b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void (*final_check)(unsigned int flags); 304b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 305b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Prints out the target iff non-NULL: put space at end */ 306b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void (*print)(const void *ip, 307b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const struct xt_entry_target *target, int numeric); 308b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 309b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Saves the targinfo in parsable form to stdout. */ 310b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void (*save)(const void *ip, 311b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const struct xt_entry_target *target); 312b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 313b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Pointer to list of extra command-line options */ 314b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const struct option *extra_opts; 315b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 316b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* New parser */ 317b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void (*x6_parse)(struct xt_option_call *); 318b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void (*x6_fcheck)(struct xt_fcheck_call *); 319b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const struct xt_option_entry *x6_options; 320b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 321b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Ignore these men behind the curtain: */ 322b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall unsigned int option_offset; 323b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct xt_entry_target *t; 324b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall unsigned int tflags; 325b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall unsigned int used; 326b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall unsigned int loaded; /* simulate loading so options are merged properly */ 327b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall}; 328b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 329b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallstruct xtables_rule_match { 330b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct xtables_rule_match *next; 331b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct xtables_match *match; 332b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall /* Multiple matches of the same type: the ones before 333b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall the current one are completed from parsing point of view */ 334b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall bool completed; 335b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall}; 336b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 337b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall/** 338b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * struct xtables_pprot - 339b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * 340b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * A few hardcoded protocols for 'all' and in case the user has no 341b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * /etc/protocols. 342b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall */ 343b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallstruct xtables_pprot { 344b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const char *name; 345b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall u_int8_t num; 346b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall}; 347b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 348b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallenum xtables_tryload { 349b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTF_DONT_LOAD, 350b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTF_DURING_LOAD, 351b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTF_TRY_LOAD, 352b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTF_LOAD_MUST_SUCCEED, 353b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall}; 354b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 355b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallenum xtables_exittype { 356b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall OTHER_PROBLEM = 1, 357b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall PARAMETER_PROBLEM, 358b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall VERSION_PROBLEM, 359b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall RESOURCE_PROBLEM, 360b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTF_ONLY_ONCE, 361b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTF_NO_INVERT, 362b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTF_BAD_VALUE, 363b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall XTF_ONE_ACTION, 364b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall}; 365b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 366b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallstruct xtables_globals 367b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall{ 368b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall unsigned int option_offset; 369b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const char *program_name, *program_version; 370b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct option *orig_opts; 371b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct option *opts; 372b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall void (*exit_err)(enum xtables_exittype status, const char *msg, ...) __attribute__((noreturn, format(printf,2,3))); 373b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall}; 374b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 375b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#define XT_GETOPT_TABLEEND {.name = NULL, .has_arg = false} 376b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 377b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#ifdef __cplusplus 378b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern "C" { 379b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#endif 380b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 381b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern const char *xtables_modprobe_program; 382b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern struct xtables_match *xtables_matches; 383b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern struct xtables_target *xtables_targets; 384b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 385b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_init(void); 386b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_set_nfproto(uint8_t); 387b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void *xtables_calloc(size_t, size_t); 388b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void *xtables_malloc(size_t); 389b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void *xtables_realloc(void *, size_t); 390b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 391b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern int xtables_insmod(const char *, const char *, bool); 392b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern int xtables_load_ko(const char *, bool); 393b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern int xtables_set_params(struct xtables_globals *xtp); 394b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_free_opts(int reset_offset); 395b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern struct option *xtables_merge_options(struct option *origopts, 396b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct option *oldopts, const struct option *newopts, 397b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall unsigned int *option_offset); 398b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 399b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern int xtables_init_all(struct xtables_globals *xtp, uint8_t nfproto); 400b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern struct xtables_match *xtables_find_match(const char *name, 401b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall enum xtables_tryload, struct xtables_rule_match **match); 402b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern struct xtables_target *xtables_find_target(const char *name, 403b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall enum xtables_tryload); 404b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 405b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall/* Your shared library should call one of these. */ 406b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_register_match(struct xtables_match *me); 407b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_register_matches(struct xtables_match *, unsigned int); 408b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_register_target(struct xtables_target *me); 409b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_register_targets(struct xtables_target *, unsigned int); 410b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 4118b4807f0a1d98f1d980d3d616ad565c9b72d7c49JP Abgrallextern bool xtables_strtoul(const char *, char **, uintmax_t *, 4128b4807f0a1d98f1d980d3d616ad565c9b72d7c49JP Abgrall uintmax_t, uintmax_t); 413b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern bool xtables_strtoui(const char *, char **, unsigned int *, 414b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall unsigned int, unsigned int); 415b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern int xtables_service_to_port(const char *name, const char *proto); 416b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern u_int16_t xtables_parse_port(const char *port, const char *proto); 417b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void 418b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallxtables_parse_interface(const char *arg, char *vianame, unsigned char *mask); 419b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 420b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall/* this is a special 64bit data type that is 8-byte aligned */ 421b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#define aligned_u64 u_int64_t __attribute__((aligned(8))) 422b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 423b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallint xtables_check_inverse(const char option[], int *invert, 424b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall int *my_optind, int argc, char **argv); 425b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern struct xtables_globals *xt_params; 426b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#define xtables_error (xt_params->exit_err) 427b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 428b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_param_act(unsigned int, const char *, ...); 429b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 430b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern const char *xtables_ipaddr_to_numeric(const struct in_addr *); 431b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern const char *xtables_ipaddr_to_anyname(const struct in_addr *); 432b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern const char *xtables_ipmask_to_numeric(const struct in_addr *); 433b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern struct in_addr *xtables_numeric_to_ipaddr(const char *); 434b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern struct in_addr *xtables_numeric_to_ipmask(const char *); 435b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_ipparse_any(const char *, struct in_addr **, 436b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct in_addr *, unsigned int *); 437b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_ipparse_multiple(const char *, struct in_addr **, 438b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct in_addr **, unsigned int *); 439b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 440b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern struct in6_addr *xtables_numeric_to_ip6addr(const char *); 441b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern const char *xtables_ip6addr_to_numeric(const struct in6_addr *); 442b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern const char *xtables_ip6addr_to_anyname(const struct in6_addr *); 443b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern const char *xtables_ip6mask_to_numeric(const struct in6_addr *); 444b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_ip6parse_any(const char *, struct in6_addr **, 445b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct in6_addr *, unsigned int *); 446b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_ip6parse_multiple(const char *, struct in6_addr **, 447b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct in6_addr **, unsigned int *); 448b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 449b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall/** 450b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * Print the specified value to standard output, quoting dangerous 451b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall * characters if required. 452b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall */ 453b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_save_string(const char *value); 454b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 455b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#if defined(ALL_INCLUSIVE) || defined(NO_SHARED_LIBS) 456b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall# ifdef _INIT 457b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall# undef _init 458b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall# define _init _INIT 459b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall# endif 460b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall extern void init_extensions(void); 461b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall extern void init_extensions4(void); 462b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall extern void init_extensions6(void); 463b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#else 464b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall# define _init __attribute__((constructor)) _INIT 465b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#endif 466b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 467b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern const struct xtables_pprot xtables_chain_protos[]; 468b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern u_int16_t xtables_parse_protocol(const char *s); 469b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 470b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall/* xtoptions.c */ 471b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_option_metavalidate(const char *, 472b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const struct xt_option_entry *); 473b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern struct option *xtables_options_xfrm(struct option *, struct option *, 474b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const struct xt_option_entry *, 475b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall unsigned int *); 476b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_option_parse(struct xt_option_call *); 477b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_option_tpcall(unsigned int, char **, bool, 478b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct xtables_target *, void *); 479b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_option_mpcall(unsigned int, char **, bool, 480b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall struct xtables_match *, void *); 481b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_option_tfcall(struct xtables_target *); 482b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_option_mfcall(struct xtables_match *); 483b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_options_fcheck(const char *, unsigned int, 484b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall const struct xt_option_entry *); 485b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 486b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern struct xtables_lmap *xtables_lmap_init(const char *); 487b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void xtables_lmap_free(struct xtables_lmap *); 488b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern int xtables_lmap_name2id(const struct xtables_lmap *, const char *); 489b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern const char *xtables_lmap_id2name(const struct xtables_lmap *, int); 490b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 491b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#ifdef XTABLES_INTERNAL 492b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 493b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall/* Shipped modules rely on this... */ 494b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 495b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall# ifndef ARRAY_SIZE 496b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall# define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x))) 497b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall# endif 498b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 499b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrallextern void _init(void); 500b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 501b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#endif 502b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 503b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#ifdef __cplusplus 504b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall} /* extern "C" */ 505b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#endif 506b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall 507b3d101788ebac83cdf7aa71f78069cf1af4a748dJP Abgrall#endif /* _XTABLES_H */ 508