| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
| 6 #include "net/base/address_tracker_linux.h" | 6 #include "net/base/address_tracker_linux.h" |
| 7 | 7 |
| 8 #include <linux/if.h> | 8 #include <linux/if.h> |
| 9 | 9 |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 | 106 |
| 107 base::hash_set<std::string> ignored_interfaces_; | 107 base::hash_set<std::string> ignored_interfaces_; |
| 108 scoped_ptr<AddressTrackerLinux> tracker_; | 108 scoped_ptr<AddressTrackerLinux> tracker_; |
| 109 AddressTrackerLinux::GetInterfaceNameFunction original_get_interface_name_; | 109 AddressTrackerLinux::GetInterfaceNameFunction original_get_interface_name_; |
| 110 }; | 110 }; |
| 111 | 111 |
| 112 namespace { | 112 namespace { |
| 113 | 113 |
| 114 class NetlinkMessage { | 114 class NetlinkMessage { |
| 115 public: | 115 public: |
| 116 explicit NetlinkMessage(uint16 type) : buffer_(NLMSG_HDRLEN) { | 116 explicit NetlinkMessage(uint16_t type) : buffer_(NLMSG_HDRLEN) { |
| 117 header()->nlmsg_type = type; | 117 header()->nlmsg_type = type; |
| 118 Align(); | 118 Align(); |
| 119 } | 119 } |
| 120 | 120 |
| 121 void AddPayload(const void* data, size_t length) { | 121 void AddPayload(const void* data, size_t length) { |
| 122 CHECK_EQ(static_cast<size_t>(NLMSG_HDRLEN), | 122 CHECK_EQ(static_cast<size_t>(NLMSG_HDRLEN), |
| 123 buffer_.size()) << "Payload must be added first"; | 123 buffer_.size()) << "Payload must be added first"; |
| 124 Append(data, length); | 124 Append(data, length); |
| 125 Align(); | 125 Align(); |
| 126 } | 126 } |
| 127 | 127 |
| 128 void AddAttribute(uint16 type, const void* data, size_t length) { | 128 void AddAttribute(uint16_t type, const void* data, size_t length) { |
| 129 struct nlattr attr; | 129 struct nlattr attr; |
| 130 attr.nla_len = NLA_HDRLEN + length; | 130 attr.nla_len = NLA_HDRLEN + length; |
| 131 attr.nla_type = type; | 131 attr.nla_type = type; |
| 132 Append(&attr, sizeof(attr)); | 132 Append(&attr, sizeof(attr)); |
| 133 Align(); | 133 Align(); |
| 134 Append(data, length); | 134 Append(data, length); |
| 135 Align(); | 135 Align(); |
| 136 } | 136 } |
| 137 | 137 |
| 138 void AppendTo(Buffer* output) const { | 138 void AppendTo(Buffer* output) const { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 156 | 156 |
| 157 struct nlmsghdr* header() { | 157 struct nlmsghdr* header() { |
| 158 return reinterpret_cast<struct nlmsghdr*>(&buffer_[0]); | 158 return reinterpret_cast<struct nlmsghdr*>(&buffer_[0]); |
| 159 } | 159 } |
| 160 | 160 |
| 161 Buffer buffer_; | 161 Buffer buffer_; |
| 162 }; | 162 }; |
| 163 | 163 |
| 164 #define INFINITY_LIFE_TIME 0xFFFFFFFF | 164 #define INFINITY_LIFE_TIME 0xFFFFFFFF |
| 165 | 165 |
| 166 void MakeAddrMessageWithCacheInfo(uint16 type, | 166 void MakeAddrMessageWithCacheInfo(uint16_t type, |
| 167 uint8 flags, | 167 uint8_t flags, |
| 168 uint8 family, | 168 uint8_t family, |
| 169 int index, | 169 int index, |
| 170 const IPAddressNumber& address, | 170 const IPAddressNumber& address, |
| 171 const IPAddressNumber& local, | 171 const IPAddressNumber& local, |
| 172 uint32 preferred_lifetime, | 172 uint32_t preferred_lifetime, |
| 173 Buffer* output) { | 173 Buffer* output) { |
| 174 NetlinkMessage nlmsg(type); | 174 NetlinkMessage nlmsg(type); |
| 175 struct ifaddrmsg msg = {}; | 175 struct ifaddrmsg msg = {}; |
| 176 msg.ifa_family = family; | 176 msg.ifa_family = family; |
| 177 msg.ifa_flags = flags; | 177 msg.ifa_flags = flags; |
| 178 msg.ifa_index = index; | 178 msg.ifa_index = index; |
| 179 nlmsg.AddPayload(&msg, sizeof(msg)); | 179 nlmsg.AddPayload(&msg, sizeof(msg)); |
| 180 if (address.size()) | 180 if (address.size()) |
| 181 nlmsg.AddAttribute(IFA_ADDRESS, &address[0], address.size()); | 181 nlmsg.AddAttribute(IFA_ADDRESS, &address[0], address.size()); |
| 182 if (local.size()) | 182 if (local.size()) |
| 183 nlmsg.AddAttribute(IFA_LOCAL, &local[0], local.size()); | 183 nlmsg.AddAttribute(IFA_LOCAL, &local[0], local.size()); |
| 184 struct ifa_cacheinfo cache_info = {}; | 184 struct ifa_cacheinfo cache_info = {}; |
| 185 cache_info.ifa_prefered = preferred_lifetime; | 185 cache_info.ifa_prefered = preferred_lifetime; |
| 186 cache_info.ifa_valid = INFINITY_LIFE_TIME; | 186 cache_info.ifa_valid = INFINITY_LIFE_TIME; |
| 187 nlmsg.AddAttribute(IFA_CACHEINFO, &cache_info, sizeof(cache_info)); | 187 nlmsg.AddAttribute(IFA_CACHEINFO, &cache_info, sizeof(cache_info)); |
| 188 nlmsg.AppendTo(output); | 188 nlmsg.AppendTo(output); |
| 189 } | 189 } |
| 190 | 190 |
| 191 void MakeAddrMessage(uint16 type, | 191 void MakeAddrMessage(uint16_t type, |
| 192 uint8 flags, | 192 uint8_t flags, |
| 193 uint8 family, | 193 uint8_t family, |
| 194 int index, | 194 int index, |
| 195 const IPAddressNumber& address, | 195 const IPAddressNumber& address, |
| 196 const IPAddressNumber& local, | 196 const IPAddressNumber& local, |
| 197 Buffer* output) { | 197 Buffer* output) { |
| 198 MakeAddrMessageWithCacheInfo(type, flags, family, index, address, local, | 198 MakeAddrMessageWithCacheInfo(type, flags, family, index, address, local, |
| 199 INFINITY_LIFE_TIME, output); | 199 INFINITY_LIFE_TIME, output); |
| 200 } | 200 } |
| 201 | 201 |
| 202 void MakeLinkMessage(uint16 type, uint32 flags, uint32 index, Buffer* output) { | 202 void MakeLinkMessage(uint16_t type, |
| 203 uint32_t flags, |
| 204 uint32_t index, |
| 205 Buffer* output) { |
| 203 NetlinkMessage nlmsg(type); | 206 NetlinkMessage nlmsg(type); |
| 204 struct ifinfomsg msg = {}; | 207 struct ifinfomsg msg = {}; |
| 205 msg.ifi_index = index; | 208 msg.ifi_index = index; |
| 206 msg.ifi_flags = flags; | 209 msg.ifi_flags = flags; |
| 207 nlmsg.AddPayload(&msg, sizeof(msg)); | 210 nlmsg.AddPayload(&msg, sizeof(msg)); |
| 208 output->clear(); | 211 output->clear(); |
| 209 nlmsg.AppendTo(output); | 212 nlmsg.AppendTo(output); |
| 210 } | 213 } |
| 211 | 214 |
| 212 const unsigned char kAddress0[] = { 127, 0, 0, 1 }; | 215 const unsigned char kAddress0[] = { 127, 0, 0, 1 }; |
| (...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 632 | 635 |
| 633 TEST_F(AddressTrackerLinuxTest, NonTrackingModeInit) { | 636 TEST_F(AddressTrackerLinuxTest, NonTrackingModeInit) { |
| 634 AddressTrackerLinux tracker; | 637 AddressTrackerLinux tracker; |
| 635 tracker.Init(); | 638 tracker.Init(); |
| 636 } | 639 } |
| 637 | 640 |
| 638 } // namespace | 641 } // namespace |
| 639 | 642 |
| 640 } // namespace internal | 643 } // namespace internal |
| 641 } // namespace net | 644 } // namespace net |
| OLD | NEW |