1 /* 2 * desc-rtnl.c - rtnetlink message descriptions 3 * 4 * Descriptions of rtnetlink messages and attributes for pretty print. 5 */ 6 7 #include <linux/rtnetlink.h> 8 9 #include "../internal.h" 10 #include "prettymsg.h" 11 12 static const struct pretty_nla_desc __link_desc[] = { 13 NLATTR_DESC_INVALID(IFLA_UNSPEC), 14 NLATTR_DESC_BINARY(IFLA_ADDRESS), 15 NLATTR_DESC_BINARY(IFLA_BROADCAST), 16 NLATTR_DESC_STRING(IFLA_IFNAME), 17 NLATTR_DESC_U32(IFLA_MTU), 18 NLATTR_DESC_U32(IFLA_LINK), 19 NLATTR_DESC_STRING(IFLA_QDISC), 20 NLATTR_DESC_BINARY(IFLA_STATS), 21 NLATTR_DESC_INVALID(IFLA_COST), 22 NLATTR_DESC_INVALID(IFLA_PRIORITY), 23 NLATTR_DESC_U32(IFLA_MASTER), 24 NLATTR_DESC_BINARY(IFLA_WIRELESS), 25 NLATTR_DESC_NESTED_NODESC(IFLA_PROTINFO), 26 NLATTR_DESC_U32(IFLA_TXQLEN), 27 NLATTR_DESC_BINARY(IFLA_MAP), 28 NLATTR_DESC_U32(IFLA_WEIGHT), 29 NLATTR_DESC_U8(IFLA_OPERSTATE), 30 NLATTR_DESC_U8(IFLA_LINKMODE), 31 NLATTR_DESC_NESTED_NODESC(IFLA_LINKINFO), 32 NLATTR_DESC_U32(IFLA_NET_NS_PID), 33 NLATTR_DESC_STRING(IFLA_IFALIAS), 34 NLATTR_DESC_U32(IFLA_NUM_VF), 35 NLATTR_DESC_NESTED_NODESC(IFLA_VFINFO_LIST), 36 NLATTR_DESC_BINARY(IFLA_STATS64), 37 NLATTR_DESC_NESTED_NODESC(IFLA_VF_PORTS), 38 NLATTR_DESC_NESTED_NODESC(IFLA_PORT_SELF), 39 NLATTR_DESC_NESTED_NODESC(IFLA_AF_SPEC), 40 NLATTR_DESC_U32(IFLA_GROUP), 41 NLATTR_DESC_U32(IFLA_NET_NS_FD), 42 NLATTR_DESC_U32(IFLA_EXT_MASK), 43 NLATTR_DESC_U32(IFLA_PROMISCUITY), 44 NLATTR_DESC_U32(IFLA_NUM_TX_QUEUES), 45 NLATTR_DESC_U32(IFLA_NUM_RX_QUEUES), 46 NLATTR_DESC_U8(IFLA_CARRIER), 47 NLATTR_DESC_BINARY(IFLA_PHYS_PORT_ID), 48 NLATTR_DESC_U32(IFLA_CARRIER_CHANGES), 49 NLATTR_DESC_BINARY(IFLA_PHYS_SWITCH_ID), 50 NLATTR_DESC_S32(IFLA_LINK_NETNSID), 51 NLATTR_DESC_STRING(IFLA_PHYS_PORT_NAME), 52 NLATTR_DESC_U8(IFLA_PROTO_DOWN), 53 NLATTR_DESC_U32(IFLA_GSO_MAX_SEGS), 54 NLATTR_DESC_U32(IFLA_GSO_MAX_SIZE), 55 NLATTR_DESC_BINARY(IFLA_PAD), 56 NLATTR_DESC_U32(IFLA_XDP), 57 NLATTR_DESC_U32(IFLA_EVENT), 58 NLATTR_DESC_S32(IFLA_NEW_NETNSID), 59 NLATTR_DESC_S32(IFLA_IF_NETNSID), 60 NLATTR_DESC_U32(IFLA_CARRIER_UP_COUNT), 61 NLATTR_DESC_U32(IFLA_CARRIER_DOWN_COUNT), 62 NLATTR_DESC_S32(IFLA_NEW_IFINDEX), 63 NLATTR_DESC_U32(IFLA_MIN_MTU), 64 NLATTR_DESC_U32(IFLA_MAX_MTU), 65 NLATTR_DESC_NESTED_NODESC(IFLA_PROP_LIST), 66 NLATTR_DESC_STRING(IFLA_ALT_IFNAME), 67 NLATTR_DESC_BINARY(IFLA_PERM_ADDRESS), 68 }; 69 70 const struct pretty_nlmsg_desc rtnl_msg_desc[] = { 71 NLMSG_DESC(RTM_NEWLINK, link), 72 NLMSG_DESC(RTM_DELLINK, link), 73 NLMSG_DESC(RTM_GETLINK, link), 74 NLMSG_DESC(RTM_SETLINK, link), 75 }; 76 77 const unsigned int rtnl_msg_n_desc = ARRAY_SIZE(rtnl_msg_desc); 78 79 #define RTNL_MSGHDR_LEN(_name, _struct) \ 80 [((RTM_ ## _name) - RTM_BASE) / 4] = sizeof(struct _struct) 81 #define RTNL_MSGHDR_NOLEN(_name) \ 82 [((RTM_ ## _name) - RTM_BASE) / 4] = USHRT_MAX 83 84 const unsigned short rtnl_msghdr_lengths[] = { 85 RTNL_MSGHDR_LEN(NEWLINK, ifinfomsg), 86 RTNL_MSGHDR_LEN(NEWADDR, ifaddrmsg), 87 RTNL_MSGHDR_LEN(NEWROUTE, rtmsg), 88 RTNL_MSGHDR_LEN(NEWNEIGH, ndmsg), 89 RTNL_MSGHDR_LEN(NEWRULE, rtmsg), 90 RTNL_MSGHDR_LEN(NEWQDISC, tcmsg), 91 RTNL_MSGHDR_LEN(NEWTCLASS, tcmsg), 92 RTNL_MSGHDR_LEN(NEWTFILTER, tcmsg), 93 RTNL_MSGHDR_LEN(NEWACTION, tcamsg), 94 }; 95 96 const unsigned int rtnl_msghdr_n_len = ARRAY_SIZE(rtnl_msghdr_lengths); 97