144d362409d5469aed47d19e7908d19bd194493aThomas Graf/* 244d362409d5469aed47d19e7908d19bd194493aThomas Graf * lib/netfilter/log_obj.c Netfilter Log Object 344d362409d5469aed47d19e7908d19bd194493aThomas Graf * 444d362409d5469aed47d19e7908d19bd194493aThomas Graf * This library is free software; you can redistribute it and/or 544d362409d5469aed47d19e7908d19bd194493aThomas Graf * modify it under the terms of the GNU Lesser General Public 644d362409d5469aed47d19e7908d19bd194493aThomas Graf * License as published by the Free Software Foundation version 2.1 744d362409d5469aed47d19e7908d19bd194493aThomas Graf * of the License. 844d362409d5469aed47d19e7908d19bd194493aThomas Graf * 9d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch> 1044d362409d5469aed47d19e7908d19bd194493aThomas Graf * Copyright (c) 2007 Philip Craig <philipc@snapgear.com> 1144d362409d5469aed47d19e7908d19bd194493aThomas Graf * Copyright (c) 2007 Secure Computing Corporation 122f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy * Copyright (c) 2008 Patrick McHardy <kaber@trash.net> 1344d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 1444d362409d5469aed47d19e7908d19bd194493aThomas Graf 1544d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink-local.h> 1644d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/netfilter/nfnl.h> 1744d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/netfilter/log.h> 1844d362409d5469aed47d19e7908d19bd194493aThomas Graf 1944d362409d5469aed47d19e7908d19bd194493aThomas Graf/** @cond SKIP */ 202f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_ATTR_GROUP (1UL << 0) 212f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_ATTR_COPY_MODE (1UL << 1) 222f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_ATTR_COPY_RANGE (1UL << 3) 232f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_ATTR_FLUSH_TIMEOUT (1UL << 4) 242f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_ATTR_ALLOC_SIZE (1UL << 5) 252f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_ATTR_QUEUE_THRESHOLD (1UL << 6) 262f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy 2744d362409d5469aed47d19e7908d19bd194493aThomas Graf/** @endcond */ 2844d362409d5469aed47d19e7908d19bd194493aThomas Graf 29d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Grafstatic void nfnl_log_dump(struct nl_object *a, struct nl_dump_params *p) 3044d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 312f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy struct nfnl_log *log = (struct nfnl_log *) a; 322f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy char buf[64]; 3344d362409d5469aed47d19e7908d19bd194493aThomas Graf 34d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_new_line(p); 35d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf 362f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy if (log->ce_mask & LOG_ATTR_GROUP) 37d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "group=%u ", log->log_group); 3844d362409d5469aed47d19e7908d19bd194493aThomas Graf 392f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy if (log->ce_mask & LOG_ATTR_COPY_MODE) 40d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "copy_mode=%s ", 412f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy nfnl_log_copy_mode2str(log->log_copy_mode, 422f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy buf, sizeof(buf))); 4344d362409d5469aed47d19e7908d19bd194493aThomas Graf 442f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy if (log->ce_mask & LOG_ATTR_COPY_RANGE) 45d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "copy_range=%u ", log->log_copy_range); 4644d362409d5469aed47d19e7908d19bd194493aThomas Graf 472f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy if (log->ce_mask & LOG_ATTR_FLUSH_TIMEOUT) 48d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "flush_timeout=%u ", log->log_flush_timeout); 492f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy 502f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy if (log->ce_mask & LOG_ATTR_ALLOC_SIZE) 51d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "alloc_size=%u ", log->log_alloc_size); 5244d362409d5469aed47d19e7908d19bd194493aThomas Graf 532f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy if (log->ce_mask & LOG_ATTR_QUEUE_THRESHOLD) 54d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "queue_threshold=%u ", log->log_queue_threshold); 5544d362409d5469aed47d19e7908d19bd194493aThomas Graf 56d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "\n"); 5744d362409d5469aed47d19e7908d19bd194493aThomas Graf} 5844d362409d5469aed47d19e7908d19bd194493aThomas Graf 592f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardystatic struct trans_tbl copy_modes[] = { 602f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy __ADD(NFNL_LOG_COPY_NONE, none) 612f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy __ADD(NFNL_LOG_COPY_META, meta) 622f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy __ADD(NFNL_LOG_COPY_PACKET, packet) 632f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}; 642f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy 652f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardychar *nfnl_log_copy_mode2str(enum nfnl_log_copy_mode copy_mode, char *buf, 662f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy size_t len) 672f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{ 682f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return __type2str(copy_mode, buf, len, copy_modes, 692f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy ARRAY_SIZE(copy_modes)); 702f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy} 712f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy 722f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyenum nfnl_log_copy_mode nfnl_log_str2copy_mode(const char *name) 732f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{ 742f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return __str2type(name, copy_modes, ARRAY_SIZE(copy_modes)); 752f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy} 762f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy 7744d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 7844d362409d5469aed47d19e7908d19bd194493aThomas Graf * @name Allocation/Freeing 7944d362409d5469aed47d19e7908d19bd194493aThomas Graf * @{ 8044d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 8144d362409d5469aed47d19e7908d19bd194493aThomas Graf 8244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nfnl_log *nfnl_log_alloc(void) 8344d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 8444d362409d5469aed47d19e7908d19bd194493aThomas Graf return (struct nfnl_log *) nl_object_alloc(&log_obj_ops); 8544d362409d5469aed47d19e7908d19bd194493aThomas Graf} 8644d362409d5469aed47d19e7908d19bd194493aThomas Graf 8744d362409d5469aed47d19e7908d19bd194493aThomas Grafvoid nfnl_log_get(struct nfnl_log *log) 8844d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 8944d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_object_get((struct nl_object *) log); 9044d362409d5469aed47d19e7908d19bd194493aThomas Graf} 9144d362409d5469aed47d19e7908d19bd194493aThomas Graf 9244d362409d5469aed47d19e7908d19bd194493aThomas Grafvoid nfnl_log_put(struct nfnl_log *log) 9344d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 9444d362409d5469aed47d19e7908d19bd194493aThomas Graf nl_object_put((struct nl_object *) log); 9544d362409d5469aed47d19e7908d19bd194493aThomas Graf} 9644d362409d5469aed47d19e7908d19bd194493aThomas Graf 9744d362409d5469aed47d19e7908d19bd194493aThomas Graf/** @} */ 9844d362409d5469aed47d19e7908d19bd194493aThomas Graf 9944d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 10044d362409d5469aed47d19e7908d19bd194493aThomas Graf * @name Attributes 10144d362409d5469aed47d19e7908d19bd194493aThomas Graf * @{ 10244d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 10344d362409d5469aed47d19e7908d19bd194493aThomas Graf 1042f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_set_group(struct nfnl_log *log, uint16_t group) 10544d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1062f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy log->log_group = group; 1072f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy log->ce_mask |= LOG_ATTR_GROUP; 10844d362409d5469aed47d19e7908d19bd194493aThomas Graf} 10944d362409d5469aed47d19e7908d19bd194493aThomas Graf 1102f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyint nfnl_log_test_group(const struct nfnl_log *log) 11144d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1122f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return !!(log->ce_mask & LOG_ATTR_GROUP); 11344d362409d5469aed47d19e7908d19bd194493aThomas Graf} 11444d362409d5469aed47d19e7908d19bd194493aThomas Graf 1152f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint16_t nfnl_log_get_group(const struct nfnl_log *log) 11644d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1172f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return log->log_group; 11844d362409d5469aed47d19e7908d19bd194493aThomas Graf} 11944d362409d5469aed47d19e7908d19bd194493aThomas Graf 1202f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_set_copy_mode(struct nfnl_log *log, enum nfnl_log_copy_mode mode) 12144d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1222f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy log->log_copy_mode = mode; 1232f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy log->ce_mask |= LOG_ATTR_COPY_MODE; 12444d362409d5469aed47d19e7908d19bd194493aThomas Graf} 12544d362409d5469aed47d19e7908d19bd194493aThomas Graf 1262f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyint nfnl_log_test_copy_mode(const struct nfnl_log *log) 12744d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1282f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return !!(log->ce_mask & LOG_ATTR_COPY_MODE); 12944d362409d5469aed47d19e7908d19bd194493aThomas Graf} 13044d362409d5469aed47d19e7908d19bd194493aThomas Graf 1312f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyenum nfnl_log_copy_mode nfnl_log_get_copy_mode(const struct nfnl_log *log) 13244d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1332f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return log->log_copy_mode; 13444d362409d5469aed47d19e7908d19bd194493aThomas Graf} 13544d362409d5469aed47d19e7908d19bd194493aThomas Graf 1362f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_set_copy_range(struct nfnl_log *log, uint32_t copy_range) 13744d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1382f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy log->log_copy_range = copy_range; 1392f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy log->ce_mask |= LOG_ATTR_COPY_RANGE; 14044d362409d5469aed47d19e7908d19bd194493aThomas Graf} 14144d362409d5469aed47d19e7908d19bd194493aThomas Graf 1422f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyint nfnl_log_test_copy_range(const struct nfnl_log *log) 14344d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1442f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return !!(log->ce_mask & LOG_ATTR_COPY_RANGE); 14544d362409d5469aed47d19e7908d19bd194493aThomas Graf} 14644d362409d5469aed47d19e7908d19bd194493aThomas Graf 1472f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint32_t nfnl_log_get_copy_range(const struct nfnl_log *log) 14844d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1492f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return log->log_copy_range; 15044d362409d5469aed47d19e7908d19bd194493aThomas Graf} 15144d362409d5469aed47d19e7908d19bd194493aThomas Graf 1522f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_set_flush_timeout(struct nfnl_log *log, uint32_t timeout) 15344d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1542f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy log->log_flush_timeout = timeout; 1552f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy log->ce_mask |= LOG_ATTR_FLUSH_TIMEOUT; 15644d362409d5469aed47d19e7908d19bd194493aThomas Graf} 15744d362409d5469aed47d19e7908d19bd194493aThomas Graf 1582f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyint nfnl_log_test_flush_timeout(const struct nfnl_log *log) 15944d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1602f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return !!(log->ce_mask & LOG_ATTR_FLUSH_TIMEOUT); 16144d362409d5469aed47d19e7908d19bd194493aThomas Graf} 16244d362409d5469aed47d19e7908d19bd194493aThomas Graf 1632f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint32_t nfnl_log_get_flush_timeout(const struct nfnl_log *log) 16444d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1652f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return log->log_flush_timeout; 16644d362409d5469aed47d19e7908d19bd194493aThomas Graf} 16744d362409d5469aed47d19e7908d19bd194493aThomas Graf 1682f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_set_alloc_size(struct nfnl_log *log, uint32_t alloc_size) 16944d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1702f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy log->log_alloc_size = alloc_size; 1712f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy log->ce_mask |= LOG_ATTR_ALLOC_SIZE; 17244d362409d5469aed47d19e7908d19bd194493aThomas Graf} 17344d362409d5469aed47d19e7908d19bd194493aThomas Graf 1742f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyint nfnl_log_test_alloc_size(const struct nfnl_log *log) 17544d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1762f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return !!(log->ce_mask & LOG_ATTR_ALLOC_SIZE); 17744d362409d5469aed47d19e7908d19bd194493aThomas Graf} 17844d362409d5469aed47d19e7908d19bd194493aThomas Graf 1792f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint32_t nfnl_log_get_alloc_size(const struct nfnl_log *log) 18044d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1812f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return log->log_alloc_size; 18244d362409d5469aed47d19e7908d19bd194493aThomas Graf} 18344d362409d5469aed47d19e7908d19bd194493aThomas Graf 1842f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_set_queue_threshold(struct nfnl_log *log, uint32_t threshold) 18544d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1862f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy log->log_queue_threshold = threshold; 1872f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy log->ce_mask |= LOG_ATTR_QUEUE_THRESHOLD; 18844d362409d5469aed47d19e7908d19bd194493aThomas Graf} 18944d362409d5469aed47d19e7908d19bd194493aThomas Graf 1902f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyint nfnl_log_test_queue_threshold(const struct nfnl_log *log) 19144d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1922f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return !!(log->ce_mask & LOG_ATTR_QUEUE_THRESHOLD); 19344d362409d5469aed47d19e7908d19bd194493aThomas Graf} 19444d362409d5469aed47d19e7908d19bd194493aThomas Graf 1952f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint32_t nfnl_log_get_queue_threshold(const struct nfnl_log *log) 19644d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 1972f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return log->log_queue_threshold; 19844d362409d5469aed47d19e7908d19bd194493aThomas Graf} 19944d362409d5469aed47d19e7908d19bd194493aThomas Graf 2002f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy/* We don't actually use the flags for anything yet since the 2012f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy * nfnetlog_log interface truly sucks - it only contains the 2022f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy * flag value, but not mask, so we would have to make assumptions 2032f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy * about the supported flags. 2042f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy */ 2052f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_set_flags(struct nfnl_log *log, unsigned int flags) 20644d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 2072f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy log->log_flags |= flags; 2082f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy log->log_flag_mask |= flags; 20944d362409d5469aed47d19e7908d19bd194493aThomas Graf} 21044d362409d5469aed47d19e7908d19bd194493aThomas Graf 2112f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_unset_flags(struct nfnl_log *log, unsigned int flags) 21244d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 2132f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy log->log_flags &= ~flags; 2142f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy log->log_flag_mask |= flags; 21544d362409d5469aed47d19e7908d19bd194493aThomas Graf} 21644d362409d5469aed47d19e7908d19bd194493aThomas Graf 2172f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardystatic struct trans_tbl log_flags[] = { 2182f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy __ADD(NFNL_LOG_FLAG_SEQ, seq) 2192f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy __ADD(NFNL_LOG_FLAG_SEQ_GLOBAL, seq_global) 2202f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}; 22144d362409d5469aed47d19e7908d19bd194493aThomas Graf 2222f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardychar *nfnl_log_flags2str(unsigned int flags, char *buf, size_t len) 2233f48e49102f3967e87b98b66721c35aefcc299caPatrick McHardy{ 2242f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return __flags2str(flags, buf, len, log_flags, ARRAY_SIZE(log_flags)); 2253f48e49102f3967e87b98b66721c35aefcc299caPatrick McHardy} 2263f48e49102f3967e87b98b66721c35aefcc299caPatrick McHardy 2272f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyunsigned int nfnl_log_str2flags(const char *name) 2283f48e49102f3967e87b98b66721c35aefcc299caPatrick McHardy{ 2292f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return __str2flags(name, log_flags, ARRAY_SIZE(log_flags)); 2303f48e49102f3967e87b98b66721c35aefcc299caPatrick McHardy} 2313f48e49102f3967e87b98b66721c35aefcc299caPatrick McHardy 2322f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardystatic int nfnl_log_compare(struct nl_object *_a, struct nl_object *_b, 2332f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy uint32_t attrs, int flags) 2343f48e49102f3967e87b98b66721c35aefcc299caPatrick McHardy{ 2352f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy struct nfnl_log *a = (struct nfnl_log *) _a; 2362f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy struct nfnl_log *b = (struct nfnl_log *) _b; 2372f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy int diff = 0; 2383f48e49102f3967e87b98b66721c35aefcc299caPatrick McHardy 2392f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define NFNL_LOG_DIFF(ATTR, EXPR) \ 2402f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy ATTR_DIFF(attrs, LOG_ATTR_##ATTR, a, b, EXPR) 2412f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define NFNL_LOG_DIFF_VAL(ATTR, FIELD) \ 2422f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy NFNL_LOG_DIFF(ATTR, a->FIELD != b->FIELD) 24344d362409d5469aed47d19e7908d19bd194493aThomas Graf 2442f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy diff |= NFNL_LOG_DIFF_VAL(GROUP, log_group); 2452f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy diff |= NFNL_LOG_DIFF_VAL(COPY_MODE, log_copy_mode); 2462f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy diff |= NFNL_LOG_DIFF_VAL(COPY_RANGE, log_copy_range); 2472f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy diff |= NFNL_LOG_DIFF_VAL(FLUSH_TIMEOUT, log_flush_timeout); 2482f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy diff |= NFNL_LOG_DIFF_VAL(ALLOC_SIZE, log_alloc_size); 2492f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy diff |= NFNL_LOG_DIFF_VAL(QUEUE_THRESHOLD, log_queue_threshold); 25044d362409d5469aed47d19e7908d19bd194493aThomas Graf 2512f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#undef NFNL_LOG_DIFF 2522f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#undef NFNL_LOG_DIFF_VAL 25344d362409d5469aed47d19e7908d19bd194493aThomas Graf 2542f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return diff; 25544d362409d5469aed47d19e7908d19bd194493aThomas Graf} 25644d362409d5469aed47d19e7908d19bd194493aThomas Graf 2572f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardystatic struct trans_tbl nfnl_log_attrs[] = { 2582f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy __ADD(LOG_ATTR_GROUP, group) 2592f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy __ADD(LOG_ATTR_COPY_MODE, copy_mode) 2602f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy __ADD(LOG_ATTR_COPY_RANGE, copy_range) 2612f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy __ADD(LOG_ATTR_FLUSH_TIMEOUT, flush_timeout) 2622f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy __ADD(LOG_ATTR_ALLOC_SIZE, alloc_size) 2632f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy __ADD(LOG_ATTR_QUEUE_THRESHOLD, queue_threshold) 2642f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}; 26544d362409d5469aed47d19e7908d19bd194493aThomas Graf 2662f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardystatic char *nfnl_log_attrs2str(int attrs, char *buf, size_t len) 26744d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 2682f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy return __flags2str(attrs, buf, len, nfnl_log_attrs, 2692f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy ARRAY_SIZE(nfnl_log_attrs)); 27044d362409d5469aed47d19e7908d19bd194493aThomas Graf} 27144d362409d5469aed47d19e7908d19bd194493aThomas Graf 27244d362409d5469aed47d19e7908d19bd194493aThomas Graf/** @} */ 27344d362409d5469aed47d19e7908d19bd194493aThomas Graf 27444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_object_ops log_obj_ops = { 27544d362409d5469aed47d19e7908d19bd194493aThomas Graf .oo_name = "netfilter/log", 27644d362409d5469aed47d19e7908d19bd194493aThomas Graf .oo_size = sizeof(struct nfnl_log), 277d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf .oo_dump = { 278d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf [NL_DUMP_LINE] = nfnl_log_dump, 279d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf [NL_DUMP_DETAILS] = nfnl_log_dump, 280d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf [NL_DUMP_STATS] = nfnl_log_dump, 281d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf }, 2822f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy .oo_compare = nfnl_log_compare, 2832f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy .oo_attrs2str = nfnl_log_attrs2str, 2842f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy .oo_id_attrs = LOG_ATTR_GROUP, 28544d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 28644d362409d5469aed47d19e7908d19bd194493aThomas Graf 28744d362409d5469aed47d19e7908d19bd194493aThomas Graf/** @} */ 288