Remove Path Intent
diff --git a/cli/src/main/java/org/onlab/onos/cli/net/IntentsListCommand.java b/cli/src/main/java/org/onlab/onos/cli/net/IntentsListCommand.java
index ad17290..a7d260d 100644
--- a/cli/src/main/java/org/onlab/onos/cli/net/IntentsListCommand.java
+++ b/cli/src/main/java/org/onlab/onos/cli/net/IntentsListCommand.java
@@ -4,6 +4,7 @@
import org.onlab.onos.cli.AbstractShellCommand;
import org.onlab.onos.net.intent.Intent;
import org.onlab.onos.net.intent.IntentService;
+import org.onlab.onos.net.intent.IntentState;
/**
* Lists the inventory of intents and their states.
@@ -16,7 +17,8 @@
protected void execute() {
IntentService service = get(IntentService.class);
for (Intent intent : service.getIntents()) {
- print("%s", intent);
+ IntentState state = service.getIntentState(intent.getId());
+ print("%s %s %s", intent.getId(), state, intent);
}
}
diff --git a/cli/src/main/java/org/onlab/onos/cli/net/RemoveHostToHostIntentCommand.java b/cli/src/main/java/org/onlab/onos/cli/net/RemoveHostToHostIntentCommand.java
new file mode 100644
index 0000000..1840c0d
--- /dev/null
+++ b/cli/src/main/java/org/onlab/onos/cli/net/RemoveHostToHostIntentCommand.java
@@ -0,0 +1,37 @@
+package org.onlab.onos.cli.net;
+
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.onlab.onos.cli.AbstractShellCommand;
+import org.onlab.onos.net.intent.Intent;
+import org.onlab.onos.net.intent.IntentId;
+import org.onlab.onos.net.intent.IntentService;
+
+/**
+ * Removes host-to-host connectivity intent.
+ */
+@Command(scope = "onos", name = "remove-host-intent",
+ description = "Removes host-to-host connectivity intent")
+public class RemoveHostToHostIntentCommand extends AbstractShellCommand {
+
+ @Argument(index = 0, name = "id", description = "Intent ID",
+ required = true, multiValued = false)
+ String id = null;
+
+ @Override
+ protected void execute() {
+ IntentService service = get(IntentService.class);
+
+ int radix = id.startsWith("0x") ? 16 : 10;
+ if (radix == 16) {
+ id = id.replaceFirst("0x", "");
+ }
+ IntentId intentId = new IntentId(Long.parseLong(id, radix));
+
+
+ Intent intent = service.getIntent(intentId);
+ if (intent != null) {
+ service.withdraw(intent);
+ }
+ }
+}
diff --git a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
index f0516f7..17a9e29 100644
--- a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -64,6 +64,9 @@
</completers>
</command>
<command>
+ <action class="org.onlab.onos.cli.net.RemoveHostToHostIntentCommand"/>
+ </command>
+ <command>
<action class="org.onlab.onos.cli.net.IntentsListCommand"/>
</command>
diff --git a/core/net/src/main/java/org/onlab/onos/net/intent/impl/PathIntentInstaller.java b/core/net/src/main/java/org/onlab/onos/net/intent/impl/PathIntentInstaller.java
index ec7841c..f9cfa67 100644
--- a/core/net/src/main/java/org/onlab/onos/net/intent/impl/PathIntentInstaller.java
+++ b/core/net/src/main/java/org/onlab/onos/net/intent/impl/PathIntentInstaller.java
@@ -1,5 +1,9 @@
package org.onlab.onos.net.intent.impl;
+import static org.onlab.onos.net.flow.DefaultTrafficTreatment.builder;
+
+import java.util.Iterator;
+
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -18,10 +22,6 @@
import org.onlab.onos.net.intent.IntentInstaller;
import org.onlab.onos.net.intent.PathIntent;
-import java.util.Iterator;
-
-import static org.onlab.onos.net.flow.DefaultTrafficTreatment.builder;
-
/**
* Installer for {@link PathIntent path connectivity intents}.
*/
@@ -59,8 +59,8 @@
TrafficTreatment treatment = builder()
.setOutput(link.src().port()).build();
FlowRule rule = new DefaultFlowRule(link.src().deviceId(),
- builder.build(), treatment,
- 123, appId, 600);
+ builder.build(), treatment,
+ 123, appId, 600);
flowRuleService.applyFlowRules(rule);
prev = link.dst();
}
@@ -69,6 +69,21 @@
@Override
public void uninstall(PathIntent intent) {
- //TODO
+ TrafficSelector.Builder builder =
+ DefaultTrafficSelector.builder(intent.getTrafficSelector());
+ Iterator<Link> links = intent.getPath().links().iterator();
+ ConnectPoint prev = links.next().dst();
+
+ while (links.hasNext()) {
+ builder.matchInport(prev.port());
+ Link link = links.next();
+ TrafficTreatment treatment = builder()
+ .setOutput(link.src().port()).build();
+ FlowRule rule = new DefaultFlowRule(link.src().deviceId(),
+ builder.build(), treatment,
+ 123, appId, 600);
+ flowRuleService.removeFlowRules(rule);
+ prev = link.dst();
+ }
}
}