Skip to content

Commit ee664cf

Browse files
committed
Workaround for OF-DPA.
Change-Id: I89fbd04f8a68eb729f88dccaf0d472a3eef18859
1 parent 1a04eaa commit ee664cf

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

carrierethernet/src/main/java/org/onosproject/ecord/carrierethernet/app/CarrierEthernetPacketNodeManager.java

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,22 @@
2323
import org.apache.felix.scr.annotations.ReferenceCardinality;
2424
import org.apache.felix.scr.annotations.Service;
2525
import org.onlab.packet.EthType.EtherType;
26+
import org.onlab.packet.Ethernet;
2627
import org.onlab.packet.VlanId;
2728
import org.onosproject.core.ApplicationId;
2829
import org.onosproject.core.CoreService;
2930
import org.onosproject.ecord.carrierethernet.api.CarrierEthernetPacketNodeService;
3031
import org.onosproject.net.DeviceId;
3132
import org.onosproject.net.PortNumber;
33+
import org.onosproject.net.driver.Driver;
34+
import org.onosproject.net.driver.DriverService;
3235
import org.onosproject.net.flow.DefaultFlowRule;
3336
import org.onosproject.net.flow.DefaultTrafficSelector;
3437
import org.onosproject.net.flow.DefaultTrafficTreatment;
3538
import org.onosproject.net.flow.FlowRule;
3639
import org.onosproject.net.flow.FlowRuleService;
3740
import org.onosproject.net.flow.TrafficSelector;
41+
import org.onosproject.net.flow.TrafficSelector.Builder;
3842
import org.onosproject.net.flow.TrafficTreatment;
3943
import org.onosproject.net.flow.criteria.Criteria;
4044
import org.onosproject.net.flow.criteria.Criterion;
@@ -58,8 +62,6 @@
5862
import org.onosproject.net.meter.MeterRequest;
5963
import org.onosproject.net.meter.MeterService;
6064
import org.onosproject.openflow.controller.Dpid;
61-
import org.onosproject.openflow.controller.OpenFlowController;
62-
import org.onosproject.openflow.controller.OpenFlowSwitch;
6365
import org.slf4j.Logger;
6466

6567
import java.util.Collection;
@@ -96,9 +98,9 @@ public class CarrierEthernetPacketNodeManager implements CarrierEthernetPacketNo
9698
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
9799
protected FlowObjectiveService flowObjectiveService;
98100

99-
// FIXME App directly depending on SB details is probably not correct
101+
// FIXME slightly better way to detect OF-DPA issues
100102
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
101-
protected OpenFlowController controller;
103+
protected DriverService drivers;
102104

103105
private final Logger log = getLogger(getClass());
104106

@@ -198,10 +200,16 @@ private void createFlowObjectives(CarrierEthernetForwardingConstruct fc, Carrier
198200
// Prepare and submit next and forwarding objectives
199201
////////////////////////////////////////////////////
200202

201-
TrafficSelector fwdSelector = DefaultTrafficSelector.builder()
203+
Builder fwdSelectorBuilder = DefaultTrafficSelector.builder()
202204
.matchVlanId(fc.vlanId())
203-
.matchInPort(ingressNi.cp().port())
204-
.build();
205+
.matchInPort(ingressNi.cp().port());
206+
207+
if (isOfDpa(ingressNi.cp().deviceId())) {
208+
// workaround for OF-DPA
209+
fwdSelectorBuilder.matchEthType(Ethernet.TYPE_IPV4);
210+
}
211+
212+
TrafficSelector fwdSelector = fwdSelectorBuilder.build();
205213

206214
Integer nextId = flowObjectiveService.allocateNextId();
207215

@@ -261,6 +269,14 @@ public void createBandwidthProfileResources(CarrierEthernetForwardingConstruct f
261269
deviceMeterIdMap.put(fc.id(), deviceMeterIdSet);
262270
}
263271

272+
private boolean isOfDpa(DeviceId deviceId) {
273+
Driver driver = drivers.getDriver(deviceId);
274+
if (driver != null) {
275+
return driver.swVersion().contains("OF-DPA");
276+
}
277+
return false;
278+
}
279+
264280
@Override
265281
public void applyBandwidthProfileResources(CarrierEthernetForwardingConstruct fc, CarrierEthernetUni uni) {
266282

@@ -273,10 +289,9 @@ public void applyBandwidthProfileResources(CarrierEthernetForwardingConstruct fc
273289
}
274290

275291
Dpid dpid = Dpid.dpid(deviceId.uri());
276-
OpenFlowSwitch sw = controller.getSwitch(dpid);
277292

278293
// Do not apply meters to OFDPA 2.0 switches since they are not currently supported
279-
if (sw.softwareDescription().equals("OF-DPA 2.0")) {
294+
if (isOfDpa(deviceId)) {
280295
return;
281296
}
282297

0 commit comments

Comments
 (0)