Pavlin Radoslavov

* Added methods IpAddress.getIp4Address() and IpAddress.getIp6Address()

  to get the Ip4Address and Ip6Address view of the IpAddress.

* Added methods IpPrefix.getIp4Prefix() and IpPrefix.getIp6Prefix()
  to get the Ip4Prefix and Ip6Prefix view of the IpPrefix.

Added the corresponding unit tests as well.
......@@ -80,6 +80,42 @@ public class IpAddress implements Comparable<IpAddress> {
}
/**
* Gets the {@link Ip4Address} view of the IP address.
*
* @return the {@link Ip4Address} view of the IP address if it is IPv4,
* otherwise null
*/
public Ip4Address getIp4Address() {
if (version() != Ip4Address.VERSION) {
return null;
}
// Return this object itself if it is already instance of Ip4Address
if (this instanceof Ip4Address) {
return (Ip4Address) this;
}
return Ip4Address.valueOf(octets);
}
/**
* Gets the {@link Ip6Address} view of the IP address.
*
* @return the {@link Ip6Address} view of the IP address if it is IPv6,
* otherwise null
*/
public Ip6Address getIp6Address() {
if (version() != Ip6Address.VERSION) {
return null;
}
// Return this object itself if it is already instance of Ip6Address
if (this instanceof Ip6Address) {
return (Ip6Address) this;
}
return Ip6Address.valueOf(octets);
}
/**
* Returns the IP address as a byte array.
*
* @return a byte array
......
......@@ -75,6 +75,42 @@ public class IpPrefix {
}
/**
* Gets the {@link Ip4Prefix} view of the IP prefix.
*
* @return the {@link Ip4Prefix} view of the IP prefix if it is IPv4,
* otherwise null
*/
public Ip4Prefix getIp4Prefix() {
if (version() != Ip4Prefix.VERSION) {
return null;
}
// Return this object itself if it is already instance of Ip4Prefix
if (this instanceof Ip4Prefix) {
return (Ip4Prefix) this;
}
return Ip4Prefix.valueOf(address.getIp4Address(), prefixLength);
}
/**
* Gets the {@link Ip6Prefix} view of the IP prefix.
*
* @return the {@link Ip6Prefix} view of the IP prefix if it is IPv6,
* otherwise null
*/
public Ip6Prefix getIp6Prefix() {
if (version() != Ip6Prefix.VERSION) {
return null;
}
// Return this object itself if it is already instance of Ip6Prefix
if (this instanceof Ip6Prefix) {
return (Ip6Prefix) this;
}
return Ip6Prefix.valueOf(address.getIp6Address(), prefixLength);
}
/**
* Converts an integer and a prefix length into an IPv4 prefix.
*
* @param address an integer representing the IPv4 address
......
......@@ -23,6 +23,7 @@ import org.junit.Test;
import java.net.InetAddress;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
......@@ -77,6 +78,44 @@ public class IpAddressTest {
}
/**
* Tests getting the Ip4Address and Ip6Address view of the IP address.
*/
@Test
public void testGetIp4AndIp6AddressView() {
IpAddress ipAddress;
Ip4Address ip4Address;
Ip6Address ip6Address;
// Pure IPv4 IpAddress
ipAddress = IpAddress.valueOf("1.2.3.4");
ip4Address = ipAddress.getIp4Address();
ip6Address = ipAddress.getIp6Address();
assertThat(ip4Address.toString(), is("1.2.3.4"));
assertNull(ip6Address);
// IPv4 IpAddress that is Ip4Address
ipAddress = Ip4Address.valueOf("1.2.3.4");
ip4Address = ipAddress.getIp4Address();
ip6Address = ipAddress.getIp6Address();
assertThat(ip4Address.toString(), is("1.2.3.4"));
assertNull(ip6Address);
// Pure IPv6 IpAddress
ipAddress = IpAddress.valueOf("1111:2222::");
ip4Address = ipAddress.getIp4Address();
ip6Address = ipAddress.getIp6Address();
assertNull(ip4Address);
assertThat(ip6Address.toString(), is("1111:2222::"));
// IPv6 IpAddress that is Ip6Address
ipAddress = Ip6Address.valueOf("1111:2222::");
ip4Address = ipAddress.getIp4Address();
ip6Address = ipAddress.getIp6Address();
assertNull(ip4Address);
assertThat(ip6Address.toString(), is("1111:2222::"));
}
/**
* Tests returning an IPv4 address as a byte array.
*/
@Test
......
......@@ -21,8 +21,9 @@ import org.junit.Test;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
......@@ -145,6 +146,44 @@ public class IpPrefixTest {
}
/**
* Tests getting the Ip4Prefix and Ip6Prefix view of the IP prefix.
*/
@Test
public void testGetIp4AndIp6PrefixView() {
IpPrefix ipPrefix;
Ip4Prefix ip4Prefix;
Ip6Prefix ip6Prefix;
// Pure IPv4 IpPrefix
ipPrefix = IpPrefix.valueOf("1.2.3.0/24");
ip4Prefix = ipPrefix.getIp4Prefix();
ip6Prefix = ipPrefix.getIp6Prefix();
assertThat(ip4Prefix.toString(), is("1.2.3.0/24"));
assertNull(ip6Prefix);
// IPv4 IpPrefix that is Ip4Prefix
ipPrefix = Ip4Prefix.valueOf("1.2.3.0/24");
ip4Prefix = ipPrefix.getIp4Prefix();
ip6Prefix = ipPrefix.getIp6Prefix();
assertThat(ip4Prefix.toString(), is("1.2.3.0/24"));
assertNull(ip6Prefix);
// Pure IPv6 IpPrefix
ipPrefix = IpPrefix.valueOf("1111:2222::/64");
ip4Prefix = ipPrefix.getIp4Prefix();
ip6Prefix = ipPrefix.getIp6Prefix();
assertNull(ip4Prefix);
assertThat(ip6Prefix.toString(), is("1111:2222::/64"));
// IPv6 IpPrefix that is Ip6Prefix
ipPrefix = Ip6Prefix.valueOf("1111:2222::/64");
ip4Prefix = ipPrefix.getIp4Prefix();
ip6Prefix = ipPrefix.getIp6Prefix();
assertNull(ip4Prefix);
assertThat(ip6Prefix.toString(), is("1111:2222::/64"));
}
/**
* Tests valueOf() converter for IPv4 integer value.
*/
@Test
......