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 }