1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "attributes.h" 18 19 #include "../structs.h" 20 #include "structs.h" 21 22 #include <linux/rtnetlink.h> 23 #include <net/if.h> 24 25 #include <linux/if_link.h> 26 #ifndef _UAPI_LINUX_IF_LINK_H 27 enum { 28 IFLA_INFO_SLAVE_KIND = IFLA_INFO_XSTATS + 1, 29 IFLA_INFO_SLAVE_DATA, 30 }; 31 enum { 32 IFLA_INET6_TOKEN = IFLA_INET6_ICMP6STATS + 1, 33 IFLA_INET6_ADDR_GEN_MODE, 34 IFLA_INET6_RA_MTU, 35 }; 36 enum { 37 IFLA_CARRIER = IFLA_NUM_RX_QUEUES + 1, 38 IFLA_PHYS_PORT_ID, 39 IFLA_CARRIER_CHANGES, 40 IFLA_PHYS_SWITCH_ID, 41 IFLA_LINK_NETNSID, 42 IFLA_PHYS_PORT_NAME, 43 IFLA_PROTO_DOWN, 44 IFLA_GSO_MAX_SEGS, 45 IFLA_GSO_MAX_SIZE, 46 IFLA_PAD, 47 IFLA_XDP, 48 IFLA_EVENT, 49 IFLA_NEW_NETNSID, 50 IFLA_TARGET_NETNSID, 51 IFLA_CARRIER_UP_COUNT, 52 IFLA_CARRIER_DOWN_COUNT, 53 IFLA_NEW_IFINDEX, 54 IFLA_MIN_MTU, 55 IFLA_MAX_MTU, 56 IFLA_PROP_LIST, 57 IFLA_ALT_IFNAME, 58 IFLA_PERM_ADDRESS, 59 IFLA_PROTO_DOWN_REASON, 60 IFLA_PARENT_DEV_NAME, 61 IFLA_PARENT_DEV_BUS_NAME, 62 IFLA_GRO_MAX_SIZE, 63 IFLA_TSO_MAX_SIZE, 64 IFLA_TSO_MAX_SEGS, 65 IFLA_ALLMULTI, 66 IFLA_DEVLINK_PORT, 67 IFLA_GSO_IPV4_MAX_SIZE, 68 IFLA_GRO_IPV4_MAX_SIZE, 69 IFLA_DPLL_PIN, 70 }; 71 #endif 72 73 namespace android::nl::protocols::route { 74 75 using DataType = AttributeDefinition::DataType; 76 using Flags = AttributeDefinition::Flags; 77 78 // clang-format off 79 AttributeMap gAttributes = { 80 {IFLA_ADDRESS, {"ADDRESS"}}, 81 {IFLA_BROADCAST, {"BROADCAST"}}, 82 {IFLA_IFNAME, {"IFNAME", DataType::StringNul}}, 83 {IFLA_MTU, {"MTU", DataType::Uint}}, 84 {IFLA_LINK, {"LINK", DataType::Uint}}, 85 {IFLA_QDISC, {"QDISC", DataType::Raw, AttributeMap{}, Flags::Verbose}}, // should be DataType::String, but looks like binary blob 86 {IFLA_STATS, {"STATS", DataType::Struct, statsToStream<rtnl_link_stats>}}, 87 {IFLA_COST, {"COST", DataType::Uint}}, 88 {IFLA_PRIORITY, {"PRIORITY"}}, 89 {IFLA_MASTER, {"MASTER", DataType::Uint}}, 90 {IFLA_WIRELESS, {"WIRELESS"}}, 91 {IFLA_PROTINFO, {"PROTINFO"}}, 92 {IFLA_TXQLEN, {"TXQLEN", DataType::Uint}}, 93 {IFLA_MAP, {"MAP", DataType::Struct, mapToStream}}, 94 {IFLA_WEIGHT, {"WEIGHT", DataType::Uint}}, 95 {IFLA_OPERSTATE, {"OPERSTATE", DataType::Uint}}, 96 {IFLA_LINKMODE, {"LINKMODE", DataType::Uint}}, 97 {IFLA_LINKINFO, {"LINKINFO", DataType::Nested, AttributeMap{ 98 {IFLA_INFO_KIND, {"INFO_KIND", DataType::String}}, 99 {IFLA_INFO_DATA, {"INFO_DATA", DataType::Nested}}, 100 {IFLA_INFO_XSTATS, {"INFO_XSTATS"}}, 101 {IFLA_INFO_SLAVE_KIND, {"INFO_SLAVE_KIND", DataType::String}}, 102 {IFLA_INFO_SLAVE_DATA, {"INFO_SLAVE_DATA"}}, 103 }}}, 104 {IFLA_NET_NS_PID, {"NET_NS_PID", DataType::Uint}}, 105 {IFLA_IFALIAS, {"IFALIAS", DataType::String}}, 106 {IFLA_NUM_VF, {"NUM_VF", DataType::Uint}}, 107 {IFLA_VFINFO_LIST, {"VFINFO_LIST"}}, 108 {IFLA_STATS64, {"STATS64", DataType::Struct, statsToStream<rtnl_link_stats64>}}, 109 {IFLA_VF_PORTS, {"VF_PORTS"}}, 110 {IFLA_PORT_SELF, {"PORT_SELF"}}, 111 {IFLA_AF_SPEC, {"AF_SPEC", DataType::Nested, AttributeMap{ 112 {AF_INET, {"AF_INET", DataType::Nested, AttributeMap{ 113 {IFLA_INET_CONF, {"INET_CONF", DataType::Struct, arrayToStream<int32_t>}}, 114 }}}, 115 {AF_INET6, {"AF_INET6", DataType::Nested, AttributeMap{ 116 {IFLA_INET6_FLAGS, {"INET6_FLAGS", DataType::Uint}}, 117 {IFLA_INET6_CONF, {"INET6_CONF", DataType::Struct, arrayToStream<int32_t>}}, 118 {IFLA_INET6_STATS, {"INET6_STATS", DataType::Struct, arrayToStream<uint64_t>}}, 119 {IFLA_INET6_MCAST, {"INET6_MCAST"}}, 120 {IFLA_INET6_CACHEINFO, {"INET6_CACHEINFO", DataType::Struct, ifla_cacheinfoToStream}}, 121 {IFLA_INET6_ICMP6STATS, {"INET6_ICMP6STATS", DataType::Struct, arrayToStream<uint64_t>}}, 122 {IFLA_INET6_TOKEN, {"INET6_TOKEN"}}, 123 {IFLA_INET6_ADDR_GEN_MODE, {"INET6_ADDR_GEN_MODE", DataType::Uint}}, 124 }}}, 125 }}}, 126 {IFLA_GROUP, {"GROUP", DataType::Uint}}, 127 {IFLA_NET_NS_FD, {"NET_NS_FD", DataType::Uint}}, 128 {IFLA_EXT_MASK, {"EXT_MASK", DataType::Uint}}, 129 {IFLA_PROMISCUITY, {"PROMISCUITY", DataType::Uint}}, 130 {IFLA_NUM_TX_QUEUES, {"NUM_TX_QUEUES", DataType::Uint}}, 131 {IFLA_NUM_RX_QUEUES, {"NUM_RX_QUEUES", DataType::Uint}}, 132 {IFLA_CARRIER, {"CARRIER", DataType::Uint}}, 133 {IFLA_PHYS_PORT_ID, {"PHYS_PORT_ID"}}, 134 {IFLA_CARRIER_CHANGES, {"CARRIER_CHANGES", DataType::Uint}}, 135 {IFLA_PHYS_SWITCH_ID, {"PHYS_SWITCH_ID"}}, 136 {IFLA_LINK_NETNSID, {"LINK_NETNSID"}}, // NLA_S32 137 {IFLA_PHYS_PORT_NAME, {"PHYS_PORT_NAME", DataType::String}}, 138 {IFLA_PROTO_DOWN, {"PROTO_DOWN", DataType::Uint}}, 139 {IFLA_GSO_MAX_SEGS, {"GSO_MAX_SEGS", DataType::Uint}}, 140 {IFLA_GSO_MAX_SIZE, {"GSO_MAX_SIZE", DataType::Uint}}, 141 {IFLA_PAD, {"PAD"}}, 142 {IFLA_XDP, {"XDP"}}, 143 {IFLA_EVENT, {"EVENT", DataType::Uint}}, 144 {IFLA_NEW_NETNSID, {"NEW_NETNSID"}}, // NLA_S32 145 {IFLA_TARGET_NETNSID, {"TARGET_NETNSID"}}, // NLA_S32 146 {IFLA_CARRIER_UP_COUNT, {"CARRIER_UP_COUNT", DataType::Uint}}, 147 {IFLA_CARRIER_DOWN_COUNT, {"CARRIER_DOWN_COUNT", DataType::Uint}}, 148 {IFLA_NEW_IFINDEX, {"NEW_IFINDEX"}}, // NLA_S32 149 {IFLA_MIN_MTU, {"MIN_MTU", DataType::Uint}}, 150 {IFLA_MAX_MTU, {"MAX_MTU", DataType::Uint}}, 151 {IFLA_PROP_LIST, {"PROP_LIST"}}, 152 {IFLA_ALT_IFNAME, {"ALT_IFNAME", DataType::String}}, 153 {IFLA_PERM_ADDRESS, {"PERM_ADDRESS"}}, 154 }; 155 // clang-format on 156 157 } // namespace android::nl::protocols::route 158