(root)/
strace-6.5/
tests/
nlattr_ifla_port.c
       1  /*
       2   * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
       3   * Copyright (c) 2017-2021 The strace developers.
       4   * All rights reserved.
       5   *
       6   * SPDX-License-Identifier: GPL-2.0-or-later
       7   */
       8  
       9  #include "tests.h"
      10  
      11  #include <stdio.h>
      12  #include "test_nlattr.h"
      13  #include <linux/if.h>
      14  #include <linux/if_arp.h>
      15  #include <linux/if_link.h>
      16  #include <linux/rtnetlink.h>
      17  
      18  #define IFLA_ATTR IFLA_PORT_SELF
      19  #include "nlattr_ifla.h"
      20  
      21  int
      22  main(void)
      23  {
      24  	skip_if_unavailable("/proc/self/fd/");
      25  
      26  	const int fd = create_nl_socket(NETLINK_ROUTE);
      27  	void *nlh0 = midtail_alloc(NLMSG_SPACE(hdrlen), 2 * NLA_HDRLEN + 8);
      28  
      29  	static char pattern[4096];
      30  	fill_memory_ex(pattern, sizeof(pattern), 'a', 'z' - 'a' + 1);
      31  
      32  	const uint32_t num = 0xabacdbcd;
      33  	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
      34  				  init_ifinfomsg, print_ifinfomsg,
      35  				  IFLA_PORT_VF, pattern, num,
      36  				  printf("%u", num));
      37  
      38  	static const struct ifla_port_vsi vsi = {
      39  		.vsi_mgr_id = 0xab,
      40  		.vsi_type_id = "abc",
      41  		.vsi_type_version = 0xef
      42  	};
      43  	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
      44  				  init_ifinfomsg, print_ifinfomsg,
      45  				  IFLA_PORT_VSI_TYPE, pattern, vsi,
      46  				  printf("{");
      47  				  PRINT_FIELD_U(vsi, vsi_mgr_id);
      48  				  printf(", vsi_type_id=\"\\x61\\x62\\x63\"");
      49  				  printf(", ");
      50  				  PRINT_FIELD_U(vsi, vsi_type_version);
      51  				  printf("}"));
      52  
      53  	static const struct ifla_port_vsi vsi2 = {
      54  		.vsi_mgr_id = 0xab,
      55  		.vsi_type_id = { 10, 0, 255 },
      56  		.vsi_type_version = 0xef,
      57  		.pad = { 0, 1, 2 },
      58  	};
      59  	TEST_NESTED_NLATTR_OBJECT(fd, nlh0, hdrlen,
      60  				  init_ifinfomsg, print_ifinfomsg,
      61  				  IFLA_PORT_VSI_TYPE, pattern, vsi2,
      62  				  printf("{");
      63  				  PRINT_FIELD_U(vsi2, vsi_mgr_id);
      64  				  printf(", vsi_type_id=\"\\x0a\\x00\\xff\"");
      65  				  printf(", ");
      66  				  PRINT_FIELD_U(vsi2, vsi_type_version);
      67  				  printf(", pad=\"\\x00\\x01\\x02\"");
      68  				  printf("}"));
      69  
      70  	puts("+++ exited with 0 +++");
      71  	return 0;
      72  }