1e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy/* 2e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy * lib/netfilter/queue_msg_obj.c Netfilter Queue Message Object 3e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy * 4e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy * This library is free software; you can redistribute it and/or 5e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy * modify it under the terms of the GNU Lesser General Public 6e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy * License as published by the Free Software Foundation version 2.1 7e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy * of the License. 8e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy * 9e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy * Copyright (c) 2007, 2008 Patrick McHardy <kaber@trash.net> 10e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy */ 11e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 12054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart#include <netlink-private/netlink.h> 13e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#include <netlink/netfilter/nfnl.h> 14e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#include <netlink/netfilter/netfilter.h> 15e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#include <netlink/netfilter/queue_msg.h> 16e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#include <linux/netfilter.h> 17e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 18e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy/** @cond SKIP */ 19e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#define QUEUE_MSG_ATTR_GROUP (1UL << 0) 20e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#define QUEUE_MSG_ATTR_FAMILY (1UL << 1) 21e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#define QUEUE_MSG_ATTR_PACKETID (1UL << 2) 22e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#define QUEUE_MSG_ATTR_HWPROTO (1UL << 3) 23e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#define QUEUE_MSG_ATTR_HOOK (1UL << 4) 24e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#define QUEUE_MSG_ATTR_MARK (1UL << 5) 25e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#define QUEUE_MSG_ATTR_TIMESTAMP (1UL << 6) 26e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#define QUEUE_MSG_ATTR_INDEV (1UL << 7) 27e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#define QUEUE_MSG_ATTR_OUTDEV (1UL << 8) 28e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#define QUEUE_MSG_ATTR_PHYSINDEV (1UL << 9) 29e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#define QUEUE_MSG_ATTR_PHYSOUTDEV (1UL << 10) 30e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#define QUEUE_MSG_ATTR_HWADDR (1UL << 11) 31e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#define QUEUE_MSG_ATTR_PAYLOAD (1UL << 12) 32e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy#define QUEUE_MSG_ATTR_VERDICT (1UL << 13) 33e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy/** @endcond */ 34e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 35e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardystatic void nfnl_queue_msg_free_data(struct nl_object *c) 36e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 37e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy struct nfnl_queue_msg *msg = (struct nfnl_queue_msg *) c; 38e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 39e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (msg == NULL) 40e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return; 41e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 42e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy free(msg->queue_msg_payload); 43e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 44e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 45e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardystatic int nfnl_queue_msg_clone(struct nl_object *_dst, struct nl_object *_src) 46e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 47e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy struct nfnl_queue_msg *dst = (struct nfnl_queue_msg *) _dst; 48e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy struct nfnl_queue_msg *src = (struct nfnl_queue_msg *) _src; 49e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy int err; 50e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 51e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (src->queue_msg_payload) { 52e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy err = nfnl_queue_msg_set_payload(dst, src->queue_msg_payload, 53e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy src->queue_msg_payload_len); 54e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (err < 0) 55e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy goto errout; 56e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy } 57e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 58e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return 0; 59e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyerrout: 60e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return err; 61e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 62e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 63d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Grafstatic void nfnl_queue_msg_dump(struct nl_object *a, struct nl_dump_params *p) 64e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 65e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy struct nfnl_queue_msg *msg = (struct nfnl_queue_msg *) a; 66e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy struct nl_cache *link_cache; 67e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy char buf[64]; 68e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 69054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart link_cache = nl_cache_mngt_require_safe("route/link"); 70e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 71d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_new_line(p); 72d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf 73e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (msg->ce_mask & QUEUE_MSG_ATTR_GROUP) 74d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "GROUP=%u ", msg->queue_msg_group); 75e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 76e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (msg->ce_mask & QUEUE_MSG_ATTR_INDEV) { 77e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (link_cache) 78d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "IN=%s ", 79e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy rtnl_link_i2name(link_cache, 80e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_indev, 81e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy buf, sizeof(buf))); 82e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy else 83d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "IN=%d ", msg->queue_msg_indev); 84e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy } 85e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 86e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (msg->ce_mask & QUEUE_MSG_ATTR_PHYSINDEV) { 87e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (link_cache) 88d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "PHYSIN=%s ", 89e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy rtnl_link_i2name(link_cache, 90e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_physindev, 91e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy buf, sizeof(buf))); 92e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy else 93d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "IN=%d ", msg->queue_msg_physindev); 94e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy } 95e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 96e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (msg->ce_mask & QUEUE_MSG_ATTR_OUTDEV) { 97e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (link_cache) 98d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "OUT=%s ", 99e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy rtnl_link_i2name(link_cache, 100e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_outdev, 101e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy buf, sizeof(buf))); 102e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy else 103d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "OUT=%d ", msg->queue_msg_outdev); 104e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy } 105e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 106e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (msg->ce_mask & QUEUE_MSG_ATTR_PHYSOUTDEV) { 107e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (link_cache) 108d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "PHYSOUT=%s ", 109e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy rtnl_link_i2name(link_cache, 110e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_physoutdev, 111e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy buf, sizeof(buf))); 112e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy else 113d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "PHYSOUT=%d ", msg->queue_msg_physoutdev); 114e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy } 115e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 116e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (msg->ce_mask & QUEUE_MSG_ATTR_HWADDR) { 117e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy int i; 118e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 119d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "MAC"); 120e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy for (i = 0; i < msg->queue_msg_hwaddr_len; i++) 121d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "%c%02x", i?':':'=', 122e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_hwaddr[i]); 123d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, " "); 124e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy } 125e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 126e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (msg->ce_mask & QUEUE_MSG_ATTR_FAMILY) 127d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "FAMILY=%s ", 128e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy nl_af2str(msg->queue_msg_family, buf, sizeof(buf))); 129e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 130e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (msg->ce_mask & QUEUE_MSG_ATTR_HWPROTO) 131d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "HWPROTO=%s ", 132e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy nl_ether_proto2str(ntohs(msg->queue_msg_hwproto), 133e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy buf, sizeof(buf))); 134e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 135e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (msg->ce_mask & QUEUE_MSG_ATTR_HOOK) 136d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "HOOK=%s ", 137e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy nfnl_inet_hook2str(msg->queue_msg_hook, 138e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy buf, sizeof(buf))); 139e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 140e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (msg->ce_mask & QUEUE_MSG_ATTR_MARK) 141d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "MARK=%d ", msg->queue_msg_mark); 142e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 143e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (msg->ce_mask & QUEUE_MSG_ATTR_PAYLOAD) 144d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "PAYLOADLEN=%d ", msg->queue_msg_payload_len); 145e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 146e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (msg->ce_mask & QUEUE_MSG_ATTR_PACKETID) 147d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "PACKETID=%u ", msg->queue_msg_packetid); 148e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 149e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (msg->ce_mask & QUEUE_MSG_ATTR_VERDICT) 150d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "VERDICT=%s ", 151e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy nfnl_verdict2str(msg->queue_msg_verdict, 152e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy buf, sizeof(buf))); 153e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 154d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf nl_dump(p, "\n"); 155054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart 156054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart if (link_cache) 157054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart nl_cache_put(link_cache); 158e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 159e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 160e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy/** 161e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy * @name Allocation/Freeing 162e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy * @{ 163e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy */ 164e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 165e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardystruct nfnl_queue_msg *nfnl_queue_msg_alloc(void) 166e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 167e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return (struct nfnl_queue_msg *) nl_object_alloc(&queue_msg_obj_ops); 168e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 169e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 170e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyvoid nfnl_queue_msg_get(struct nfnl_queue_msg *msg) 171e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 172e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy nl_object_get((struct nl_object *) msg); 173e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 174e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 175e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyvoid nfnl_queue_msg_put(struct nfnl_queue_msg *msg) 176e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 177e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy nl_object_put((struct nl_object *) msg); 178e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 179e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 180e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy/** @} */ 181e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 182e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy/** 183e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy * @name Attributes 184e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy * @{ 185e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy */ 186e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 187e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyvoid nfnl_queue_msg_set_group(struct nfnl_queue_msg *msg, uint16_t group) 188e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 189e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_group = group; 190e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->ce_mask |= QUEUE_MSG_ATTR_GROUP; 191e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 192e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 193e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyint nfnl_queue_msg_test_group(const struct nfnl_queue_msg *msg) 194e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 195e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return !!(msg->ce_mask & QUEUE_MSG_ATTR_GROUP); 196e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 197e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 198e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyuint16_t nfnl_queue_msg_get_group(const struct nfnl_queue_msg *msg) 199e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 200e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return msg->queue_msg_group; 201e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 202e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 203cafdaa4e065a2ee658d7e361158100f4c7abe445Karl Hiramoto/** 204cafdaa4e065a2ee658d7e361158100f4c7abe445Karl Hiramoto* Set the protocol family 205cafdaa4e065a2ee658d7e361158100f4c7abe445Karl Hiramoto* @arg msg NF queue message 206cafdaa4e065a2ee658d7e361158100f4c7abe445Karl Hiramoto* @arg family AF_XXX address family example: AF_INET, AF_UNIX, etc 207cafdaa4e065a2ee658d7e361158100f4c7abe445Karl Hiramoto*/ 208e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyvoid nfnl_queue_msg_set_family(struct nfnl_queue_msg *msg, uint8_t family) 209e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 210e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_family = family; 211e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->ce_mask |= QUEUE_MSG_ATTR_FAMILY; 212e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 213e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 214e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyint nfnl_queue_msg_test_family(const struct nfnl_queue_msg *msg) 215e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 216e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return !!(msg->ce_mask & QUEUE_MSG_ATTR_FAMILY); 217e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 218e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 219e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyuint8_t nfnl_queue_msg_get_family(const struct nfnl_queue_msg *msg) 220e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 221e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (msg->ce_mask & QUEUE_MSG_ATTR_FAMILY) 222e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return msg->queue_msg_family; 223e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy else 224e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return AF_UNSPEC; 225e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 226e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 227e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyvoid nfnl_queue_msg_set_packetid(struct nfnl_queue_msg *msg, uint32_t packetid) 228e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 229e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_packetid = packetid; 230e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->ce_mask |= QUEUE_MSG_ATTR_PACKETID; 231e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 232e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 233e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyint nfnl_queue_msg_test_packetid(const struct nfnl_queue_msg *msg) 234e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 235e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return !!(msg->ce_mask & QUEUE_MSG_ATTR_PACKETID); 236e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 237e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 238ca0988a2a793bf06381ef1237178df6115b34c80Patrick McHardyuint32_t nfnl_queue_msg_get_packetid(const struct nfnl_queue_msg *msg) 239e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 240e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return msg->queue_msg_packetid; 241e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 242e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 243e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyvoid nfnl_queue_msg_set_hwproto(struct nfnl_queue_msg *msg, uint16_t hwproto) 244e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 245e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_hwproto = hwproto; 246e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->ce_mask |= QUEUE_MSG_ATTR_HWPROTO; 247e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 248e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 249e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyint nfnl_queue_msg_test_hwproto(const struct nfnl_queue_msg *msg) 250e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 251e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return !!(msg->ce_mask & QUEUE_MSG_ATTR_HWPROTO); 252e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 253e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 254e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyuint16_t nfnl_queue_msg_get_hwproto(const struct nfnl_queue_msg *msg) 255e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 256e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return msg->queue_msg_hwproto; 257e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 258e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 259e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyvoid nfnl_queue_msg_set_hook(struct nfnl_queue_msg *msg, uint8_t hook) 260e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 261e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_hook = hook; 262e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->ce_mask |= QUEUE_MSG_ATTR_HOOK; 263e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 264e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 265e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyint nfnl_queue_msg_test_hook(const struct nfnl_queue_msg *msg) 266e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 267e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return !!(msg->ce_mask & QUEUE_MSG_ATTR_HOOK); 268e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 269e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 270e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyuint8_t nfnl_queue_msg_get_hook(const struct nfnl_queue_msg *msg) 271e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 272e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return msg->queue_msg_hook; 273e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 274e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 275e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyvoid nfnl_queue_msg_set_mark(struct nfnl_queue_msg *msg, uint32_t mark) 276e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 277e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_mark = mark; 278e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->ce_mask |= QUEUE_MSG_ATTR_MARK; 279e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 280e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 281e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyint nfnl_queue_msg_test_mark(const struct nfnl_queue_msg *msg) 282e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 283e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return !!(msg->ce_mask & QUEUE_MSG_ATTR_MARK); 284e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 285e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 286e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyuint32_t nfnl_queue_msg_get_mark(const struct nfnl_queue_msg *msg) 287e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 288e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return msg->queue_msg_mark; 289e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 290e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 291e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyvoid nfnl_queue_msg_set_timestamp(struct nfnl_queue_msg *msg, 292e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy struct timeval *tv) 293e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 294e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_timestamp.tv_sec = tv->tv_sec; 295e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_timestamp.tv_usec = tv->tv_usec; 296e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->ce_mask |= QUEUE_MSG_ATTR_TIMESTAMP; 297e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 298e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 299e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyint nfnl_queue_msg_test_timestamp(const struct nfnl_queue_msg *msg) 300e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 301e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return !!(msg->ce_mask & QUEUE_MSG_ATTR_TIMESTAMP); 302e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 303e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 304e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyconst struct timeval *nfnl_queue_msg_get_timestamp(const struct nfnl_queue_msg *msg) 305e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 306e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (!(msg->ce_mask & QUEUE_MSG_ATTR_TIMESTAMP)) 307e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return NULL; 308e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return &msg->queue_msg_timestamp; 309e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 310e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 311e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyvoid nfnl_queue_msg_set_indev(struct nfnl_queue_msg *msg, uint32_t indev) 312e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 313e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_indev = indev; 314e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->ce_mask |= QUEUE_MSG_ATTR_INDEV; 315e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 316e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 317e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyint nfnl_queue_msg_test_indev(const struct nfnl_queue_msg *msg) 318e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 319e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return !!(msg->ce_mask & QUEUE_MSG_ATTR_INDEV); 320e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 321e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 322e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyuint32_t nfnl_queue_msg_get_indev(const struct nfnl_queue_msg *msg) 323e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 324e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return msg->queue_msg_indev; 325e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 326e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 327e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyvoid nfnl_queue_msg_set_outdev(struct nfnl_queue_msg *msg, uint32_t outdev) 328e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 329e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_outdev = outdev; 330e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->ce_mask |= QUEUE_MSG_ATTR_OUTDEV; 331e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 332e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 333e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyint nfnl_queue_msg_test_outdev(const struct nfnl_queue_msg *msg) 334e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 335e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return !!(msg->ce_mask & QUEUE_MSG_ATTR_OUTDEV); 336e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 337e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 338e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyuint32_t nfnl_queue_msg_get_outdev(const struct nfnl_queue_msg *msg) 339e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 340e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return msg->queue_msg_outdev; 341e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 342e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 343e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyvoid nfnl_queue_msg_set_physindev(struct nfnl_queue_msg *msg, 344e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy uint32_t physindev) 345e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 346e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_physindev = physindev; 347e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->ce_mask |= QUEUE_MSG_ATTR_PHYSINDEV; 348e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 349e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 350e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyint nfnl_queue_msg_test_physindev(const struct nfnl_queue_msg *msg) 351e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 352e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return !!(msg->ce_mask & QUEUE_MSG_ATTR_PHYSINDEV); 353e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 354e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 355e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyuint32_t nfnl_queue_msg_get_physindev(const struct nfnl_queue_msg *msg) 356e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 357e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return msg->queue_msg_physindev; 358e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 359e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 360e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyvoid nfnl_queue_msg_set_physoutdev(struct nfnl_queue_msg *msg, 361e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy uint32_t physoutdev) 362e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 363e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_physoutdev = physoutdev; 364e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->ce_mask |= QUEUE_MSG_ATTR_PHYSOUTDEV; 365e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 366e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 367e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyint nfnl_queue_msg_test_physoutdev(const struct nfnl_queue_msg *msg) 368e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 369e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return !!(msg->ce_mask & QUEUE_MSG_ATTR_PHYSOUTDEV); 370e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 371e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 372e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyuint32_t nfnl_queue_msg_get_physoutdev(const struct nfnl_queue_msg *msg) 373e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 374e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return msg->queue_msg_physoutdev; 375e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 376e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 377e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyvoid nfnl_queue_msg_set_hwaddr(struct nfnl_queue_msg *msg, uint8_t *hwaddr, 378e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy int len) 379e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 380e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (len > sizeof(msg->queue_msg_hwaddr)) 381e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy len = sizeof(msg->queue_msg_hwaddr); 382e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 383e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_hwaddr_len = len; 384e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy memcpy(msg->queue_msg_hwaddr, hwaddr, len); 385e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->ce_mask |= QUEUE_MSG_ATTR_HWADDR; 386e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 387e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 388e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyint nfnl_queue_msg_test_hwaddr(const struct nfnl_queue_msg *msg) 389e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 390e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return !!(msg->ce_mask & QUEUE_MSG_ATTR_HWADDR); 391e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 392e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 393e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyconst uint8_t *nfnl_queue_msg_get_hwaddr(const struct nfnl_queue_msg *msg, 394e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy int *len) 395e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 396e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (!(msg->ce_mask & QUEUE_MSG_ATTR_HWADDR)) { 397e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy *len = 0; 398e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return NULL; 399e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy } 400e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 401e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy *len = msg->queue_msg_hwaddr_len; 402e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return msg->queue_msg_hwaddr; 403e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 404e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 405e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyint nfnl_queue_msg_set_payload(struct nfnl_queue_msg *msg, uint8_t *payload, 406e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy int len) 407e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 408e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy free(msg->queue_msg_payload); 409e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_payload = malloc(len); 410e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (!msg->queue_msg_payload) 4118a3efffa5b3fde252675239914118664d36a2c24Thomas Graf return -NLE_NOMEM; 412e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 413e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy memcpy(msg->queue_msg_payload, payload, len); 414e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_payload_len = len; 415e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->ce_mask |= QUEUE_MSG_ATTR_PAYLOAD; 416e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return 0; 417e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 418e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 419e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyint nfnl_queue_msg_test_payload(const struct nfnl_queue_msg *msg) 420e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 421e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return !!(msg->ce_mask & QUEUE_MSG_ATTR_PAYLOAD); 422e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 423e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 424e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyconst void *nfnl_queue_msg_get_payload(const struct nfnl_queue_msg *msg, int *len) 425e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 426e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy if (!(msg->ce_mask & QUEUE_MSG_ATTR_PAYLOAD)) { 427e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy *len = 0; 428e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return NULL; 429e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy } 430e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 431e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy *len = msg->queue_msg_payload_len; 432e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return msg->queue_msg_payload; 433e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 434e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 435cafdaa4e065a2ee658d7e361158100f4c7abe445Karl Hiramoto/** 436cafdaa4e065a2ee658d7e361158100f4c7abe445Karl Hiramoto* Return the number of items matching a filter in the cache 437cafdaa4e065a2ee658d7e361158100f4c7abe445Karl Hiramoto* @arg msg queue msg 438cafdaa4e065a2ee658d7e361158100f4c7abe445Karl Hiramoto* @arg verdict NF_DROP, NF_ACCEPT, NF_REPEAT, etc 439cafdaa4e065a2ee658d7e361158100f4c7abe445Karl Hiramoto*/ 440e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyvoid nfnl_queue_msg_set_verdict(struct nfnl_queue_msg *msg, 441e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy unsigned int verdict) 442e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 443e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->queue_msg_verdict = verdict; 444e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy msg->ce_mask |= QUEUE_MSG_ATTR_VERDICT; 445e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 446e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 447e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyint nfnl_queue_msg_test_verdict(const struct nfnl_queue_msg *msg) 448e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 449e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return !!(msg->ce_mask & QUEUE_MSG_ATTR_VERDICT); 450e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 451e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 452e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardyunsigned int nfnl_queue_msg_get_verdict(const struct nfnl_queue_msg *msg) 453e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 454e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return msg->queue_msg_verdict; 455e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 456e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 457054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewartstatic const struct trans_tbl nfnl_queue_msg_attrs[] = { 458e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy __ADD(QUEUE_MSG_ATTR_GROUP, group) 459e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy __ADD(QUEUE_MSG_ATTR_FAMILY, family) 460e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy __ADD(QUEUE_MSG_ATTR_PACKETID, packetid) 461e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy __ADD(QUEUE_MSG_ATTR_HWPROTO, hwproto) 462e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy __ADD(QUEUE_MSG_ATTR_HOOK, hook) 463e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy __ADD(QUEUE_MSG_ATTR_MARK, mark) 464e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy __ADD(QUEUE_MSG_ATTR_TIMESTAMP, timestamp) 465e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy __ADD(QUEUE_MSG_ATTR_INDEV, indev) 466e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy __ADD(QUEUE_MSG_ATTR_OUTDEV, outdev) 467e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy __ADD(QUEUE_MSG_ATTR_PHYSINDEV, physindev) 468e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy __ADD(QUEUE_MSG_ATTR_PHYSOUTDEV, physoutdev) 469e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy __ADD(QUEUE_MSG_ATTR_HWADDR, hwaddr) 470e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy __ADD(QUEUE_MSG_ATTR_PAYLOAD, payload) 471e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy __ADD(QUEUE_MSG_ATTR_VERDICT, verdict) 472e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy}; 473e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 474e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardystatic char *nfnl_queue_msg_attrs2str(int attrs, char *buf, size_t len) 475e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy{ 476e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy return __flags2str(attrs, buf, len, nfnl_queue_msg_attrs, 477e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy ARRAY_SIZE(nfnl_queue_msg_attrs)); 478e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy} 479e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 480e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy/** @} */ 481e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 482e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardystruct nl_object_ops queue_msg_obj_ops = { 483e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy .oo_name = "netfilter/queuemsg", 484e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy .oo_size = sizeof(struct nfnl_queue_msg), 485e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy .oo_free_data = nfnl_queue_msg_free_data, 486e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy .oo_clone = nfnl_queue_msg_clone, 487d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf .oo_dump = { 488d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf [NL_DUMP_LINE] = nfnl_queue_msg_dump, 489d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf [NL_DUMP_DETAILS] = nfnl_queue_msg_dump, 490d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf [NL_DUMP_STATS] = nfnl_queue_msg_dump, 491d84430702496f617c01c5e2d27d0e82e02390bb7Thomas Graf }, 492e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy .oo_attrs2str = nfnl_queue_msg_attrs2str, 493e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy}; 494e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy 495e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy/** @} */ 496