diff --git a/iptc/xtables.py b/iptc/xtables.py index 245a348..0d3b40f 100644 --- a/iptc/xtables.py +++ b/iptc/xtables.py @@ -411,7 +411,59 @@ class _xtables_match_v10(ct.Structure): _xtables_match_v11 = _xtables_match_v10 -_xtables_match_v12 = _xtables_match_v10 + + +class _xtables_match_v12(ct.Structure): + _fields_ = [("version", ct.c_char_p), + ("next", ct.c_void_p), + ("name", ct.c_char_p), + ("real_name", ct.c_char_p), + ("revision", ct.c_uint8), + ("ext_flags", ct.c_uint8), + ("family", ct.c_uint16), + ("size", ct.c_size_t), + ("userspacesize", ct.c_size_t), + ("help", ct.CFUNCTYPE(None)), + ("init", ct.CFUNCTYPE(None, ct.POINTER(xt_entry_match))), + # fourth parameter entry is struct ipt_entry for example + # int (*parse)(int c, char **argv, int invert, unsigned int + # *flags, const void *entry, struct xt_entry_match **match) + ("parse", ct.CFUNCTYPE(ct.c_int, ct.c_int, + ct.POINTER(ct.c_char_p), ct.c_int, + ct.POINTER(ct.c_uint), ct.c_void_p, + ct.POINTER(ct.POINTER( + xt_entry_match)))), + ("final_check", ct.CFUNCTYPE(None, ct.c_uint)), + # prints out the match iff non-NULL: put space at end + # first parameter ip is struct ipt_ip * for example + ("print", ct.CFUNCTYPE(None, ct.c_void_p, + ct.POINTER(xt_entry_match), ct.c_int)), + # saves the match info in parsable form to stdout. + # first parameter ip is struct ipt_ip * for example + ("save", ct.CFUNCTYPE(None, ct.c_void_p, + ct.POINTER(xt_entry_match))), + # Print match name or alias + ("alias", ct.CFUNCTYPE(ct.c_char_p, + ct.POINTER(xt_entry_match))), + # pointer to list of extra command-line options + ("extra_opts", ct.POINTER(option)), + + # introduced with the new iptables API + ("x6_parse", ct.CFUNCTYPE(None, ct.POINTER(xt_option_call))), + ("x6_fcheck", ct.CFUNCTYPE(None, ct.POINTER(xt_fcheck_call))), + ("x6_options", ct.POINTER(xt_option_entry)), + + ('xt_xlate', ct.c_int), + + # size of per-extension instance extra "global" scratch space + ("udata_size", ct.c_size_t), + + # ignore these men behind the curtain: + ("udata", ct.c_void_p), + ("option_offset", ct.c_uint), + ("m", ct.POINTER(xt_entry_match)), + ("mflags", ct.c_uint), + ("loaded", ct.c_uint)] class xtables_match(ct.Union):