xref: /aosp_15_r20/hardware/interfaces/automotive/can/1.0/default/libnl++/protocols/route/attributes.cpp (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
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