Saurav Das
Committed by Gerrit Code Review

CORD-48 First checkin for enabling OF-DPA driver to support the SR app.

Filtering Objective support added. Driver renamed from OFDPA1 to OFDPA2.
Code refactored within driver to reflect test-code which will be used by
static flow-pusher app in the future.

Change-Id: I7132d8b8eaf28df7c11646c5a35035f258c65af4
...@@ -112,7 +112,7 @@ public class ArpHandler { ...@@ -112,7 +112,7 @@ public class ArpHandler {
112 112
113 113
114 private boolean isArpReqForRouter(DeviceId deviceId, ARP arpRequest) { 114 private boolean isArpReqForRouter(DeviceId deviceId, ARP arpRequest) {
115 - List<Ip4Address> gatewayIpAddresses = config.getSubnetGatewayIps(deviceId); 115 + List<Ip4Address> gatewayIpAddresses = config.getPortIPs(deviceId);
116 if (gatewayIpAddresses != null) { 116 if (gatewayIpAddresses != null) {
117 Ip4Address targetProtocolAddress = Ip4Address.valueOf(arpRequest 117 Ip4Address targetProtocolAddress = Ip4Address.valueOf(arpRequest
118 .getTargetProtocolAddress()); 118 .getTargetProtocolAddress());
......
...@@ -499,14 +499,13 @@ public class DefaultRoutingHandler { ...@@ -499,14 +499,13 @@ public class DefaultRoutingHandler {
499 } 499 }
500 500
501 /** 501 /**
502 - * Populates table miss entries for all tables, and pipeline rules for VLAN 502 + * Populates filtering rules for permitting Router DstMac and VLAN.
503 - * and TCAM tables. XXX rename/rethink
504 * 503 *
505 * @param deviceId Switch ID to set the rules 504 * @param deviceId Switch ID to set the rules
506 */ 505 */
507 - public void populateTtpRules(DeviceId deviceId) { 506 + public void populatePortAddressingRules(DeviceId deviceId) {
508 - rulePopulator.populateTableVlan(deviceId); 507 + rulePopulator.populateRouterMacVlanFilters(deviceId);
509 - rulePopulator.populateTableTMac(deviceId); 508 + rulePopulator.populateRouterIpPunts(deviceId);
510 } 509 }
511 510
512 /** 511 /**
......
...@@ -126,7 +126,7 @@ public class DeviceConfiguration implements DeviceProperties { ...@@ -126,7 +126,7 @@ public class DeviceConfiguration implements DeviceProperties {
126 } 126 }
127 127
128 /** 128 /**
129 - * Returns the segment id of a segment router. 129 + * Returns the Node segment id of a segment router.
130 * 130 *
131 * @param deviceId device identifier 131 * @param deviceId device identifier
132 * @return segment id 132 * @return segment id
...@@ -147,7 +147,7 @@ public class DeviceConfiguration implements DeviceProperties { ...@@ -147,7 +147,7 @@ public class DeviceConfiguration implements DeviceProperties {
147 } 147 }
148 148
149 /** 149 /**
150 - * Returns the segment id of a segment router given its mac address. 150 + * Returns the Node segment id of a segment router given its Router mac address.
151 * 151 *
152 * @param routerMac router mac address 152 * @param routerMac router mac address
153 * @return segment id 153 * @return segment id
...@@ -164,7 +164,7 @@ public class DeviceConfiguration implements DeviceProperties { ...@@ -164,7 +164,7 @@ public class DeviceConfiguration implements DeviceProperties {
164 } 164 }
165 165
166 /** 166 /**
167 - * Returns the segment id of a segment router given its router ip address. 167 + * Returns the Node segment id of a segment router given its Router ip address.
168 * 168 *
169 * @param routerAddress router ip address 169 * @param routerAddress router ip address
170 * @return segment id 170 * @return segment id
...@@ -223,7 +223,7 @@ public class DeviceConfiguration implements DeviceProperties { ...@@ -223,7 +223,7 @@ public class DeviceConfiguration implements DeviceProperties {
223 223
224 /** 224 /**
225 * Indicates if the segment router is a edge router or 225 * Indicates if the segment router is a edge router or
226 - * a transit/back bone router. 226 + * a core/backbone router.
227 * 227 *
228 * @param deviceId device identifier 228 * @param deviceId device identifier
229 * @return boolean 229 * @return boolean
...@@ -244,9 +244,9 @@ public class DeviceConfiguration implements DeviceProperties { ...@@ -244,9 +244,9 @@ public class DeviceConfiguration implements DeviceProperties {
244 } 244 }
245 245
246 /** 246 /**
247 - * Returns the segment ids of all configured segment routers. 247 + * Returns the node segment ids of all configured segment routers.
248 * 248 *
249 - * @return list of segment ids 249 + * @return list of node segment ids
250 */ 250 */
251 @Override 251 @Override
252 public List<Integer> getAllDeviceSegmentIds() { 252 public List<Integer> getAllDeviceSegmentIds() {
...@@ -290,12 +290,14 @@ public class DeviceConfiguration implements DeviceProperties { ...@@ -290,12 +290,14 @@ public class DeviceConfiguration implements DeviceProperties {
290 } 290 }
291 291
292 /** 292 /**
293 - * Returns the configured subnet gateway ip addresses for a segment router. 293 + * Returns the configured port ip addresses for a segment router.
294 + * These addresses serve as gateway IP addresses for the subnets configured
295 + * on those ports.
294 * 296 *
295 * @param deviceId device identifier 297 * @param deviceId device identifier
296 - * @return list of ip addresses 298 + * @return list of ip addresses configured on the ports
297 */ 299 */
298 - public List<Ip4Address> getSubnetGatewayIps(DeviceId deviceId) { 300 + public List<Ip4Address> getPortIPs(DeviceId deviceId) {
299 if (deviceConfigMap.get(deviceId) != null) { 301 if (deviceConfigMap.get(deviceId) != null) {
300 log.trace("getSubnetGatewayIps for device{} is {}", 302 log.trace("getSubnetGatewayIps for device{} is {}",
301 deviceId, 303 deviceId,
...@@ -307,6 +309,20 @@ public class DeviceConfiguration implements DeviceProperties { ...@@ -307,6 +309,20 @@ public class DeviceConfiguration implements DeviceProperties {
307 } 309 }
308 310
309 /** 311 /**
312 + * Returns the configured IP addresses per port
313 + * for a segment router.
314 + *
315 + * @param deviceId device identifier
316 + * @return map of port to gateway IP addresses
317 + */
318 + public Map<PortNumber, Ip4Address> getPortIPMap(DeviceId deviceId) {
319 + if (deviceConfigMap.get(deviceId) != null) {
320 + return deviceConfigMap.get(deviceId).gatewayIps;
321 + }
322 + return null;
323 + }
324 +
325 + /**
310 * Returns the configured subnet prefixes for a segment router. 326 * Returns the configured subnet prefixes for a segment router.
311 * 327 *
312 * @param deviceId device identifier 328 * @param deviceId device identifier
......
...@@ -70,7 +70,7 @@ public class IcmpHandler { ...@@ -70,7 +70,7 @@ public class IcmpHandler {
70 DeviceId deviceId = connectPoint.deviceId(); 70 DeviceId deviceId = connectPoint.deviceId();
71 Ip4Address destinationAddress = 71 Ip4Address destinationAddress =
72 Ip4Address.valueOf(ipv4.getDestinationAddress()); 72 Ip4Address.valueOf(ipv4.getDestinationAddress());
73 - List<Ip4Address> gatewayIpAddresses = config.getSubnetGatewayIps(deviceId); 73 + List<Ip4Address> gatewayIpAddresses = config.getPortIPs(deviceId);
74 Ip4Address routerIp = config.getRouterIp(deviceId); 74 Ip4Address routerIp = config.getRouterIp(deviceId);
75 IpPrefix routerIpPrefix = IpPrefix.valueOf(routerIp, IpPrefix.MAX_INET_MASK_LENGTH); 75 IpPrefix routerIpPrefix = IpPrefix.valueOf(routerIp, IpPrefix.MAX_INET_MASK_LENGTH);
76 Ip4Address routerIpAddress = routerIpPrefix.getIp4Prefix().address(); 76 Ip4Address routerIpAddress = routerIpPrefix.getIp4Prefix().address();
......
...@@ -38,6 +38,7 @@ import org.onosproject.net.flowobjective.ForwardingObjective; ...@@ -38,6 +38,7 @@ import org.onosproject.net.flowobjective.ForwardingObjective;
38 import org.onosproject.net.flowobjective.Objective; 38 import org.onosproject.net.flowobjective.Objective;
39 import org.onosproject.net.flowobjective.ObjectiveError; 39 import org.onosproject.net.flowobjective.ObjectiveError;
40 import org.onosproject.net.flowobjective.ForwardingObjective.Builder; 40 import org.onosproject.net.flowobjective.ForwardingObjective.Builder;
41 +import org.onosproject.net.flowobjective.ForwardingObjective.Flag;
41 import org.onosproject.net.flowobjective.ObjectiveContext; 42 import org.onosproject.net.flowobjective.ObjectiveContext;
42 import org.slf4j.Logger; 43 import org.slf4j.Logger;
43 import org.slf4j.LoggerFactory; 44 import org.slf4j.LoggerFactory;
...@@ -57,6 +58,9 @@ public class RoutingRulePopulator { ...@@ -57,6 +58,9 @@ public class RoutingRulePopulator {
57 private AtomicLong rulePopulationCounter; 58 private AtomicLong rulePopulationCounter;
58 private SegmentRoutingManager srManager; 59 private SegmentRoutingManager srManager;
59 private DeviceConfiguration config; 60 private DeviceConfiguration config;
61 +
62 + private static final int HIGHEST_PRIORITY = 0xffff;
63 +
60 /** 64 /**
61 * Creates a RoutingRulePopulator object. 65 * Creates a RoutingRulePopulator object.
62 * 66 *
...@@ -98,7 +102,7 @@ public class RoutingRulePopulator { ...@@ -98,7 +102,7 @@ public class RoutingRulePopulator {
98 TrafficSelector.Builder sbuilder = DefaultTrafficSelector.builder(); 102 TrafficSelector.Builder sbuilder = DefaultTrafficSelector.builder();
99 TrafficTreatment.Builder tbuilder = DefaultTrafficTreatment.builder(); 103 TrafficTreatment.Builder tbuilder = DefaultTrafficTreatment.builder();
100 104
101 - sbuilder.matchIPDst(IpPrefix.valueOf(hostIp, 32)); 105 + sbuilder.matchIPDst(IpPrefix.valueOf(hostIp, IpPrefix.MAX_INET_MASK_LENGTH));
102 sbuilder.matchEthType(Ethernet.TYPE_IPV4); 106 sbuilder.matchEthType(Ethernet.TYPE_IPV4);
103 107
104 tbuilder.deferred() 108 tbuilder.deferred()
...@@ -350,16 +354,22 @@ public class RoutingRulePopulator { ...@@ -350,16 +354,22 @@ public class RoutingRulePopulator {
350 } 354 }
351 355
352 /** 356 /**
353 - * Populates VLAN flows rules. All packets are forwarded to TMAC table. 357 + * Creates a filtering objective to permit all untagged packets with a
358 + * dstMac corresponding to the router's MAC address.
354 * 359 *
355 - * @param deviceId switch ID to set the rules 360 + * @param deviceId the switch dpid for the router
356 */ 361 */
357 - public void populateTableVlan(DeviceId deviceId) { 362 + public void populateRouterMacVlanFilters(DeviceId deviceId) {
358 FilteringObjective.Builder fob = DefaultFilteringObjective.builder(); 363 FilteringObjective.Builder fob = DefaultFilteringObjective.builder();
359 fob.withKey(Criteria.matchInPort(PortNumber.ALL)) 364 fob.withKey(Criteria.matchInPort(PortNumber.ALL))
360 - .addCondition(Criteria.matchVlanId(VlanId.NONE)); 365 + .addCondition(Criteria.matchEthDst(config.getDeviceMac(deviceId)))
366 + .addCondition(Criteria.matchVlanId(VlanId.NONE))
367 + .addCondition(Criteria.matchIPDst(
368 + IpPrefix.valueOf(config.getRouterIp(deviceId),
369 + IpPrefix.MAX_INET_MASK_LENGTH)));
370 +
361 fob.permit().fromApp(srManager.appId); 371 fob.permit().fromApp(srManager.appId);
362 - log.debug("populateTableVlan: Installing filtering objective for untagged packets"); 372 + log.debug("Installing filtering objective for untagged packets");
363 srManager.flowObjectiveService. 373 srManager.flowObjectiveService.
364 filter(deviceId, 374 filter(deviceId,
365 fob.add(new SRObjectiveContext(deviceId, 375 fob.add(new SRObjectiveContext(deviceId,
...@@ -367,23 +377,35 @@ public class RoutingRulePopulator { ...@@ -367,23 +377,35 @@ public class RoutingRulePopulator {
367 } 377 }
368 378
369 /** 379 /**
370 - * Populates TMAC table rules. IP packets are forwarded to IP table. MPLS 380 + * Creates a forwarding objective to punt all IP packets, destined to the
371 - * packets are forwarded to MPLS table. 381 + * router's port IP addresses, to the controller. Note that it the input
382 + * port should not be matched on, as these packets can come from any input.
372 * 383 *
373 - * @param deviceId switch ID to set the rules 384 + * @param deviceId the switch dpid for the router
374 */ 385 */
375 - public void populateTableTMac(DeviceId deviceId) { 386 + public void populateRouterIpPunts(DeviceId deviceId) {
376 - 387 + ForwardingObjective.Builder puntIp = DefaultForwardingObjective.builder();
377 - FilteringObjective.Builder fob = DefaultFilteringObjective.builder(); 388 +
378 - fob.withKey(Criteria.matchInPort(PortNumber.ALL)) 389 + List<Ip4Address> gws = config.getPortIPs(deviceId);
379 - .addCondition(Criteria.matchEthDst(config 390 + for (Ip4Address ipaddr : gws) {
380 - .getDeviceMac(deviceId))); 391 + TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
381 - fob.permit().fromApp(srManager.appId); 392 + TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder();
382 - log.debug("populateTableTMac: Installing filtering objective for router mac"); 393 + selector.matchEthType(Ethernet.TYPE_IPV4);
394 + selector.matchIPDst(IpPrefix.valueOf(ipaddr,
395 + IpPrefix.MAX_INET_MASK_LENGTH));
396 + treatment.setOutput(PortNumber.CONTROLLER);
397 + puntIp.withSelector(selector.build());
398 + puntIp.withTreatment(treatment.build());
399 + puntIp.withFlag(Flag.VERSATILE)
400 + .withPriority(HIGHEST_PRIORITY)
401 + .makePermanent()
402 + .fromApp(srManager.appId);
403 + log.debug("Installing forwarding objective to punt port IP addresses");
383 srManager.flowObjectiveService. 404 srManager.flowObjectiveService.
384 - filter(deviceId, 405 + forward(deviceId,
385 - fob.add(new SRObjectiveContext(deviceId, 406 + puntIp.add(new SRObjectiveContext(deviceId,
386 - SRObjectiveContext.ObjectiveType.FILTER))); 407 + SRObjectiveContext.ObjectiveType.FORWARDING)));
408 + }
387 } 409 }
388 410
389 private PortNumber selectOnePort(DeviceId srcId, Set<DeviceId> destIds) { 411 private PortNumber selectOnePort(DeviceId srcId, Set<DeviceId> destIds) {
......
...@@ -497,7 +497,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -497,7 +497,7 @@ public class SegmentRoutingManager implements SegmentRoutingService {
497 flowObjectiveService, 497 flowObjectiveService,
498 nsNextObjStore); 498 nsNextObjStore);
499 groupHandlerMap.put(device.id(), dgh); 499 groupHandlerMap.put(device.id(), dgh);
500 - defaultRoutingHandler.populateTtpRules(device.id()); 500 + defaultRoutingHandler.populatePortAddressingRules(device.id());
501 } 501 }
502 502
503 private void processPortRemoved(Device device, Port port) { 503 private void processPortRemoved(Device device, Port port) {
...@@ -542,7 +542,7 @@ public class SegmentRoutingManager implements SegmentRoutingService { ...@@ -542,7 +542,7 @@ public class SegmentRoutingManager implements SegmentRoutingService {
542 flowObjectiveService, 542 flowObjectiveService,
543 nsNextObjStore); 543 nsNextObjStore);
544 groupHandlerMap.put(device.id(), groupHandler); 544 groupHandlerMap.put(device.id(), groupHandler);
545 - defaultRoutingHandler.populateTtpRules(device.id()); 545 + defaultRoutingHandler.populatePortAddressingRules(device.id());
546 } 546 }
547 547
548 defaultRoutingHandler.startPopulationProcess(); 548 defaultRoutingHandler.startPopulationProcess();
......
...@@ -29,22 +29,23 @@ import org.slf4j.Logger; ...@@ -29,22 +29,23 @@ import org.slf4j.Logger;
29 29
30 30
31 /** 31 /**
32 - * Driver for software switch emulation of the OFDPA 1.0 pipeline. 32 + * Driver for software switch emulation of the OFDPA 2.0 pipeline.
33 * The software switch is the CPqD OF 1.3 switch. 33 * The software switch is the CPqD OF 1.3 switch.
34 */ 34 */
35 -public class CpqdOFDPA1Pipeline extends OFDPA1Pipeline { 35 +public class CpqdOFDPA2Pipeline extends OFDPA2Pipeline {
36 36
37 private final Logger log = getLogger(getClass()); 37 private final Logger log = getLogger(getClass());
38 38
39 @Override 39 @Override
40 protected void initializePipeline() { 40 protected void initializePipeline() {
41 processPortTable(); 41 processPortTable();
42 - //processVlanTable();
43 processTmacTable(); 42 processTmacTable();
44 processIpTable(); 43 processIpTable();
45 - //processMcastTable();
46 processBridgingTable(); 44 processBridgingTable();
47 processAclTable(); 45 processAclTable();
46 + // XXX implement table miss entries and default groups
47 + //processVlanTable();
48 + //processMPLSTable();
48 //processGroupTable(); 49 //processGroupTable();
49 } 50 }
50 51
...@@ -169,6 +170,7 @@ public class CpqdOFDPA1Pipeline extends OFDPA1Pipeline { ...@@ -169,6 +170,7 @@ public class CpqdOFDPA1Pipeline extends OFDPA1Pipeline {
169 })); 170 }));
170 } 171 }
171 172
173 + @Override
172 protected void processAclTable() { 174 protected void processAclTable() {
173 //table miss entry - catch all to executed action-set 175 //table miss entry - catch all to executed action-set
174 FlowRuleOperations.Builder ops = FlowRuleOperations.builder(); 176 FlowRuleOperations.Builder ops = FlowRuleOperations.builder();
......
...@@ -53,6 +53,7 @@ import org.onosproject.net.flow.criteria.MplsCriterion; ...@@ -53,6 +53,7 @@ import org.onosproject.net.flow.criteria.MplsCriterion;
53 import org.onosproject.net.flow.criteria.PortCriterion; 53 import org.onosproject.net.flow.criteria.PortCriterion;
54 import org.onosproject.net.flow.criteria.VlanIdCriterion; 54 import org.onosproject.net.flow.criteria.VlanIdCriterion;
55 import org.onosproject.net.flow.instructions.Instruction; 55 import org.onosproject.net.flow.instructions.Instruction;
56 +import org.onosproject.net.flow.instructions.Instructions.OutputInstruction;
56 import org.onosproject.net.flowobjective.FilteringObjective; 57 import org.onosproject.net.flowobjective.FilteringObjective;
57 import org.onosproject.net.flowobjective.FlowObjectiveStore; 58 import org.onosproject.net.flowobjective.FlowObjectiveStore;
58 import org.onosproject.net.flowobjective.ForwardingObjective; 59 import org.onosproject.net.flowobjective.ForwardingObjective;
...@@ -383,7 +384,7 @@ public class SpringOpenTTP extends AbstractHandlerBehaviour ...@@ -383,7 +384,7 @@ public class SpringOpenTTP extends AbstractHandlerBehaviour
383 private Collection<FlowRule> processVersatile(ForwardingObjective fwd) { 384 private Collection<FlowRule> processVersatile(ForwardingObjective fwd) {
384 log.debug("Processing versatile forwarding objective"); 385 log.debug("Processing versatile forwarding objective");
385 TrafficSelector selector = fwd.selector(); 386 TrafficSelector selector = fwd.selector();
386 - 387 + TrafficTreatment treatment = null;
387 EthTypeCriterion ethType = 388 EthTypeCriterion ethType =
388 (EthTypeCriterion) selector.getCriterion(Criterion.Type.ETH_TYPE); 389 (EthTypeCriterion) selector.getCriterion(Criterion.Type.ETH_TYPE);
389 if (ethType == null) { 390 if (ethType == null) {
...@@ -410,15 +411,26 @@ public class SpringOpenTTP extends AbstractHandlerBehaviour ...@@ -410,15 +411,26 @@ public class SpringOpenTTP extends AbstractHandlerBehaviour
410 return Collections.emptySet(); 411 return Collections.emptySet();
411 } 412 }
412 treatmentBuilder.deferred().group(group.id()); 413 treatmentBuilder.deferred().group(group.id());
414 + treatment = treatmentBuilder.build();
413 log.debug("Adding OUTGROUP action"); 415 log.debug("Adding OUTGROUP action");
414 } 416 }
417 + } else if (fwd.treatment() != null) {
418 + if (fwd.treatment().allInstructions().size() == 1 &&
419 + fwd.treatment().allInstructions().get(0).type() == Instruction.Type.OUTPUT) {
420 + OutputInstruction o = (OutputInstruction) fwd.treatment().allInstructions().get(0);
421 + if (o.port() == PortNumber.CONTROLLER) {
422 + log.warn("Punts to the controller are handled by misses in"
423 + + " the TMAC, IP and MPLS tables.");
424 + return Collections.emptySet();
425 + }
426 + }
427 + treatment = fwd.treatment();
415 } else { 428 } else {
416 - log.warn("VERSATILE forwarding objective need next objective ID."); 429 + log.warn("VERSATILE forwarding objective needs next objective ID "
430 + + "or treatment.");
417 return Collections.emptySet(); 431 return Collections.emptySet();
418 } 432 }
419 433
420 - TrafficTreatment treatment = treatmentBuilder.build();
421 -
422 FlowRule.Builder ruleBuilder = DefaultFlowRule.builder() 434 FlowRule.Builder ruleBuilder = DefaultFlowRule.builder()
423 .fromApp(fwd.appId()).withPriority(fwd.priority()) 435 .fromApp(fwd.appId()).withPriority(fwd.priority())
424 .forDevice(deviceId).withSelector(fwd.selector()) 436 .forDevice(deviceId).withSelector(fwd.selector())
...@@ -616,21 +628,8 @@ public class SpringOpenTTP extends AbstractHandlerBehaviour ...@@ -616,21 +628,8 @@ public class SpringOpenTTP extends AbstractHandlerBehaviour
616 ops = install ? ops.add(rule) : ops.remove(rule); 628 ops = install ? ops.add(rule) : ops.remove(rule);
617 } 629 }
618 } else if (c.type() == Criterion.Type.IPV4_DST) { 630 } else if (c.type() == Criterion.Type.IPV4_DST) {
619 - IPCriterion ip = (IPCriterion) c; 631 + log.debug("driver does not process IP filtering rules as it " +
620 - log.debug("adding rule for IP: {}", ip.ip()); 632 + "sends all misses in the IP table to the controller");
621 - TrafficSelector.Builder selector = DefaultTrafficSelector
622 - .builder();
623 - TrafficTreatment.Builder treatment = DefaultTrafficTreatment
624 - .builder();
625 - selector.matchEthType(Ethernet.TYPE_IPV4);
626 - selector.matchIPDst(ip.ip());
627 - treatment.transition(aclTableId);
628 - FlowRule rule = DefaultFlowRule.builder().forDevice(deviceId)
629 - .withSelector(selector.build())
630 - .withTreatment(treatment.build())
631 - .withPriority(filt.priority()).fromApp(applicationId)
632 - .makePermanent().forTable(ipv4UnicastTableId).build();
633 - ops = install ? ops.add(rule) : ops.remove(rule);
634 } else { 633 } else {
635 log.warn("Driver does not currently process filtering condition" 634 log.warn("Driver does not currently process filtering condition"
636 + " of type: {}", c.type()); 635 + " of type: {}", c.type());
...@@ -762,6 +761,7 @@ public class SpringOpenTTP extends AbstractHandlerBehaviour ...@@ -762,6 +761,7 @@ public class SpringOpenTTP extends AbstractHandlerBehaviour
762 this.key = key; 761 this.key = key;
763 } 762 }
764 763
764 + @SuppressWarnings("unused")
765 public GroupKey key() { 765 public GroupKey key() {
766 return key; 766 return key;
767 } 767 }
......
...@@ -38,6 +38,9 @@ ...@@ -38,6 +38,9 @@
38 <behaviour api="org.onosproject.net.behaviour.Pipeliner" 38 <behaviour api="org.onosproject.net.behaviour.Pipeliner"
39 impl="org.onosproject.driver.pipeline.OVSCorsaPipeline"/> 39 impl="org.onosproject.driver.pipeline.OVSCorsaPipeline"/>
40 </driver> 40 </driver>
41 + <!-- Emulation of the spring-open pipeline using a CPqD OF 1.3 software switch.
42 + ~ This driver is the default driver assigned to the CPqD switch.
43 + -->
41 <driver name="spring-open-cpqd" extends="default" 44 <driver name="spring-open-cpqd" extends="default"
42 manufacturer="Stanford University, Ericsson Research and CPqD Research" 45 manufacturer="Stanford University, Ericsson Research and CPqD Research"
43 hwVersion="OpenFlow 1.3 Reference Userspace Switch" swVersion=".*"> 46 hwVersion="OpenFlow 1.3 Reference Userspace Switch" swVersion=".*">
...@@ -66,7 +69,7 @@ ...@@ -66,7 +69,7 @@
66 <driver name="ofdpa" extends="default" 69 <driver name="ofdpa" extends="default"
67 manufacturer="Broadcom Corp." hwVersion="OF-DPA.*" swVersion="OF-DPA.*"> 70 manufacturer="Broadcom Corp." hwVersion="OF-DPA.*" swVersion="OF-DPA.*">
68 <behaviour api="org.onosproject.net.behaviour.Pipeliner" 71 <behaviour api="org.onosproject.net.behaviour.Pipeliner"
69 - impl="org.onosproject.driver.pipeline.OFDPA1Pipeline"/> 72 + impl="org.onosproject.driver.pipeline.OFDPA2Pipeline"/>
70 </driver> 73 </driver>
71 <driver name="pmc-olt" extends="default" 74 <driver name="pmc-olt" extends="default"
72 manufacturer="Big Switch Networks" hwVersion="ivs 0.5" swVersion="ivs 0.5"> 75 manufacturer="Big Switch Networks" hwVersion="ivs 0.5" swVersion="ivs 0.5">
...@@ -109,7 +112,7 @@ ...@@ -109,7 +112,7 @@
109 manufacturer="ONF" 112 manufacturer="ONF"
110 hwVersion="OF1.3 Software Switch from CPqD" swVersion="for Group Chaining"> 113 hwVersion="OF1.3 Software Switch from CPqD" swVersion="for Group Chaining">
111 <behaviour api="org.onosproject.net.behaviour.Pipeliner" 114 <behaviour api="org.onosproject.net.behaviour.Pipeliner"
112 - impl="org.onosproject.driver.pipeline.CpqdOFDPA1Pipeline"/> 115 + impl="org.onosproject.driver.pipeline.CpqdOFDPA2Pipeline"/>
113 </driver> 116 </driver>
114 <driver name="calient" extends="default" 117 <driver name="calient" extends="default"
115 manufacturer="calient inc" hwVersion="calient hardware" 118 manufacturer="calient inc" hwVersion="calient hardware"
......