blob: 0ca75c2f453c7e5296f40ba0b4f490b233c9c3dd [file] [log] [blame]
Brian O'Connor66630c82014-10-02 21:08:19 -07001package org.onlab.onos.net.intent.impl;
2
Brian O'Connora4cab072014-10-03 18:46:39 -07003import static org.onlab.onos.net.flow.DefaultTrafficTreatment.builder;
alshabib8ca53902014-10-07 13:11:17 -07004import static org.slf4j.LoggerFactory.getLogger;
Brian O'Connora4cab072014-10-03 18:46:39 -07005
6import java.util.Iterator;
alshabib902d41b2014-10-07 16:52:05 -07007import java.util.List;
8import java.util.concurrent.ExecutionException;
Brian O'Connora4cab072014-10-03 18:46:39 -07009
Brian O'Connor66630c82014-10-02 21:08:19 -070010import org.apache.felix.scr.annotations.Activate;
11import org.apache.felix.scr.annotations.Component;
12import org.apache.felix.scr.annotations.Deactivate;
13import org.apache.felix.scr.annotations.Reference;
14import org.apache.felix.scr.annotations.ReferenceCardinality;
15import org.onlab.onos.ApplicationId;
16import org.onlab.onos.net.ConnectPoint;
17import org.onlab.onos.net.Link;
18import org.onlab.onos.net.flow.DefaultFlowRule;
19import org.onlab.onos.net.flow.DefaultTrafficSelector;
Brian O'Connor66630c82014-10-02 21:08:19 -070020import org.onlab.onos.net.flow.FlowRule;
alshabib902d41b2014-10-07 16:52:05 -070021import org.onlab.onos.net.flow.FlowRuleBatchEntry;
22import org.onlab.onos.net.flow.FlowRuleBatchEntry.FlowRuleOperation;
23import org.onlab.onos.net.flow.FlowRuleBatchOperation;
Brian O'Connor66630c82014-10-02 21:08:19 -070024import org.onlab.onos.net.flow.FlowRuleService;
25import org.onlab.onos.net.flow.TrafficSelector;
26import org.onlab.onos.net.flow.TrafficTreatment;
Brian O'Connor66630c82014-10-02 21:08:19 -070027import org.onlab.onos.net.intent.IntentExtensionService;
28import org.onlab.onos.net.intent.IntentInstaller;
29import org.onlab.onos.net.intent.PathIntent;
alshabib8ca53902014-10-07 13:11:17 -070030import org.slf4j.Logger;
Brian O'Connor66630c82014-10-02 21:08:19 -070031
alshabib902d41b2014-10-07 16:52:05 -070032import com.google.common.collect.Lists;
33
Brian O'Connor66630c82014-10-02 21:08:19 -070034/**
tom9a693fd2014-10-03 11:32:19 -070035 * Installer for {@link PathIntent path connectivity intents}.
Brian O'Connor66630c82014-10-02 21:08:19 -070036 */
37@Component(immediate = true)
tom9a693fd2014-10-03 11:32:19 -070038public class PathIntentInstaller implements IntentInstaller<PathIntent> {
39
alshabib8ca53902014-10-07 13:11:17 -070040 private final Logger log = getLogger(getClass());
41
Brian O'Connor66630c82014-10-02 21:08:19 -070042 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
43 protected IntentExtensionService intentManager;
44
45 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
tom9a693fd2014-10-03 11:32:19 -070046 protected FlowRuleService flowRuleService;
Brian O'Connor66630c82014-10-02 21:08:19 -070047
tom9a693fd2014-10-03 11:32:19 -070048 private final ApplicationId appId = ApplicationId.getAppId();
Brian O'Connor66630c82014-10-02 21:08:19 -070049
50 @Activate
51 public void activate() {
52 intentManager.registerInstaller(PathIntent.class, this);
53 }
54
55 @Deactivate
56 public void deactivate() {
57 intentManager.unregisterInstaller(PathIntent.class);
58 }
59
60 @Override
61 public void install(PathIntent intent) {
tom9a693fd2014-10-03 11:32:19 -070062 TrafficSelector.Builder builder =
tom85258ee2014-10-07 00:10:02 -070063 DefaultTrafficSelector.builder(intent.selector());
64 Iterator<Link> links = intent.path().links().iterator();
Brian O'Connor66630c82014-10-02 21:08:19 -070065 ConnectPoint prev = links.next().dst();
alshabib902d41b2014-10-07 16:52:05 -070066 List<FlowRuleBatchEntry> rules = Lists.newLinkedList();
Brian O'Connor66630c82014-10-02 21:08:19 -070067 while (links.hasNext()) {
68 builder.matchInport(prev.port());
69 Link link = links.next();
tomf5c9d922014-10-03 15:22:03 -070070 TrafficTreatment treatment = builder()
71 .setOutput(link.src().port()).build();
alshabib902d41b2014-10-07 16:52:05 -070072
tom9a693fd2014-10-03 11:32:19 -070073 FlowRule rule = new DefaultFlowRule(link.src().deviceId(),
Brian O'Connora4cab072014-10-03 18:46:39 -070074 builder.build(), treatment,
75 123, appId, 600);
alshabib902d41b2014-10-07 16:52:05 -070076 rules.add(new FlowRuleBatchEntry(FlowRuleOperation.ADD, rule));
77 //flowRuleService.applyFlowRules(rule);
Brian O'Connor66630c82014-10-02 21:08:19 -070078 prev = link.dst();
79 }
alshabib902d41b2014-10-07 16:52:05 -070080 FlowRuleBatchOperation batch = new FlowRuleBatchOperation(rules);
81 try {
82 flowRuleService.applyBatch(batch).get();
83 } catch (InterruptedException | ExecutionException e) {
84 // TODO Auto-generated catch block
85 e.printStackTrace();
86 }
Brian O'Connor66630c82014-10-02 21:08:19 -070087 }
88
89 @Override
90 public void uninstall(PathIntent intent) {
Brian O'Connora4cab072014-10-03 18:46:39 -070091 TrafficSelector.Builder builder =
tom85258ee2014-10-07 00:10:02 -070092 DefaultTrafficSelector.builder(intent.selector());
93 Iterator<Link> links = intent.path().links().iterator();
Brian O'Connora4cab072014-10-03 18:46:39 -070094 ConnectPoint prev = links.next().dst();
alshabib902d41b2014-10-07 16:52:05 -070095 List<FlowRuleBatchEntry> rules = Lists.newLinkedList();
Brian O'Connora4cab072014-10-03 18:46:39 -070096
97 while (links.hasNext()) {
98 builder.matchInport(prev.port());
99 Link link = links.next();
100 TrafficTreatment treatment = builder()
101 .setOutput(link.src().port()).build();
102 FlowRule rule = new DefaultFlowRule(link.src().deviceId(),
103 builder.build(), treatment,
104 123, appId, 600);
alshabib902d41b2014-10-07 16:52:05 -0700105 rules.add(new FlowRuleBatchEntry(FlowRuleOperation.REMOVE, rule));
106 //flowRuleService.removeFlowRules(rule);
Brian O'Connora4cab072014-10-03 18:46:39 -0700107 prev = link.dst();
108 }
alshabib902d41b2014-10-07 16:52:05 -0700109 FlowRuleBatchOperation batch = new FlowRuleBatchOperation(rules);
110 try {
111 flowRuleService.applyBatch(batch).get();
112 } catch (InterruptedException | ExecutionException e) {
113 // TODO Auto-generated catch block
114 e.printStackTrace();
115 }
Brian O'Connor66630c82014-10-02 21:08:19 -0700116 }
117}