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));
}
/*