blob: 6aa9f66041ead993f85ec6dd974d0b451155ebd8 [file] [log] [blame]
Brian O'Connor66630c82014-10-02 21:08:19 -07001package org.onlab.onos.net.intent.impl;
2
Brian O'Connor66630c82014-10-02 21:08:19 -07003import org.apache.felix.scr.annotations.Activate;
4import org.apache.felix.scr.annotations.Component;
5import org.apache.felix.scr.annotations.Deactivate;
6import org.apache.felix.scr.annotations.Reference;
7import org.apache.felix.scr.annotations.ReferenceCardinality;
8import org.onlab.onos.ApplicationId;
9import org.onlab.onos.net.ConnectPoint;
10import org.onlab.onos.net.Link;
11import org.onlab.onos.net.flow.DefaultFlowRule;
12import org.onlab.onos.net.flow.DefaultTrafficSelector;
13import org.onlab.onos.net.flow.DefaultTrafficTreatment;
14import org.onlab.onos.net.flow.FlowRule;
15import org.onlab.onos.net.flow.FlowRuleService;
16import org.onlab.onos.net.flow.TrafficSelector;
17import org.onlab.onos.net.flow.TrafficTreatment;
Brian O'Connor66630c82014-10-02 21:08:19 -070018import org.onlab.onos.net.intent.IntentExtensionService;
19import org.onlab.onos.net.intent.IntentInstaller;
20import org.onlab.onos.net.intent.PathIntent;
21
tom9a693fd2014-10-03 11:32:19 -070022import java.util.Iterator;
23
Brian O'Connor66630c82014-10-02 21:08:19 -070024/**
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(),
63 0, appId, 30);
64 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}