Jonathan Hart
Committed by Gerrit Code Review

Use DELETE_STRICT when deleting flows to avoid collateral damage

Change-Id: Ibb35023b14296752073de44f1953013f0ca8a73a
...@@ -22,11 +22,11 @@ import org.onlab.packet.Ip6Prefix; ...@@ -22,11 +22,11 @@ import org.onlab.packet.Ip6Prefix;
22 import org.onlab.packet.VlanId; 22 import org.onlab.packet.VlanId;
23 import org.onosproject.net.DeviceId; 23 import org.onosproject.net.DeviceId;
24 import org.onosproject.net.OchSignal; 24 import org.onosproject.net.OchSignal;
25 +import org.onosproject.net.OduSignalId;
25 import org.onosproject.net.driver.DefaultDriverData; 26 import org.onosproject.net.driver.DefaultDriverData;
26 import org.onosproject.net.driver.DefaultDriverHandler; 27 import org.onosproject.net.driver.DefaultDriverHandler;
27 import org.onosproject.net.driver.Driver; 28 import org.onosproject.net.driver.Driver;
28 import org.onosproject.net.driver.DriverService; 29 import org.onosproject.net.driver.DriverService;
29 -import org.onosproject.net.OduSignalId;
30 import org.onosproject.net.flow.FlowRule; 30 import org.onosproject.net.flow.FlowRule;
31 import org.onosproject.net.flow.TrafficSelector; 31 import org.onosproject.net.flow.TrafficSelector;
32 import org.onosproject.net.flow.criteria.ArpHaCriterion; 32 import org.onosproject.net.flow.criteria.ArpHaCriterion;
...@@ -65,8 +65,6 @@ import org.onosproject.net.flow.criteria.VlanIdCriterion; ...@@ -65,8 +65,6 @@ import org.onosproject.net.flow.criteria.VlanIdCriterion;
65 import org.onosproject.net.flow.criteria.VlanPcpCriterion; 65 import org.onosproject.net.flow.criteria.VlanPcpCriterion;
66 import org.onosproject.openflow.controller.ExtensionSelectorInterpreter; 66 import org.onosproject.openflow.controller.ExtensionSelectorInterpreter;
67 import org.projectfloodlight.openflow.protocol.OFFactory; 67 import org.projectfloodlight.openflow.protocol.OFFactory;
68 -import org.projectfloodlight.openflow.protocol.OFFlowAdd;
69 -import org.projectfloodlight.openflow.protocol.OFFlowDelete;
70 import org.projectfloodlight.openflow.protocol.OFFlowMod; 68 import org.projectfloodlight.openflow.protocol.OFFlowMod;
71 import org.projectfloodlight.openflow.protocol.match.Match; 69 import org.projectfloodlight.openflow.protocol.match.Match;
72 import org.projectfloodlight.openflow.protocol.match.MatchField; 70 import org.projectfloodlight.openflow.protocol.match.MatchField;
...@@ -88,6 +86,7 @@ import org.projectfloodlight.openflow.types.OFBooleanValue; ...@@ -88,6 +86,7 @@ import org.projectfloodlight.openflow.types.OFBooleanValue;
88 import org.projectfloodlight.openflow.types.OFMetadata; 86 import org.projectfloodlight.openflow.types.OFMetadata;
89 import org.projectfloodlight.openflow.types.OFPort; 87 import org.projectfloodlight.openflow.types.OFPort;
90 import org.projectfloodlight.openflow.types.OFVlanVidMatch; 88 import org.projectfloodlight.openflow.types.OFVlanVidMatch;
89 +import org.projectfloodlight.openflow.types.OduSignalID;
91 import org.projectfloodlight.openflow.types.TransportPort; 90 import org.projectfloodlight.openflow.types.TransportPort;
92 import org.projectfloodlight.openflow.types.U16; 91 import org.projectfloodlight.openflow.types.U16;
93 import org.projectfloodlight.openflow.types.U32; 92 import org.projectfloodlight.openflow.types.U32;
...@@ -95,7 +94,6 @@ import org.projectfloodlight.openflow.types.U64; ...@@ -95,7 +94,6 @@ import org.projectfloodlight.openflow.types.U64;
95 import org.projectfloodlight.openflow.types.U8; 94 import org.projectfloodlight.openflow.types.U8;
96 import org.projectfloodlight.openflow.types.VlanPcp; 95 import org.projectfloodlight.openflow.types.VlanPcp;
97 import org.projectfloodlight.openflow.types.VlanVid; 96 import org.projectfloodlight.openflow.types.VlanVid;
98 -import org.projectfloodlight.openflow.types.OduSignalID;
99 import org.slf4j.Logger; 97 import org.slf4j.Logger;
100 98
101 import java.util.Optional; 99 import java.util.Optional;
...@@ -163,7 +161,7 @@ public abstract class FlowModBuilder { ...@@ -163,7 +161,7 @@ public abstract class FlowModBuilder {
163 * 161 *
164 * @return the flow mod 162 * @return the flow mod
165 */ 163 */
166 - public abstract OFFlowAdd buildFlowAdd(); 164 + public abstract OFFlowMod buildFlowAdd();
167 165
168 /** 166 /**
169 * Builds a MODIFY flow mod. 167 * Builds a MODIFY flow mod.
...@@ -177,7 +175,7 @@ public abstract class FlowModBuilder { ...@@ -177,7 +175,7 @@ public abstract class FlowModBuilder {
177 * 175 *
178 * @return the flow mod 176 * @return the flow mod
179 */ 177 */
180 - public abstract OFFlowDelete buildFlowDel(); 178 + public abstract OFFlowMod buildFlowDel();
181 179
182 /** 180 /**
183 * Builds the match for the flow mod. 181 * Builds the match for the flow mod.
......
...@@ -47,17 +47,17 @@ import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanId ...@@ -47,17 +47,17 @@ import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanId
47 import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanPcpInstruction; 47 import org.onosproject.net.flow.instructions.L2ModificationInstruction.ModVlanPcpInstruction;
48 import org.onosproject.net.flow.instructions.L2ModificationInstruction.PushHeaderInstructions; 48 import org.onosproject.net.flow.instructions.L2ModificationInstruction.PushHeaderInstructions;
49 import org.onosproject.net.flow.instructions.L3ModificationInstruction; 49 import org.onosproject.net.flow.instructions.L3ModificationInstruction;
50 -import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPInstruction;
51 -import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModArpIPInstruction;
52 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModArpEthInstruction; 50 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModArpEthInstruction;
51 +import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModArpIPInstruction;
53 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModArpOpInstruction; 52 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModArpOpInstruction;
53 +import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPInstruction;
54 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPv6FlowLabelInstruction; 54 import org.onosproject.net.flow.instructions.L3ModificationInstruction.ModIPv6FlowLabelInstruction;
55 import org.onosproject.net.flow.instructions.L4ModificationInstruction; 55 import org.onosproject.net.flow.instructions.L4ModificationInstruction;
56 import org.onosproject.net.flow.instructions.L4ModificationInstruction.ModTransportPortInstruction; 56 import org.onosproject.net.flow.instructions.L4ModificationInstruction.ModTransportPortInstruction;
57 import org.onosproject.openflow.controller.ExtensionTreatmentInterpreter; 57 import org.onosproject.openflow.controller.ExtensionTreatmentInterpreter;
58 import org.projectfloodlight.openflow.protocol.OFFactory; 58 import org.projectfloodlight.openflow.protocol.OFFactory;
59 import org.projectfloodlight.openflow.protocol.OFFlowAdd; 59 import org.projectfloodlight.openflow.protocol.OFFlowAdd;
60 -import org.projectfloodlight.openflow.protocol.OFFlowDelete; 60 +import org.projectfloodlight.openflow.protocol.OFFlowDeleteStrict;
61 import org.projectfloodlight.openflow.protocol.OFFlowMod; 61 import org.projectfloodlight.openflow.protocol.OFFlowMod;
62 import org.projectfloodlight.openflow.protocol.OFFlowModFlags; 62 import org.projectfloodlight.openflow.protocol.OFFlowModFlags;
63 import org.projectfloodlight.openflow.protocol.action.OFAction; 63 import org.projectfloodlight.openflow.protocol.action.OFAction;
...@@ -119,7 +119,7 @@ public class FlowModBuilderVer13 extends FlowModBuilder { ...@@ -119,7 +119,7 @@ public class FlowModBuilderVer13 extends FlowModBuilder {
119 } 119 }
120 120
121 @Override 121 @Override
122 - public OFFlowAdd buildFlowAdd() { 122 + public OFFlowMod buildFlowAdd() {
123 Match match = buildMatch(); 123 Match match = buildMatch();
124 List<OFAction> deferredActions = buildActions(treatment.deferred()); 124 List<OFAction> deferredActions = buildActions(treatment.deferred());
125 List<OFAction> immediateActions = buildActions(treatment.immediate()); 125 List<OFAction> immediateActions = buildActions(treatment.immediate());
...@@ -205,12 +205,12 @@ public class FlowModBuilderVer13 extends FlowModBuilder { ...@@ -205,12 +205,12 @@ public class FlowModBuilderVer13 extends FlowModBuilder {
205 } 205 }
206 206
207 @Override 207 @Override
208 - public OFFlowDelete buildFlowDel() { 208 + public OFFlowMod buildFlowDel() {
209 Match match = buildMatch(); 209 Match match = buildMatch();
210 210
211 long cookie = flowRule().id().value(); 211 long cookie = flowRule().id().value();
212 212
213 - OFFlowDelete fm = factory().buildFlowDelete() 213 + OFFlowDeleteStrict fm = factory().buildFlowDeleteStrict()
214 .setXid(xid) 214 .setXid(xid)
215 .setCookie(U64.of(cookie)) 215 .setCookie(U64.of(cookie))
216 .setBufferId(OFBufferId.NO_BUFFER) 216 .setBufferId(OFBufferId.NO_BUFFER)
......