blob: ee34923202cdc8c809e0dfdadb9d4d5d838171c6 [file] [log] [blame]
tom0eb04ca2014-08-25 14:34:51 -07001package org.projectfloodlight.openflow.types;
2
3import com.google.common.base.Preconditions;
4
5public class IPv6AddressWithMask extends IPAddressWithMask<IPv6Address> {
6 public final static IPv6AddressWithMask NONE = of(IPv6Address.NONE, IPv6Address.NONE);
7
8 private IPv6AddressWithMask(IPv6Address value, IPv6Address mask) {
9 super(value, mask);
10 }
11
12 @Override
13 public IPVersion getIpVersion() {
14 return IPVersion.IPv6;
15 }
16
17 public static IPv6AddressWithMask of(IPv6Address value, IPv6Address mask) {
18 Preconditions.checkNotNull(value, "value must not be null");
19 Preconditions.checkNotNull(mask, "mask must not be null");
20 return new IPv6AddressWithMask(value, mask);
21 }
22
23 public static IPv6AddressWithMask of(final String string) {
24 Preconditions.checkNotNull(string, "string must not be null");
25
26 int slashPos;
27 String ip = string;
28 int cidrMaskLength = 128;
29 IPv6Address maskAddress = null;
30
31 // Read mask suffix
32 if ((slashPos = string.indexOf('/')) != -1) {
33 ip = string.substring(0, slashPos);
34 try {
35 String suffix = string.substring(slashPos + 1);
36 if (suffix.length() == 0)
37 throw new IllegalArgumentException("IPv6 Address not well formed: " + string);
38 if (suffix.indexOf(':') != -1) {
39 // Full mask
40 maskAddress = IPv6Address.of(suffix);
41 } else {
42 // CIDR Suffix
43 cidrMaskLength = Integer.parseInt(suffix);
44 }
45 } catch (NumberFormatException e) {
46 throw new IllegalArgumentException("IPv6 Address not well formed: " + string);
47 }
48 }
49
50 // Read IP
51 IPv6Address ipv6 = IPv6Address.of(ip);
52
53 if (maskAddress != null) {
54 // Full address mask
55 return IPv6AddressWithMask.of(ipv6, maskAddress);
56 } else {
57 return IPv6AddressWithMask.of(ipv6,
58 IPv6Address.ofCidrMaskLength(cidrMaskLength));
59 }
60 }
61
62 @Override
63 public boolean contains(IPAddress<?> ip) {
64 Preconditions.checkNotNull(ip, "ip must not be null");
65
66 if(ip.getIpVersion() == IPVersion.IPv6) {
67 IPv6Address ipv6 = (IPv6Address) ip;
68 return this.matches(ipv6);
69 }
70
71 return false;
72 }
73}