]> granicus.if.org Git - strace/commitdiff
tests: move common ifinfomsg boilerplate into a separate header
authorEugene Syromyatnikov <evgsyr@gmail.com>
Thu, 24 May 2018 23:49:08 +0000 (01:49 +0200)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 6 Jun 2018 15:10:37 +0000 (15:10 +0000)
* configure.ac (AC_CHECK_DECLS): Check for IFLA_PORT_SELF, IFLA_PROTINFO, and
IFLA_XDP in <linux/rtnetlink.h>.
* tests/nlattr_ifla.h: New file.
* tests/Makefile.am (EXTRA_DIST): Add it.
* tests/nlattr_ifla_brport.c [!HAVE_DECL_IFLA_PROTINFO] (IFLA_PROTINFO):
New declaration.
(hdrlen, init_ifinfomsg, print_ifinfomsg): Remove.
(IFLA_ATTR): Define to IFLA_PROTINFO.
Include nlattr_ifla.h.
* tests/nlattr_ifla_port.c [!HAVE_DECL_IFLA_PORT_SELF] (IFLA_PORT_SELF):
New declaration.
(hdrlen, init_ifinfomsg, print_ifinfomsg): Remove.
(IFLA_ATTR): Define to IFLA_PORT_SELF.
Include nlattr_ifla.h.
* tests/nlattr_ifla_xdp.c
* tests/nlattr_ifla_xdp.c [!HAVE_DECL_IFLA_XDP] (IFLA_XDP): New
declaration.
(hdrlen, init_ifinfomsg, print_ifinfomsg): Remove.
(IFLA_ATTR): Define to IFLA_XDP.
Include nlattr_ifla.h.

configure.ac
tests/Makefile.am
tests/nlattr_ifla.h [new file with mode: 0644]
tests/nlattr_ifla_brport.c
tests/nlattr_ifla_port.c
tests/nlattr_ifla_xdp.c

