12f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy/*
22f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy * lib/netfilter/log_msg_obj.c	Netfilter Log Object
32f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy *
42f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy *	This library is free software; you can redistribute it and/or
52f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy *	modify it under the terms of the GNU Lesser General Public
62f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy *	License as published by the Free Software Foundation version 2.1
72f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy *	of the License.
82f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy *
9d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
102f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy * Copyright (c) 2007 Philip Craig <philipc@snapgear.com>
112f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy * Copyright (c) 2007 Secure Computing Corporation
122f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy */
132f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
142f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#include <netlink-local.h>
152f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#include <netlink/netfilter/nfnl.h>
162f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#include <netlink/netfilter/netfilter.h>
172f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#include <netlink/netfilter/log_msg.h>
182f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
192f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy/** @cond SKIP */
202f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_MSG_ATTR_FAMILY		(1UL << 0)
212f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_MSG_ATTR_HWPROTO		(1UL << 1)
222f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_MSG_ATTR_HOOK		(1UL << 2)
232f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_MSG_ATTR_MARK		(1UL << 3)
242f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_MSG_ATTR_TIMESTAMP		(1UL << 4)
252f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_MSG_ATTR_INDEV		(1UL << 5)
262f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_MSG_ATTR_OUTDEV		(1UL << 6)
272f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_MSG_ATTR_PHYSINDEV		(1UL << 7)
282f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_MSG_ATTR_PHYSOUTDEV		(1UL << 8)
292f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_MSG_ATTR_HWADDR		(1UL << 9)
302f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_MSG_ATTR_PAYLOAD		(1UL << 10)
312f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_MSG_ATTR_PREFIX		(1UL << 11)
322f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_MSG_ATTR_UID		(1UL << 12)
332f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_MSG_ATTR_GID		(1UL << 13)
342f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_MSG_ATTR_SEQ		(1UL << 14)
352f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy#define LOG_MSG_ATTR_SEQ_GLOBAL		(1UL << 15)
362f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy/** @endcond */
372f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
382f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardystatic void log_msg_free_data(struct nl_object *c)
392f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
402f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	struct nfnl_log_msg *msg = (struct nfnl_log_msg *) c;
412f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
422f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg == NULL)
432f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		return;
442f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
452f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	free(msg->log_msg_payload);
462f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	free(msg->log_msg_prefix);
472f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
482f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
492f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardystatic int log_msg_clone(struct nl_object *_dst, struct nl_object *_src)
502f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
512f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	struct nfnl_log_msg *dst = (struct nfnl_log_msg *) _dst;
522f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	struct nfnl_log_msg *src = (struct nfnl_log_msg *) _src;
532f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	int err;
542f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
552f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (src->log_msg_payload) {
562f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		err = nfnl_log_msg_set_payload(dst, src->log_msg_payload,
572f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy					       src->log_msg_payload_len);
582f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		if (err < 0)
592f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy			goto errout;
602f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	}
612f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
622f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (src->log_msg_prefix) {
632f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		err = nfnl_log_msg_set_prefix(dst, src->log_msg_prefix);
642f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		if (err < 0)
652f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy			goto errout;
662f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	}
672f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
682f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return 0;
692f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyerrout:
702f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return err;
712f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
722f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
73d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Grafstatic void log_msg_dump(struct nl_object *a, struct nl_dump_params *p)
742f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
752f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	struct nfnl_log_msg *msg = (struct nfnl_log_msg *) a;
762f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	struct nl_cache *link_cache;
772f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	char buf[64];
782f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
792f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	link_cache = nl_cache_mngt_require("route/link");
802f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
81d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf	nl_new_line(p);
82d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf
832f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg->ce_mask & LOG_MSG_ATTR_PREFIX)
84d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf		nl_dump(p, "%s", msg->log_msg_prefix);
852f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
862f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg->ce_mask & LOG_MSG_ATTR_INDEV) {
872f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		if (link_cache)
88d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf			nl_dump(p, "IN=%s ",
892f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy				rtnl_link_i2name(link_cache,
902f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy						 msg->log_msg_indev,
912f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy						 buf, sizeof(buf)));
922f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		else
93d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf			nl_dump(p, "IN=%d ", msg->log_msg_indev);
942f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	}
952f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
962f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg->ce_mask & LOG_MSG_ATTR_PHYSINDEV) {
972f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		if (link_cache)
98d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf			nl_dump(p, "PHYSIN=%s ",
992f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy				rtnl_link_i2name(link_cache,
1002f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy						 msg->log_msg_physindev,
1012f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy						 buf, sizeof(buf)));
1022f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		else
103d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf			nl_dump(p, "IN=%d ", msg->log_msg_physindev);
1042f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	}
1052f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1062f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg->ce_mask & LOG_MSG_ATTR_OUTDEV) {
1072f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		if (link_cache)
108d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf			nl_dump(p, "OUT=%s ",
1092f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy				rtnl_link_i2name(link_cache,
1102f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy						 msg->log_msg_outdev,
1112f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy						 buf, sizeof(buf)));
1122f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		else
113d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf			nl_dump(p, "OUT=%d ", msg->log_msg_outdev);
1142f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	}
1152f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1162f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg->ce_mask & LOG_MSG_ATTR_PHYSOUTDEV) {
1172f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		if (link_cache)
118d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf			nl_dump(p, "PHYSOUT=%s ",
1192f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy				rtnl_link_i2name(link_cache,
1202f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy						 msg->log_msg_physoutdev,
1212f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy						 buf, sizeof(buf)));
1222f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		else
123d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf			nl_dump(p, "PHYSOUT=%d ", msg->log_msg_physoutdev);
1242f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	}
1252f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1262f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg->ce_mask & LOG_MSG_ATTR_HWADDR) {
1272f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		int i;
1282f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
129d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf		nl_dump(p, "MAC");
1302f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		for (i = 0; i < msg->log_msg_hwaddr_len; i++)
131d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf			nl_dump(p, "%c%02x", i?':':'=', msg->log_msg_hwaddr[i]);
132d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf		nl_dump(p, " ");
1332f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	}
1342f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1352f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	/* FIXME: parse the payload to get iptables LOG compatible format */
1362f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1372f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg->ce_mask & LOG_MSG_ATTR_FAMILY)
138d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf		nl_dump(p, "FAMILY=%s ",
1392f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy			nl_af2str(msg->log_msg_family, buf, sizeof(buf)));
1402f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1412f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg->ce_mask & LOG_MSG_ATTR_HWPROTO)
142d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf		nl_dump(p, "HWPROTO=%s ",
1432f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy			nl_ether_proto2str(ntohs(msg->log_msg_hwproto),
1442f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy					   buf, sizeof(buf)));
1452f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1462f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg->ce_mask & LOG_MSG_ATTR_HOOK)
147d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf		nl_dump(p, "HOOK=%s ",
1482f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy			nfnl_inet_hook2str(msg->log_msg_hook,
1492f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy					   buf, sizeof(buf)));
1502f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1512f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg->ce_mask & LOG_MSG_ATTR_MARK)
152d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf		nl_dump(p, "MARK=%u ", msg->log_msg_mark);
1532f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1542f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg->ce_mask & LOG_MSG_ATTR_PAYLOAD)
155d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf		nl_dump(p, "PAYLOADLEN=%d ", msg->log_msg_payload_len);
1562f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1572f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg->ce_mask & LOG_MSG_ATTR_UID)
158d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf		nl_dump(p, "UID=%u ", msg->log_msg_uid);
1592f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1602f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg->ce_mask & LOG_MSG_ATTR_GID)
161d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf		nl_dump(p, "GID=%u ", msg->log_msg_gid);
1622f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1632f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg->ce_mask & LOG_MSG_ATTR_SEQ)
164d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf		nl_dump(p, "SEQ=%d ", msg->log_msg_seq);
1652f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1662f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg->ce_mask & LOG_MSG_ATTR_SEQ_GLOBAL)
167d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf		nl_dump(p, "SEQGLOBAL=%d ", msg->log_msg_seq_global);
1682f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
169d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf	nl_dump(p, "\n");
1702f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
1712f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1722f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy/**
1732f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy * @name Allocation/Freeing
1742f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy * @{
1752f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy */
1762f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1772f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardystruct nfnl_log_msg *nfnl_log_msg_alloc(void)
1782f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
1792f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return (struct nfnl_log_msg *) nl_object_alloc(&log_msg_obj_ops);
1802f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
1812f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1822f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_msg_get(struct nfnl_log_msg *msg)
1832f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
1842f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	nl_object_get((struct nl_object *) msg);
1852f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
1862f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1872f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_msg_put(struct nfnl_log_msg *msg)
1882f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
1892f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	nl_object_put((struct nl_object *) msg);
1902f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
1912f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1922f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy/** @} */
1932f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1942f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy/**
1952f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy * @name Attributes
1962f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy * @{
1972f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy */
1982f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
1992f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_msg_set_family(struct nfnl_log_msg *msg, uint8_t family)
2002f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2012f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_family = family;
2022f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->ce_mask |= LOG_MSG_ATTR_FAMILY;
2032f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2042f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2052f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint8_t nfnl_log_msg_get_family(const struct nfnl_log_msg *msg)
2062f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2072f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (msg->ce_mask & LOG_MSG_ATTR_FAMILY)
2082f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		return msg->log_msg_family;
2092f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	else
2102f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		return AF_UNSPEC;
2112f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2122f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2132f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_msg_set_hwproto(struct nfnl_log_msg *msg, uint16_t hwproto)
2142f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2152f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_hwproto = hwproto;
2162f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->ce_mask |= LOG_MSG_ATTR_HWPROTO;
2172f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2182f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2192f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyint nfnl_log_msg_test_hwproto(const struct nfnl_log_msg *msg)
2202f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2212f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return !!(msg->ce_mask & LOG_MSG_ATTR_HWPROTO);
2222f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2232f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2242f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint16_t nfnl_log_msg_get_hwproto(const struct nfnl_log_msg *msg)
2252f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2262f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return msg->log_msg_hwproto;
2272f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2282f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2292f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_msg_set_hook(struct nfnl_log_msg *msg, uint8_t hook)
2302f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2312f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_hook = hook;
2322f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->ce_mask |= LOG_MSG_ATTR_HOOK;
2332f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2342f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2352f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyint nfnl_log_msg_test_hook(const struct nfnl_log_msg *msg)
2362f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2372f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return !!(msg->ce_mask & LOG_MSG_ATTR_HOOK);
2382f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2392f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2402f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint8_t nfnl_log_msg_get_hook(const struct nfnl_log_msg *msg)
2412f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2422f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return msg->log_msg_hook;
2432f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2442f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2452f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_msg_set_mark(struct nfnl_log_msg *msg, uint32_t mark)
2462f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2472f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_mark = mark;
2482f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->ce_mask |= LOG_MSG_ATTR_MARK;
2492f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2502f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2512f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyint nfnl_log_msg_test_mark(const struct nfnl_log_msg *msg)
2522f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2532f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return !!(msg->ce_mask & LOG_MSG_ATTR_MARK);
2542f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2552f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2562f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint32_t nfnl_log_msg_get_mark(const struct nfnl_log_msg *msg)
2572f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2582f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return msg->log_msg_mark;
2592f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2602f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2612f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_msg_set_timestamp(struct nfnl_log_msg *msg, struct timeval *tv)
2622f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2632f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_timestamp.tv_sec = tv->tv_sec;
2642f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_timestamp.tv_usec = tv->tv_usec;
2652f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->ce_mask |= LOG_MSG_ATTR_TIMESTAMP;
2662f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2672f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2682f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyconst struct timeval *nfnl_log_msg_get_timestamp(const struct nfnl_log_msg *msg)
2692f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2702f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (!(msg->ce_mask & LOG_MSG_ATTR_TIMESTAMP))
2712f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		return NULL;
2722f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return &msg->log_msg_timestamp;
2732f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2742f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2752f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_msg_set_indev(struct nfnl_log_msg *msg, uint32_t indev)
2762f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2772f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_indev = indev;
2782f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->ce_mask |= LOG_MSG_ATTR_INDEV;
2792f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2802f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2812f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint32_t nfnl_log_msg_get_indev(const struct nfnl_log_msg *msg)
2822f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2832f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return msg->log_msg_indev;
2842f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2852f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2862f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_msg_set_outdev(struct nfnl_log_msg *msg, uint32_t outdev)
2872f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2882f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_outdev = outdev;
2892f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->ce_mask |= LOG_MSG_ATTR_OUTDEV;
2902f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2912f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2922f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint32_t nfnl_log_msg_get_outdev(const struct nfnl_log_msg *msg)
2932f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2942f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return msg->log_msg_outdev;
2952f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
2962f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
2972f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_msg_set_physindev(struct nfnl_log_msg *msg, uint32_t physindev)
2982f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
2992f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_physindev = physindev;
3002f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->ce_mask |= LOG_MSG_ATTR_PHYSINDEV;
3012f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
3022f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3032f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint32_t nfnl_log_msg_get_physindev(const struct nfnl_log_msg *msg)
3042f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
3052f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return msg->log_msg_physindev;
3062f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
3072f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3082f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_msg_set_physoutdev(struct nfnl_log_msg *msg, uint32_t physoutdev)
3092f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
3102f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_physoutdev = physoutdev;
3112f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->ce_mask |= LOG_MSG_ATTR_PHYSOUTDEV;
3122f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
3132f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3142f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint32_t nfnl_log_msg_get_physoutdev(const struct nfnl_log_msg *msg)
3152f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
3162f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return msg->log_msg_physoutdev;
3172f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
3182f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3192f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_msg_set_hwaddr(struct nfnl_log_msg *msg, uint8_t *hwaddr, int len)
3202f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
3212f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (len > sizeof(msg->log_msg_hwaddr))
3222f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		len = sizeof(msg->log_msg_hwaddr);
3232f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_hwaddr_len = len;
3242f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	memcpy(msg->log_msg_hwaddr, hwaddr, len);
3252f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->ce_mask |= LOG_MSG_ATTR_HWADDR;
3262f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
3272f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3282f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyconst uint8_t *nfnl_log_msg_get_hwaddr(const struct nfnl_log_msg *msg, int *len)
3292f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
3302f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (!(msg->ce_mask & LOG_MSG_ATTR_HWADDR)) {
3312f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		*len = 0;
3322f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		return NULL;
3332f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	}
3342f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3352f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	*len = msg->log_msg_hwaddr_len;
3362f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return msg->log_msg_hwaddr;
3372f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
3382f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3392f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyint nfnl_log_msg_set_payload(struct nfnl_log_msg *msg, uint8_t *payload, int len)
3402f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
3412f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	free(msg->log_msg_payload);
3422f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_payload = malloc(len);
3432f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (!msg->log_msg_payload)
3448a3efffa5b3fde252675239914118664d36a2c24Thomas Graf		return -NLE_NOMEM;
3452f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3462f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	memcpy(msg->log_msg_payload, payload, len);
3472f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_payload_len = len;
3482f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->ce_mask |= LOG_MSG_ATTR_PAYLOAD;
3492f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return 0;
3502f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
3512f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3522f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyconst void *nfnl_log_msg_get_payload(const struct nfnl_log_msg *msg, int *len)
3532f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
3542f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (!(msg->ce_mask & LOG_MSG_ATTR_PAYLOAD)) {
3552f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		*len = 0;
3562f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy		return NULL;
3572f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	}
3582f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3592f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	*len = msg->log_msg_payload_len;
3602f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return msg->log_msg_payload;
3612f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
3622f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3632f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyint nfnl_log_msg_set_prefix(struct nfnl_log_msg *msg, void *prefix)
3642f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
3652f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	free(msg->log_msg_prefix);
3662f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_prefix = strdup(prefix);
3672f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	if (!msg->log_msg_prefix)
3688a3efffa5b3fde252675239914118664d36a2c24Thomas Graf		return -NLE_NOMEM;
3692f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3702f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->ce_mask |= LOG_MSG_ATTR_PREFIX;
3712f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return 0;
3722f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
3732f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3742f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyconst char *nfnl_log_msg_get_prefix(const struct nfnl_log_msg *msg)
3752f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
3762f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return msg->log_msg_prefix;
3772f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
3782f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3792f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_msg_set_uid(struct nfnl_log_msg *msg, uint32_t uid)
3802f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
3812f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_uid = uid;
3822f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->ce_mask |= LOG_MSG_ATTR_UID;
3832f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
3842f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3852f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyint nfnl_log_msg_test_uid(const struct nfnl_log_msg *msg)
3862f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
3872f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return !!(msg->ce_mask & LOG_MSG_ATTR_UID);
3882f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
3892f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3902f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint32_t nfnl_log_msg_get_uid(const struct nfnl_log_msg *msg)
3912f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
3922f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return msg->log_msg_uid;
3932f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
3942f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
3952f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_msg_set_gid(struct nfnl_log_msg *msg, uint32_t gid)
3962f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
3972f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_gid = gid;
3982f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->ce_mask |= LOG_MSG_ATTR_GID;
3992f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
4002f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
4012f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyint nfnl_log_msg_test_gid(const struct nfnl_log_msg *msg)
4022f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
4032f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return !!(msg->ce_mask & LOG_MSG_ATTR_GID);
4042f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
4052f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
4062f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint32_t nfnl_log_msg_get_gid(const struct nfnl_log_msg *msg)
4072f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
4082f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return msg->log_msg_gid;
4092f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
4102f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
4112f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
4122f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_msg_set_seq(struct nfnl_log_msg *msg, uint32_t seq)
4132f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
4142f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_seq = seq;
4152f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->ce_mask |= LOG_MSG_ATTR_SEQ;
4162f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
4172f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
4182f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyint nfnl_log_msg_test_seq(const struct nfnl_log_msg *msg)
4192f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
4202f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return !!(msg->ce_mask & LOG_MSG_ATTR_SEQ);
4212f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
4222f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
4232f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint32_t nfnl_log_msg_get_seq(const struct nfnl_log_msg *msg)
4242f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
4252f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return msg->log_msg_seq;
4262f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
4272f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
4282f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyvoid nfnl_log_msg_set_seq_global(struct nfnl_log_msg *msg, uint32_t seq_global)
4292f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
4302f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->log_msg_seq_global = seq_global;
4312f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	msg->ce_mask |= LOG_MSG_ATTR_SEQ_GLOBAL;
4322f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
4332f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
4342f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyint nfnl_log_msg_test_seq_global(const struct nfnl_log_msg *msg)
4352f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
4362f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return !!(msg->ce_mask & LOG_MSG_ATTR_SEQ_GLOBAL);
4372f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
4382f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
4392f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardyuint32_t nfnl_log_msg_get_seq_global(const struct nfnl_log_msg *msg)
4402f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy{
4412f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	return msg->log_msg_seq_global;
4422f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy}
4432f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
4442f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy/** @} */
4452f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
4462f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardystruct nl_object_ops log_msg_obj_ops = {
4472f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	.oo_name		= "netfilter/log_msg",
4482f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	.oo_size		= sizeof(struct nfnl_log_msg),
4492f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	.oo_free_data		= log_msg_free_data,
4502f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	.oo_clone		= log_msg_clone,
451d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf	.oo_dump = {
452d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf	    [NL_DUMP_LINE]	= log_msg_dump,
453d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf	    [NL_DUMP_DETAILS]	= log_msg_dump,
454d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf	    [NL_DUMP_STATS]	= log_msg_dump,
455d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf	},
4562f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy};
4572f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
4582f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy/** @} */
459