Committed by
Thomas Vachuska
Adding a corsa pipeliner which extends the ovs-corsa pipeliner
Change-Id: Iea0b1949232de20abd60717a8dc150b5c133bd7a
Showing
3 changed files
with
64 additions
and
6 deletions
| 1 | +package org.onosproject.driver.pipeline; | ||
| 2 | + | ||
| 3 | +import static org.slf4j.LoggerFactory.getLogger; | ||
| 4 | + | ||
| 5 | +import org.onlab.packet.Ethernet; | ||
| 6 | +import org.onosproject.net.flow.DefaultFlowRule; | ||
| 7 | +import org.onosproject.net.flow.DefaultTrafficSelector; | ||
| 8 | +import org.onosproject.net.flow.DefaultTrafficTreatment; | ||
| 9 | +import org.onosproject.net.flow.FlowRule; | ||
| 10 | +import org.onosproject.net.flow.FlowRuleOperations; | ||
| 11 | +import org.onosproject.net.flow.FlowRuleOperationsContext; | ||
| 12 | +import org.onosproject.net.flow.TrafficSelector; | ||
| 13 | +import org.onosproject.net.flow.TrafficTreatment; | ||
| 14 | +import org.slf4j.Logger; | ||
| 15 | + | ||
| 16 | +public class CorsaPipeline extends OVSCorsaPipeline { | ||
| 17 | + | ||
| 18 | + private final Logger log = getLogger(getClass()); | ||
| 19 | + | ||
| 20 | + @Override | ||
| 21 | + protected void processVlanMplsTable(boolean install) { | ||
| 22 | + TrafficSelector.Builder selector = DefaultTrafficSelector.builder(); | ||
| 23 | + TrafficTreatment.Builder treatment = DefaultTrafficTreatment | ||
| 24 | + .builder(); | ||
| 25 | + FlowRuleOperations.Builder ops = FlowRuleOperations.builder(); | ||
| 26 | + FlowRule rule; | ||
| 27 | + // corsa uses non-OF-standard way to match on presence of VLAN tags | ||
| 28 | + selector.matchEthType(Ethernet.TYPE_VLAN); | ||
| 29 | + treatment.transition(VLAN_TABLE); | ||
| 30 | + | ||
| 31 | + rule = DefaultFlowRule.builder() | ||
| 32 | + .forDevice(deviceId) | ||
| 33 | + .withSelector(selector.build()) | ||
| 34 | + .withTreatment(treatment.build()) | ||
| 35 | + .withPriority(CONTROLLER_PRIORITY) | ||
| 36 | + .fromApp(appId) | ||
| 37 | + .makePermanent() | ||
| 38 | + .forTable(VLAN_MPLS_TABLE).build(); | ||
| 39 | + | ||
| 40 | + | ||
| 41 | + ops = install ? ops.add(rule) : ops.remove(rule); | ||
| 42 | + | ||
| 43 | + flowRuleService.apply(ops.build(new FlowRuleOperationsContext() { | ||
| 44 | + @Override | ||
| 45 | + public void onSuccess(FlowRuleOperations ops) { | ||
| 46 | + log.info("Provisioned vlan/mpls table"); | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + @Override | ||
| 50 | + public void onError(FlowRuleOperations ops) { | ||
| 51 | + log.info( | ||
| 52 | + "Failed to provision vlan/mpls table"); | ||
| 53 | + } | ||
| 54 | + })); | ||
| 55 | + | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | +} |
| ... | @@ -95,19 +95,19 @@ public class OVSCorsaPipeline extends AbstractHandlerBehaviour implements Pipeli | ... | @@ -95,19 +95,19 @@ public class OVSCorsaPipeline extends AbstractHandlerBehaviour implements Pipeli |
| 95 | protected static final int LOCAL_TABLE = 9; | 95 | protected static final int LOCAL_TABLE = 9; |
| 96 | 96 | ||
| 97 | 97 | ||
| 98 | - private static final int CONTROLLER_PRIORITY = 255; | 98 | + protected static final int CONTROLLER_PRIORITY = 255; |
| 99 | private static final int DROP_PRIORITY = 0; | 99 | private static final int DROP_PRIORITY = 0; |
| 100 | private static final int HIGHEST_PRIORITY = 0xffff; | 100 | private static final int HIGHEST_PRIORITY = 0xffff; |
| 101 | 101 | ||
| 102 | private final Logger log = getLogger(getClass()); | 102 | private final Logger log = getLogger(getClass()); |
| 103 | 103 | ||
| 104 | private ServiceDirectory serviceDirectory; | 104 | private ServiceDirectory serviceDirectory; |
| 105 | - private FlowRuleService flowRuleService; | 105 | + protected FlowRuleService flowRuleService; |
| 106 | private CoreService coreService; | 106 | private CoreService coreService; |
| 107 | private GroupService groupService; | 107 | private GroupService groupService; |
| 108 | private FlowObjectiveStore flowObjectiveStore; | 108 | private FlowObjectiveStore flowObjectiveStore; |
| 109 | - private DeviceId deviceId; | 109 | + protected DeviceId deviceId; |
| 110 | - private ApplicationId appId; | 110 | + protected ApplicationId appId; |
| 111 | 111 | ||
| 112 | private KryoNamespace appKryo = new KryoNamespace.Builder() | 112 | private KryoNamespace appKryo = new KryoNamespace.Builder() |
| 113 | .register(GroupKey.class) | 113 | .register(GroupKey.class) |
| ... | @@ -521,7 +521,7 @@ public class OVSCorsaPipeline extends AbstractHandlerBehaviour implements Pipeli | ... | @@ -521,7 +521,7 @@ public class OVSCorsaPipeline extends AbstractHandlerBehaviour implements Pipeli |
| 521 | 521 | ||
| 522 | } | 522 | } |
| 523 | 523 | ||
| 524 | - private void processVlanMplsTable(boolean install) { | 524 | + protected void processVlanMplsTable(boolean install) { |
| 525 | TrafficSelector.Builder selector = DefaultTrafficSelector.builder(); | 525 | TrafficSelector.Builder selector = DefaultTrafficSelector.builder(); |
| 526 | TrafficTreatment.Builder treatment = DefaultTrafficTreatment | 526 | TrafficTreatment.Builder treatment = DefaultTrafficTreatment |
| 527 | .builder(); | 527 | .builder(); | ... | ... |
| ... | @@ -43,7 +43,7 @@ | ... | @@ -43,7 +43,7 @@ |
| 43 | </driver> | 43 | </driver> |
| 44 | <driver name="corsa" manufacturer="Corsa" hwVersion="Corsa Element" swVersion="2.3.1"> | 44 | <driver name="corsa" manufacturer="Corsa" hwVersion="Corsa Element" swVersion="2.3.1"> |
| 45 | <behaviour api="org.onosproject.net.behaviour.Pipeliner" | 45 | <behaviour api="org.onosproject.net.behaviour.Pipeliner" |
| 46 | - impl="org.onosproject.driver.pipeline.OVSCorsaPipeline"/> | 46 | + impl="org.onosproject.driver.pipeline.CorsaPipeline"/> |
| 47 | <behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver" | 47 | <behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver" |
| 48 | impl="org.onosproject.driver.handshaker.OFCorsaSwitchDriver"/> | 48 | impl="org.onosproject.driver.handshaker.OFCorsaSwitchDriver"/> |
| 49 | </driver> | 49 | </driver> | ... | ... |
-
Please register or login to post a comment