blob: 20a3e8213a3ca8388f0cc2475b04f7c277f81b4e [file] [log] [blame]
Paul Stewart188a84a2012-01-20 16:28:15 -08001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Paul Stewart1d18e8c2011-07-15 11:00:31 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <gtest/gtest.h>
6
7#include <arpa/inet.h>
8
9#include "shill/byte_string.h"
10#include "shill/ip_address.h"
11
Paul Stewart188a84a2012-01-20 16:28:15 -080012using std::string;
Paul Stewart1d18e8c2011-07-15 11:00:31 -070013using testing::Test;
14
15namespace shill {
16
17namespace {
18const char kV4String1[] = "192.168.10.1";
19const unsigned char kV4Address1[] = { 192, 168, 10, 1 };
20const char kV4String2[] = "192.168.10";
21const unsigned char kV4Address2[] = { 192, 168, 10 };
22const char kV6String1[] = "fe80::1aa9:5ff:7ebf:14c5";
23const unsigned char kV6Address1[] = { 0xfe, 0x80, 0x00, 0x00,
24 0x00, 0x00, 0x00, 0x00,
25 0x1a, 0xa9, 0x05, 0xff,
26 0x7e, 0xbf, 0x14, 0xc5 };
27const char kV6String2[] = "1980:0:1000:1b02:1aa9:5ff:7ebf";
28const unsigned char kV6Address2[] = { 0x19, 0x80, 0x00, 0x00,
29 0x10, 0x00, 0x1b, 0x02,
30 0x1a, 0xa9, 0x05, 0xff,
31 0x7e, 0xbf };
32} // namespace {}
33
34class IPAddressTest : public Test {
35 protected:
36 void TestAddress(IPAddress::Family family,
Paul Stewart188a84a2012-01-20 16:28:15 -080037 const string &good_string,
Paul Stewart1d18e8c2011-07-15 11:00:31 -070038 const ByteString &good_bytes,
Paul Stewart188a84a2012-01-20 16:28:15 -080039 const string &bad_string,
Paul Stewart1d18e8c2011-07-15 11:00:31 -070040 const ByteString &bad_bytes) {
41 IPAddress good_addr(family);
42
43 EXPECT_TRUE(good_addr.SetAddressFromString(good_string));
44 EXPECT_EQ(IPAddress::GetAddressLength(family), good_addr.GetLength());
45 EXPECT_EQ(family, good_addr.family());
46 EXPECT_FALSE(good_addr.IsDefault());
47 EXPECT_EQ(0, memcmp(good_addr.GetConstData(), good_bytes.GetConstData(),
48 good_bytes.GetLength()));
49 EXPECT_TRUE(good_addr.address().Equals(good_bytes));
Paul Stewart188a84a2012-01-20 16:28:15 -080050 string address_string;
mukesh agrawal2c15d2c2012-02-21 16:09:21 -080051 EXPECT_TRUE(good_addr.IntoString(&address_string));
Paul Stewart188a84a2012-01-20 16:28:15 -080052 EXPECT_EQ(good_string, address_string);
Paul Stewart1d18e8c2011-07-15 11:00:31 -070053
54 IPAddress good_addr_from_bytes(family, good_bytes);
55 EXPECT_TRUE(good_addr.Equals(good_addr_from_bytes));
56
57 IPAddress bad_addr(family);
58 EXPECT_FALSE(bad_addr.SetAddressFromString(bad_string));
59 EXPECT_FALSE(good_addr.Equals(bad_addr));
60
61 EXPECT_FALSE(bad_addr.IsValid());
62
63 IPAddress bad_addr_from_bytes(family, bad_bytes);
64 EXPECT_EQ(family, bad_addr_from_bytes.family());
65 EXPECT_FALSE(bad_addr_from_bytes.IsValid());
66
67 EXPECT_FALSE(bad_addr.Equals(bad_addr_from_bytes));
mukesh agrawal2c15d2c2012-02-21 16:09:21 -080068 EXPECT_FALSE(bad_addr.IntoString(&address_string));
Paul Stewart1d18e8c2011-07-15 11:00:31 -070069 }
70};
71
72TEST_F(IPAddressTest, Statics) {
Paul Stewart7355ce12011-09-02 10:47:01 -070073 EXPECT_EQ(4, IPAddress::GetAddressLength(IPAddress::kFamilyIPv4));
74 EXPECT_EQ(16, IPAddress::GetAddressLength(IPAddress::kFamilyIPv6));
Paul Stewart1d18e8c2011-07-15 11:00:31 -070075
Darin Petkov14c29ec2012-03-02 11:34:19 +010076 EXPECT_EQ(0, IPAddress::GetPrefixLengthFromMask(IPAddress::kFamilyIPv4,
77 "0.0.0.0"));
78 EXPECT_EQ(20, IPAddress::GetPrefixLengthFromMask(IPAddress::kFamilyIPv4,
79 "255.255.240.0"));
80 EXPECT_EQ(32, IPAddress::GetPrefixLengthFromMask(IPAddress::kFamilyIPv4,
81 "255.255.255.255"));
82 EXPECT_EQ(32, IPAddress::GetPrefixLengthFromMask(IPAddress::kFamilyIPv4,
83 ""));
84 EXPECT_EQ(32, IPAddress::GetPrefixLengthFromMask(IPAddress::kFamilyIPv4,
85 "foo"));
86
Paul Stewart7355ce12011-09-02 10:47:01 -070087 IPAddress addr4(IPAddress::kFamilyIPv4);
Paul Stewart1d18e8c2011-07-15 11:00:31 -070088 addr4.SetAddressToDefault();
89
90 EXPECT_EQ(4, addr4.GetLength());
Paul Stewart7355ce12011-09-02 10:47:01 -070091 EXPECT_EQ(IPAddress::kFamilyIPv4, addr4.family());
Paul Stewart1d18e8c2011-07-15 11:00:31 -070092 EXPECT_TRUE(addr4.IsDefault());
93 EXPECT_TRUE(addr4.address().IsZero());
94 EXPECT_TRUE(addr4.address().Equals(ByteString(4)));
95
96
Paul Stewart7355ce12011-09-02 10:47:01 -070097 IPAddress addr6(IPAddress::kFamilyIPv6);
Paul Stewart1d18e8c2011-07-15 11:00:31 -070098 addr6.SetAddressToDefault();
99
100 EXPECT_EQ(16, addr6.GetLength());
Paul Stewart7355ce12011-09-02 10:47:01 -0700101 EXPECT_EQ(addr6.family(), IPAddress::kFamilyIPv6);
Paul Stewart1d18e8c2011-07-15 11:00:31 -0700102 EXPECT_TRUE(addr6.IsDefault());
103 EXPECT_TRUE(addr6.address().IsZero());
104 EXPECT_TRUE(addr6.address().Equals(ByteString(16)));
105
106 EXPECT_FALSE(addr4.Equals(addr6));
107}
108
109TEST_F(IPAddressTest, IPv4) {
Paul Stewart7355ce12011-09-02 10:47:01 -0700110 TestAddress(IPAddress::kFamilyIPv4,
Paul Stewart1d18e8c2011-07-15 11:00:31 -0700111 kV4String1, ByteString(kV4Address1, sizeof(kV4Address1)),
112 kV4String2, ByteString(kV4Address2, sizeof(kV4Address2)));
113}
114
115
116TEST_F(IPAddressTest, IPv6) {
Paul Stewart7355ce12011-09-02 10:47:01 -0700117 TestAddress(IPAddress::kFamilyIPv6,
Paul Stewart1d18e8c2011-07-15 11:00:31 -0700118 kV6String1, ByteString(kV6Address1, sizeof(kV6Address1)),
119 kV6String2, ByteString(kV6Address2, sizeof(kV6Address2)));
120}
121
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700122TEST_F(IPAddressTest, SetAddressAndPrefixFromString) {
123 IPAddress address(IPAddress::kFamilyIPv4);
124 const string kString1(kV4String1);
125 const string kString2(kV4String2);
126 EXPECT_FALSE(address.SetAddressAndPrefixFromString(""));
127 EXPECT_FALSE(address.SetAddressAndPrefixFromString(kString1));
128 EXPECT_FALSE(address.SetAddressAndPrefixFromString(kString1 + "/"));
129 EXPECT_FALSE(address.SetAddressAndPrefixFromString(kString1 + "/10x"));
130 EXPECT_FALSE(address.SetAddressAndPrefixFromString(kString2 + "/10"));
131 EXPECT_TRUE(address.SetAddressAndPrefixFromString(kString1 + "/10"));
132 EXPECT_EQ(10, address.prefix());
133 ByteString kAddress1(kV4Address1, sizeof(kV4Address1));
134 EXPECT_TRUE(kAddress1.Equals(address.address()));
135}
136
137struct PrefixMapping {
138 PrefixMapping() : family(IPAddress::kFamilyUnknown), prefix(0) {}
139 PrefixMapping(IPAddress::Family family_in,
140 size_t prefix_in,
141 const string &expected_address_in)
142 : family(family_in),
143 prefix(prefix_in),
144 expected_address(expected_address_in) {}
145 IPAddress::Family family;
146 size_t prefix;
147 string expected_address;
148};
149
150class IPAddressPrefixMappingTest
151 : public testing::TestWithParam<PrefixMapping> {};
152
153TEST_P(IPAddressPrefixMappingTest, TestPrefixMapping) {
154 IPAddress address = IPAddress::GetAddressMaskFromPrefix(GetParam().family,
155 GetParam().prefix);
156 IPAddress expected_address(GetParam().family);
157 EXPECT_TRUE(expected_address.SetAddressFromString(
158 GetParam().expected_address));
159 EXPECT_TRUE(expected_address.Equals(address));
160}
161
162INSTANTIATE_TEST_CASE_P(
163 IPAddressPrefixMappingTestRun,
164 IPAddressPrefixMappingTest,
165 ::testing::Values(
166 PrefixMapping(IPAddress::kFamilyIPv4, 0, "0.0.0.0"),
167 PrefixMapping(IPAddress::kFamilyIPv4, 1, "128.0.0.0"),
168 PrefixMapping(IPAddress::kFamilyIPv4, 4, "240.0.0.0"),
169 PrefixMapping(IPAddress::kFamilyIPv4, 7, "254.0.0.0"),
170 PrefixMapping(IPAddress::kFamilyIPv4, 10, "255.192.0.0"),
171 PrefixMapping(IPAddress::kFamilyIPv4, 13, "255.248.0.0"),
172 PrefixMapping(IPAddress::kFamilyIPv4, 16, "255.255.0.0"),
173 PrefixMapping(IPAddress::kFamilyIPv4, 19, "255.255.224.0"),
174 PrefixMapping(IPAddress::kFamilyIPv4, 22, "255.255.252.0"),
175 PrefixMapping(IPAddress::kFamilyIPv4, 25, "255.255.255.128"),
176 PrefixMapping(IPAddress::kFamilyIPv4, 28, "255.255.255.240"),
177 PrefixMapping(IPAddress::kFamilyIPv4, 31, "255.255.255.254"),
178 PrefixMapping(IPAddress::kFamilyIPv4, 32, "255.255.255.255"),
179 PrefixMapping(IPAddress::kFamilyIPv4, 33, "255.255.255.255"),
180 PrefixMapping(IPAddress::kFamilyIPv4, 34, "255.255.255.255"),
181 PrefixMapping(IPAddress::kFamilyIPv6, 0, "0::"),
182 PrefixMapping(IPAddress::kFamilyIPv6, 1, "8000::"),
183 PrefixMapping(IPAddress::kFamilyIPv6, 17, "ffff:8000::"),
184 PrefixMapping(IPAddress::kFamilyIPv6, 34, "ffff:ffff:c000::"),
185 PrefixMapping(IPAddress::kFamilyIPv6, 51, "ffff:ffff:ffff:e000::"),
186 PrefixMapping(IPAddress::kFamilyIPv6, 68,
187 "ffff:ffff:ffff:ffff:f000::"),
188 PrefixMapping(IPAddress::kFamilyIPv6, 85,
189 "ffff:ffff:ffff:ffff:ffff:f800::"),
190 PrefixMapping(IPAddress::kFamilyIPv6, 102,
191 "ffff:ffff:ffff:ffff:ffff:ffff:fc00::"),
192 PrefixMapping(IPAddress::kFamilyIPv6, 119,
193 "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fe00"),
194 PrefixMapping(IPAddress::kFamilyIPv6, 128,
195 "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"),
196 PrefixMapping(IPAddress::kFamilyIPv6, 136,
197 "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff")));
198
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700199struct BitOperationMapping {
200 BitOperationMapping() : family(IPAddress::kFamilyUnknown) {}
201 BitOperationMapping(IPAddress::Family family_in,
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700202 const string &address_a_in,
203 const string &address_b_in,
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700204 const string &expected_anded_in,
205 const string &expected_orred_in)
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700206 : family(family_in),
207 address_a(address_a_in),
208 address_b(address_b_in),
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700209 expected_anded(expected_anded_in),
210 expected_orred(expected_orred_in) {}
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700211 IPAddress::Family family;
212 string address_a;
213 string address_b;
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700214 string expected_anded;
215 string expected_orred;
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700216};
217
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700218class IPAddressBitOperationMappingTest
219 : public testing::TestWithParam<BitOperationMapping> {};
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700220
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700221TEST_P(IPAddressBitOperationMappingTest, TestBitOperationMapping) {
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700222 IPAddress address_a(GetParam().family);
223 EXPECT_TRUE(address_a.SetAddressFromString(GetParam().address_a));
224 IPAddress address_b(GetParam().family);
225 EXPECT_TRUE(address_b.SetAddressFromString(GetParam().address_b));
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700226 IPAddress expected_anded(GetParam().family);
227 EXPECT_TRUE(expected_anded.SetAddressFromString(
228 GetParam().expected_anded));
229 EXPECT_TRUE(expected_anded.Equals(address_a.MaskWith(address_b)));
230 IPAddress expected_orred(GetParam().family);
231 EXPECT_TRUE(expected_orred.SetAddressFromString(
232 GetParam().expected_orred));
233 EXPECT_TRUE(expected_orred.Equals(address_a.MergeWith(address_b)));
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700234}
235
236INSTANTIATE_TEST_CASE_P(
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700237 IPAddressBitOperationMappingTestRun,
238 IPAddressBitOperationMappingTest,
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700239 ::testing::Values(
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700240 BitOperationMapping(IPAddress::kFamilyIPv4,
241 "255.255.255.255", "0.0.0.0",
242 "0.0.0.0", "255.255.255.255"),
243 BitOperationMapping(IPAddress::kFamilyIPv4,
244 "0.0.0.0", "255.255.255.255",
245 "0.0.0.0", "255.255.255.255"),
246 BitOperationMapping(IPAddress::kFamilyIPv4,
247 "170.170.170.170", "85.85.85.85",
248 "0.0.0.0", "255.255.255.255"),
249 BitOperationMapping(IPAddress::kFamilyIPv4,
250 "238.187.119.221", "119.221.238.187",
251 "102.153.102.153", "255.255.255.255"),
252 BitOperationMapping(IPAddress::kFamilyIPv4,
253 "17.68.136.34", "119.221.238.187",
254 "17.68.136.34", "119.221.238.187"),
255 BitOperationMapping(IPAddress::kFamilyIPv4,
256 "192.168.1.10", "255.255.255.0",
257 "192.168.1.0", "255.255.255.10")));
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700258
259struct NetworkPartMapping {
260 NetworkPartMapping() : family(IPAddress::kFamilyUnknown) {}
261 NetworkPartMapping(IPAddress::Family family_in,
262 const string &address_in,
263 size_t prefix_in,
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700264 const string &expected_network_in,
265 const string &expected_broadcast_in)
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700266 : family(family_in),
267 address(address_in),
268 prefix(prefix_in),
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700269 expected_network(expected_network_in),
270 expected_broadcast(expected_broadcast_in) {}
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700271 IPAddress::Family family;
272 string address;
273 size_t prefix;
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700274 string expected_network;
275 string expected_broadcast;
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700276};
277
278class IPAddressNetworkPartMappingTest
279 : public testing::TestWithParam<NetworkPartMapping> {};
280
281TEST_P(IPAddressNetworkPartMappingTest, TestNetworkPartMapping) {
282 IPAddress address(GetParam().family);
283 EXPECT_TRUE(address.SetAddressFromString(GetParam().address));
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700284 IPAddress expected_network(GetParam().family);
285 EXPECT_TRUE(expected_network.SetAddressFromString(
286 GetParam().expected_network));
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700287 address.set_prefix(GetParam().prefix);
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700288 EXPECT_TRUE(expected_network.Equals(address.GetNetworkPart()));
289 IPAddress expected_broadcast(GetParam().family);
290 EXPECT_TRUE(expected_broadcast.SetAddressFromString(
291 GetParam().expected_broadcast));
292 EXPECT_TRUE(expected_broadcast.Equals(address.GetDefaultBroadcast()));
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700293}
294
295INSTANTIATE_TEST_CASE_P(
296 IPAddressNetworkPartMappingTestRun,
297 IPAddressNetworkPartMappingTest,
298 ::testing::Values(
299 NetworkPartMapping(IPAddress::kFamilyIPv4,
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700300 "255.255.255.255", 0, "0.0.0.0", "255.255.255.255"),
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700301 NetworkPartMapping(IPAddress::kFamilyIPv4,
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700302 "255.255.255.255", 32,
303 "255.255.255.255", "255.255.255.255"),
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700304 NetworkPartMapping(IPAddress::kFamilyIPv4,
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700305 "255.255.255.255", 24,
306 "255.255.255.0", "255.255.255.255"),
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700307 NetworkPartMapping(IPAddress::kFamilyIPv4,
Paul Stewartfe1c0e12012-04-30 19:57:04 -0700308 "255.255.255.255", 16,
309 "255.255.0.0", "255.255.255.255"),
310 NetworkPartMapping(IPAddress::kFamilyIPv4,
311 "0.0.0.0", 0, "0.0.0.0", "255.255.255.255"),
312 NetworkPartMapping(IPAddress::kFamilyIPv4,
313 "0.0.0.0", 32, "0.0.0.0", "0.0.0.0"),
314 NetworkPartMapping(IPAddress::kFamilyIPv4,
315 "0.0.0.0", 24, "0.0.0.0", "0.0.0.255"),
316 NetworkPartMapping(IPAddress::kFamilyIPv4,
317 "0.0.0.0", 16, "0.0.0.0", "0.0.255.255"),
318 NetworkPartMapping(IPAddress::kFamilyIPv4,
319 "192.168.1.1", 24, "192.168.1.0", "192.168.1.255"),
320 NetworkPartMapping(IPAddress::kFamilyIPv4,
321 "10.1.0.1", 8, "10.0.0.0", "10.255.255.255")));
Paul Stewartf7bf9bf2012-04-17 17:30:14 -0700322
323struct MinPrefixLengthMapping {
324 MinPrefixLengthMapping() : family(IPAddress::kFamilyUnknown) {}
325 MinPrefixLengthMapping(IPAddress::Family family_in,
326 const string &address_in,
327 size_t expected_min_prefix_in)
328 : family(family_in),
329 address(address_in),
330 expected_min_prefix(expected_min_prefix_in) {}
331 IPAddress::Family family;
332 string address;
333 size_t expected_min_prefix;
334};
335
336class IPAddressMinPrefixLengthMappingTest
337 : public testing::TestWithParam<MinPrefixLengthMapping> {};
338
339TEST_P(IPAddressMinPrefixLengthMappingTest, TestMinPrefixLengthMapping) {
340 IPAddress address(GetParam().family);
341 EXPECT_TRUE(address.SetAddressFromString(GetParam().address));
342 EXPECT_EQ(GetParam().expected_min_prefix, address.GetMinPrefixLength());
343}
344
345INSTANTIATE_TEST_CASE_P(
346 IPAddressMinPrefixLengthMappingTestRun,
347 IPAddressMinPrefixLengthMappingTest,
348 ::testing::Values(
349 MinPrefixLengthMapping(IPAddress::kFamilyIPv6, "fe80::", 128),
350 MinPrefixLengthMapping(IPAddress::kFamilyIPv4, "255.255.255.255", 32),
351 MinPrefixLengthMapping(IPAddress::kFamilyIPv4, "224.0.0.0", 32),
352 MinPrefixLengthMapping(IPAddress::kFamilyIPv4, "192.168.0.0", 24),
353 MinPrefixLengthMapping(IPAddress::kFamilyIPv4, "172.16.0.0", 16),
354 MinPrefixLengthMapping(IPAddress::kFamilyIPv4, "10.10.10.10", 8)));
355
356struct CanReachAddressMapping {
357 CanReachAddressMapping() : family(IPAddress::kFamilyUnknown) {}
358 CanReachAddressMapping(IPAddress::Family family_in,
359 const string &address_a_in,
360 const string &address_b_in,
361 bool expected_result_in)
362 : family(family_in),
363 address_a(address_a_in),
364 address_b(address_b_in),
365 expected_result(expected_result_in) {}
366 IPAddress::Family family;
367 string address_a;
368 string address_b;
369 size_t expected_result;
370};
371
372class IPAddressCanReachAddressMappingTest
373 : public testing::TestWithParam<CanReachAddressMapping> {};
374
375TEST_P(IPAddressCanReachAddressMappingTest, TestCanReachAddressMapping) {
376 IPAddress address_a(GetParam().family);
377 EXPECT_TRUE(address_a.SetAddressAndPrefixFromString(GetParam().address_a));
378 IPAddress address_b(GetParam().family);
379 EXPECT_TRUE(address_b.SetAddressAndPrefixFromString(GetParam().address_b));
380 EXPECT_EQ(GetParam().expected_result, address_a.CanReachAddress(address_b));
381}
382
383INSTANTIATE_TEST_CASE_P(
384 IPAddressCanReachAddressMappingTestRun,
385 IPAddressCanReachAddressMappingTest,
386 ::testing::Values(
387 CanReachAddressMapping(IPAddress::kFamilyIPv6,
388 "fe80:1000::/16", "fe80:2000::/16", true),
389 CanReachAddressMapping(IPAddress::kFamilyIPv6,
390 "fe80:1000::/16", "fe80:2000::/32", true),
391 CanReachAddressMapping(IPAddress::kFamilyIPv6,
392 "fe80:1000::/32", "fe80:2000::/16", false),
393 CanReachAddressMapping(IPAddress::kFamilyIPv4,
394 "192.168.1.1/24", "192.168.1.2/24", true),
395 CanReachAddressMapping(IPAddress::kFamilyIPv4,
396 "192.168.1.1/24", "192.168.2.2/24", false),
397 CanReachAddressMapping(IPAddress::kFamilyIPv4,
398 "192.168.1.1/16", "192.168.2.2/24", true),
399 CanReachAddressMapping(IPAddress::kFamilyIPv4,
400 "192.168.1.1/24", "192.168.2.2/16", false)));
401
Paul Stewart1d18e8c2011-07-15 11:00:31 -0700402} // namespace shill