Showing
4 changed files
with
65 additions
and
8 deletions
... | @@ -4,6 +4,7 @@ import org.apache.karaf.shell.commands.Command; | ... | @@ -4,6 +4,7 @@ import org.apache.karaf.shell.commands.Command; |
4 | import org.onlab.onos.cli.AbstractShellCommand; | 4 | import org.onlab.onos.cli.AbstractShellCommand; |
5 | import org.onlab.onos.net.intent.Intent; | 5 | import org.onlab.onos.net.intent.Intent; |
6 | import org.onlab.onos.net.intent.IntentService; | 6 | import org.onlab.onos.net.intent.IntentService; |
7 | +import org.onlab.onos.net.intent.IntentState; | ||
7 | 8 | ||
8 | /** | 9 | /** |
9 | * Lists the inventory of intents and their states. | 10 | * Lists the inventory of intents and their states. |
... | @@ -16,7 +17,8 @@ public class IntentsListCommand extends AbstractShellCommand { | ... | @@ -16,7 +17,8 @@ public class IntentsListCommand extends AbstractShellCommand { |
16 | protected void execute() { | 17 | protected void execute() { |
17 | IntentService service = get(IntentService.class); | 18 | IntentService service = get(IntentService.class); |
18 | for (Intent intent : service.getIntents()) { | 19 | for (Intent intent : service.getIntents()) { |
19 | - print("%s", intent); | 20 | + IntentState state = service.getIntentState(intent.getId()); |
21 | + print("%s %s %s", intent.getId(), state, intent); | ||
20 | } | 22 | } |
21 | } | 23 | } |
22 | 24 | ... | ... |
1 | +package org.onlab.onos.cli.net; | ||
2 | + | ||
3 | +import org.apache.karaf.shell.commands.Argument; | ||
4 | +import org.apache.karaf.shell.commands.Command; | ||
5 | +import org.onlab.onos.cli.AbstractShellCommand; | ||
6 | +import org.onlab.onos.net.intent.Intent; | ||
7 | +import org.onlab.onos.net.intent.IntentId; | ||
8 | +import org.onlab.onos.net.intent.IntentService; | ||
9 | + | ||
10 | +/** | ||
11 | + * Removes host-to-host connectivity intent. | ||
12 | + */ | ||
13 | +@Command(scope = "onos", name = "remove-host-intent", | ||
14 | + description = "Removes host-to-host connectivity intent") | ||
15 | +public class RemoveHostToHostIntentCommand extends AbstractShellCommand { | ||
16 | + | ||
17 | + @Argument(index = 0, name = "id", description = "Intent ID", | ||
18 | + required = true, multiValued = false) | ||
19 | + String id = null; | ||
20 | + | ||
21 | + @Override | ||
22 | + protected void execute() { | ||
23 | + IntentService service = get(IntentService.class); | ||
24 | + | ||
25 | + int radix = id.startsWith("0x") ? 16 : 10; | ||
26 | + if (radix == 16) { | ||
27 | + id = id.replaceFirst("0x", ""); | ||
28 | + } | ||
29 | + IntentId intentId = new IntentId(Long.parseLong(id, radix)); | ||
30 | + | ||
31 | + | ||
32 | + Intent intent = service.getIntent(intentId); | ||
33 | + if (intent != null) { | ||
34 | + service.withdraw(intent); | ||
35 | + } | ||
36 | + } | ||
37 | +} |
... | @@ -64,6 +64,9 @@ | ... | @@ -64,6 +64,9 @@ |
64 | </completers> | 64 | </completers> |
65 | </command> | 65 | </command> |
66 | <command> | 66 | <command> |
67 | + <action class="org.onlab.onos.cli.net.RemoveHostToHostIntentCommand"/> | ||
68 | + </command> | ||
69 | + <command> | ||
67 | <action class="org.onlab.onos.cli.net.IntentsListCommand"/> | 70 | <action class="org.onlab.onos.cli.net.IntentsListCommand"/> |
68 | </command> | 71 | </command> |
69 | 72 | ... | ... |
1 | package org.onlab.onos.net.intent.impl; | 1 | package org.onlab.onos.net.intent.impl; |
2 | 2 | ||
3 | +import static org.onlab.onos.net.flow.DefaultTrafficTreatment.builder; | ||
4 | + | ||
5 | +import java.util.Iterator; | ||
6 | + | ||
3 | import org.apache.felix.scr.annotations.Activate; | 7 | import org.apache.felix.scr.annotations.Activate; |
4 | import org.apache.felix.scr.annotations.Component; | 8 | import org.apache.felix.scr.annotations.Component; |
5 | import org.apache.felix.scr.annotations.Deactivate; | 9 | import org.apache.felix.scr.annotations.Deactivate; |
... | @@ -18,10 +22,6 @@ import org.onlab.onos.net.intent.IntentExtensionService; | ... | @@ -18,10 +22,6 @@ import org.onlab.onos.net.intent.IntentExtensionService; |
18 | import org.onlab.onos.net.intent.IntentInstaller; | 22 | import org.onlab.onos.net.intent.IntentInstaller; |
19 | import org.onlab.onos.net.intent.PathIntent; | 23 | import org.onlab.onos.net.intent.PathIntent; |
20 | 24 | ||
21 | -import java.util.Iterator; | ||
22 | - | ||
23 | -import static org.onlab.onos.net.flow.DefaultTrafficTreatment.builder; | ||
24 | - | ||
25 | /** | 25 | /** |
26 | * Installer for {@link PathIntent path connectivity intents}. | 26 | * Installer for {@link PathIntent path connectivity intents}. |
27 | */ | 27 | */ |
... | @@ -59,8 +59,8 @@ public class PathIntentInstaller implements IntentInstaller<PathIntent> { | ... | @@ -59,8 +59,8 @@ public class PathIntentInstaller implements IntentInstaller<PathIntent> { |
59 | TrafficTreatment treatment = builder() | 59 | TrafficTreatment treatment = builder() |
60 | .setOutput(link.src().port()).build(); | 60 | .setOutput(link.src().port()).build(); |
61 | FlowRule rule = new DefaultFlowRule(link.src().deviceId(), | 61 | FlowRule rule = new DefaultFlowRule(link.src().deviceId(), |
62 | - builder.build(), treatment, | 62 | + builder.build(), treatment, |
63 | - 123, appId, 600); | 63 | + 123, appId, 600); |
64 | flowRuleService.applyFlowRules(rule); | 64 | flowRuleService.applyFlowRules(rule); |
65 | prev = link.dst(); | 65 | prev = link.dst(); |
66 | } | 66 | } |
... | @@ -69,6 +69,21 @@ public class PathIntentInstaller implements IntentInstaller<PathIntent> { | ... | @@ -69,6 +69,21 @@ public class PathIntentInstaller implements IntentInstaller<PathIntent> { |
69 | 69 | ||
70 | @Override | 70 | @Override |
71 | public void uninstall(PathIntent intent) { | 71 | public void uninstall(PathIntent intent) { |
72 | - //TODO | 72 | + TrafficSelector.Builder builder = |
73 | + DefaultTrafficSelector.builder(intent.getTrafficSelector()); | ||
74 | + Iterator<Link> links = intent.getPath().links().iterator(); | ||
75 | + ConnectPoint prev = links.next().dst(); | ||
76 | + | ||
77 | + while (links.hasNext()) { | ||
78 | + builder.matchInport(prev.port()); | ||
79 | + Link link = links.next(); | ||
80 | + TrafficTreatment treatment = builder() | ||
81 | + .setOutput(link.src().port()).build(); | ||
82 | + FlowRule rule = new DefaultFlowRule(link.src().deviceId(), | ||
83 | + builder.build(), treatment, | ||
84 | + 123, appId, 600); | ||
85 | + flowRuleService.removeFlowRules(rule); | ||
86 | + prev = link.dst(); | ||
87 | + } | ||
73 | } | 88 | } |
74 | } | 89 | } | ... | ... |
-
Please register or login to post a comment