diff --git a/.project b/.project new file mode 100644 index 0000000..be389c2 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + FlowSpaceFirewall + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/src/main/java/edu/iu/grnoc/flowspace_firewall/ConfigParser.java b/src/main/java/edu/iu/grnoc/flowspace_firewall/ConfigParser.java index 9ecd726..f253e01 100644 --- a/src/main/java/edu/iu/grnoc/flowspace_firewall/ConfigParser.java +++ b/src/main/java/edu/iu/grnoc/flowspace_firewall/ConfigParser.java @@ -70,9 +70,10 @@ private static boolean isValidConfig(List> slices){ if(otherSlice.containsKey(dpid)){ Slicer otherConfig = otherSlice.get(dpid); if(otherConfig.getSliceName() != config.getSliceName()){ - if(config.hasOverlap(otherConfig)){ + if(config.hasOverlap(otherConfig) != null){ log.warn("Overlap detected between slice "+config.getSliceName()+" and slice " +otherConfig.getSliceName()+" will not load this configuration"); + log.warn(config.hasOverlap(otherConfig)); //hasOverlap returns the details of the overlap. return false; } } @@ -199,8 +200,7 @@ public static ArrayList> parseConfig(String xmlFile) throw } if(tag_management && Short.parseShort(range.getAttributes().getNamedItem("start").getTextContent()) != Short.parseShort(range.getAttributes().getNamedItem("end").getTextContent())){ log.error("Tag Mangement can only be used on a single VLAN, please fix config and try again"); - newSlices.clear(); - return newSlices; + throw new InvalidConfigException("Configuration is not valid!"); } for(short m = Short.parseShort(range.getAttributes().getNamedItem("start").getTextContent()); m <= Short.parseShort(range.getAttributes().getNamedItem("end").getTextContent()); m++){ @@ -213,8 +213,7 @@ public static ArrayList> parseConfig(String xmlFile) throw slicer.setPortConfig(pConfig.getPortName(), pConfig); if(tag_management == true && myRange.getAvailableTags().length > 1){ log.error("Tag Management can only be used on a single VLAN, please fix config and try again"); - newSlices.clear(); - return newSlices; + throw new InvalidConfigException("Configuration is not valid!"); } } //add the slicer to the whole slice container (all switches) diff --git a/src/main/java/edu/iu/grnoc/flowspace_firewall/Slicer.java b/src/main/java/edu/iu/grnoc/flowspace_firewall/Slicer.java index 46cd8c0..5a5b95e 100644 --- a/src/main/java/edu/iu/grnoc/flowspace_firewall/Slicer.java +++ b/src/main/java/edu/iu/grnoc/flowspace_firewall/Slicer.java @@ -43,7 +43,7 @@ public interface Slicer { PortConfig getPortConfig(String portName); PortConfig getPortConfig(short portId); boolean isOkToProcessMessage(); - boolean hasOverlap(Slicer otherSlicer); + String hasOverlap(Slicer otherSlicer); String getSliceName(); void setSliceName(String name); double getRate(); diff --git a/src/main/java/edu/iu/grnoc/flowspace_firewall/VLANSlicer.java b/src/main/java/edu/iu/grnoc/flowspace_firewall/VLANSlicer.java index af87d39..87b2433 100644 --- a/src/main/java/edu/iu/grnoc/flowspace_firewall/VLANSlicer.java +++ b/src/main/java/edu/iu/grnoc/flowspace_firewall/VLANSlicer.java @@ -1106,16 +1106,17 @@ public void setSliceName(String name){ this.name = name; } - public boolean hasOverlap(Slicer otherSlicer){ + public String hasOverlap(Slicer otherSlicer){ + String error_detail = null; for(String portName : this.portList.keySet()){ if(otherSlicer.isPortPartOfSlice(portName)){ if(this.getPortConfig(portName).getVlanRange().rangeOverlap(otherSlicer.getPortConfig(portName).getVlanRange())){ log.error(""+this.name+" "+this.getSliceName()+"port range: "+this.getPortConfig(portName).getVlanRange().toString()+ "overlaps with slice: "+otherSlicer.getSliceName()+" port-range: "+otherSlicer.getPortConfig(portName).getVlanRange().toString()); - return true; + return ""+this.name+" "+this.getSliceName()+"port range: "+this.getPortConfig(portName).getVlanRange().toString()+ "overlaps with slice: "+otherSlicer.getSliceName()+" port-range: "+otherSlicer.getPortConfig(portName).getVlanRange().toString(); } } } - return false; + return error_detail; } public IOFSwitch getSwitch(){ diff --git a/src/test/java/edu/iu/grnoc/flowspace_firewall/VLANSlicerTest.java b/src/test/java/edu/iu/grnoc/flowspace_firewall/VLANSlicerTest.java index deb0644..158b22c 100644 --- a/src/test/java/edu/iu/grnoc/flowspace_firewall/VLANSlicerTest.java +++ b/src/test/java/edu/iu/grnoc/flowspace_firewall/VLANSlicerTest.java @@ -602,7 +602,7 @@ public void testHasOverlap(){ pConfig6.setVLANRange(range); otherSlicer.setPortConfig("foo6", pConfig6); - assertFalse(slicer.hasOverlap(otherSlicer)); + assertNull(slicer.hasOverlap(otherSlicer)); pConfig = new PortConfig(); pConfig.setPortName("foo"); @@ -611,7 +611,7 @@ public void testHasOverlap(){ range.setVlanAvail((short)1000,true); pConfig.setVLANRange(range); otherSlicer.setPortConfig("foo", pConfig); - assertTrue(slicer.hasOverlap(otherSlicer)); + assertNotNull(slicer.hasOverlap(otherSlicer)); } /*