blob: 616eac17d8c78521e619d06e317756d8a88eef5d [file] [log] [blame]
Saurav Dasd8b97002015-05-14 23:42:49 -07001package org.onosproject.driver.pipeline;
2
3import static org.slf4j.LoggerFactory.getLogger;
4
5import org.onlab.packet.Ethernet;
6import org.onosproject.net.flow.DefaultFlowRule;
7import org.onosproject.net.flow.DefaultTrafficSelector;
8import org.onosproject.net.flow.DefaultTrafficTreatment;
9import org.onosproject.net.flow.FlowRule;
10import org.onosproject.net.flow.FlowRuleOperations;
11import org.onosproject.net.flow.FlowRuleOperationsContext;
12import org.onosproject.net.flow.TrafficSelector;
13import org.onosproject.net.flow.TrafficTreatment;
14import org.slf4j.Logger;
15
16public 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}