wireshark/wsutil/netlink.h

65 lines
1.7 KiB
C

/* netlink.h
* netlink-related definitions shared between libwireshark and other parts
*
* Copyright 2018, Martin Kaiser
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef _WS_NETLINK_H
#define _WS_NETLINK_H
#if defined(HAVE_LIBNL)
/*
* Pull in the include files where the kernel's nla_for_each_nested is defined.
* This is to make sure that the kernel's definition will not overwrite our
* version if msg.h or attr.h are included again explicitly after this file.
*/
DIAG_OFF_PEDANTIC
#include <netlink/msg.h>
DIAG_ON_PEDANTIC
#include <netlink/attr.h>
/*
* And now for a steaming heap of suck.
*
* The nla_for_each_nested() macro defined by at least some versions of the
* Linux kernel's headers doesn't do the casting required when compiling
* with a C++ compiler or with -Wc++-compat, so we get warnings, and those
* warnings are fatal when we compile this file.
*
* So we replace it with our own version, which does the requisite cast.
*/
/**
* nla_for_each_nested - iterate over nested attributes
* @pos: loop counter, set to current attribute
* @nla: attribute containing the nested attributes
* @rem: initialized to len, holds bytes currently remaining in stream
*/
#undef nla_for_each_nested
#define nla_for_each_nested(pos, nla, rem) \
nla_for_each_attr(pos, (struct nlattr *)nla_data(nla), nla_len(nla), rem)
#endif /* HAVE_LIBNL */
#endif /* _WS_NETLINK_H */
/*
* Editor modelines - https://www.wireshark.org/tools/modelines.html
*
* Local variables:
* c-basic-offset: 4
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* vi: set shiftwidth=4 tabstop=8 expandtab:
* :indentSize=4:tabSize=8:noTabs=true:
*/