1 package org.opendaylight.controller.sal.match.extensible;
3 import java.net.Inet4Address;
4 import java.net.Inet6Address;
5 import java.net.InetAddress;
7 import javax.xml.bind.annotation.XmlAccessType;
8 import javax.xml.bind.annotation.XmlAccessorType;
9 import javax.xml.bind.annotation.XmlElement;
10 import javax.xml.bind.annotation.XmlRootElement;
12 import org.opendaylight.controller.sal.utils.NetUtils;
15 @XmlAccessorType(XmlAccessType.NONE)
17 public class NwDst extends MatchField<InetAddress> {
18 private static final long serialVersionUID = 1L;
19 public static final String TYPE = "NW_DST";
20 private InetAddress address;
21 private InetAddress mask;
24 * Creates a Match field for the network destination address
31 public NwDst(InetAddress address, InetAddress mask) {
33 this.address = address;
42 public NwDst(InetAddress address) {
44 this.address = address;
49 public InetAddress getValue() {
54 @XmlElement(name = "value")
55 protected String getValueString() {
56 return address.getHostAddress();
60 public InetAddress getMask() {
65 @XmlElement(name = "mask")
66 protected String getMaskString() {
67 return (mask == null) ? "null" : mask.getHostAddress();
71 public boolean isValid() {
72 if (address != null) {
74 return address instanceof Inet4Address && mask instanceof Inet4Address
75 || address instanceof Inet6Address && mask instanceof Inet6Address;
83 public boolean hasReverse() {
88 public NwSrc getReverse() {
89 return new NwSrc(address, mask);
93 public NwDst clone() {
94 return new NwDst(address, mask);
98 public boolean isV6() {
99 return address instanceof Inet6Address;
103 public int hashCode() {
104 final int prime = 31;
106 result = prime * result + ((address == null) ? 0 : address.hashCode());
107 result = prime * result + ((mask == null) ? 0 : mask.hashCode());
112 public boolean equals(Object obj) {
119 if (!(obj instanceof NwDst)) {
122 NwDst other = (NwDst) obj;
123 // Equality to be checked against prefix addresses
124 int thisMaskLen = (this.mask == null) ? ((this.address instanceof Inet4Address) ? 32 : 128) : NetUtils
125 .getSubnetMaskLength(this.mask);
126 int otherMaskLen = (other.mask == null) ? ((other.address instanceof Inet4Address) ? 32 : 128) : NetUtils
127 .getSubnetMaskLength(other.mask);
129 return NetUtils.getSubnetPrefix(address, thisMaskLen).equals(
130 NetUtils.getSubnetPrefix(other.address, otherMaskLen));