Committed by
Gerrit Code Review
[ONOS-4245] Support resubmit experimenter action for nicira driver
Change-Id: I7beac62d5c23fb8e2fe7d7d23947c55fbb849064
Showing
2 changed files
with
33 additions
and
25 deletions
... | @@ -17,6 +17,7 @@ | ... | @@ -17,6 +17,7 @@ |
17 | package org.onosproject.driver.extensions; | 17 | package org.onosproject.driver.extensions; |
18 | 18 | ||
19 | import org.onlab.packet.Ip4Address; | 19 | import org.onlab.packet.Ip4Address; |
20 | +import org.onosproject.net.PortNumber; | ||
20 | import org.onosproject.net.behaviour.ExtensionTreatmentResolver; | 21 | import org.onosproject.net.behaviour.ExtensionTreatmentResolver; |
21 | import org.onosproject.net.driver.AbstractHandlerBehaviour; | 22 | import org.onosproject.net.driver.AbstractHandlerBehaviour; |
22 | import org.onosproject.net.flow.instructions.ExtensionTreatment; | 23 | import org.onosproject.net.flow.instructions.ExtensionTreatment; |
... | @@ -28,6 +29,7 @@ import org.projectfloodlight.openflow.protocol.action.OFAction; | ... | @@ -28,6 +29,7 @@ import org.projectfloodlight.openflow.protocol.action.OFAction; |
28 | import org.projectfloodlight.openflow.protocol.action.OFActionExperimenter; | 29 | import org.projectfloodlight.openflow.protocol.action.OFActionExperimenter; |
29 | import org.projectfloodlight.openflow.protocol.action.OFActionNicira; | 30 | import org.projectfloodlight.openflow.protocol.action.OFActionNicira; |
30 | import org.projectfloodlight.openflow.protocol.action.OFActionNiciraMove; | 31 | import org.projectfloodlight.openflow.protocol.action.OFActionNiciraMove; |
32 | +import org.projectfloodlight.openflow.protocol.action.OFActionNiciraResubmit; | ||
31 | import org.projectfloodlight.openflow.protocol.action.OFActionSetField; | 33 | import org.projectfloodlight.openflow.protocol.action.OFActionSetField; |
32 | import org.projectfloodlight.openflow.protocol.oxm.OFOxm; | 34 | import org.projectfloodlight.openflow.protocol.oxm.OFOxm; |
33 | import org.projectfloodlight.openflow.protocol.oxm.OFOxmTunnelIpv4Dst; | 35 | import org.projectfloodlight.openflow.protocol.oxm.OFOxmTunnelIpv4Dst; |
... | @@ -40,12 +42,14 @@ public class NiciraExtensionTreatmentInterpreter extends AbstractHandlerBehaviou | ... | @@ -40,12 +42,14 @@ public class NiciraExtensionTreatmentInterpreter extends AbstractHandlerBehaviou |
40 | implements ExtensionTreatmentInterpreter, ExtensionTreatmentResolver { | 42 | implements ExtensionTreatmentInterpreter, ExtensionTreatmentResolver { |
41 | 43 | ||
42 | private static final int TYPE_NICIRA = 0x2320; | 44 | private static final int TYPE_NICIRA = 0x2320; |
43 | - private static final int SUB_TYPE_MOVE = 6; | ||
44 | private static final int SRC_ARP_SHA = 0x00012206; | 45 | private static final int SRC_ARP_SHA = 0x00012206; |
45 | private static final int SRC_ARP_SPA = 0x00002004; | 46 | private static final int SRC_ARP_SPA = 0x00002004; |
46 | private static final int SRC_ETH = 0x00000406; | 47 | private static final int SRC_ETH = 0x00000406; |
47 | private static final int SRC_IP = 0x00000e04; | 48 | private static final int SRC_IP = 0x00000e04; |
48 | 49 | ||
50 | + private static final int SUB_TYPE_RESUBMIT = 1; | ||
51 | + private static final int SUB_TYPE_MOVE = 6; | ||
52 | + | ||
49 | @Override | 53 | @Override |
50 | public boolean supported(ExtensionTreatmentType extensionTreatmentType) { | 54 | public boolean supported(ExtensionTreatmentType extensionTreatmentType) { |
51 | if (extensionTreatmentType.equals( | 55 | if (extensionTreatmentType.equals( |
... | @@ -175,26 +179,33 @@ public class NiciraExtensionTreatmentInterpreter extends AbstractHandlerBehaviou | ... | @@ -175,26 +179,33 @@ public class NiciraExtensionTreatmentInterpreter extends AbstractHandlerBehaviou |
175 | if (Long.valueOf(experimenter.getExperimenter()) | 179 | if (Long.valueOf(experimenter.getExperimenter()) |
176 | .intValue() == TYPE_NICIRA) { | 180 | .intValue() == TYPE_NICIRA) { |
177 | OFActionNicira nicira = (OFActionNicira) experimenter; | 181 | OFActionNicira nicira = (OFActionNicira) experimenter; |
178 | - if (nicira.getSubtype() == SUB_TYPE_MOVE) { | 182 | + switch (nicira.getSubtype()) { |
179 | - OFActionNiciraMove moveAction = (OFActionNiciraMove) nicira; | 183 | + case SUB_TYPE_MOVE: |
180 | - switch (Long.valueOf(moveAction.getSrc()).intValue()) { | 184 | + OFActionNiciraMove moveAction = (OFActionNiciraMove) nicira; |
181 | - case SRC_ARP_SHA: | 185 | + switch (Long.valueOf(moveAction.getSrc()).intValue()) { |
182 | - return NiciraMoveTreatmentFactory | 186 | + case SRC_ARP_SHA: |
183 | - .createNiciraMovArpShaToTha(); | 187 | + return NiciraMoveTreatmentFactory |
184 | - case SRC_ETH: | 188 | + .createNiciraMovArpShaToTha(); |
185 | - return NiciraMoveTreatmentFactory | 189 | + case SRC_ETH: |
186 | - .createNiciraMovEthSrcToDst(); | 190 | + return NiciraMoveTreatmentFactory |
187 | - case SRC_IP: | 191 | + .createNiciraMovEthSrcToDst(); |
188 | - return NiciraMoveTreatmentFactory | 192 | + case SRC_IP: |
189 | - .createNiciraMovIpSrcToDst(); | 193 | + return NiciraMoveTreatmentFactory |
190 | - case SRC_ARP_SPA: | 194 | + .createNiciraMovIpSrcToDst(); |
191 | - return NiciraMoveTreatmentFactory | 195 | + case SRC_ARP_SPA: |
192 | - .createNiciraMovArpSpaToTpa(); | 196 | + return NiciraMoveTreatmentFactory |
197 | + .createNiciraMovArpSpaToTpa(); | ||
198 | + default: | ||
199 | + throw new UnsupportedOperationException("Driver does not support move from " | ||
200 | + + moveAction.getSrc() + " to " | ||
201 | + + moveAction.getDst()); | ||
202 | + } | ||
203 | + case SUB_TYPE_RESUBMIT: | ||
204 | + OFActionNiciraResubmit resubmitAction = (OFActionNiciraResubmit) nicira; | ||
205 | + return new NiciraResubmit(PortNumber.portNumber(resubmitAction.getInPort())); | ||
193 | default: | 206 | default: |
194 | - throw new UnsupportedOperationException("Driver does not support move from " | 207 | + throw new UnsupportedOperationException("Driver does not support extension subtype " |
195 | - + moveAction.getSrc() + " to " | 208 | + + nicira.getSubtype()); |
196 | - + moveAction.getDst()); | ||
197 | - } | ||
198 | } | 209 | } |
199 | } | 210 | } |
200 | } | 211 | } | ... | ... |
... | @@ -344,11 +344,8 @@ public class FlowEntryBuilder { | ... | @@ -344,11 +344,8 @@ public class FlowEntryBuilder { |
344 | lookupGridType(circuitSignalID.getGridType()), | 344 | lookupGridType(circuitSignalID.getGridType()), |
345 | lookupChannelSpacing(circuitSignalID.getChannelSpacing()), | 345 | lookupChannelSpacing(circuitSignalID.getChannelSpacing()), |
346 | circuitSignalID.getChannelNumber(), circuitSignalID.getSpectralWidth()))); | 346 | circuitSignalID.getChannelNumber(), circuitSignalID.getSpectralWidth()))); |
347 | - } else if (exp.getExperimenter() == 0x2320) { | 347 | + } else if (treatmentInterpreter != null) { |
348 | - if (treatmentInterpreter != null) { | 348 | + builder.extension(treatmentInterpreter.mapAction(exp), deviceId); |
349 | - builder.extension(treatmentInterpreter.mapAction(exp), | ||
350 | - deviceId); | ||
351 | - } | ||
352 | } else { | 349 | } else { |
353 | log.warn("Unsupported OFActionExperimenter {}", exp.getExperimenter()); | 350 | log.warn("Unsupported OFActionExperimenter {}", exp.getExperimenter()); |
354 | } | 351 | } | ... | ... |
-
Please register or login to post a comment