18a44513648da0c5f5551f96b329cf56b66f5b303pkanwar/* 28a44513648da0c5f5551f96b329cf56b66f5b303pkanwar * (C) 2005-2011 by Pablo Neira Ayuso <pablo@netfilter.org> 38a44513648da0c5f5551f96b329cf56b66f5b303pkanwar * 48a44513648da0c5f5551f96b329cf56b66f5b303pkanwar * This program is free software; you can redistribute it and/or modify it 58a44513648da0c5f5551f96b329cf56b66f5b303pkanwar * under the terms of the GNU General Public License as published by 68a44513648da0c5f5551f96b329cf56b66f5b303pkanwar * the Free Software Foundation; either version 2 of the License, or 78a44513648da0c5f5551f96b329cf56b66f5b303pkanwar * (at your option) any later version. 88a44513648da0c5f5551f96b329cf56b66f5b303pkanwar */ 98a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 108a44513648da0c5f5551f96b329cf56b66f5b303pkanwar#include "internal/internal.h" 118a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 128a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic void get_attr_grp_orig_ipv4(const struct nf_conntrack *ct, void *data) 138a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{ 148a44513648da0c5f5551f96b329cf56b66f5b303pkanwar struct nfct_attr_grp_ipv4 *this = data; 158a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->src = ct->head.orig.src.v4; 168a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->dst = ct->head.orig.dst.v4; 178a44513648da0c5f5551f96b329cf56b66f5b303pkanwar} 188a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 198a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic void get_attr_grp_repl_ipv4(const struct nf_conntrack *ct, void *data) 208a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{ 218a44513648da0c5f5551f96b329cf56b66f5b303pkanwar struct nfct_attr_grp_ipv4 *this = data; 228a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->src = ct->repl.src.v4; 238a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->dst = ct->repl.dst.v4; 248a44513648da0c5f5551f96b329cf56b66f5b303pkanwar} 258a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 268a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic void get_attr_grp_orig_ipv6(const struct nf_conntrack *ct, void *data) 278a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{ 288a44513648da0c5f5551f96b329cf56b66f5b303pkanwar struct nfct_attr_grp_ipv6 *this = data; 298a44513648da0c5f5551f96b329cf56b66f5b303pkanwar memcpy(this->src, &ct->head.orig.src.v6, sizeof(uint32_t)*4); 308a44513648da0c5f5551f96b329cf56b66f5b303pkanwar memcpy(this->dst, &ct->head.orig.dst.v6, sizeof(uint32_t)*4); 318a44513648da0c5f5551f96b329cf56b66f5b303pkanwar} 328a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 338a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic void get_attr_grp_repl_ipv6(const struct nf_conntrack *ct, void *data) 348a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{ 358a44513648da0c5f5551f96b329cf56b66f5b303pkanwar struct nfct_attr_grp_ipv6 *this = data; 368a44513648da0c5f5551f96b329cf56b66f5b303pkanwar memcpy(this->src, &ct->repl.src.v6, sizeof(uint32_t)*4); 378a44513648da0c5f5551f96b329cf56b66f5b303pkanwar memcpy(this->dst, &ct->repl.dst.v6, sizeof(uint32_t)*4); 388a44513648da0c5f5551f96b329cf56b66f5b303pkanwar} 398a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 408a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic void get_attr_grp_orig_port(const struct nf_conntrack *ct, void *data) 418a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{ 428a44513648da0c5f5551f96b329cf56b66f5b303pkanwar struct nfct_attr_grp_port *this = data; 438a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->sport = ct->head.orig.l4src.all; 448a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->dport = ct->head.orig.l4dst.all; 458a44513648da0c5f5551f96b329cf56b66f5b303pkanwar} 468a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 478a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic void get_attr_grp_repl_port(const struct nf_conntrack *ct, void *data) 488a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{ 498a44513648da0c5f5551f96b329cf56b66f5b303pkanwar struct nfct_attr_grp_port *this = data; 508a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->sport = ct->repl.l4src.all; 518a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->dport = ct->repl.l4dst.all; 528a44513648da0c5f5551f96b329cf56b66f5b303pkanwar} 538a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 548a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic void get_attr_grp_icmp(const struct nf_conntrack *ct, void *data) 558a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{ 568a44513648da0c5f5551f96b329cf56b66f5b303pkanwar struct nfct_attr_grp_icmp *this = data; 578a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->type = ct->head.orig.l4dst.icmp.type; 588a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->code = ct->head.orig.l4dst.icmp.code; 598a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->id = ct->head.orig.l4src.icmp.id; 608a44513648da0c5f5551f96b329cf56b66f5b303pkanwar} 618a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 628a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic void get_attr_grp_master_ipv4(const struct nf_conntrack *ct, void *data) 638a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{ 648a44513648da0c5f5551f96b329cf56b66f5b303pkanwar struct nfct_attr_grp_ipv4 *this = data; 658a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->src = ct->master.src.v4; 668a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->dst = ct->master.dst.v4; 678a44513648da0c5f5551f96b329cf56b66f5b303pkanwar} 688a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 698a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic void get_attr_grp_master_ipv6(const struct nf_conntrack *ct, void *data) 708a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{ 718a44513648da0c5f5551f96b329cf56b66f5b303pkanwar struct nfct_attr_grp_ipv6 *this = data; 728a44513648da0c5f5551f96b329cf56b66f5b303pkanwar memcpy(this->src, &ct->master.src.v6, sizeof(uint32_t)*4); 738a44513648da0c5f5551f96b329cf56b66f5b303pkanwar memcpy(this->dst, &ct->master.dst.v6, sizeof(uint32_t)*4); 748a44513648da0c5f5551f96b329cf56b66f5b303pkanwar} 758a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 768a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic void get_attr_grp_master_port(const struct nf_conntrack *ct, void *data) 778a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{ 788a44513648da0c5f5551f96b329cf56b66f5b303pkanwar struct nfct_attr_grp_port *this = data; 798a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->sport = ct->master.l4src.all; 808a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->dport = ct->master.l4dst.all; 818a44513648da0c5f5551f96b329cf56b66f5b303pkanwar} 828a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 838a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic void get_attr_grp_orig_ctrs(const struct nf_conntrack *ct, void *data) 848a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{ 858a44513648da0c5f5551f96b329cf56b66f5b303pkanwar struct nfct_attr_grp_ctrs *this = data; 868a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->packets = ct->counters[__DIR_ORIG].packets; 878a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->bytes = ct->counters[__DIR_ORIG].bytes; 888a44513648da0c5f5551f96b329cf56b66f5b303pkanwar} 898a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 908a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic void get_attr_grp_repl_ctrs(const struct nf_conntrack *ct, void *data) 918a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{ 928a44513648da0c5f5551f96b329cf56b66f5b303pkanwar struct nfct_attr_grp_ctrs *this = data; 938a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->packets = ct->counters[__DIR_REPL].packets; 948a44513648da0c5f5551f96b329cf56b66f5b303pkanwar this->bytes = ct->counters[__DIR_REPL].bytes; 958a44513648da0c5f5551f96b329cf56b66f5b303pkanwar} 968a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 978a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic void 988a44513648da0c5f5551f96b329cf56b66f5b303pkanwarget_attr_grp_orig_addr_src(const struct nf_conntrack *ct, void *data) 998a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{ 1008a44513648da0c5f5551f96b329cf56b66f5b303pkanwar union nfct_attr_grp_addr *this = data; 1018a44513648da0c5f5551f96b329cf56b66f5b303pkanwar memcpy(&this->addr, &ct->head.orig.src, sizeof(ct->head.orig.src)); 1028a44513648da0c5f5551f96b329cf56b66f5b303pkanwar} 1038a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 1048a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic void 1058a44513648da0c5f5551f96b329cf56b66f5b303pkanwarget_attr_grp_orig_addr_dst(const struct nf_conntrack *ct, void *data) 1068a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{ 1078a44513648da0c5f5551f96b329cf56b66f5b303pkanwar union nfct_attr_grp_addr *this = data; 1088a44513648da0c5f5551f96b329cf56b66f5b303pkanwar memcpy(&this->addr, &ct->head.orig.dst, sizeof(ct->head.orig.dst)); 1098a44513648da0c5f5551f96b329cf56b66f5b303pkanwar} 1108a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 1118a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic void 1128a44513648da0c5f5551f96b329cf56b66f5b303pkanwarget_attr_grp_repl_addr_src(const struct nf_conntrack *ct, void *data) 1138a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{ 1148a44513648da0c5f5551f96b329cf56b66f5b303pkanwar union nfct_attr_grp_addr *this = data; 1158a44513648da0c5f5551f96b329cf56b66f5b303pkanwar memcpy(&this->addr, &ct->repl.src, sizeof(ct->repl.src)); 1168a44513648da0c5f5551f96b329cf56b66f5b303pkanwar} 1178a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 1188a44513648da0c5f5551f96b329cf56b66f5b303pkanwarstatic void 1198a44513648da0c5f5551f96b329cf56b66f5b303pkanwarget_attr_grp_repl_addr_dst(const struct nf_conntrack *ct, void *data) 1208a44513648da0c5f5551f96b329cf56b66f5b303pkanwar{ 1218a44513648da0c5f5551f96b329cf56b66f5b303pkanwar union nfct_attr_grp_addr *this = data; 1228a44513648da0c5f5551f96b329cf56b66f5b303pkanwar memcpy(&this->addr, &ct->repl.dst, sizeof(ct->repl.dst)); 1238a44513648da0c5f5551f96b329cf56b66f5b303pkanwar} 1248a44513648da0c5f5551f96b329cf56b66f5b303pkanwar 1258a44513648da0c5f5551f96b329cf56b66f5b303pkanwarconst get_attr_grp get_attr_grp_array[ATTR_GRP_MAX] = { 1268a44513648da0c5f5551f96b329cf56b66f5b303pkanwar [ATTR_GRP_ORIG_IPV4] = get_attr_grp_orig_ipv4, 1278a44513648da0c5f5551f96b329cf56b66f5b303pkanwar [ATTR_GRP_REPL_IPV4] = get_attr_grp_repl_ipv4, 1288a44513648da0c5f5551f96b329cf56b66f5b303pkanwar [ATTR_GRP_ORIG_IPV6] = get_attr_grp_orig_ipv6, 1298a44513648da0c5f5551f96b329cf56b66f5b303pkanwar [ATTR_GRP_REPL_IPV6] = get_attr_grp_repl_ipv6, 1308a44513648da0c5f5551f96b329cf56b66f5b303pkanwar [ATTR_GRP_ORIG_PORT] = get_attr_grp_orig_port, 1318a44513648da0c5f5551f96b329cf56b66f5b303pkanwar [ATTR_GRP_REPL_PORT] = get_attr_grp_repl_port, 1328a44513648da0c5f5551f96b329cf56b66f5b303pkanwar [ATTR_GRP_ICMP] = get_attr_grp_icmp, 1338a44513648da0c5f5551f96b329cf56b66f5b303pkanwar [ATTR_GRP_MASTER_IPV4] = get_attr_grp_master_ipv4, 1348a44513648da0c5f5551f96b329cf56b66f5b303pkanwar [ATTR_GRP_MASTER_IPV6] = get_attr_grp_master_ipv6, 1358a44513648da0c5f5551f96b329cf56b66f5b303pkanwar [ATTR_GRP_MASTER_PORT] = get_attr_grp_master_port, 1368a44513648da0c5f5551f96b329cf56b66f5b303pkanwar [ATTR_GRP_ORIG_COUNTERS] = get_attr_grp_orig_ctrs, 1378a44513648da0c5f5551f96b329cf56b66f5b303pkanwar [ATTR_GRP_REPL_COUNTERS] = get_attr_grp_repl_ctrs, 1388a44513648da0c5f5551f96b329cf56b66f5b303pkanwar [ATTR_GRP_ORIG_ADDR_SRC] = get_attr_grp_orig_addr_src, 1398a44513648da0c5f5551f96b329cf56b66f5b303pkanwar [ATTR_GRP_ORIG_ADDR_DST] = get_attr_grp_orig_addr_dst, 1408a44513648da0c5f5551f96b329cf56b66f5b303pkanwar [ATTR_GRP_REPL_ADDR_SRC] = get_attr_grp_repl_addr_src, 1418a44513648da0c5f5551f96b329cf56b66f5b303pkanwar [ATTR_GRP_REPL_ADDR_DST] = get_attr_grp_repl_addr_dst, 1428a44513648da0c5f5551f96b329cf56b66f5b303pkanwar}; 143