blob: ec7841c8859291687efd3b5fdaed98daa8c1cc00 [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;
Brian O'Connor66630c82014-10-02 21:08:19 -070013import org.onlab.onos.net.flow.FlowRule;
14import org.onlab.onos.net.flow.FlowRuleService;
15import org.onlab.onos.net.flow.TrafficSelector;
16import org.onlab.onos.net.flow.TrafficTreatment;
Brian O'Connor66630c82014-10-02 21:08:19 -070017import org.onlab.onos.net.intent.IntentExtensionService;
18import org.onlab.onos.net.intent.IntentInstaller;
19import org.onlab.onos.net.intent.PathIntent;
20
tomf5c9d922014-10-03 15:22:03 -070021import java.util.Iterator;
22
23import static org.onlab.onos.net.flow.DefaultTrafficTreatment.builder;
24
Brian O'Connor66630c82014-10-02 21:08:19 -070025/**
tom9a693fd2014-10-03 11:32:19 -070026 * Installer for {@link PathIntent path connectivity intents}.
Brian O'Connor66630c82014-10-02 21:08:19 -070027 */
28@Component(immediate = true)
tom9a693fd2014-10-03 11:32:19 -070029public class PathIntentInstaller implements IntentInstaller<PathIntent> {
30
Brian O'Connor66630c82014-10-02 21:08:19 -070031 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
32 protected IntentExtensionService intentManager;
33
34 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
tom9a693fd2014-10-03 11:32:19 -070035 protected FlowRuleService flowRuleService;
Brian O'Connor66630c82014-10-02 21:08:19 -070036
tom9a693fd2014-10-03 11:32:19 -070037 private final ApplicationId appId = ApplicationId.getAppId();
Brian O'Connor66630c82014-10-02 21:08:19 -070038
39 @Activate
40 public void activate() {
41 intentManager.registerInstaller(PathIntent.class, this);
42 }
43
44 @Deactivate
45 public void deactivate() {
46 intentManager.unregisterInstaller(PathIntent.class);
47 }
48
49 @Override
50 public void install(PathIntent intent) {
tom9a693fd2014-10-03 11:32:19 -070051 TrafficSelector.Builder builder =
52 DefaultTrafficSelector.builder(intent.getTrafficSelector());
Brian O'Connor66630c82014-10-02 21:08:19 -070053 Iterator<Link> links = intent.getPath().links().iterator();
54 ConnectPoint prev = links.next().dst();
tomf5c9d922014-10-03 15:22:03 -070055
Brian O'Connor66630c82014-10-02 21:08:19 -070056 while (links.hasNext()) {
57 builder.matchInport(prev.port());
58 Link link = links.next();
tomf5c9d922014-10-03 15:22:03 -070059 TrafficTreatment treatment = builder()
60 .setOutput(link.src().port()).build();
tom9a693fd2014-10-03 11:32:19 -070061 FlowRule rule = new DefaultFlowRule(link.src().deviceId(),
tomf5c9d922014-10-03 15:22:03 -070062 builder.build(), treatment,
63 123, appId, 600);
tom9a693fd2014-10-03 11:32:19 -070064 flowRuleService.applyFlowRules(rule);
Brian O'Connor66630c82014-10-02 21:08:19 -070065 prev = link.dst();
66 }
67
68 }
69
70 @Override
71 public void uninstall(PathIntent intent) {
72 //TODO
73 }
74}