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 NwSrc extends MatchField<InetAddress> {
18 private static final long serialVersionUID = 1L;
19 public static final String TYPE = "NW_SRC";
20 private InetAddress address;
21 private InetAddress mask;
24 * Creates a Match field for the network source address
31 public NwSrc(InetAddress address, InetAddress mask) {
33 this.address = address;
42 public NwSrc(InetAddress address) {
44 this.address = address;
49 public InetAddress getValue() {
54 @XmlElement(name = "value")
55 protected String getValueString() {
56 return address.toString();
60 public InetAddress getMask() {
65 @XmlElement(name = "mask")
66 protected String getMaskString() {
67 return mask == null ? "null" : mask.toString();
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 NwDst getReverse() {
89 return new NwDst(address, mask);
93 public NwSrc clone() {
94 return new NwSrc(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 NwSrc)) {
122 NwSrc other = (NwSrc) 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));