1 //
2 // Copyright (C) 2013 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 "shill/net/control_netlink_attribute.h"
18
19 #include <linux/genetlink.h>
20
21 #include <utility>
22
23 #include <base/logging.h>
24
25 namespace shill {
26
27 const int ControlAttributeFamilyId::kName = CTRL_ATTR_FAMILY_ID;
28 const char ControlAttributeFamilyId::kNameString[] = "CTRL_ATTR_FAMILY_ID";
29
30 const int ControlAttributeFamilyName::kName = CTRL_ATTR_FAMILY_NAME;
31 const char ControlAttributeFamilyName::kNameString[] = "CTRL_ATTR_FAMILY_NAME";
32
33 const int ControlAttributeVersion::kName = CTRL_ATTR_VERSION;
34 const char ControlAttributeVersion::kNameString[] = "CTRL_ATTR_VERSION";
35
36 const int ControlAttributeHdrSize::kName = CTRL_ATTR_HDRSIZE;
37 const char ControlAttributeHdrSize::kNameString[] = "CTRL_ATTR_HDRSIZE";
38
39 const int ControlAttributeMaxAttr::kName = CTRL_ATTR_MAXATTR;
40 const char ControlAttributeMaxAttr::kNameString[] = "CTRL_ATTR_MAXATTR";
41
42 const int ControlAttributeAttrOps::kName = CTRL_ATTR_OPS;
43 const char ControlAttributeAttrOps::kNameString[] = "CTRL_ATTR_OPS";
44
ControlAttributeAttrOps()45 ControlAttributeAttrOps::ControlAttributeAttrOps()
46 : NetlinkNestedAttribute(kName, kNameString) {
47 NestedData array(kTypeNested, "FIRST", true);
48 array.deeper_nesting.insert(AttrDataPair(
49 CTRL_ATTR_OP_UNSPEC, NestedData(kTypeU32, "CTRL_ATTR_OP_UNSPEC", false)));
50 array.deeper_nesting.insert(AttrDataPair(
51 CTRL_ATTR_OP_ID, NestedData(kTypeU32, "CTRL_ATTR_OP_ID", false)));
52 array.deeper_nesting.insert(AttrDataPair(
53 CTRL_ATTR_OP_UNSPEC, NestedData(kTypeU32, "CTRL_ATTR_OP_UNSPEC", false)));
54
55 nested_template_.insert(AttrDataPair(kArrayAttrEnumVal, array));
56 }
57
58 const int ControlAttributeMcastGroups::kName = CTRL_ATTR_MCAST_GROUPS;
59 const char ControlAttributeMcastGroups::kNameString[] =
60 "CTRL_ATTR_MCAST_GROUPS";
61
ControlAttributeMcastGroups()62 ControlAttributeMcastGroups::ControlAttributeMcastGroups()
63 : NetlinkNestedAttribute(kName, kNameString) {
64 NestedData array(kTypeNested, "FIRST", true);
65 array.deeper_nesting.insert(
66 AttrDataPair(CTRL_ATTR_MCAST_GRP_UNSPEC,
67 NestedData(kTypeU32, "CTRL_ATTR_MCAST_GRP_UNSPEC", false)));
68 array.deeper_nesting.insert(
69 AttrDataPair(CTRL_ATTR_MCAST_GRP_NAME,
70 NestedData(kTypeString, "CTRL_ATTR_MCAST_GRP_NAME", false)));
71 array.deeper_nesting.insert(
72 AttrDataPair(CTRL_ATTR_MCAST_GRP_ID,
73 NestedData(kTypeU32, "CTRL_ATTR_MCAST_GRP_ID", false)));
74
75 nested_template_.insert(AttrDataPair(kArrayAttrEnumVal, array));
76 }
77
78 } // namespace shill
79