#ifndef _FILTER_H_ #define _FILTER_H_ #include #include #include #include enum ct_filter_type { CT_FILTER_L4PROTO, CT_FILTER_STATE, CT_FILTER_ADDRESS, /* also for netmask */ CT_FILTER_MAX }; enum ct_filter_logic { CT_FILTER_NEGATIVE = 0, CT_FILTER_POSITIVE = 1, }; struct ct_filter_ipv4_hnode { struct hashtable_node node; uint32_t ip; }; struct ct_filter_ipv6_hnode { struct hashtable_node node; uint32_t ipv6[4]; }; struct ct_filter_netmask_ipv4 { uint32_t ip; uint32_t mask; }; struct ct_filter_netmask_ipv6 { uint32_t ip[4]; uint32_t mask[4]; }; struct nf_conntrack; struct ct_filter; struct ct_filter *ct_filter_create(void); void ct_filter_destroy(struct ct_filter *filter); int ct_filter_add_ip(struct ct_filter *filter, void *data, uint8_t family); int ct_filter_add_netmask(struct ct_filter *filter, void *data, uint8_t family); void ct_filter_add_proto(struct ct_filter *filter, int protonum); void ct_filter_add_state(struct ct_filter *f, int protonum, int state); void ct_filter_set_logic(struct ct_filter *f, enum ct_filter_type type, enum ct_filter_logic logic); int ct_filter_conntrack(const struct nf_conntrack *ct, int userspace); int ct_filter_master(const struct nf_conntrack *master); struct exp_filter; struct nf_expect; struct exp_filter *exp_filter_create(void); int exp_filter_add(struct exp_filter *f, const char *helper_name); int exp_filter_find(struct exp_filter *f, const struct nf_expect *exp); #endif