index f6868f2192045da16e519eae836434044ea427f0..cbf37eb327073dff80f33f38787a1baa4b8aedce 100644 (file)
@@ -516,6 +516,12 @@ AC_CHECK_MEMBERS(m4_normalize([
        struct rtnl_link_stats64.rx_nohandler
 ]),,, [#include <sys/socket.h>
 #include <linux/rtnetlink.h>])
+AC_CHECK_DECLS(m4_normalize([
+       IFLA_PORT_SELF,
+       IFLA_PROTINFO,
+       IFLA_XDP
+]),,, [#include <sys/socket.h>
+#include <linux/rtnetlink.h>])
 
 AC_CHECK_TYPES(m4_normalize([
        struct gnet_stats_basic,
index 3cae26c8b416a761f111e8c94bd99b39fa54c89c..a4ad4df0e430468f91daf6e8a0c049b8e591fecb 100644 (file)
@@ -387,6 +387,7 @@ EXTRA_DIST = \
        match.awk \
        net.expected \
        netlink_sock_diag-v.sh \
+       nlattr_ifla.h \
        pipe.expected \
        print_user_desc.c \
        process_vm_readv_writev.c \
diff --git a/tests/nlattr_ifla.h b/tests/nlattr_ifla.h
new file mode 100644 (file)
index 0000000..6989225
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * netlink attribute ifinfomsg common code.
+ *
+ * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
+ * Copyright (c) 2017-2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef STRACE_TESTS_NLATTR_IFLA_H
+#define STRACE_TESTS_NLATTR_IFLA_H
+
+#include "tests.h"
+
+#ifndef IFLA_ATTR
+# error "Please define IFLA_ATTR before including this file"
+#endif
+
+static const unsigned int hdrlen = sizeof(struct ifinfomsg);
+
+static void
+init_ifinfomsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
+{
+       SET_STRUCT(struct nlmsghdr, nlh,
+               .nlmsg_len = msg_len,
+               .nlmsg_type = RTM_GETLINK,
+               .nlmsg_flags = NLM_F_DUMP
+       );
+
+       struct ifinfomsg *const msg = NLMSG_DATA(nlh);
+       SET_STRUCT(struct ifinfomsg, msg,
+               .ifi_family = AF_UNIX,
+               .ifi_type = ARPHRD_LOOPBACK,
+               .ifi_index = ifindex_lo(),
+               .ifi_flags = IFF_UP,
+       );
+
+       struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
+       SET_STRUCT(struct nlattr, nla,
+               .nla_len = msg_len - NLMSG_SPACE(hdrlen),
+               .nla_type = IFLA_ATTR
+       );
+}
+
+static void
+print_ifinfomsg(const unsigned int msg_len)
+{
+       printf("{len=%u, type=RTM_GETLINK, flags=NLM_F_DUMP"
+              ", seq=0, pid=0}, {ifi_family=AF_UNIX"
+              ", ifi_type=ARPHRD_LOOPBACK"
+              ", ifi_index=" IFINDEX_LO_STR
+              ", ifi_flags=IFF_UP, ifi_change=0}"
+              ", {{nla_len=%u, nla_type=" STRINGIFY_VAL(IFLA_ATTR) "}",
+              msg_len, msg_len - NLMSG_SPACE(hdrlen));
+}
+
+#endif /* STRACE_TESTS_NLATTR_IFLA_H */
index dfc1b3d18b88e6eeaf1451bee54c11745fecba76..d25db01b640d3bf7824f7c6789f371c4c5a62b0a 100644 (file)
 #endif
 #include <linux/rtnetlink.h>
 
+#if !HAVE_DECL_IFLA_PROTINFO
+enum { IFLA_PROTINFO = 12 };
+#endif
+
 #define IFLA_BRPORT_PRIORITY 2
 #define IFLA_BRPORT_MESSAGE_AGE_TIMER 21
 
-const unsigned int hdrlen = sizeof(struct ifinfomsg);
-
-static void
-init_ifinfomsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
-{
-       SET_STRUCT(struct nlmsghdr, nlh,
-               .nlmsg_len = msg_len,
-               .nlmsg_type = RTM_GETLINK,
-               .nlmsg_flags = NLM_F_DUMP
-       );
-
-       struct ifinfomsg *const msg = NLMSG_DATA(nlh);
-       SET_STRUCT(struct ifinfomsg, msg,
-               .ifi_family = AF_UNIX,
-               .ifi_type = ARPHRD_LOOPBACK,
-               .ifi_index = ifindex_lo(),
-               .ifi_flags = IFF_UP,
-       );
-
-       struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
-       SET_STRUCT(struct nlattr, nla,
-               .nla_len = msg_len - NLMSG_SPACE(hdrlen),
-               .nla_type = IFLA_PROTINFO
-       );
-}
-
-static void
-print_ifinfomsg(const unsigned int msg_len)
-{
-       printf("{len=%u, type=RTM_GETLINK, flags=NLM_F_DUMP"
-              ", seq=0, pid=0}, {ifi_family=AF_UNIX"
-              ", ifi_type=ARPHRD_LOOPBACK"
-              ", ifi_index=" IFINDEX_LO_STR
-              ", ifi_flags=IFF_UP, ifi_change=0}"
-              ", {{nla_len=%u, nla_type=IFLA_PROTINFO}",
-              msg_len, msg_len - NLMSG_SPACE(hdrlen));
-}
+#define IFLA_ATTR IFLA_PROTINFO
+#include "nlattr_ifla.h"
 
 int
 main(void)
index 0691394e86582cdaec450e0e0e07c3018448e3bd..1c317591499a8aafb490a499979acddc062f0475 100644 (file)
 #endif
 #include <linux/rtnetlink.h>
 
-#ifndef IFLA_PORT_SELF
-# define IFLA_PORT_SELF 25
+#if !HAVE_DECL_IFLA_PORT_SELF
+enum { IFLA_PORT_SELF = 25 };
 #endif
 #ifndef IFLA_PORT_VF
 # define IFLA_PORT_VF 1
 #endif
 
-const unsigned int hdrlen = sizeof(struct ifinfomsg);
-
-static void
-init_ifinfomsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
-{
-       SET_STRUCT(struct nlmsghdr, nlh,
-               .nlmsg_len = msg_len,
-               .nlmsg_type = RTM_GETLINK,
-               .nlmsg_flags = NLM_F_DUMP
-       );
-
-       struct ifinfomsg *const msg = NLMSG_DATA(nlh);
-       SET_STRUCT(struct ifinfomsg, msg,
-               .ifi_family = AF_UNIX,
-               .ifi_type = ARPHRD_LOOPBACK,
-               .ifi_index = ifindex_lo(),
-               .ifi_flags = IFF_UP,
-       );
-
-       struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
-       SET_STRUCT(struct nlattr, nla,
-               .nla_len = msg_len - NLMSG_SPACE(hdrlen),
-               .nla_type = IFLA_PORT_SELF
-       );
-}
-
-static void
-print_ifinfomsg(const unsigned int msg_len)
-{
-       printf("{len=%u, type=RTM_GETLINK, flags=NLM_F_DUMP"
-              ", seq=0, pid=0}, {ifi_family=AF_UNIX"
-              ", ifi_type=ARPHRD_LOOPBACK"
-              ", ifi_index=" IFINDEX_LO_STR
-              ", ifi_flags=IFF_UP, ifi_change=0}"
-              ", {{nla_len=%u, nla_type=IFLA_PORT_SELF}",
-              msg_len, msg_len - NLMSG_SPACE(hdrlen));
-}
+#define IFLA_ATTR IFLA_PORT_SELF
+#include "nlattr_ifla.h"
 
 int
 main(void)
index cede99635fa22dbb21eabc41f24efff44976e1fe..38d38e871c0354f77291122fb112c85264895d3d 100644 (file)
 #endif
 #include <linux/rtnetlink.h>
 
-#ifndef IFLA_XDP
-# define IFLA_XDP 43
+#if !HAVE_DECL_IFLA_XDP
+enum { IFLA_XDP = 43 };
 #endif
 #ifndef IFLA_XDP_FD
 # define IFLA_XDP_FD 1
 #endif
 
-const unsigned int hdrlen = sizeof(struct ifinfomsg);
-
-static void
-init_ifinfomsg(struct nlmsghdr *const nlh, const unsigned int msg_len)
-{
-       SET_STRUCT(struct nlmsghdr, nlh,
-               .nlmsg_len = msg_len,
-               .nlmsg_type = RTM_GETLINK,
-               .nlmsg_flags = NLM_F_DUMP
-       );
-
-       struct ifinfomsg *const msg = NLMSG_DATA(nlh);
-       SET_STRUCT(struct ifinfomsg, msg,
-               .ifi_family = AF_UNIX,
-               .ifi_type = ARPHRD_LOOPBACK,
-               .ifi_index = ifindex_lo(),
-               .ifi_flags = IFF_UP,
-       );
-
-       struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg));
-       SET_STRUCT(struct nlattr, nla,
-               .nla_len = msg_len - NLMSG_SPACE(hdrlen),
-               .nla_type = IFLA_XDP
-       );
-}
-
-static void
-print_ifinfomsg(const unsigned int msg_len)
-{
-       printf("{len=%u, type=RTM_GETLINK, flags=NLM_F_DUMP"
-              ", seq=0, pid=0}, {ifi_family=AF_UNIX"
-              ", ifi_type=ARPHRD_LOOPBACK"
-              ", ifi_index=" IFINDEX_LO_STR
-              ", ifi_flags=IFF_UP, ifi_change=0}"
-              ", {{nla_len=%u, nla_type=IFLA_XDP}",
-              msg_len, msg_len - NLMSG_SPACE(hdrlen));
-}
+#define IFLA_ATTR IFLA_XDP
+#include "nlattr_ifla.h"
 
 int
 main(void)