blob: 55e7c3958017686d12a08f67147a5f5fbfb9a81f [file] [log] [blame]
Daniel Parkc4d06402018-05-28 15:57:37 +09001/*
2 * Copyright 2018-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.openstacknetworking.cli;
17
Ray Milkey86ad7bb2018-09-27 12:32:28 -070018import org.apache.karaf.shell.api.action.Command;
Ray Milkey7a2dee52018-09-28 10:58:28 -070019import org.apache.karaf.shell.api.action.lifecycle.Service;
Daniel Parkc4d06402018-05-28 15:57:37 +090020import org.onosproject.cli.AbstractShellCommand;
21import org.onosproject.openstacknetworking.api.OpenstackNetworkService;
22import org.openstack4j.model.network.IP;
23import org.openstack4j.model.network.Network;
24import org.openstack4j.model.network.Port;
25
26import java.util.List;
27import java.util.stream.Collectors;
28
29import static org.onosproject.openstacknetworking.api.Constants.DIRECT;
30import static org.onosproject.openstacknetworking.api.Constants.PCISLOT;
31import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getIntfNameFromPciAddress;
32
33/**
34 * Lists OpenStack direct ports.
35 */
Ray Milkey7a2dee52018-09-28 10:58:28 -070036@Service
Daniel Parkc4d06402018-05-28 15:57:37 +090037@Command(scope = "onos", name = "openstack-direct-ports",
38 description = "Lists all OpenStack direct ports")
39public class OpenstackDirectPortListCommand extends AbstractShellCommand {
40 private static final String UNBOUND = "unbound";
41 private static final String FORMAT = "%-40s%-20s%-20s%-20s%-20s%-20s";
42
43 @Override
Ray Milkey86ad7bb2018-09-27 12:32:28 -070044 protected void doExecute() {
Daniel Parkc4d06402018-05-28 15:57:37 +090045 OpenstackNetworkService service = AbstractShellCommand.get(OpenstackNetworkService.class);
46
47 List<Port> ports = service.ports().stream()
Daniel Parkc4d06402018-05-28 15:57:37 +090048 .filter(port -> port.getvNicType().equals(DIRECT))
Daniel Parkc4d06402018-05-28 15:57:37 +090049 .collect(Collectors.toList());
50
51
52 print(FORMAT, "ID", "Network", "MAC", "FIXED IPs", "PCI Slot", "Interface");
53 for (Port port: ports) {
54 List<String> fixedIps = port.getFixedIps().stream()
55 .map(IP::getIpAddress)
56 .collect(Collectors.toList());
57
58 Network osNet = service.network(port.getNetworkId());
Daniel Park95f73312018-07-31 15:48:34 +090059 if (port.getVifType().equals(UNBOUND)) {
60 print(FORMAT, port.getId(),
61 osNet.getName(),
62 port.getMacAddress(),
63 fixedIps.isEmpty() ? "" : fixedIps,
64 UNBOUND, UNBOUND);
65 } else {
66 print(FORMAT, port.getId(),
67 osNet.getName(),
68 port.getMacAddress(),
69 fixedIps.isEmpty() ? "" : fixedIps,
70 port.getProfile().containsKey(PCISLOT) ? port.getProfile().get(PCISLOT).toString() : "",
71 getIntfNameFromPciAddress(port));
72 }
73
Daniel Parkc4d06402018-05-28 15:57:37 +090074 }
75 }
76}