Use DeviceId in FlowEntryBuilder to avoid creating deviceId many times per
flow entry build. Change-Id: I89e90426e1b94b8828b6f83a6dbfc33f4e7cf259
Showing
2 changed files
with
24 additions
and
27 deletions
... | @@ -16,7 +16,6 @@ | ... | @@ -16,7 +16,6 @@ |
16 | package org.onosproject.provider.of.flow.impl; | 16 | package org.onosproject.provider.of.flow.impl; |
17 | 17 | ||
18 | import com.google.common.collect.Lists; | 18 | import com.google.common.collect.Lists; |
19 | - | ||
20 | import org.onlab.packet.EthType; | 19 | import org.onlab.packet.EthType; |
21 | import org.onlab.packet.Ip4Address; | 20 | import org.onlab.packet.Ip4Address; |
22 | import org.onlab.packet.Ip4Prefix; | 21 | import org.onlab.packet.Ip4Prefix; |
... | @@ -48,7 +47,6 @@ import org.onosproject.net.flow.TrafficTreatment; | ... | @@ -48,7 +47,6 @@ import org.onosproject.net.flow.TrafficTreatment; |
48 | import org.onosproject.net.flow.criteria.ExtensionSelectorType.ExtensionSelectorTypes; | 47 | import org.onosproject.net.flow.criteria.ExtensionSelectorType.ExtensionSelectorTypes; |
49 | import org.onosproject.net.flow.instructions.ExtensionTreatmentType.ExtensionTreatmentTypes; | 48 | import org.onosproject.net.flow.instructions.ExtensionTreatmentType.ExtensionTreatmentTypes; |
50 | import org.onosproject.net.flow.instructions.Instructions; | 49 | import org.onosproject.net.flow.instructions.Instructions; |
51 | -import org.onosproject.openflow.controller.Dpid; | ||
52 | import org.onosproject.openflow.controller.ExtensionSelectorInterpreter; | 50 | import org.onosproject.openflow.controller.ExtensionSelectorInterpreter; |
53 | import org.onosproject.openflow.controller.ExtensionTreatmentInterpreter; | 51 | import org.onosproject.openflow.controller.ExtensionTreatmentInterpreter; |
54 | import org.projectfloodlight.openflow.protocol.OFFlowMod; | 52 | import org.projectfloodlight.openflow.protocol.OFFlowMod; |
... | @@ -86,20 +84,20 @@ import org.projectfloodlight.openflow.types.IPv4Address; | ... | @@ -86,20 +84,20 @@ import org.projectfloodlight.openflow.types.IPv4Address; |
86 | import org.projectfloodlight.openflow.types.IPv6Address; | 84 | import org.projectfloodlight.openflow.types.IPv6Address; |
87 | import org.projectfloodlight.openflow.types.Masked; | 85 | import org.projectfloodlight.openflow.types.Masked; |
88 | import org.projectfloodlight.openflow.types.OFVlanVidMatch; | 86 | import org.projectfloodlight.openflow.types.OFVlanVidMatch; |
87 | +import org.projectfloodlight.openflow.types.OduSignalID; | ||
89 | import org.projectfloodlight.openflow.types.TransportPort; | 88 | import org.projectfloodlight.openflow.types.TransportPort; |
90 | import org.projectfloodlight.openflow.types.U32; | 89 | import org.projectfloodlight.openflow.types.U32; |
91 | import org.projectfloodlight.openflow.types.U64; | 90 | import org.projectfloodlight.openflow.types.U64; |
92 | import org.projectfloodlight.openflow.types.U8; | 91 | import org.projectfloodlight.openflow.types.U8; |
93 | import org.projectfloodlight.openflow.types.VlanPcp; | 92 | import org.projectfloodlight.openflow.types.VlanPcp; |
94 | -import org.projectfloodlight.openflow.types.OduSignalID; | ||
95 | import org.slf4j.Logger; | 93 | import org.slf4j.Logger; |
96 | 94 | ||
97 | import java.util.List; | 95 | import java.util.List; |
98 | 96 | ||
99 | import static org.onosproject.net.flow.criteria.Criteria.matchLambda; | 97 | import static org.onosproject.net.flow.criteria.Criteria.matchLambda; |
100 | import static org.onosproject.net.flow.criteria.Criteria.matchOchSignalType; | 98 | import static org.onosproject.net.flow.criteria.Criteria.matchOchSignalType; |
101 | -import static org.onosproject.net.flow.criteria.Criteria.matchOduSignalType; | ||
102 | import static org.onosproject.net.flow.criteria.Criteria.matchOduSignalId; | 99 | import static org.onosproject.net.flow.criteria.Criteria.matchOduSignalId; |
100 | +import static org.onosproject.net.flow.criteria.Criteria.matchOduSignalType; | ||
103 | import static org.onosproject.net.flow.instructions.Instructions.modL0Lambda; | 101 | import static org.onosproject.net.flow.instructions.Instructions.modL0Lambda; |
104 | import static org.onosproject.net.flow.instructions.Instructions.modL1OduSignalId; | 102 | import static org.onosproject.net.flow.instructions.Instructions.modL1OduSignalId; |
105 | import static org.onosproject.provider.of.flow.impl.OpenFlowValueMapper.lookupChannelSpacing; | 103 | import static org.onosproject.provider.of.flow.impl.OpenFlowValueMapper.lookupChannelSpacing; |
... | @@ -121,7 +119,7 @@ public class FlowEntryBuilder { | ... | @@ -121,7 +119,7 @@ public class FlowEntryBuilder { |
121 | // the instruction type is apply instruction (immediate set in ONOS speak) | 119 | // the instruction type is apply instruction (immediate set in ONOS speak) |
122 | private final List<OFInstruction> instructions; | 120 | private final List<OFInstruction> instructions; |
123 | 121 | ||
124 | - private final Dpid dpid; | 122 | + private final DeviceId deviceId; |
125 | 123 | ||
126 | public enum FlowType { STAT, REMOVED, MOD } | 124 | public enum FlowType { STAT, REMOVED, MOD } |
127 | 125 | ||
... | @@ -129,21 +127,21 @@ public class FlowEntryBuilder { | ... | @@ -129,21 +127,21 @@ public class FlowEntryBuilder { |
129 | 127 | ||
130 | private final DriverService driverService; | 128 | private final DriverService driverService; |
131 | 129 | ||
132 | - public FlowEntryBuilder(Dpid dpid, OFFlowStatsEntry entry, DriverService driverService) { | 130 | + public FlowEntryBuilder(DeviceId deviceId, OFFlowStatsEntry entry, DriverService driverService) { |
133 | this.stat = entry; | 131 | this.stat = entry; |
134 | this.match = entry.getMatch(); | 132 | this.match = entry.getMatch(); |
135 | this.instructions = getInstructions(entry); | 133 | this.instructions = getInstructions(entry); |
136 | - this.dpid = dpid; | 134 | + this.deviceId = deviceId; |
137 | this.removed = null; | 135 | this.removed = null; |
138 | this.flowMod = null; | 136 | this.flowMod = null; |
139 | this.type = FlowType.STAT; | 137 | this.type = FlowType.STAT; |
140 | this.driverService = driverService; | 138 | this.driverService = driverService; |
141 | } | 139 | } |
142 | 140 | ||
143 | - public FlowEntryBuilder(Dpid dpid, OFFlowRemoved removed, DriverService driverService) { | 141 | + public FlowEntryBuilder(DeviceId deviceId, OFFlowRemoved removed, DriverService driverService) { |
144 | this.match = removed.getMatch(); | 142 | this.match = removed.getMatch(); |
145 | this.removed = removed; | 143 | this.removed = removed; |
146 | - this.dpid = dpid; | 144 | + this.deviceId = deviceId; |
147 | this.instructions = null; | 145 | this.instructions = null; |
148 | this.stat = null; | 146 | this.stat = null; |
149 | this.flowMod = null; | 147 | this.flowMod = null; |
... | @@ -151,9 +149,9 @@ public class FlowEntryBuilder { | ... | @@ -151,9 +149,9 @@ public class FlowEntryBuilder { |
151 | this.driverService = driverService; | 149 | this.driverService = driverService; |
152 | } | 150 | } |
153 | 151 | ||
154 | - public FlowEntryBuilder(Dpid dpid, OFFlowMod fm, DriverService driverService) { | 152 | + public FlowEntryBuilder(DeviceId deviceId, OFFlowMod fm, DriverService driverService) { |
155 | this.match = fm.getMatch(); | 153 | this.match = fm.getMatch(); |
156 | - this.dpid = dpid; | 154 | + this.deviceId = deviceId; |
157 | this.instructions = getInstructions(fm); | 155 | this.instructions = getInstructions(fm); |
158 | this.type = FlowType.MOD; | 156 | this.type = FlowType.MOD; |
159 | this.flowMod = fm; | 157 | this.flowMod = fm; |
... | @@ -168,7 +166,7 @@ public class FlowEntryBuilder { | ... | @@ -168,7 +166,7 @@ public class FlowEntryBuilder { |
168 | switch (this.type) { | 166 | switch (this.type) { |
169 | case STAT: | 167 | case STAT: |
170 | builder = DefaultFlowRule.builder() | 168 | builder = DefaultFlowRule.builder() |
171 | - .forDevice(DeviceId.deviceId(Dpid.uri(dpid))) | 169 | + .forDevice(deviceId) |
172 | .withSelector(buildSelector()) | 170 | .withSelector(buildSelector()) |
173 | .withTreatment(buildTreatment()) | 171 | .withTreatment(buildTreatment()) |
174 | .withPriority(stat.getPriority()) | 172 | .withPriority(stat.getPriority()) |
... | @@ -184,7 +182,7 @@ public class FlowEntryBuilder { | ... | @@ -184,7 +182,7 @@ public class FlowEntryBuilder { |
184 | stat.getByteCount().getValue()); | 182 | stat.getByteCount().getValue()); |
185 | case REMOVED: | 183 | case REMOVED: |
186 | builder = DefaultFlowRule.builder() | 184 | builder = DefaultFlowRule.builder() |
187 | - .forDevice(DeviceId.deviceId(Dpid.uri(dpid))) | 185 | + .forDevice(deviceId) |
188 | .withSelector(buildSelector()) | 186 | .withSelector(buildSelector()) |
189 | .withPriority(removed.getPriority()) | 187 | .withPriority(removed.getPriority()) |
190 | .makeTemporary(removed.getIdleTimeout()) | 188 | .makeTemporary(removed.getIdleTimeout()) |
... | @@ -200,7 +198,7 @@ public class FlowEntryBuilder { | ... | @@ -200,7 +198,7 @@ public class FlowEntryBuilder { |
200 | case MOD: | 198 | case MOD: |
201 | FlowEntryState flowState = state.length > 0 ? state[0] : FlowEntryState.FAILED; | 199 | FlowEntryState flowState = state.length > 0 ? state[0] : FlowEntryState.FAILED; |
202 | builder = DefaultFlowRule.builder() | 200 | builder = DefaultFlowRule.builder() |
203 | - .forDevice(DeviceId.deviceId(Dpid.uri(dpid))) | 201 | + .forDevice(deviceId) |
204 | .withSelector(buildSelector()) | 202 | .withSelector(buildSelector()) |
205 | .withTreatment(buildTreatment()) | 203 | .withTreatment(buildTreatment()) |
206 | .withPriority(flowMod.getPriority()) | 204 | .withPriority(flowMod.getPriority()) |
... | @@ -293,7 +291,7 @@ public class FlowEntryBuilder { | ... | @@ -293,7 +291,7 @@ public class FlowEntryBuilder { |
293 | 291 | ||
294 | private TrafficTreatment.Builder buildActions(List<OFAction> actions, | 292 | private TrafficTreatment.Builder buildActions(List<OFAction> actions, |
295 | TrafficTreatment.Builder builder) { | 293 | TrafficTreatment.Builder builder) { |
296 | - DriverHandler driverHandler = getDriver(dpid); | 294 | + DriverHandler driverHandler = getDriver(deviceId); |
297 | ExtensionTreatmentInterpreter treatmentInterpreter; | 295 | ExtensionTreatmentInterpreter treatmentInterpreter; |
298 | if (driverHandler.hasBehaviour(ExtensionTreatmentInterpreter.class)) { | 296 | if (driverHandler.hasBehaviour(ExtensionTreatmentInterpreter.class)) { |
299 | treatmentInterpreter = driverHandler.behaviour(ExtensionTreatmentInterpreter.class); | 297 | treatmentInterpreter = driverHandler.behaviour(ExtensionTreatmentInterpreter.class); |
... | @@ -349,7 +347,7 @@ public class FlowEntryBuilder { | ... | @@ -349,7 +347,7 @@ public class FlowEntryBuilder { |
349 | } else if (exp.getExperimenter() == 0x2320) { | 347 | } else if (exp.getExperimenter() == 0x2320) { |
350 | if (treatmentInterpreter != null) { | 348 | if (treatmentInterpreter != null) { |
351 | builder.extension(treatmentInterpreter.mapAction(exp), | 349 | builder.extension(treatmentInterpreter.mapAction(exp), |
352 | - DeviceId.deviceId(Dpid.uri(dpid))); | 350 | + deviceId); |
353 | } | 351 | } |
354 | } else { | 352 | } else { |
355 | log.warn("Unsupported OFActionExperimenter {}", exp.getExperimenter()); | 353 | log.warn("Unsupported OFActionExperimenter {}", exp.getExperimenter()); |
... | @@ -417,7 +415,7 @@ public class FlowEntryBuilder { | ... | @@ -417,7 +415,7 @@ public class FlowEntryBuilder { |
417 | 415 | ||
418 | 416 | ||
419 | private void handleSetField(TrafficTreatment.Builder builder, OFActionSetField action) { | 417 | private void handleSetField(TrafficTreatment.Builder builder, OFActionSetField action) { |
420 | - DriverHandler driverHandler = getDriver(dpid); | 418 | + DriverHandler driverHandler = getDriver(deviceId); |
421 | ExtensionTreatmentInterpreter treatmentInterpreter; | 419 | ExtensionTreatmentInterpreter treatmentInterpreter; |
422 | if (driverHandler.hasBehaviour(ExtensionTreatmentInterpreter.class)) { | 420 | if (driverHandler.hasBehaviour(ExtensionTreatmentInterpreter.class)) { |
423 | treatmentInterpreter = driverHandler.behaviour(ExtensionTreatmentInterpreter.class); | 421 | treatmentInterpreter = driverHandler.behaviour(ExtensionTreatmentInterpreter.class); |
... | @@ -436,7 +434,7 @@ public class FlowEntryBuilder { | ... | @@ -436,7 +434,7 @@ public class FlowEntryBuilder { |
436 | if (treatmentInterpreter != null && | 434 | if (treatmentInterpreter != null && |
437 | treatmentInterpreter.supported(ExtensionTreatmentTypes.OFDPA_SET_VLAN_ID.type())) { | 435 | treatmentInterpreter.supported(ExtensionTreatmentTypes.OFDPA_SET_VLAN_ID.type())) { |
438 | builder.extension(treatmentInterpreter.mapAction(action), | 436 | builder.extension(treatmentInterpreter.mapAction(action), |
439 | - DeviceId.deviceId(Dpid.uri(dpid))); | 437 | + deviceId); |
440 | } else { | 438 | } else { |
441 | @SuppressWarnings("unchecked") | 439 | @SuppressWarnings("unchecked") |
442 | OFOxm<OFVlanVidMatch> vlanvid = (OFOxm<OFVlanVidMatch>) oxm; | 440 | OFOxm<OFVlanVidMatch> vlanvid = (OFOxm<OFVlanVidMatch>) oxm; |
... | @@ -503,7 +501,7 @@ public class FlowEntryBuilder { | ... | @@ -503,7 +501,7 @@ public class FlowEntryBuilder { |
503 | case TUNNEL_IPV4_DST: | 501 | case TUNNEL_IPV4_DST: |
504 | if (treatmentInterpreter != null && | 502 | if (treatmentInterpreter != null && |
505 | treatmentInterpreter.supported(ExtensionTreatmentTypes.NICIRA_SET_TUNNEL_DST.type())) { | 503 | treatmentInterpreter.supported(ExtensionTreatmentTypes.NICIRA_SET_TUNNEL_DST.type())) { |
506 | - builder.extension(treatmentInterpreter.mapAction(action), DeviceId.deviceId(Dpid.uri(dpid))); | 504 | + builder.extension(treatmentInterpreter.mapAction(action), deviceId); |
507 | } | 505 | } |
508 | break; | 506 | break; |
509 | case EXP_ODU_SIG_ID: | 507 | case EXP_ODU_SIG_ID: |
... | @@ -592,7 +590,7 @@ public class FlowEntryBuilder { | ... | @@ -592,7 +590,7 @@ public class FlowEntryBuilder { |
592 | Ip6Prefix ip6Prefix; | 590 | Ip6Prefix ip6Prefix; |
593 | Ip4Address ip; | 591 | Ip4Address ip; |
594 | 592 | ||
595 | - DriverHandler driverHandler = getDriver(dpid); | 593 | + DriverHandler driverHandler = getDriver(deviceId); |
596 | ExtensionSelectorInterpreter selectorInterpreter; | 594 | ExtensionSelectorInterpreter selectorInterpreter; |
597 | if (driverHandler.hasBehaviour(ExtensionSelectorInterpreter.class)) { | 595 | if (driverHandler.hasBehaviour(ExtensionSelectorInterpreter.class)) { |
598 | selectorInterpreter = driverHandler.behaviour(ExtensionSelectorInterpreter.class); | 596 | selectorInterpreter = driverHandler.behaviour(ExtensionSelectorInterpreter.class); |
... | @@ -648,7 +646,7 @@ public class FlowEntryBuilder { | ... | @@ -648,7 +646,7 @@ public class FlowEntryBuilder { |
648 | if (match.getVersion().equals(OFVersion.OF_13)) { | 646 | if (match.getVersion().equals(OFVersion.OF_13)) { |
649 | OFOxm oxm = ((OFMatchV3) match).getOxmList().get(MatchField.VLAN_VID); | 647 | OFOxm oxm = ((OFMatchV3) match).getOxmList().get(MatchField.VLAN_VID); |
650 | builder.extension(selectorInterpreter.mapOxm(oxm), | 648 | builder.extension(selectorInterpreter.mapOxm(oxm), |
651 | - DeviceId.deviceId(Dpid.uri(dpid))); | 649 | + deviceId); |
652 | } else { | 650 | } else { |
653 | break; | 651 | break; |
654 | } | 652 | } |
... | @@ -881,8 +879,7 @@ public class FlowEntryBuilder { | ... | @@ -881,8 +879,7 @@ public class FlowEntryBuilder { |
881 | return builder.build(); | 879 | return builder.build(); |
882 | } | 880 | } |
883 | 881 | ||
884 | - private DriverHandler getDriver(Dpid dpid) { | 882 | + private DriverHandler getDriver(DeviceId deviceId) { |
885 | - DeviceId deviceId = DeviceId.deviceId(Dpid.uri(dpid)); | ||
886 | Driver driver = driverService.getDriver(deviceId); | 883 | Driver driver = driverService.getDriver(deviceId); |
887 | DriverHandler handler = new DefaultDriverHandler(new DefaultDriverData(driver, deviceId)); | 884 | DriverHandler handler = new DefaultDriverHandler(new DefaultDriverData(driver, deviceId)); |
888 | return handler; | 885 | return handler; | ... | ... |
... | @@ -425,12 +425,12 @@ public class OpenFlowRuleProvider extends AbstractProvider | ... | @@ -425,12 +425,12 @@ public class OpenFlowRuleProvider extends AbstractProvider |
425 | 425 | ||
426 | @Override | 426 | @Override |
427 | public void handleMessage(Dpid dpid, OFMessage msg) { | 427 | public void handleMessage(Dpid dpid, OFMessage msg) { |
428 | - OpenFlowSwitch sw = controller.getSwitch(dpid); | 428 | + DeviceId deviceId = DeviceId.deviceId(Dpid.uri(dpid)); |
429 | switch (msg.getType()) { | 429 | switch (msg.getType()) { |
430 | case FLOW_REMOVED: | 430 | case FLOW_REMOVED: |
431 | OFFlowRemoved removed = (OFFlowRemoved) msg; | 431 | OFFlowRemoved removed = (OFFlowRemoved) msg; |
432 | 432 | ||
433 | - FlowEntry fr = new FlowEntryBuilder(dpid, removed, driverService).build(); | 433 | + FlowEntry fr = new FlowEntryBuilder(deviceId, removed, driverService).build(); |
434 | providerService.flowRemoved(fr); | 434 | providerService.flowRemoved(fr); |
435 | 435 | ||
436 | if (adaptiveFlowSampling) { | 436 | if (adaptiveFlowSampling) { |
... | @@ -481,7 +481,7 @@ public class OpenFlowRuleProvider extends AbstractProvider | ... | @@ -481,7 +481,7 @@ public class OpenFlowRuleProvider extends AbstractProvider |
481 | InternalCacheEntry entry = | 481 | InternalCacheEntry entry = |
482 | pendingBatches.getIfPresent(msg.getXid()); | 482 | pendingBatches.getIfPresent(msg.getXid()); |
483 | if (entry != null) { | 483 | if (entry != null) { |
484 | - entry.appendFailure(new FlowEntryBuilder(dpid, fm, driverService).build()); | 484 | + entry.appendFailure(new FlowEntryBuilder(deviceId, fm, driverService).build()); |
485 | } else { | 485 | } else { |
486 | log.error("No matching batch for this error: {}", error); | 486 | log.error("No matching batch for this error: {}", error); |
487 | } | 487 | } |
... | @@ -508,7 +508,7 @@ public class OpenFlowRuleProvider extends AbstractProvider | ... | @@ -508,7 +508,7 @@ public class OpenFlowRuleProvider extends AbstractProvider |
508 | DeviceId did = DeviceId.deviceId(Dpid.uri(dpid)); | 508 | DeviceId did = DeviceId.deviceId(Dpid.uri(dpid)); |
509 | 509 | ||
510 | List<FlowEntry> flowEntries = replies.getEntries().stream() | 510 | List<FlowEntry> flowEntries = replies.getEntries().stream() |
511 | - .map(entry -> new FlowEntryBuilder(dpid, entry, driverService).build()) | 511 | + .map(entry -> new FlowEntryBuilder(did, entry, driverService).build()) |
512 | .collect(Collectors.toList()); | 512 | .collect(Collectors.toList()); |
513 | 513 | ||
514 | if (adaptiveFlowSampling) { | 514 | if (adaptiveFlowSampling) { | ... | ... |
-
Please register or login to post a comment