10c3753b1d4226a6e7bea9619415cf40cadee1e58Patrick McHardy/* 20c3753b1d4226a6e7bea9619415cf40cadee1e58Patrick McHardy * Copyright (c) 2010-2013 Patrick McHardy <kaber@trash.net> 30c3753b1d4226a6e7bea9619415cf40cadee1e58Patrick McHardy */ 40c3753b1d4226a6e7bea9619415cf40cadee1e58Patrick McHardy 59fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy#include <stdio.h> 69fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy#include <string.h> 79fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy#include <xtables.h> 89fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy#include <linux/netfilter/nf_conntrack_common.h> 99fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy#include <linux/netfilter/xt_CT.h> 109fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 119fdbaa71452edaac9d5906716c15937f670341faPatrick McHardystatic void ct_help(void) 129fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy{ 139fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy printf( 149fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy"CT target options:\n" 159fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy" --notrack Don't track connection\n" 169fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy" --helper name Use conntrack helper 'name' for connection\n" 1789b6c32f88be47e83c3f6e7f8fee812088cb8c22Jan Engelhardt" --ctevents event[,event...] Generate specified conntrack events for connection\n" 189fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy" --expevents event[,event...] Generate specified expectation events for connection\n" 19c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann" --zone {ID|mark} Assign/Lookup connection in zone ID/packet nfmark\n" 20c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann" --zone-orig {ID|mark} Same as 'zone' option, but only applies to ORIGINAL direction\n" 21c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann" --zone-reply {ID|mark} Same as 'zone' option, but only applies to REPLY direction\n" 229fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy ); 239fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy} 249fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 25e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayusostatic void ct_help_v1(void) 26e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso{ 27e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso printf( 28e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso"CT target options:\n" 29e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso" --notrack Don't track connection\n" 30e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso" --helper name Use conntrack helper 'name' for connection\n" 31e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso" --timeout name Use timeout policy 'name' for connection\n" 32e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso" --ctevents event[,event...] Generate specified conntrack events for connection\n" 33e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso" --expevents event[,event...] Generate specified expectation events for connection\n" 34c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann" --zone {ID|mark} Assign/Lookup connection in zone ID/packet nfmark\n" 35c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann" --zone-orig {ID|mark} Same as 'zone' option, but only applies to ORIGINAL direction\n" 36c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann" --zone-reply {ID|mark} Same as 'zone' option, but only applies to REPLY direction\n" 37e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso ); 38e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso} 39e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso 40a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardtenum { 41a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt O_NOTRACK = 0, 42a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt O_HELPER, 43e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso O_TIMEOUT, 44a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt O_CTEVENTS, 45a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt O_EXPEVENTS, 46a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt O_ZONE, 47c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann O_ZONE_ORIG, 48c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann O_ZONE_REPLY, 499fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy}; 509fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 51a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt#define s struct xt_ct_target_info 52a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardtstatic const struct xt_option_entry ct_opts[] = { 53a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt {.name = "notrack", .id = O_NOTRACK, .type = XTTYPE_NONE}, 54a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt {.name = "helper", .id = O_HELPER, .type = XTTYPE_STRING, 55a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt .flags = XTOPT_PUT, XTOPT_POINTER(s, helper)}, 56a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt {.name = "ctevents", .id = O_CTEVENTS, .type = XTTYPE_STRING}, 57a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt {.name = "expevents", .id = O_EXPEVENTS, .type = XTTYPE_STRING}, 58c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann {.name = "zone-orig", .id = O_ZONE_ORIG, .type = XTTYPE_STRING}, 59c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann {.name = "zone-reply", .id = O_ZONE_REPLY, .type = XTTYPE_STRING}, 60c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann {.name = "zone", .id = O_ZONE, .type = XTTYPE_STRING}, 61a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt XTOPT_TABLEEND, 629fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy}; 63a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt#undef s 649fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 65e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso#define s struct xt_ct_target_info_v1 66e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayusostatic const struct xt_option_entry ct_opts_v1[] = { 67e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso {.name = "notrack", .id = O_NOTRACK, .type = XTTYPE_NONE}, 68e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso {.name = "helper", .id = O_HELPER, .type = XTTYPE_STRING, 69e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .flags = XTOPT_PUT, XTOPT_POINTER(s, helper)}, 70e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso {.name = "timeout", .id = O_TIMEOUT, .type = XTTYPE_STRING, 71e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .flags = XTOPT_PUT, XTOPT_POINTER(s, timeout)}, 72e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso {.name = "ctevents", .id = O_CTEVENTS, .type = XTTYPE_STRING}, 73e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso {.name = "expevents", .id = O_EXPEVENTS, .type = XTTYPE_STRING}, 74c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann {.name = "zone-orig", .id = O_ZONE_ORIG, .type = XTTYPE_STRING}, 75c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann {.name = "zone-reply", .id = O_ZONE_REPLY, .type = XTTYPE_STRING}, 76c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann {.name = "zone", .id = O_ZONE, .type = XTTYPE_STRING}, 77e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso XTOPT_TABLEEND, 78e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso}; 79e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso#undef s 80e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso 819fdbaa71452edaac9d5906716c15937f670341faPatrick McHardystruct event_tbl { 829fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy const char *name; 839fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy unsigned int event; 849fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy}; 859fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 869fdbaa71452edaac9d5906716c15937f670341faPatrick McHardystatic const struct event_tbl ct_event_tbl[] = { 879fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy { "new", IPCT_NEW }, 889fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy { "related", IPCT_RELATED }, 899fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy { "destroy", IPCT_DESTROY }, 909fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy { "reply", IPCT_REPLY }, 919fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy { "assured", IPCT_ASSURED }, 929fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy { "protoinfo", IPCT_PROTOINFO }, 939fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy { "helper", IPCT_HELPER }, 949fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy { "mark", IPCT_MARK }, 959fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy { "natseqinfo", IPCT_NATSEQADJ }, 969fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy { "secmark", IPCT_SECMARK }, 979fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy}; 989fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 999fdbaa71452edaac9d5906716c15937f670341faPatrick McHardystatic const struct event_tbl exp_event_tbl[] = { 1009fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy { "new", IPEXP_NEW }, 1019fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy}; 1029fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 103c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmannstatic void ct_parse_zone_id(const char *opt, unsigned int opt_id, 104c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann uint16_t *zone_id, uint16_t *flags) 105c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann{ 106c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann if (opt_id == O_ZONE_ORIG) 107c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann *flags |= XT_CT_ZONE_DIR_ORIG; 108c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann if (opt_id == O_ZONE_REPLY) 109c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann *flags |= XT_CT_ZONE_DIR_REPL; 110c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann 111c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann *zone_id = 0; 112c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann 113c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann if (strcasecmp(opt, "mark") == 0) { 114c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann *flags |= XT_CT_ZONE_MARK; 115c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann } else { 116c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann uintmax_t val; 117c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann 118c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann if (!xtables_strtoul(opt, NULL, &val, 0, UINT16_MAX)) 119c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann xtables_error(PARAMETER_PROBLEM, 120c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann "Cannot parse %s as a zone ID\n", opt); 121c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann 122c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann *zone_id = (uint16_t)val; 123c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann } 124c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann} 125c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann 126c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmannstatic void ct_print_zone_id(const char *pfx, uint16_t zone_id, uint16_t flags) 127c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann{ 128c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann printf(" %s", pfx); 129c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann 130c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann if ((flags & (XT_CT_ZONE_DIR_ORIG | 131c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann XT_CT_ZONE_DIR_REPL)) == XT_CT_ZONE_DIR_ORIG) 132c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann printf("-orig"); 133c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann if ((flags & (XT_CT_ZONE_DIR_ORIG | 134c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann XT_CT_ZONE_DIR_REPL)) == XT_CT_ZONE_DIR_REPL) 135c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann printf("-reply"); 136c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann if (flags & XT_CT_ZONE_MARK) 137c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann printf(" mark"); 138c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann else 139c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann printf(" %u", zone_id); 140c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann} 141c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann 1429fdbaa71452edaac9d5906716c15937f670341faPatrick McHardystatic uint32_t ct_parse_events(const struct event_tbl *tbl, unsigned int size, 1439fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy const char *events) 1449fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy{ 1459fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy char str[strlen(events) + 1], *e = str, *t; 1469fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy unsigned int mask = 0, i; 1479fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 1489fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy strcpy(str, events); 1499fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy while ((t = strsep(&e, ","))) { 1509fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy for (i = 0; i < size; i++) { 151bed2ba957d545b50c3eae6fb28fc0decadbc0dcbPablo Neira Ayuso if (strcmp(t, tbl[i].name)) 1529fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy continue; 153bed2ba957d545b50c3eae6fb28fc0decadbc0dcbPablo Neira Ayuso mask |= 1 << tbl[i].event; 1549fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy break; 1559fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy } 1569fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 1579fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy if (i == size) 1589fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy xtables_error(PARAMETER_PROBLEM, "Unknown event type \"%s\"", t); 1599fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy } 1609fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 1619fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy return mask; 1629fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy} 1639fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 1649fdbaa71452edaac9d5906716c15937f670341faPatrick McHardystatic void ct_print_events(const char *pfx, const struct event_tbl *tbl, 1659fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy unsigned int size, uint32_t mask) 1669fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy{ 1679fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy const char *sep = ""; 1689fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy unsigned int i; 1699fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 17073866357e4a7a0fdc1b293bf8863fee2bd56da9eJan Engelhardt printf(" %s ", pfx); 1719fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy for (i = 0; i < size; i++) { 1729fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy if (mask & (1 << tbl[i].event)) { 1739fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy printf("%s%s", sep, tbl[i].name); 1749fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy sep = ","; 1759fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy } 1769fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy } 1779fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy} 1789fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 179a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardtstatic void ct_parse(struct xt_option_call *cb) 1809fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy{ 181a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt struct xt_ct_target_info *info = cb->data; 1829fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 183a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt xtables_option_parse(cb); 184a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt switch (cb->entry->id) { 185a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt case O_NOTRACK: 1869fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy info->flags |= XT_CT_NOTRACK; 1879fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy break; 188c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann case O_ZONE_ORIG: 189c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann case O_ZONE_REPLY: 190c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann case O_ZONE: 191c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann ct_parse_zone_id(cb->arg, cb->entry->id, &info->zone, 192c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann &info->flags); 193c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann break; 194a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt case O_CTEVENTS: 195a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt info->ct_events = ct_parse_events(ct_event_tbl, ARRAY_SIZE(ct_event_tbl), cb->arg); 1969fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy break; 197a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt case O_EXPEVENTS: 198a05562e1e2fb2e18f34d29ec57c4217a3014d1f2Jan Engelhardt info->exp_events = ct_parse_events(exp_event_tbl, ARRAY_SIZE(exp_event_tbl), cb->arg); 1999fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy break; 2009fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy } 2019fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy} 2029fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 203e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayusostatic void ct_parse_v1(struct xt_option_call *cb) 204e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso{ 205e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso struct xt_ct_target_info_v1 *info = cb->data; 206e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso 207e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso xtables_option_parse(cb); 208e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso switch (cb->entry->id) { 209e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso case O_NOTRACK: 210e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso info->flags |= XT_CT_NOTRACK; 211e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso break; 212c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann case O_ZONE_ORIG: 213c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann case O_ZONE_REPLY: 214c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann case O_ZONE: 215c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann ct_parse_zone_id(cb->arg, cb->entry->id, &info->zone, 216c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann &info->flags); 217c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann break; 218e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso case O_CTEVENTS: 219e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso info->ct_events = ct_parse_events(ct_event_tbl, 220e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso ARRAY_SIZE(ct_event_tbl), 221e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso cb->arg); 222e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso break; 223e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso case O_EXPEVENTS: 224e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso info->exp_events = ct_parse_events(exp_event_tbl, 225e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso ARRAY_SIZE(exp_event_tbl), 226e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso cb->arg); 227e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso break; 228e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso } 229e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso} 230e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso 2319fdbaa71452edaac9d5906716c15937f670341faPatrick McHardystatic void ct_print(const void *ip, const struct xt_entry_target *target, int numeric) 2329fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy{ 2339fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy const struct xt_ct_target_info *info = 2349fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy (const struct xt_ct_target_info *)target->data; 2359fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 23673866357e4a7a0fdc1b293bf8863fee2bd56da9eJan Engelhardt printf(" CT"); 2379fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy if (info->flags & XT_CT_NOTRACK) 23873866357e4a7a0fdc1b293bf8863fee2bd56da9eJan Engelhardt printf(" notrack"); 2399fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy if (info->helper[0]) 24073866357e4a7a0fdc1b293bf8863fee2bd56da9eJan Engelhardt printf(" helper %s", info->helper); 2419fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy if (info->ct_events) 2429fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy ct_print_events("ctevents", ct_event_tbl, 2439fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy ARRAY_SIZE(ct_event_tbl), info->ct_events); 2449fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy if (info->exp_events) 2459fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy ct_print_events("expevents", exp_event_tbl, 2469fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy ARRAY_SIZE(exp_event_tbl), info->exp_events); 247c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann if (info->flags & XT_CT_ZONE_MARK || info->zone) 248c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann ct_print_zone_id("zone", info->zone, info->flags); 2499fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy} 2509fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 251e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayusostatic void 252e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayusoct_print_v1(const void *ip, const struct xt_entry_target *target, int numeric) 253e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso{ 254e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso const struct xt_ct_target_info_v1 *info = 255e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso (const struct xt_ct_target_info_v1 *)target->data; 256e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso 2577b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik if (info->flags & XT_CT_NOTRACK_ALIAS) { 2587b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik printf (" NOTRACK"); 2597b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik return; 2607b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik } 261e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso printf(" CT"); 262e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso if (info->flags & XT_CT_NOTRACK) 263e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso printf(" notrack"); 264e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso if (info->helper[0]) 265e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso printf(" helper %s", info->helper); 266e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso if (info->timeout[0]) 267e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso printf(" timeout %s", info->timeout); 268e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso if (info->ct_events) 269e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso ct_print_events("ctevents", ct_event_tbl, 270e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso ARRAY_SIZE(ct_event_tbl), info->ct_events); 271e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso if (info->exp_events) 272e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso ct_print_events("expevents", exp_event_tbl, 273e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso ARRAY_SIZE(exp_event_tbl), info->exp_events); 274c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann if (info->flags & XT_CT_ZONE_MARK || info->zone) 275c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann ct_print_zone_id("zone", info->zone, info->flags); 276e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso} 277e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso 2789fdbaa71452edaac9d5906716c15937f670341faPatrick McHardystatic void ct_save(const void *ip, const struct xt_entry_target *target) 2799fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy{ 2809fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy const struct xt_ct_target_info *info = 2819fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy (const struct xt_ct_target_info *)target->data; 2829fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 2837b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik if (info->flags & XT_CT_NOTRACK_ALIAS) 2847b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik return; 2859fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy if (info->flags & XT_CT_NOTRACK) 28673866357e4a7a0fdc1b293bf8863fee2bd56da9eJan Engelhardt printf(" --notrack"); 2879fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy if (info->helper[0]) 28873866357e4a7a0fdc1b293bf8863fee2bd56da9eJan Engelhardt printf(" --helper %s", info->helper); 2899fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy if (info->ct_events) 2909fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy ct_print_events("--ctevents", ct_event_tbl, 2919fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy ARRAY_SIZE(ct_event_tbl), info->ct_events); 2929fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy if (info->exp_events) 2939fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy ct_print_events("--expevents", exp_event_tbl, 2949fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy ARRAY_SIZE(exp_event_tbl), info->exp_events); 295c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann if (info->flags & XT_CT_ZONE_MARK || info->zone) 296c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann ct_print_zone_id("--zone", info->zone, info->flags); 2979fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy} 2989fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 299e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayusostatic void ct_save_v1(const void *ip, const struct xt_entry_target *target) 300e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso{ 301e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso const struct xt_ct_target_info_v1 *info = 302e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso (const struct xt_ct_target_info_v1 *)target->data; 303e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso 3047b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik if (info->flags & XT_CT_NOTRACK_ALIAS) 3057b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik return; 306e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso if (info->flags & XT_CT_NOTRACK) 307e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso printf(" --notrack"); 308e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso if (info->helper[0]) 309e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso printf(" --helper %s", info->helper); 310e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso if (info->timeout[0]) 311e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso printf(" --timeout %s", info->timeout); 312e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso if (info->ct_events) 313e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso ct_print_events("--ctevents", ct_event_tbl, 314e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso ARRAY_SIZE(ct_event_tbl), info->ct_events); 315e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso if (info->exp_events) 316e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso ct_print_events("--expevents", exp_event_tbl, 317e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso ARRAY_SIZE(exp_event_tbl), info->exp_events); 318c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann if (info->flags & XT_CT_ZONE_MARK || info->zone) 319c1b62f09259cdfa618cf63032de67689c991bd3eDaniel Borkmann ct_print_zone_id("--zone", info->zone, info->flags); 320e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso} 321e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso 3227b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsikstatic const char * 3237b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsikct_print_name_alias(const struct xt_entry_target *target) 3247b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik{ 3257b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik struct xt_ct_target_info *info = (void *)target->data; 3267b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik 3277b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik return info->flags & XT_CT_NOTRACK_ALIAS ? "NOTRACK" : "CT"; 3287b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik} 3297b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik 33050f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardtstatic void notrack_ct0_tg_init(struct xt_entry_target *target) 33150f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt{ 33250f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt struct xt_ct_target_info *info = (void *)target->data; 33350f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt 33450f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt info->flags = XT_CT_NOTRACK; 33550f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt} 33650f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt 33750f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardtstatic void notrack_ct1_tg_init(struct xt_entry_target *target) 33850f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt{ 33950f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt struct xt_ct_target_info_v1 *info = (void *)target->data; 34050f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt 34150f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt info->flags = XT_CT_NOTRACK; 34250f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt} 34350f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt 3447b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsikstatic void notrack_ct2_tg_init(struct xt_entry_target *target) 3457b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik{ 3467b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik struct xt_ct_target_info_v1 *info = (void *)target->data; 3477b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik 3487b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik info->flags = XT_CT_NOTRACK | XT_CT_NOTRACK_ALIAS; 3497b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik} 3507b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik 351e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayusostatic struct xtables_target ct_target_reg[] = { 352e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso { 353e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .family = NFPROTO_UNSPEC, 354e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .name = "CT", 355e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .version = XTABLES_VERSION, 356e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .size = XT_ALIGN(sizeof(struct xt_ct_target_info)), 357e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .userspacesize = offsetof(struct xt_ct_target_info, ct), 358e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .help = ct_help, 359e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .print = ct_print, 360e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .save = ct_save, 361e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .x6_parse = ct_parse, 362e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .x6_options = ct_opts, 363e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso }, 364e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso { 365e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .family = NFPROTO_UNSPEC, 366e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .name = "CT", 367e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .revision = 1, 368e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .version = XTABLES_VERSION, 369e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .size = XT_ALIGN(sizeof(struct xt_ct_target_info_v1)), 370e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .userspacesize = offsetof(struct xt_ct_target_info_v1, ct), 371e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .help = ct_help_v1, 372e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .print = ct_print_v1, 373e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .save = ct_save_v1, 374e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .x6_parse = ct_parse_v1, 375e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso .x6_options = ct_opts_v1, 376e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso }, 37750f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt { 3787b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .family = NFPROTO_UNSPEC, 3797b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .name = "CT", 3807b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .revision = 2, 3817b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .version = XTABLES_VERSION, 3827b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .size = XT_ALIGN(sizeof(struct xt_ct_target_info_v1)), 3837b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .userspacesize = offsetof(struct xt_ct_target_info_v1, ct), 3847b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .help = ct_help_v1, 3857b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .print = ct_print_v1, 3867b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .save = ct_save_v1, 3877b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .alias = ct_print_name_alias, 3887b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .x6_parse = ct_parse_v1, 3897b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .x6_options = ct_opts_v1, 3907b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik }, 3917b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik { 39250f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .family = NFPROTO_UNSPEC, 39350f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .name = "NOTRACK", 39450f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .real_name = "CT", 39550f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .revision = 0, 39650f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .version = XTABLES_VERSION, 39750f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .size = XT_ALIGN(sizeof(struct xt_ct_target_info)), 39850f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .userspacesize = offsetof(struct xt_ct_target_info, ct), 39950f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .init = notrack_ct0_tg_init, 40050f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt }, 40150f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt { 40250f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .family = NFPROTO_UNSPEC, 40350f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .name = "NOTRACK", 40450f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .real_name = "CT", 40550f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .revision = 1, 40650f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .version = XTABLES_VERSION, 40750f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .size = XT_ALIGN(sizeof(struct xt_ct_target_info_v1)), 40850f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .userspacesize = offsetof(struct xt_ct_target_info_v1, ct), 40950f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .init = notrack_ct1_tg_init, 41050f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt }, 41150f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt { 41250f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .family = NFPROTO_UNSPEC, 41350f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .name = "NOTRACK", 4147b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .real_name = "CT", 4157b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .revision = 2, 4167b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .ext_flags = XTABLES_EXT_ALIAS, 4177b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .version = XTABLES_VERSION, 4187b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .size = XT_ALIGN(sizeof(struct xt_ct_target_info_v1)), 4197b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .userspacesize = offsetof(struct xt_ct_target_info_v1, ct), 4207b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .init = notrack_ct2_tg_init, 4217b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik }, 4227b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik { 4237b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .family = NFPROTO_UNSPEC, 4247b26bafb9be05a23b47653640aadbb61d0032665Jozsef Kadlecsik .name = "NOTRACK", 42550f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .revision = 0, 42650f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt .version = XTABLES_VERSION, 42750f19190a60ff7d69e88406a71a2f27e09008566Jan Engelhardt }, 4289fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy}; 4299fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy 4309fdbaa71452edaac9d5906716c15937f670341faPatrick McHardyvoid _init(void) 4319fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy{ 432e8f32983048d6aa4a908b6a92da55fa71c859623Pablo Neira Ayuso xtables_register_targets(ct_target_reg, ARRAY_SIZE(ct_target_reg)); 4339fdbaa71452edaac9d5906716c15937f670341faPatrick McHardy} 434