2017-09-03 04:13:27 +03:00
/*
* Copyright ( c ) 2017 JingPiao Chen < chenjingpiao @ gmail . com >
2018-06-14 14:00:00 +03:00
* Copyright ( c ) 2017 - 2018 The strace developers .
2017-09-03 04:13:27 +03:00
* All rights reserved .
*
2018-12-10 03:00:00 +03:00
* SPDX - License - Identifier : GPL - 2.0 - or - later
2017-09-03 04:13:27 +03:00
*/
# include "tests.h"
# include <stdio.h>
# include "test_nlattr.h"
# include <linux/if.h>
# include <linux/if_arp.h>
# ifdef HAVE_LINUX_IF_LINK_H
# include <linux / if_link.h>
# endif
# include <linux/rtnetlink.h>
2018-05-25 02:49:08 +03:00
# if !HAVE_DECL_IFLA_PORT_SELF
enum { IFLA_PORT_SELF = 25 } ;
2017-09-03 04:13:27 +03:00
# endif
# ifndef IFLA_PORT_VF
# define IFLA_PORT_VF 1
# endif
2018-05-25 02:49:08 +03:00
# define IFLA_ATTR IFLA_PORT_SELF
# include "nlattr_ifla.h"
2017-09-03 04:13:27 +03:00
int
main ( void )
{
skip_if_unavailable ( " /proc/self/fd/ " ) ;
const int fd = create_nl_socket ( NETLINK_ROUTE ) ;
2018-05-08 08:10:16 +03:00
void * nlh0 = midtail_alloc ( NLMSG_SPACE ( hdrlen ) , 2 * NLA_HDRLEN + 8 ) ;
2017-09-03 04:13:27 +03:00
static char pattern [ 4096 ] ;
fill_memory_ex ( pattern , sizeof ( pattern ) , ' a ' , ' z ' - ' a ' + 1 ) ;
const uint32_t num = 0xabacdbcd ;
TEST_NESTED_NLATTR_OBJECT ( fd , nlh0 , hdrlen ,
init_ifinfomsg , print_ifinfomsg ,
IFLA_PORT_VF , pattern , num ,
printf ( " %u " , num ) ) ;
# ifdef HAVE_STRUCT_IFLA_PORT_VSI
static const struct ifla_port_vsi vsi = {
. vsi_mgr_id = 0xab ,
. vsi_type_id = " abc " ,
. vsi_type_version = 0xef
} ;
TEST_NESTED_NLATTR_OBJECT ( fd , nlh0 , hdrlen ,
init_ifinfomsg , print_ifinfomsg ,
IFLA_PORT_VSI_TYPE , pattern , vsi ,
PRINT_FIELD_U ( " { " , vsi , vsi_mgr_id ) ;
printf ( " , vsi_type_id= \" \\ x61 \\ x62 \\ x63 \" " ) ;
PRINT_FIELD_U ( " , " , vsi , vsi_type_version ) ;
printf ( " } " ) ) ;
# endif
puts ( " +++ exited with 0 +++ " ) ;
return 0 ;
}