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