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)
16 public class NwSrc extends MatchField<InetAddress> {
17 private static final long serialVersionUID = 1L;
18 public static final String TYPE = "NW_SRC";
19 private InetAddress address;
20 private InetAddress mask;
23 * Creates a Match field for the network source address
30 public NwSrc(InetAddress address, InetAddress mask) {
32 this.address = address;
41 public NwSrc(InetAddress address) {
43 this.address = address;
48 public InetAddress getValue() {
53 @XmlElement(name = "value")
54 protected String getValueString() {
55 return address.toString();
59 public InetAddress getMask() {
64 @XmlElement(name = "mask")
65 protected String getMaskString() {
66 return mask == null ? "null" : mask.toString();
70 public boolean isValid() {
71 if (address != null) {
73 return address instanceof Inet4Address && mask instanceof Inet4Address
74 || address instanceof Inet6Address && mask instanceof Inet6Address;
82 public boolean hasReverse() {
87 public NwDst getReverse() {
88 return new NwDst(address, mask);
92 public NwSrc clone() {
93 return new NwSrc(address, mask);
97 public boolean isV6() {
98 return address instanceof Inet6Address;
102 public int hashCode() {
103 final int prime = 31;
105 result = prime * result + ((address == null) ? 0 : address.hashCode());
106 result = prime * result + ((mask == null) ? 0 : mask.hashCode());
111 public boolean equals(Object obj) {
118 if (!(obj instanceof NwSrc)) {
121 NwSrc other = (NwSrc) obj;
122 // Equality to be checked against prefix addresses
123 int thisMaskLen = (this.mask == null) ? ((this.address instanceof Inet4Address) ? 32 : 128) : NetUtils
124 .getSubnetMaskLength(this.mask);
125 int otherMaskLen = (other.mask == null) ? ((other.address instanceof Inet4Address) ? 32 : 128) : NetUtils
126 .getSubnetMaskLength(other.mask);
128 return NetUtils.getSubnetPrefix(address, thisMaskLen).equals(
129 NetUtils.getSubnetPrefix(other.address, otherMaskLen));