(root)/
strace-6.5/
src/
rtnl_dcb.c
       1  /*
       2   * Copyright (c) 2016 Fabien Siron <fabien.siron@epita.fr>
       3   * Copyright (c) 2017 JingPiao Chen <chenjingpiao@gmail.com>
       4   * Copyright (c) 2016-2021 The strace developers.
       5   * All rights reserved.
       6   *
       7   * SPDX-License-Identifier: LGPL-2.1-or-later
       8   */
       9  
      10  #include "defs.h"
      11  
      12  #include "netlink_route.h"
      13  #include "nlattr.h"
      14  
      15  #include <linux/dcbnl.h>
      16  #include "netlink.h"
      17  
      18  #include "xlat/dcb_commands.h"
      19  #include "xlat/rtnl_dcb_attrs.h"
      20  
      21  DECL_NETLINK_ROUTE_DECODER(decode_dcbmsg)
      22  {
      23  	struct dcbmsg dcb = { .dcb_family = family };
      24  	size_t offset = sizeof(dcb.dcb_family);
      25  	bool decode_nla = false;
      26  
      27  	tprint_struct_begin();
      28  	PRINT_FIELD_XVAL(dcb, dcb_family, addrfams, "AF_???");
      29  	tprint_struct_next();
      30  
      31  	if (len >= sizeof(dcb)) {
      32  		if (!umoven_or_printaddr(tcp, addr + offset,
      33  					 sizeof(dcb) - offset,
      34  					 (char *) &dcb + offset)) {
      35  			PRINT_FIELD_XVAL(dcb, cmd,
      36  					 dcb_commands, "DCB_CMD_???");
      37  			decode_nla = true;
      38  		}
      39  	} else
      40  		tprint_more_data_follows();
      41  	tprint_struct_end();
      42  
      43  	offset = NLMSG_ALIGN(sizeof(dcb));
      44  	if (decode_nla && len > offset) {
      45  		tprint_array_next();
      46  		decode_nlattr(tcp, addr + offset, len - offset,
      47  			      rtnl_dcb_attrs, "DCB_ATTR_???", NULL, 0, NULL);
      48  	}
      49  }