On Tue, Sep 05, 2017 at 09:16:31PM +0800, JingPiao Chen wrote: > * tests/test_nlattr.h (TEST_NESTED_NLATTR_ARRAY): New macro. > * tests/nlattr_tca_stab.c: New file. > * tests/gen_tests.in (nlattr_tca_stab): New entry. > * tests/pure_executables.list: Add nlattr_tca_stab. > * tests/.gitignore: Likewise. > --- > tests/.gitignore | 1 + > tests/gen_tests.in | 1 + > tests/nlattr_tca_stab.c | 124 > ++++++++++++++++++++++++++++++++++++++++++++ > tests/pure_executables.list | 1 + > tests/test_nlattr.h | 61 ++++++++++++++++++++++ > 5 files changed, 188 insertions(+) > create mode 100644 tests/nlattr_tca_stab.c > > diff --git a/tests/.gitignore b/tests/.gitignore > index c6bfc02..982a9fc 100644 > --- a/tests/.gitignore > +++ b/tests/.gitignore > @@ -241,6 +241,7 @@ nlattr_rtgenmsg > nlattr_rtmsg > nlattr_smc_diag_msg > nlattr_tc_stats > +nlattr_tca_stab > nlattr_tcamsg > nlattr_tcmsg > nlattr_unix_diag_msg > diff --git a/tests/gen_tests.in b/tests/gen_tests.in > index 117f0a1..a028078 100644 > --- a/tests/gen_tests.in > +++ b/tests/gen_tests.in > @@ -220,6 +220,7 @@ nlattr_rtgenmsg +netlink_sock_diag.test > nlattr_rtmsg +netlink_sock_diag.test > nlattr_smc_diag_msg +netlink_sock_diag.test > nlattr_tc_stats +netlink_sock_diag.test > +nlattr_tca_stab +netlink_sock_diag.test > nlattr_tcamsg +netlink_sock_diag.test > nlattr_tcmsg +netlink_sock_diag.test > nlattr_unix_diag_msg +netlink_sock_diag.test > diff --git a/tests/nlattr_tca_stab.c b/tests/nlattr_tca_stab.c > new file mode 100644 > index 0000000..e4524d3 > --- /dev/null > +++ b/tests/nlattr_tca_stab.c > @@ -0,0 +1,124 @@ > +/* > + * Copyright (c) 2017 JingPiao Chen <chenjingp...@gmail.com> > + * Copyright (c) 2017 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. > + */ > + > +#include "tests.h" > + > +#include <stdio.h> > +#include "test_nlattr.h" > +#include <linux/pkt_sched.h> > +#include <linux/rtnetlink.h> > + > +#ifndef TCA_STAB > +# define TCA_STAB 8 > +#endif > + > +const unsigned int hdrlen = sizeof(struct tcmsg); > + > +static void > +init_tcmsg(struct nlmsghdr *const nlh, const unsigned int msg_len) > +{ > + SET_STRUCT(struct nlmsghdr, nlh, > + .nlmsg_len = msg_len, > + .nlmsg_type = RTM_GETQDISC, > + .nlmsg_flags = NLM_F_DUMP > + ); > + > + struct tcmsg *const msg = NLMSG_DATA(nlh); > + SET_STRUCT(struct tcmsg, msg, > + .tcm_family = AF_UNIX, > + .tcm_ifindex = ifindex_lo() > + ); > + > + struct nlattr *const nla = NLMSG_ATTR(nlh, sizeof(*msg)); > + SET_STRUCT(struct nlattr, nla, > + .nla_len = msg_len - NLMSG_SPACE(hdrlen), > + .nla_type = TCA_STAB > + ); > +} > + > +static void > +print_tcmsg(const unsigned int msg_len) > +{ > + printf("{len=%u, type=RTM_GETQDISC, flags=NLM_F_DUMP" > + ", seq=0, pid=0}, {tcm_family=AF_UNIX" > + ", tcm_ifindex=" IFINDEX_LO_STR > + ", tcm_handle=0, tcm_parent=0, tcm_info=0}" > + ", {{nla_len=%u, nla_type=TCA_STAB}", > + msg_len, msg_len - NLMSG_SPACE(hdrlen)); > +} > + > +static void > +print_uint16(const uint16_t *p) > +{ > + printf("%u", *p); > +} > + > +int > +main(void) > +{ > + skip_if_unavailable("/proc/self/fd/"); > + > + const int fd = create_nl_socket(NETLINK_ROUTE); > + void *nlh0 = tail_alloc(NLMSG_SPACE(hdrlen)); > + > + static char pattern[4096]; > + fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1); > + > +#ifdef HAVE_STRUCT_TC_SIZESPEC > + static const struct tc_sizespec s = { > + .cell_log = 0xab, > + .size_log = 0xcd, > + .cell_align = 0xefab, > + .overhead = 0xcdadeefa, > + .linklayer = 0xefbaafeb, > + .mpu = 0xfebfaefb, > + .mtu = 0xacdbefab, > + .tsize = 0xbdeaabed > + }; > + TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen, > + init_tcmsg, print_tcmsg, > + TCA_STAB_BASE, pattern, s, > + PRINT_FIELD_U("{", s, cell_log); > + PRINT_FIELD_U(", ", s, size_log); > + PRINT_FIELD_D(", ", s, cell_align); > + PRINT_FIELD_D(", ", s, overhead); > + PRINT_FIELD_U(", ", s, linklayer); > + PRINT_FIELD_U(", ", s, mpu); > + PRINT_FIELD_U(", ", s, mtu); > + PRINT_FIELD_U(", ", s, tsize); > + printf("}")); > +#endif > + > + static const uint16_t data[2] = { 0xacbd, 0xefba }; > + TEST_NESTED_NLATTR_ARRAY(fd, nlh0, hdrlen, > + init_tcmsg, print_tcmsg, > + TCA_STAB_DATA, pattern, data, print_uint16);
TCA_STAB_DATA was introduced to kernel headers by commit v2.6.27-rc1~964^2~2. I added a definition if TCA_STAB_DATA to make the test compile on older systems. The whole series is now applied, thanks! -- ldv
signature.asc
Description: PGP signature
------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel