@@ -29,6 +29,10 @@ namespace Network {
29
29
namespace Address {
30
30
namespace {
31
31
32
+ Ipv6Instance v4MappedV6Instance (const std::string& address) {
33
+ return Ipv6Instance (address, /* port=*/ 0 , /* sock_interface=*/ nullptr , /* v6only=*/ false );
34
+ }
35
+
32
36
bool addressesEqual (const InstanceConstSharedPtr& a, const Instance& b) {
33
37
if (a == nullptr || a->type () != Type::Ip || b.type () != Type::Ip) {
34
38
return false ;
@@ -228,6 +232,36 @@ TEST(Ipv4InstanceTest, Broadcast) {
228
232
EXPECT_FALSE (address.ip ()->isUnicastAddress ());
229
233
}
230
234
235
+ TEST (Ipv4InstanceTest, LinkLocal) {
236
+ // Link-local addresses.
237
+ EXPECT_TRUE (Ipv4Instance (" 169.254.0.0" ).ip ()->isLinkLocalAddress ());
238
+ EXPECT_TRUE (Ipv4Instance (" 169.254.42.43" ).ip ()->isLinkLocalAddress ());
239
+ EXPECT_TRUE (Ipv4Instance (" 169.254.255.255" ).ip ()->isLinkLocalAddress ());
240
+
241
+ // Not link-local addresses.
242
+ EXPECT_FALSE (Ipv4Instance (" 169.255.0.0" ).ip ()->isLinkLocalAddress ());
243
+ EXPECT_FALSE (Ipv4Instance (" 169.255.255.255" ).ip ()->isLinkLocalAddress ());
244
+ EXPECT_FALSE (Ipv4Instance (" 170.254.0.0" ).ip ()->isLinkLocalAddress ());
245
+ }
246
+
247
+ TEST (Ipv4InstanceTest, Teredo) {
248
+ // Teredo addresses are not applicable to IPv4.
249
+ EXPECT_FALSE (Ipv4Instance (" 20.1.1.1" ).ip ()->isTeredoAddress ());
250
+ EXPECT_FALSE (Ipv4Instance (" 200.1.1.1" ).ip ()->isTeredoAddress ());
251
+ }
252
+
253
+ TEST (Ipv4InstanceTest, SiteLocal) {
254
+ // Site-local addresses are not applicable to IPv4.
255
+ EXPECT_FALSE (Ipv4Instance (" 1.2.3.4" ).ip ()->isSiteLocalAddress ());
256
+ EXPECT_FALSE (Ipv4Instance (" 200.1.1.1" ).ip ()->isSiteLocalAddress ());
257
+ }
258
+
259
+ TEST (Ipv4InstanceTest, UniqueLocal) {
260
+ // Unique Local Addresses (ULA) are not applicable to IPv4.
261
+ EXPECT_FALSE (Ipv4Instance (" 1.2.3.4" ).ip ()->isUniqueLocalAddress ());
262
+ EXPECT_FALSE (Ipv4Instance (" 200.1.1.1" ).ip ()->isUniqueLocalAddress ());
263
+ }
264
+
231
265
TEST (Ipv4InstanceTest, BadAddress) {
232
266
EXPECT_THROW (Ipv4Instance (" foo" ), EnvoyException);
233
267
EXPECT_THROW (Ipv4Instance (" bar" , 1 ), EnvoyException);
@@ -341,6 +375,85 @@ TEST(Ipv6InstanceTest, Broadcast) {
341
375
EXPECT_FALSE (address.ip ()->isUnicastAddress ());
342
376
}
343
377
378
+ TEST (Ipv6InstanceTest, LinkLocal) {
379
+ // Link-local addresses are in the range "fe80::0" to "febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff".
380
+ EXPECT_TRUE (Ipv6Instance (" fe80:0:0:0:0:0:0:0" ).ip ()->isLinkLocalAddress ());
381
+ EXPECT_TRUE (Ipv6Instance (" fe80::0" ).ip ()->isLinkLocalAddress ());
382
+ EXPECT_TRUE (Ipv6Instance (" fe80::1" ).ip ()->isLinkLocalAddress ());
383
+ EXPECT_TRUE (Ipv6Instance (" fe80::42:43" ).ip ()->isLinkLocalAddress ());
384
+ EXPECT_TRUE (Ipv6Instance (" fe80::ffff:ffff:ffff:ffff" ).ip ()->isLinkLocalAddress ());
385
+ EXPECT_TRUE (Ipv6Instance (" fe81::1" ).ip ()->isLinkLocalAddress ());
386
+ EXPECT_TRUE (Ipv6Instance (" fe90::1" ).ip ()->isLinkLocalAddress ());
387
+ EXPECT_TRUE (Ipv6Instance (" febf::0" ).ip ()->isLinkLocalAddress ());
388
+ EXPECT_TRUE (Ipv6Instance (" febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff" ).ip ()->isLinkLocalAddress ());
389
+
390
+ // Not link-local addresses.
391
+ EXPECT_FALSE (Ipv6Instance (" ::fe80" ).ip ()->isLinkLocalAddress ());
392
+ EXPECT_FALSE (Ipv6Instance (" fec0::0" ).ip ()->isLinkLocalAddress ());
393
+ EXPECT_FALSE (Ipv6Instance (" ff00::0" ).ip ()->isLinkLocalAddress ());
394
+ EXPECT_FALSE (Ipv6Instance (" ab80::0" ).ip ()->isLinkLocalAddress ());
395
+ EXPECT_FALSE (Ipv6Instance (" abcd::0" ).ip ()->isLinkLocalAddress ());
396
+ EXPECT_FALSE (Ipv6Instance (" ::ffff" ).ip ()->isLinkLocalAddress ());
397
+ }
398
+
399
+ TEST (Ipv6InstanceTest, V4MappedLinkLocal) {
400
+ // Link-local addresses in the range ::ffff:169.254.0.0/16.
401
+ EXPECT_TRUE (v4MappedV6Instance (" ::ffff:169.254.0.0" ).ip ()->isLinkLocalAddress ());
402
+ EXPECT_TRUE (v4MappedV6Instance (" ::ffff:169.254.42.42" ).ip ()->isLinkLocalAddress ());
403
+ EXPECT_TRUE (v4MappedV6Instance (" ::ffff:169.254.255.255" ).ip ()->isLinkLocalAddress ());
404
+
405
+ // Not link-local addresses.
406
+ EXPECT_FALSE (v4MappedV6Instance (" ::ffff:169.255.0.0" ).ip ()->isLinkLocalAddress ());
407
+ EXPECT_FALSE (v4MappedV6Instance (" ::ffff:170.254.0.0" ).ip ()->isLinkLocalAddress ());
408
+ EXPECT_FALSE (v4MappedV6Instance (" ::ffff:0.0.0.0" ).ip ()->isLinkLocalAddress ());
409
+ EXPECT_FALSE (v4MappedV6Instance (" ::ffff:192.168.1.1" ).ip ()->isLinkLocalAddress ());
410
+ EXPECT_FALSE (v4MappedV6Instance (" ::ffff:10.54.1.1" ).ip ()->isLinkLocalAddress ());
411
+ }
412
+
413
+ TEST (Ipv6InstanceTest, Teredo) {
414
+ // Teredo addresses are in the range 2001::/32.
415
+ EXPECT_TRUE (Ipv6Instance (" 2001:0:0:0:0:0:0:0" ).ip ()->isTeredoAddress ());
416
+ EXPECT_TRUE (Ipv6Instance (" 2001::1" ).ip ()->isTeredoAddress ());
417
+ EXPECT_TRUE (Ipv6Instance (" 2001::42:43" ).ip ()->isTeredoAddress ());
418
+ EXPECT_TRUE (Ipv6Instance (" 2001::ffff:ffff:ffff:ffff" ).ip ()->isTeredoAddress ());
419
+
420
+ // Not Teredo addresses.
421
+ EXPECT_FALSE (Ipv6Instance (" 2002::0" ).ip ()->isTeredoAddress ());
422
+ EXPECT_FALSE (Ipv6Instance (" 2002::1" ).ip ()->isTeredoAddress ());
423
+ EXPECT_FALSE (Ipv6Instance (" 3001::1" ).ip ()->isTeredoAddress ());
424
+ }
425
+
426
+ TEST (Ipv6InstanceTest, UniqueLocal) {
427
+ // Unique Local Addresses (ULA) are in the range fc00::/7.
428
+ EXPECT_TRUE (Ipv6Instance (" fc00:0:0:0:0:0:0:0" ).ip ()->isUniqueLocalAddress ());
429
+ EXPECT_TRUE (Ipv6Instance (" fc00::1" ).ip ()->isUniqueLocalAddress ());
430
+ EXPECT_TRUE (Ipv6Instance (" fc00::42:43" ).ip ()->isUniqueLocalAddress ());
431
+ EXPECT_TRUE (Ipv6Instance (" fdff::ffff:ffff:ffff:ffff:ffff:ffff" ).ip ()->isUniqueLocalAddress ());
432
+
433
+ // Not ULA addresses.
434
+ EXPECT_FALSE (Ipv6Instance (" fec0:0:0:0:0:0:0:0" ).ip ()->isUniqueLocalAddress ());
435
+ EXPECT_FALSE (
436
+ Ipv6Instance (" feff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" ).ip ()->isUniqueLocalAddress ());
437
+ EXPECT_FALSE (Ipv6Instance (" fe00::0" ).ip ()->isUniqueLocalAddress ());
438
+ EXPECT_FALSE (Ipv6Instance (" fe80::0" ).ip ()->isUniqueLocalAddress ());
439
+ EXPECT_FALSE (Ipv6Instance (" ff00::0" ).ip ()->isUniqueLocalAddress ());
440
+ }
441
+
442
+ TEST (Ipv6InstanceTest, SiteLocal) {
443
+ // Site-local addresses are in the range fec0::/10.
444
+ EXPECT_TRUE (Ipv6Instance (" fec0:0:0:0:0:0:0:0" ).ip ()->isSiteLocalAddress ());
445
+ EXPECT_TRUE (Ipv6Instance (" fec0::1" ).ip ()->isSiteLocalAddress ());
446
+ EXPECT_TRUE (Ipv6Instance (" fec0::42:43" ).ip ()->isSiteLocalAddress ());
447
+ EXPECT_TRUE (Ipv6Instance (" feff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" ).ip ()->isSiteLocalAddress ());
448
+
449
+ // Not site-local addresses.
450
+ EXPECT_FALSE (Ipv6Instance (" fc00:0:0:0:0:0:0:0" ).ip ()->isSiteLocalAddress ());
451
+ EXPECT_FALSE (Ipv6Instance (" fdff::ffff:ffff:ffff:ffff:ffff:ffff" ).ip ()->isSiteLocalAddress ());
452
+ EXPECT_FALSE (Ipv6Instance (" ff00::0" ).ip ()->isSiteLocalAddress ());
453
+ EXPECT_FALSE (Ipv6Instance (" 2002::1" ).ip ()->isSiteLocalAddress ());
454
+ EXPECT_FALSE (Ipv6Instance (" 3001::1" ).ip ()->isSiteLocalAddress ());
455
+ }
456
+
344
457
TEST (Ipv6InstanceTest, BadAddress) {
345
458
EXPECT_THROW (Ipv6Instance (" foo" ), EnvoyException);
346
459
EXPECT_THROW (Ipv6Instance (" bar" , 1 ), EnvoyException);
0 commit comments