blob: 92026846800e806e9d757294c7d1c1557a50ac52 [file] [log] [blame]
Brian O'Connor66630c82014-10-02 21:08:19 -07001package org.onlab.onos.net.intent.impl;
2
3import java.util.Iterator;
4
5import 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;
20import org.onlab.onos.net.flow.criteria.Criterion;
21import org.onlab.onos.net.intent.IntentExtensionService;
22import org.onlab.onos.net.intent.IntentInstaller;
23import org.onlab.onos.net.intent.PathIntent;
24
25/**
26 * An intent installer for {@link PathIntent}.
27 */
28@Component(immediate = true)
29public class PathIntentInstaller
30 implements IntentInstaller<PathIntent> {
31 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
32 protected IntentExtensionService intentManager;
33
34 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
35 private FlowRuleService flowRuleService;
36
37 private final ApplicationId appId = ApplicationId.valueOf(1);
38
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) {
51 TrafficSelector.Builder builder = new DefaultTrafficSelector.Builder();
52 TrafficSelector selector = intent.getTrafficSelector();
53 for (Criterion c : selector.criteria()) {
54 builder.add(c);
55 }
56
57 Iterator<Link> links = intent.getPath().links().iterator();
58 ConnectPoint prev = links.next().dst();
59 while (links.hasNext()) {
60 builder.matchInport(prev.port());
61 Link link = links.next();
62
63 TrafficTreatment.Builder treat = new DefaultTrafficTreatment.Builder();
64 treat.setOutput(link.src().port());
65
66 FlowRule f = new DefaultFlowRule(link.src().deviceId(),
67 builder.build(), treat.build(), 0, appId);
68 flowRuleService.applyFlowRules(f);
69
70 prev = link.dst();
71 }
72
73 }
74
75 @Override
76 public void uninstall(PathIntent intent) {
77 //TODO
78 }
79}