Brian O'Connor

Remove Path Intent

......@@ -4,6 +4,7 @@ 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.IntentService;
import org.onlab.onos.net.intent.IntentState;
/**
* Lists the inventory of intents and their states.
......@@ -16,7 +17,8 @@ public class IntentsListCommand extends AbstractShellCommand {
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);
}
}
......
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);
}
}
}
......@@ -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>
......
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.IntentExtensionService;
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}.
*/
......@@ -69,6 +69,21 @@ public class PathIntentInstaller implements IntentInstaller<PathIntent> {
@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();
}
}
}
......