普通文本  |  79行  |  2.98 KB

//
// Copyright (C) 2013 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

#include "shill/net/control_netlink_attribute.h"

#include <linux/genetlink.h>

#include <utility>

#include <base/logging.h>

namespace shill {

const int ControlAttributeFamilyId::kName = CTRL_ATTR_FAMILY_ID;
const char ControlAttributeFamilyId::kNameString[] = "CTRL_ATTR_FAMILY_ID";

const int ControlAttributeFamilyName::kName = CTRL_ATTR_FAMILY_NAME;
const char ControlAttributeFamilyName::kNameString[] = "CTRL_ATTR_FAMILY_NAME";

const int ControlAttributeVersion::kName = CTRL_ATTR_VERSION;
const char ControlAttributeVersion::kNameString[] = "CTRL_ATTR_VERSION";

const int ControlAttributeHdrSize::kName = CTRL_ATTR_HDRSIZE;
const char ControlAttributeHdrSize::kNameString[] = "CTRL_ATTR_HDRSIZE";

const int ControlAttributeMaxAttr::kName = CTRL_ATTR_MAXATTR;
const char ControlAttributeMaxAttr::kNameString[] = "CTRL_ATTR_MAXATTR";

const int ControlAttributeAttrOps::kName = CTRL_ATTR_OPS;
const char ControlAttributeAttrOps::kNameString[] = "CTRL_ATTR_OPS";

ControlAttributeAttrOps::ControlAttributeAttrOps()
    : NetlinkNestedAttribute(kName, kNameString) {
  NestedData array(kTypeNested, "FIRST", true);
  array.deeper_nesting.insert(AttrDataPair(
      CTRL_ATTR_OP_UNSPEC, NestedData(kTypeU32, "CTRL_ATTR_OP_UNSPEC", false)));
  array.deeper_nesting.insert(AttrDataPair(
      CTRL_ATTR_OP_ID, NestedData(kTypeU32, "CTRL_ATTR_OP_ID", false)));
  array.deeper_nesting.insert(AttrDataPair(
      CTRL_ATTR_OP_UNSPEC, NestedData(kTypeU32, "CTRL_ATTR_OP_UNSPEC", false)));

  nested_template_.insert(AttrDataPair(kArrayAttrEnumVal, array));
}

const int ControlAttributeMcastGroups::kName = CTRL_ATTR_MCAST_GROUPS;
const char ControlAttributeMcastGroups::kNameString[] =
    "CTRL_ATTR_MCAST_GROUPS";

ControlAttributeMcastGroups::ControlAttributeMcastGroups()
    : NetlinkNestedAttribute(kName, kNameString) {
  NestedData array(kTypeNested, "FIRST", true);
  array.deeper_nesting.insert(
      AttrDataPair(CTRL_ATTR_MCAST_GRP_UNSPEC,
                   NestedData(kTypeU32, "CTRL_ATTR_MCAST_GRP_UNSPEC", false)));
  array.deeper_nesting.insert(
      AttrDataPair(CTRL_ATTR_MCAST_GRP_NAME,
                   NestedData(kTypeString, "CTRL_ATTR_MCAST_GRP_NAME", false)));
  array.deeper_nesting.insert(
      AttrDataPair(CTRL_ATTR_MCAST_GRP_ID,
                   NestedData(kTypeU32, "CTRL_ATTR_MCAST_GRP_ID", false)));

  nested_template_.insert(AttrDataPair(kArrayAttrEnumVal, array));
}

}  // namespace shill