blob: 84e8c79d4b974f1900cab8536c47ae8c68f98f4c [file] [log] [blame]
Brian O'Connor66630c82014-10-02 21:08:19 -07001package org.onlab.onos.net.intent.impl;
2
alshabiba0e04982014-10-03 13:03:19 -07003import java.util.Iterator;
4
Brian O'Connor66630c82014-10-02 21:08:19 -07005import org.apache.felix.scr.annotations.Activate;
6import org.apache.felix.scr.annotations.Component;
7import org.apache.felix.scr.annotations.Deactivate;
8import org.apache.felix.scr.annotations.Reference;
9import org.apache.felix.scr.annotations.ReferenceCardinality;
10import org.onlab.onos.ApplicationId;
11import org.onlab.onos.net.ConnectPoint;
12import org.onlab.onos.net.Link;
13import org.onlab.onos.net.flow.DefaultFlowRule;
14import org.onlab.onos.net.flow.DefaultTrafficSelector;
15import org.onlab.onos.net.flow.DefaultTrafficTreatment;
16import org.onlab.onos.net.flow.FlowRule;
17import org.onlab.onos.net.flow.FlowRuleService;
18import org.onlab.onos.net.flow.TrafficSelector;
19import org.onlab.onos.net.flow.TrafficTreatment;
Brian O'Connor66630c82014-10-02 21:08:19 -070020import org.onlab.onos.net.intent.IntentExtensionService;
21import org.onlab.onos.net.intent.IntentInstaller;
22import org.onlab.onos.net.intent.PathIntent;
23
24/**
tom9a693fd2014-10-03 11:32:19 -070025 * Installer for {@link PathIntent path connectivity intents}.
Brian O'Connor66630c82014-10-02 21:08:19 -070026 */
27@Component(immediate = true)
tom9a693fd2014-10-03 11:32:19 -070028public class PathIntentInstaller implements IntentInstaller<PathIntent> {
29
Brian O'Connor66630c82014-10-02 21:08:19 -070030 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
31 protected IntentExtensionService intentManager;
32
33 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
tom9a693fd2014-10-03 11:32:19 -070034 protected FlowRuleService flowRuleService;
Brian O'Connor66630c82014-10-02 21:08:19 -070035
tom9a693fd2014-10-03 11:32:19 -070036 private final ApplicationId appId = ApplicationId.getAppId();
Brian O'Connor66630c82014-10-02 21:08:19 -070037
38 @Activate
39 public void activate() {
40 intentManager.registerInstaller(PathIntent.class, this);
41 }
42
43 @Deactivate
44 public void deactivate() {
45 intentManager.unregisterInstaller(PathIntent.class);
46 }
47
48 @Override
49 public void install(PathIntent intent) {
tom9a693fd2014-10-03 11:32:19 -070050 TrafficSelector.Builder builder =
51 DefaultTrafficSelector.builder(intent.getTrafficSelector());
Brian O'Connor66630c82014-10-02 21:08:19 -070052 Iterator<Link> links = intent.getPath().links().iterator();
53 ConnectPoint prev = links.next().dst();
54 while (links.hasNext()) {
55 builder.matchInport(prev.port());
56 Link link = links.next();
57
tom9a693fd2014-10-03 11:32:19 -070058 TrafficTreatment.Builder treat = DefaultTrafficTreatment.builder();
Brian O'Connor66630c82014-10-02 21:08:19 -070059 treat.setOutput(link.src().port());
60
tom9a693fd2014-10-03 11:32:19 -070061 FlowRule rule = new DefaultFlowRule(link.src().deviceId(),
62 builder.build(), treat.build(),
alshabiba0e04982014-10-03 13:03:19 -070063 10, appId, 30);
tom9a693fd2014-10-03 11:32:19 -070064 flowRuleService.applyFlowRules(rule);
Brian O'Connor66630c82014-10-02 21:08:19 -070065
66 prev = link.dst();
67 }
68
69 }
70
71 @Override
72 public void uninstall(PathIntent intent) {
73 //TODO
74 }
75}