blob: 7cd80993ef5df80f02ea1d472267391ebd6b44ac [file] [log] [blame]
Yotam Harchol4d634682013-09-26 13:21:06 -07001package org.projectfloodlight.openflow.types;
2
Sovietaced88e74ec2014-06-16 23:02:45 -07003import com.google.common.base.Preconditions;
4
Yotam Harchol4d634682013-09-26 13:21:06 -07005
6public abstract class IPAddressWithMask<F extends IPAddress<F>> extends Masked<F> {
7
8 protected IPAddressWithMask(F value, F mask) {
9 super(value, mask);
10 }
11
Yotam Harcholeb023dc2013-09-26 15:45:44 -070012 public abstract IPVersion getIpVersion();
Sovietaced07cc8eb2014-06-24 11:55:26 -070013
14 public abstract boolean contains(IPAddress<?> ip);
Yotam Harchol4d634682013-09-26 13:21:06 -070015
Aditya Vaja98c96e72014-03-11 15:19:01 -070016 public F getSubnetBroadcastAddress() {
Aditya Vajab21043d2014-03-11 13:34:06 -070017 if (!mask.isCidrMask()) {
18 throw new IllegalArgumentException("Mask Invalid " + mask +
19 " cannot get subnet for non CIDR mask");
20 }
Aditya Vaja56b8b182014-03-11 13:13:58 -070021 return value.or(mask.not());
22 }
23
Aditya Vaja98c96e72014-03-11 15:19:01 -070024 public boolean isSubnetBroadcastAddress(F candidate) {
Aditya Vaja56b8b182014-03-11 13:13:58 -070025 return getSubnetBroadcastAddress().equals(candidate);
26 }
27
Yotam Harchol4d634682013-09-26 13:21:06 -070028 public static IPAddressWithMask<?> of(String ip) {
Sovietaced88e74ec2014-06-16 23:02:45 -070029 Preconditions.checkNotNull(ip, "string ip must not be null");
30
Yotam Harchol4d634682013-09-26 13:21:06 -070031 if (ip.indexOf('.') != -1)
32 return IPv4AddressWithMask.of(ip);
33 else if (ip.indexOf(':') != -1)
34 return IPv6AddressWithMask.of(ip);
35 else
36 throw new IllegalArgumentException("IP Address not well formed: " + ip);
37 }
38
Gregor Maier1ff55972013-12-11 02:22:56 -080039 @Override
Gregor Maier7f987e62013-12-10 19:34:18 -080040 public String toString() {
41 StringBuilder res = new StringBuilder();
42 res.append(value.toString());
43
44 res.append('/');
Gregor Maier5615b6c2013-12-11 22:29:07 -080045 if (mask.isCidrMask()) {
Gregor Maier7f987e62013-12-10 19:34:18 -080046 // CIDR notation
47 res.append(mask.asCidrMaskLength());
48 } else {
49 // Full address mask
50 res.append(mask.toString());
51 }
52
53 return res.toString();
54 }
Yotam Harchol4d634682013-09-26 13:21:06 -070055}