1 /* SPDX-License-Identifier: LGPL-2.1-only */ 2 /* 3 * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch> 4 * Copyright (c) 2007 Philip Craig <philipc@snapgear.com> 5 * Copyright (c) 2007 Secure Computing Corporation 6 * Copyright (c) 2012 Rich Fought <rich.fought@watchguard.com> 7 */ 8 9 #ifndef NETLINK_EXP_H_ 10 #define NETLINK_EXP_H_ 11 12 #include <netlink/netlink.h> 13 #include <netlink/addr.h> 14 #include <netlink/cache.h> 15 #include <netlink/msg.h> 16 17 #include <linux/version.h> 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 struct nfnl_exp; 24 25 enum nfnl_exp_tuples { 26 NFNL_EXP_TUPLE_EXPECT, 27 NFNL_EXP_TUPLE_MASTER, 28 NFNL_EXP_TUPLE_MASK, 29 NFNL_EXP_TUPLE_NAT, 30 NFNL_EXP_TUPLE_MAX 31 }; 32 33 extern struct nl_object_ops exp_obj_ops; 34 35 extern struct nfnl_exp * nfnl_exp_alloc(void); 36 extern int nfnl_exp_alloc_cache(struct nl_sock *, struct nl_cache **); 37 38 extern int nfnlmsg_exp_group(struct nlmsghdr *); 39 extern int nfnlmsg_exp_parse(struct nlmsghdr *, struct nfnl_exp **); 40 41 extern void nfnl_exp_get(struct nfnl_exp *); 42 extern void nfnl_exp_put(struct nfnl_exp *); 43 44 extern int nfnl_exp_dump_request(struct nl_sock *); 45 46 extern int nfnl_exp_build_add_request(const struct nfnl_exp *, int, 47 struct nl_msg **); 48 extern int nfnl_exp_add(struct nl_sock *, const struct nfnl_exp *, int); 49 50 extern int nfnl_exp_build_delete_request(const struct nfnl_exp *, int, 51 struct nl_msg **); 52 extern int nfnl_exp_del(struct nl_sock *, const struct nfnl_exp *, int); 53 54 extern int nfnl_exp_build_query_request(const struct nfnl_exp *, int, 55 struct nl_msg **); 56 extern int nfnl_exp_query(struct nl_sock *, const struct nfnl_exp *, int); 57 58 extern void nfnl_exp_set_family(struct nfnl_exp *, uint8_t); 59 extern uint8_t nfnl_exp_get_family(const struct nfnl_exp *); 60 61 extern void nfnl_exp_set_timeout(struct nfnl_exp *, uint32_t); 62 extern int nfnl_exp_test_timeout(const struct nfnl_exp *); 63 extern uint32_t nfnl_exp_get_timeout(const struct nfnl_exp *); 64 65 extern void nfnl_exp_set_id(struct nfnl_exp *, uint32_t); 66 extern int nfnl_exp_test_id(const struct nfnl_exp *); 67 extern uint32_t nfnl_exp_get_id(const struct nfnl_exp *); 68 69 extern int nfnl_exp_set_helper_name(struct nfnl_exp *, void *); 70 extern int nfnl_exp_test_helper_name(const struct nfnl_exp *); 71 extern const char * nfnl_exp_get_helper_name(const struct nfnl_exp *); 72 73 extern void nfnl_exp_set_zone(struct nfnl_exp *, uint16_t); 74 extern int nfnl_exp_test_zone(const struct nfnl_exp *); 75 extern uint16_t nfnl_exp_get_zone(const struct nfnl_exp *); 76 77 extern void nfnl_exp_set_flags(struct nfnl_exp *, uint32_t); 78 extern int nfnl_exp_test_flags(const struct nfnl_exp *); 79 extern void nfnl_exp_unset_flags(struct nfnl_exp *exp, uint32_t flags); 80 extern uint32_t nfnl_exp_get_flags(const struct nfnl_exp *); 81 extern char * nfnl_exp_flags2str(int flags, char *buf, size_t len); 82 int nfnl_exp_str2flags(const char *name); 83 84 extern void nfnl_exp_set_class(struct nfnl_exp *, uint32_t); 85 extern int nfnl_exp_test_class(const struct nfnl_exp *); 86 extern uint32_t nfnl_exp_get_class(const struct nfnl_exp *); 87 88 extern int nfnl_exp_set_fn(struct nfnl_exp *, void *); 89 extern int nfnl_exp_test_fn(const struct nfnl_exp *); 90 extern const char * nfnl_exp_get_fn(const struct nfnl_exp *); 91 92 extern void nfnl_exp_set_nat_dir(struct nfnl_exp *, uint8_t); 93 extern int nfnl_exp_test_nat_dir(const struct nfnl_exp *); 94 extern uint8_t nfnl_exp_get_nat_dir(const struct nfnl_exp *); 95 96 // The int argument specifies which nfnl_exp_dir (expect, master, mask or nat) 97 // Expectation objects only use orig, not reply 98 99 extern int nfnl_exp_set_src(struct nfnl_exp *, int, struct nl_addr *); 100 extern int nfnl_exp_test_src(const struct nfnl_exp *, int); 101 extern struct nl_addr * nfnl_exp_get_src(const struct nfnl_exp *, int); 102 103 extern int nfnl_exp_set_dst(struct nfnl_exp *, int, struct nl_addr *); 104 extern int nfnl_exp_test_dst(const struct nfnl_exp *, int); 105 extern struct nl_addr * nfnl_exp_get_dst(const struct nfnl_exp *, int); 106 107 extern void nfnl_exp_set_l4protonum(struct nfnl_exp *, int, uint8_t); 108 extern int nfnl_exp_test_l4protonum(const struct nfnl_exp *, int); 109 extern uint8_t nfnl_exp_get_l4protonum(const struct nfnl_exp *, int); 110 111 extern void nfnl_exp_set_ports(struct nfnl_exp *, int, uint16_t, uint16_t); 112 extern int nfnl_exp_test_ports(const struct nfnl_exp *, int); 113 extern uint16_t nfnl_exp_get_src_port(const struct nfnl_exp *, int); 114 extern uint16_t nfnl_exp_get_dst_port(const struct nfnl_exp *, int); 115 116 extern void nfnl_exp_set_icmp(struct nfnl_exp *, int, uint16_t, uint8_t, uint8_t); 117 extern int nfnl_exp_test_icmp(const struct nfnl_exp *, int); 118 extern uint16_t nfnl_exp_get_icmp_id(const struct nfnl_exp *, int); 119 extern uint8_t nfnl_exp_get_icmp_type(const struct nfnl_exp *, int); 120 extern uint8_t nfnl_exp_get_icmp_code(const struct nfnl_exp *, int); 121 122 #ifdef __cplusplus 123 } 124 #endif 125 126 #endif 127