1 /* SPDX-License-Identifier: LGPL-2.1-only */ 2 /* 3 * Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch> 4 * Copyright (c) 2007 Philip Craig <philipc@snapgear.com> 5 * Copyright (c) 2007 Secure Computing Corporation 6 * Copyright (c) 2008 Patrick McHardy <kaber@trash.net> 7 */ 8 9 #ifndef NETLINK_LOG_H_ 10 #define NETLINK_LOG_H_ 11 12 #include <netlink/netlink.h> 13 14 #ifdef __cplusplus 15 extern "C" { 16 #endif 17 18 struct nl_sock; 19 struct nlmsghdr; 20 struct nfnl_log; 21 22 extern struct nl_object_ops log_obj_ops; 23 24 enum nfnl_log_copy_mode { 25 NFNL_LOG_COPY_NONE, 26 NFNL_LOG_COPY_META, 27 NFNL_LOG_COPY_PACKET, 28 }; 29 30 enum nfnl_log_flags { 31 NFNL_LOG_FLAG_SEQ = 0x1, 32 NFNL_LOG_FLAG_SEQ_GLOBAL = 0x2, 33 NFNL_LOG_FLAG_CONNTRACK = 0x4, 34 }; 35 36 /* General */ 37 extern struct nfnl_log * nfnl_log_alloc(void); 38 extern int nfnlmsg_log_parse(struct nlmsghdr *, 39 struct nfnl_log **); 40 41 extern void nfnl_log_get(struct nfnl_log *); 42 extern void nfnl_log_put(struct nfnl_log *); 43 44 /* Attributes */ 45 extern void nfnl_log_set_group(struct nfnl_log *, uint16_t); 46 extern int nfnl_log_test_group(const struct nfnl_log *); 47 extern uint16_t nfnl_log_get_group(const struct nfnl_log *); 48 49 extern void nfnl_log_set_copy_mode(struct nfnl_log *, 50 enum nfnl_log_copy_mode); 51 extern int nfnl_log_test_copy_mode(const struct nfnl_log *); 52 extern enum nfnl_log_copy_mode nfnl_log_get_copy_mode(const struct nfnl_log *); 53 54 extern char * nfnl_log_copy_mode2str(enum nfnl_log_copy_mode, 55 char *, size_t); 56 extern int nfnl_log_str2copy_mode(const char *); 57 58 extern void nfnl_log_set_copy_range(struct nfnl_log *, uint32_t); 59 extern int nfnl_log_test_copy_range(const struct nfnl_log *); 60 extern uint32_t nfnl_log_get_copy_range(const struct nfnl_log *); 61 62 extern void nfnl_log_set_flush_timeout(struct nfnl_log *, uint32_t); 63 extern int nfnl_log_test_flush_timeout(const struct nfnl_log *); 64 extern uint32_t nfnl_log_get_flush_timeout(const struct nfnl_log *); 65 66 extern void nfnl_log_set_alloc_size(struct nfnl_log *, uint32_t); 67 extern int nfnl_log_test_alloc_size(const struct nfnl_log *); 68 extern uint32_t nfnl_log_get_alloc_size(const struct nfnl_log *); 69 70 extern void nfnl_log_set_queue_threshold(struct nfnl_log *, uint32_t); 71 extern int nfnl_log_test_queue_threshold(const struct nfnl_log *); 72 extern uint32_t nfnl_log_get_queue_threshold(const struct nfnl_log *); 73 74 extern void nfnl_log_set_flags(struct nfnl_log *, unsigned int); 75 extern void nfnl_log_unset_flags(struct nfnl_log *, unsigned int); 76 extern unsigned int nfnl_log_get_flags(const struct nfnl_log *); 77 78 extern char * nfnl_log_flags2str(unsigned int, char *, size_t); 79 extern unsigned int nfnl_log_str2flags(const char *); 80 81 extern int nfnl_log_build_pf_bind(uint8_t, struct nl_msg **); 82 extern int nfnl_log_pf_bind(struct nl_sock *, uint8_t); 83 84 extern int nfnl_log_build_pf_unbind(uint8_t, struct nl_msg **); 85 extern int nfnl_log_pf_unbind(struct nl_sock *, uint8_t); 86 87 extern int nfnl_log_build_create_request(const struct nfnl_log *, 88 struct nl_msg **); 89 extern int nfnl_log_create(struct nl_sock *, const struct nfnl_log *); 90 91 extern int nfnl_log_build_change_request(const struct nfnl_log *, 92 struct nl_msg **); 93 extern int nfnl_log_change(struct nl_sock *, const struct nfnl_log *); 94 95 extern int nfnl_log_build_delete_request(const struct nfnl_log *, 96 struct nl_msg **); 97 extern int nfnl_log_delete(struct nl_sock *, const struct nfnl_log *); 98 99 #ifdef __cplusplus 100 } 101 #endif 102 103 #endif 104 105