package net.onrc.onos.core.util; import java.util.Objects; import net.onrc.onos.core.util.serializers.IPv6Deserializer; import net.onrc.onos.core.util.serializers.IPv6Serializer; import org.codehaus.jackson.map.annotate.JsonDeserialize; import org.codehaus.jackson.map.annotate.JsonSerialize; import org.projectfloodlight.openflow.util.HexString; /** * The class representing an IPv6 address. * This class is immutable. */ @JsonDeserialize(using = IPv6Deserializer.class) @JsonSerialize(using = IPv6Serializer.class) public final class IPv6 { private final long valueHigh; // The higher (more significant) 64 bits private final long valueLow; // The lower (less significant) 64 bits /** * Default constructor. */ public IPv6() { this.valueHigh = 0; this.valueLow = 0; } /** * Copy constructor. * * @param other the object to copy from. */ public IPv6(IPv6 other) { this.valueHigh = other.valueHigh; this.valueLow = other.valueLow; } /** * Constructor from integer values. * * @param valueHigh the higher (more significant) 64 bits of the address. * @param valueLow the lower (less significant) 64 bits of the address. */ public IPv6(long valueHigh, long valueLow) { this.valueHigh = valueHigh; this.valueLow = valueLow; } /** * Constructor from a string. * * @param value the value to use. */ public IPv6(String value) { // TODO: Implement it! this.valueHigh = 0; this.valueLow = 0; } /** * Get the value of the higher (more significant) 64 bits of the address. * * @return the value of the higher (more significant) 64 bits of the * address. */ public long valueHigh() { return valueHigh; } /** * Get the value of the lower (less significant) 64 bits of the address. * * @return the value of the lower (less significant) 64 bits of the * address. */ public long valueLow() { return valueLow; } /** * Convert the IPv6 value to a ':' separated string. * * @return the IPv6 value as a ':' separated string. */ @Override public String toString() { return HexString.toHexString(this.valueHigh) + ":" + HexString.toHexString(this.valueLow); } @Override public boolean equals(Object o) { if (!(o instanceof IPv6)) { return false; } IPv6 other = (IPv6) o; return this.valueHigh == other.valueHigh && this.valueLow == other.valueLow; } @Override public int hashCode() { return Objects.hash(valueHigh, valueLow); } }