blob: 6b6d1299a4f53ee37e8565b162b1f7d13d9121e3 [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
Jian Li5ecfd1a2018-12-10 11:41:03 +090029import static org.onosproject.cli.AbstractShellCommand.get;
Daniel Parkc4d06402018-05-28 15:57:37 +090030import static org.onosproject.openstacknetworking.api.Constants.DIRECT;
31import static org.onosproject.openstacknetworking.api.Constants.PCISLOT;
32import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getIntfNameFromPciAddress;
33
34/**
35 * Lists OpenStack direct ports.
36 */
Ray Milkey7a2dee52018-09-28 10:58:28 -070037@Service
Daniel Parkc4d06402018-05-28 15:57:37 +090038@Command(scope = "onos", name = "openstack-direct-ports",
39 description = "Lists all OpenStack direct ports")
40public class OpenstackDirectPortListCommand extends AbstractShellCommand {
41 private static final String UNBOUND = "unbound";
42 private static final String FORMAT = "%-40s%-20s%-20s%-20s%-20s%-20s";
43
44 @Override
Ray Milkey86ad7bb2018-09-27 12:32:28 -070045 protected void doExecute() {
Jian Li5ecfd1a2018-12-10 11:41:03 +090046 OpenstackNetworkService service = get(OpenstackNetworkService.class);
Daniel Parkc4d06402018-05-28 15:57:37 +090047
48 List<Port> ports = service.ports().stream()
Daniel Parkc4d06402018-05-28 15:57:37 +090049 .filter(port -> port.getvNicType().equals(DIRECT))
Daniel Parkc4d06402018-05-28 15:57:37 +090050 .collect(Collectors.toList());
51
52
53 print(FORMAT, "ID", "Network", "MAC", "FIXED IPs", "PCI Slot", "Interface");
54 for (Port port: ports) {
55 List<String> fixedIps = port.getFixedIps().stream()
56 .map(IP::getIpAddress)
57 .collect(Collectors.toList());
58
59 Network osNet = service.network(port.getNetworkId());
Daniel Park95f73312018-07-31 15:48:34 +090060 if (port.getVifType().equals(UNBOUND)) {
61 print(FORMAT, port.getId(),
62 osNet.getName(),
63 port.getMacAddress(),
64 fixedIps.isEmpty() ? "" : fixedIps,
65 UNBOUND, UNBOUND);
66 } else {
67 print(FORMAT, port.getId(),
68 osNet.getName(),
69 port.getMacAddress(),
70 fixedIps.isEmpty() ? "" : fixedIps,
Jian Li5ecfd1a2018-12-10 11:41:03 +090071 port.getProfile().containsKey(PCISLOT) ?
72 port.getProfile().get(PCISLOT).toString() : "",
Daniel Park95f73312018-07-31 15:48:34 +090073 getIntfNameFromPciAddress(port));
74 }
75
Daniel Parkc4d06402018-05-28 15:57:37 +090076 }
77 }
78}