From e183e76e7c815b7516ad13da5491360f9f5631f3 Mon Sep 17 00:00:00 2001
From: chechoRP <chechoRP@users.noreply.github.com>
Date: Thu, 29 Oct 2015 12:54:08 -0400
Subject: [PATCH] Fix for Firewall issue #590

The dl_type=ARP (or any other dl_type) is overwritten if dst-ip/src-ip are specified later on in the json object. I added condition that only overwrites the field if it hasn't been already specified. This case only applies for src-ip, and dst-ip.
---
 .../firewall/FirewallRulesResource.java              | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/main/java/net/floodlightcontroller/firewall/FirewallRulesResource.java b/src/main/java/net/floodlightcontroller/firewall/FirewallRulesResource.java
index bfdf5f88d..57ccb6a77 100644
--- a/src/main/java/net/floodlightcontroller/firewall/FirewallRulesResource.java
+++ b/src/main/java/net/floodlightcontroller/firewall/FirewallRulesResource.java
@@ -223,8 +223,10 @@ public class FirewallRulesResource extends ServerResource {
 				else if (n.equalsIgnoreCase("src-ip")) {
 					if (!jp.getText().equalsIgnoreCase("ANY")) {
 						rule.any_nw_src = false;
-						rule.any_dl_type = false;
-						rule.dl_type = EthType.IPv4;
+						if (rule.dl_type.equals(EthType.NONE)){
+							rule.any_dl_type = false;
+							rule.dl_type = EthType.IPv4;
+						}
 						try {
 							rule.nw_src_prefix_and_mask = IPv4AddressWithMask.of(jp.getText());
 						} catch (IllegalArgumentException e) {
@@ -237,8 +239,10 @@ public class FirewallRulesResource extends ServerResource {
 				else if (n.equalsIgnoreCase("dst-ip")) {
 					if (!jp.getText().equalsIgnoreCase("ANY")) {
 						rule.any_nw_dst = false;
-						rule.any_dl_type = false;
-						rule.dl_type = EthType.IPv4;
+						if (rule.dl_type.equals(EthType.NONE)){
+							rule.any_dl_type = false;
+							rule.dl_type = EthType.IPv4;
+						}
 						try {
 							rule.nw_dst_prefix_and_mask = IPv4AddressWithMask.of(jp.getText());
 						} catch (IllegalArgumentException e) {
-- 
GitLab