summaryrefslogtreecommitdiff
path: root/common/libs/net/netlink_request.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/libs/net/netlink_request.cpp')
-rw-r--r--common/libs/net/netlink_request.cpp129
1 files changed, 0 insertions, 129 deletions
diff --git a/common/libs/net/netlink_request.cpp b/common/libs/net/netlink_request.cpp
deleted file mode 100644
index 28690a41..00000000
--- a/common/libs/net/netlink_request.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2017 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 "common/libs/net/netlink_request.h"
-
-#include <linux/netlink.h>
-#include <linux/rtnetlink.h>
-#include <net/if.h>
-#include <string.h>
-
-#include <string>
-#include <vector>
-
-#include "common/libs/glog/logging.h"
-
-namespace cvd {
-namespace {
-uint32_t kRequestSequenceNumber = 0;
-} // namespace
-
-uint32_t NetlinkRequest::SeqNo() const {
- return header_->nlmsg_seq;
-}
-
-void* NetlinkRequest::AppendRaw(const void* data, size_t length) {
- void* out = request_.end();
-
- request_.Append(data, length);
- int pad = RTA_ALIGN(length) - length;
- if (pad > 0) {
- request_.Resize(request_.size() + pad);
- }
-
- return out;
-}
-
-void* NetlinkRequest::ReserveRaw(size_t length) {
- void* out = request_.end();
- request_.Resize(request_.size() + RTA_ALIGN(length));
- return out;
-}
-
-nlattr* NetlinkRequest::AppendTag(
- uint16_t type, const void* data, uint16_t data_length) {
- nlattr* attr = Reserve<nlattr>();
- attr->nla_type = type;
- attr->nla_len = RTA_LENGTH(data_length);
- AppendRaw(data, data_length);
- return attr;
-}
-
-NetlinkRequest::NetlinkRequest(int32_t command, int32_t flags)
- : request_(512),
- header_(Reserve<nlmsghdr>()) {
- flags |= NLM_F_ACK | NLM_F_REQUEST;
- header_->nlmsg_flags = flags;
- header_->nlmsg_type = command;
- header_->nlmsg_pid = getpid();
- header_->nlmsg_seq = kRequestSequenceNumber++;
-}
-
-NetlinkRequest::NetlinkRequest(NetlinkRequest&& other) {
- using std::swap;
- swap(lists_, other.lists_);
- swap(header_, other.header_);
- request_.Swap(other.request_);
-}
-
-void NetlinkRequest::AddString(uint16_t type, const std::string& value) {
- AppendTag(type, value.c_str(), value.length() + 1);
-}
-
-void NetlinkRequest::AddIfInfo(int32_t if_index, bool operational) {
- ifinfomsg* if_info = Reserve<ifinfomsg>();
- if_info->ifi_family = AF_UNSPEC;
- if_info->ifi_index = if_index;
- if_info->ifi_flags = operational ? IFF_UP : 0;
- if_info->ifi_change = IFF_UP;
-}
-
-void NetlinkRequest::AddAddrInfo(int32_t if_index, int prefix_len) {
- ifaddrmsg* ad_info = Reserve<ifaddrmsg>();
- ad_info->ifa_family = AF_INET;
- ad_info->ifa_prefixlen = prefix_len;
- ad_info->ifa_flags = IFA_F_PERMANENT | IFA_F_SECONDARY;
- ad_info->ifa_scope = 0;
- ad_info->ifa_index = if_index;
-}
-
-void NetlinkRequest::PushList(uint16_t type) {
- int length = request_.size();
- nlattr* list = AppendTag(type, NULL, 0);
- lists_.push_back(std::make_pair(list, length));
-}
-
-void NetlinkRequest::PopList() {
- if (lists_.empty()) {
- LOG(ERROR) << "List pop with no lists left on stack.";
- return;
- }
-
- std::pair<nlattr*, int> list = lists_.back();
- lists_.pop_back();
- list.first->nla_len = request_.size() - list.second;
-}
-
-void* NetlinkRequest::RequestData() const {
- // Update request length before reporting raw data.
- header_->nlmsg_len = request_.size();
- return header_;
-}
-
-size_t NetlinkRequest::RequestLength() const {
- return request_.size();
-}
-
-} // namespace cvd