Host list command added to CLI
Change-Id: I52d11d3b1d56650e92357b6cb2c67007be742114
Showing
4 changed files
with
109 additions
and
2 deletions
| 1 | +package org.onlab.onos.cli.net; | ||
| 2 | + | ||
| 3 | +import java.util.Iterator; | ||
| 4 | +import java.util.List; | ||
| 5 | +import java.util.SortedSet; | ||
| 6 | + | ||
| 7 | +import org.apache.karaf.shell.console.Completer; | ||
| 8 | +import org.apache.karaf.shell.console.completer.StringsCompleter; | ||
| 9 | +import org.onlab.onos.cli.AbstractShellCommand; | ||
| 10 | +import org.onlab.onos.net.Host; | ||
| 11 | +import org.onlab.onos.net.host.HostService; | ||
| 12 | + | ||
| 13 | +public class HostIdCompleter implements Completer { | ||
| 14 | + | ||
| 15 | + @Override | ||
| 16 | + public int complete(String buffer, int cursor, List<String> candidates) { | ||
| 17 | + // Delegate string completer | ||
| 18 | + StringsCompleter delegate = new StringsCompleter(); | ||
| 19 | + | ||
| 20 | + HostService service = AbstractShellCommand.get(HostService.class); | ||
| 21 | + Iterator<Host> it = service.getHosts().iterator(); | ||
| 22 | + SortedSet<String> strings = delegate.getStrings(); | ||
| 23 | + while (it.hasNext()) { | ||
| 24 | + strings.add(it.next().id().toString()); | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + // Now let the completer do the work for figuring out what to offer. | ||
| 28 | + return delegate.complete(buffer, cursor, candidates); | ||
| 29 | + | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | +} |
| 1 | +package org.onlab.onos.cli.net; | ||
| 2 | + | ||
| 3 | +import static com.google.common.collect.Lists.newArrayList; | ||
| 4 | + | ||
| 5 | +import java.util.Collections; | ||
| 6 | +import java.util.Comparator; | ||
| 7 | +import java.util.List; | ||
| 8 | + | ||
| 9 | +import org.apache.karaf.shell.commands.Command; | ||
| 10 | +import org.onlab.onos.cli.AbstractShellCommand; | ||
| 11 | +import org.onlab.onos.net.Host; | ||
| 12 | +import org.onlab.onos.net.host.HostService; | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * Lists all currently-known hosts. | ||
| 16 | + */ | ||
| 17 | +@Command(scope = "onos", name = "hosts", | ||
| 18 | + description = "Lists all currently-known hosts.") | ||
| 19 | +public class HostsListCommand extends AbstractShellCommand { | ||
| 20 | + | ||
| 21 | + private static final String FMT = | ||
| 22 | + "id=%s, mac=%s, location=%s/%s, vlan=%s, ip(s)=%s"; | ||
| 23 | + | ||
| 24 | + protected static final Comparator<Host> ID_COMPARATOR = new Comparator<Host>() { | ||
| 25 | + @Override | ||
| 26 | + public int compare(Host h1, Host h2) { | ||
| 27 | + return h1.id().uri().toString().compareTo(h2.id().uri().toString()); | ||
| 28 | + } | ||
| 29 | + }; | ||
| 30 | + | ||
| 31 | + @Override | ||
| 32 | + protected Object doExecute() throws Exception { | ||
| 33 | + HostService service = getService(HostService.class); | ||
| 34 | + for (Host host : getSortedHosts(service)) { | ||
| 35 | + printHost(host); | ||
| 36 | + } | ||
| 37 | + return null; | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + /** | ||
| 41 | + * Returns the list of devices sorted using the device ID URIs. | ||
| 42 | + * | ||
| 43 | + * @param service device service | ||
| 44 | + * @return sorted device list | ||
| 45 | + */ | ||
| 46 | + protected List<Host> getSortedHosts(HostService service) { | ||
| 47 | + List<Host> hosts = newArrayList(service.getHosts()); | ||
| 48 | + Collections.sort(hosts, ID_COMPARATOR); | ||
| 49 | + return hosts; | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + /** | ||
| 53 | + * Prints information about a host. | ||
| 54 | + * | ||
| 55 | + * @param host | ||
| 56 | + */ | ||
| 57 | + protected void printHost(Host host) { | ||
| 58 | + if (host != null) { | ||
| 59 | + print(FMT, host.id(), host.mac(), | ||
| 60 | + host.location().deviceId(), | ||
| 61 | + host.location().port(), | ||
| 62 | + host.vlan(), host.ipAddresses()); | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + } |
| ... | @@ -55,10 +55,19 @@ | ... | @@ -55,10 +55,19 @@ |
| 55 | <ref component-id="clusterIdCompleter"/> | 55 | <ref component-id="clusterIdCompleter"/> |
| 56 | </completers> | 56 | </completers> |
| 57 | </command> | 57 | </command> |
| 58 | + | ||
| 59 | + <command> | ||
| 60 | + <action class="org.onlab.onos.cli.net.HostsListCommand"/> | ||
| 61 | + <completers> | ||
| 62 | + <ref component-id="hostIdCompleter"/> | ||
| 63 | + </completers> | ||
| 64 | + </command> | ||
| 65 | + | ||
| 58 | </command-bundle> | 66 | </command-bundle> |
| 59 | 67 | ||
| 60 | <bean id="deviceIdCompleter" class="org.onlab.onos.cli.net.DeviceIdCompleter"/> | 68 | <bean id="deviceIdCompleter" class="org.onlab.onos.cli.net.DeviceIdCompleter"/> |
| 61 | <bean id="clusterIdCompleter" class="org.onlab.onos.cli.net.ClusterIdCompleter"/> | 69 | <bean id="clusterIdCompleter" class="org.onlab.onos.cli.net.ClusterIdCompleter"/> |
| 62 | <bean id="roleCompleter" class="org.onlab.onos.cli.net.RoleCompleter"/> | 70 | <bean id="roleCompleter" class="org.onlab.onos.cli.net.RoleCompleter"/> |
| 71 | + <bean id="hostIdCompleter" class="org.onlab.onos.cli.net.HostIdCompleter"/> | ||
| 63 | 72 | ||
| 64 | </blueprint> | 73 | </blueprint> | ... | ... |
| ... | @@ -19,6 +19,7 @@ import org.onlab.onos.net.host.HostProviderRegistry; | ... | @@ -19,6 +19,7 @@ import org.onlab.onos.net.host.HostProviderRegistry; |
| 19 | import org.onlab.onos.net.host.HostProviderService; | 19 | import org.onlab.onos.net.host.HostProviderService; |
| 20 | import org.onlab.onos.net.provider.AbstractProvider; | 20 | import org.onlab.onos.net.provider.AbstractProvider; |
| 21 | import org.onlab.onos.net.provider.ProviderId; | 21 | import org.onlab.onos.net.provider.ProviderId; |
| 22 | +import org.onlab.onos.of.controller.Dpid; | ||
| 22 | import org.onlab.onos.of.controller.OpenFlowController; | 23 | import org.onlab.onos.of.controller.OpenFlowController; |
| 23 | import org.onlab.onos.of.controller.OpenFlowPacketContext; | 24 | import org.onlab.onos.of.controller.OpenFlowPacketContext; |
| 24 | import org.onlab.onos.of.controller.PacketListener; | 25 | import org.onlab.onos.of.controller.PacketListener; |
| ... | @@ -61,7 +62,7 @@ public class OpenFlowHostProvider extends AbstractProvider implements HostProvid | ... | @@ -61,7 +62,7 @@ public class OpenFlowHostProvider extends AbstractProvider implements HostProvid |
| 61 | @Activate | 62 | @Activate |
| 62 | public void activate() { | 63 | public void activate() { |
| 63 | providerService = providerRegistry.register(this); | 64 | providerService = providerRegistry.register(this); |
| 64 | - controller.addPacketListener(0, listener); | 65 | + controller.addPacketListener(10, listener); |
| 65 | 66 | ||
| 66 | log.info("Started"); | 67 | log.info("Started"); |
| 67 | } | 68 | } |
| ... | @@ -92,7 +93,7 @@ public class OpenFlowHostProvider extends AbstractProvider implements HostProvid | ... | @@ -92,7 +93,7 @@ public class OpenFlowHostProvider extends AbstractProvider implements HostProvid |
| 92 | HostId hid = HostId.hostId( | 93 | HostId hid = HostId.hostId( |
| 93 | eth.getSourceMAC(), vlan); | 94 | eth.getSourceMAC(), vlan); |
| 94 | HostLocation hloc = new HostLocation( | 95 | HostLocation hloc = new HostLocation( |
| 95 | - DeviceId.deviceId("of:" + Long.toHexString(pktCtx.dpid().value())), | 96 | + DeviceId.deviceId(Dpid.uri(pktCtx.dpid())), |
| 96 | PortNumber.portNumber(pktCtx.inPort()), | 97 | PortNumber.portNumber(pktCtx.inPort()), |
| 97 | System.currentTimeMillis()); | 98 | System.currentTimeMillis()); |
| 98 | ARP arp = (ARP) eth.getPayload(); | 99 | ARP arp = (ARP) eth.getPayload(); | ... | ... |
-
Please register or login to post a comment