[ONOS-7653] ACL app enhancements for including more matching criteria in rules
Change-Id: Ic29bab0c0752d6280a5feff992a69a2e10084414
diff --git a/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java b/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java
index 0cda20b..74b572c 100644
--- a/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java
+++ b/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java
@@ -26,6 +26,7 @@
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.onlab.packet.IPv4;
import org.onlab.packet.Ip4Prefix;
+import org.onlab.packet.MacAddress;
import org.onosproject.rest.AbstractWebResource;
import javax.ws.rs.Consumes;
@@ -65,12 +66,21 @@
for (AclRule rule : rules) {
ObjectNode node = mapper.createObjectNode();
node.put("id", rule.id().toString());
+ if (rule.srcMac() != null) {
+ node.put("srcMac", rule.srcMac().toString());
+ }
+ if (rule.dstMac() != null) {
+ node.put("dstMac", rule.dstMac().toString());
+ }
if (rule.srcIp() != null) {
node.put("srcIp", rule.srcIp().toString());
}
if (rule.dstIp() != null) {
node.put("dstIp", rule.dstIp().toString());
}
+ if (rule.dscp() != 0) {
+ node.put("dscp", rule.dscp());
+ }
if (rule.ipProto() != 0) {
switch (rule.ipProto()) {
case IPv4.PROTOCOL_ICMP:
@@ -89,6 +99,9 @@
if (rule.dstTpPort() != 0) {
node.put("dstTpPort", rule.dstTpPort());
}
+ if (rule.srcTpPort() != 0) {
+ node.put("srcTpPort", rule.srcTpPort());
+ }
node.put("action", rule.action().toString());
arrayNode.add(node);
}
@@ -160,6 +173,21 @@
rule.dstIp(Ip4Prefix.valueOf(s));
}
+ s = node.path("srcMac").asText(null);
+ if (s != null) {
+ rule.srcMac(MacAddress.valueOf(s));
+ }
+
+ s = node.path("dstMac").asText(null);
+ if (s != null) {
+ rule.dstMac(MacAddress.valueOf(s));
+ }
+
+ s = node.path("dscp").asText(null);
+ if (s != null) {
+ rule.dscp(Byte.valueOf(s));
+ }
+
s = node.path("ipProto").asText(null);
if (s != null) {
if ("TCP".equalsIgnoreCase(s)) {
@@ -178,6 +206,11 @@
rule.dstTpPort((short) port);
}
+ port = node.path("srcTpPort").asInt(0);
+ if (port > 0) {
+ rule.srcTpPort((short) port);
+ }
+
s = node.path("action").asText(null);
if (s != null) {
if ("allow".equalsIgnoreCase(s)) {