blob: 2ffdb830d5f31f3e9d52d22f7ce88664f81199cb [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;
Jian Li5b22f112020-10-05 22:36:41 +090032import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.deriveResourceName;
Daniel Parkc4d06402018-05-28 15:57:37 +090033import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getIntfNameFromPciAddress;
34
35/**
36 * Lists OpenStack direct ports.
37 */
Ray Milkey7a2dee52018-09-28 10:58:28 -070038@Service
Daniel Parkc4d06402018-05-28 15:57:37 +090039@Command(scope = "onos", name = "openstack-direct-ports",
40 description = "Lists all OpenStack direct ports")
41public class OpenstackDirectPortListCommand extends AbstractShellCommand {
42 private static final String UNBOUND = "unbound";
43 private static final String FORMAT = "%-40s%-20s%-20s%-20s%-20s%-20s";
44
45 @Override
Ray Milkey86ad7bb2018-09-27 12:32:28 -070046 protected void doExecute() {
Jian Li5ecfd1a2018-12-10 11:41:03 +090047 OpenstackNetworkService service = get(OpenstackNetworkService.class);
Daniel Parkc4d06402018-05-28 15:57:37 +090048
49 List<Port> ports = service.ports().stream()
Daniel Parkc4d06402018-05-28 15:57:37 +090050 .filter(port -> port.getvNicType().equals(DIRECT))
Daniel Parkc4d06402018-05-28 15:57:37 +090051 .collect(Collectors.toList());
52
53
54 print(FORMAT, "ID", "Network", "MAC", "FIXED IPs", "PCI Slot", "Interface");
55 for (Port port: ports) {
56 List<String> fixedIps = port.getFixedIps().stream()
57 .map(IP::getIpAddress)
58 .collect(Collectors.toList());
59
60 Network osNet = service.network(port.getNetworkId());
Daniel Park95f73312018-07-31 15:48:34 +090061 if (port.getVifType().equals(UNBOUND)) {
62 print(FORMAT, port.getId(),
Jian Li5b22f112020-10-05 22:36:41 +090063 deriveResourceName(osNet),
Daniel Park95f73312018-07-31 15:48:34 +090064 port.getMacAddress(),
65 fixedIps.isEmpty() ? "" : fixedIps,
66 UNBOUND, UNBOUND);
67 } else {
68 print(FORMAT, port.getId(),
Jian Li5b22f112020-10-05 22:36:41 +090069 deriveResourceName(osNet),
Daniel Park95f73312018-07-31 15:48:34 +090070 port.getMacAddress(),
71 fixedIps.isEmpty() ? "" : fixedIps,
Jian Li5ecfd1a2018-12-10 11:41:03 +090072 port.getProfile().containsKey(PCISLOT) ?
73 port.getProfile().get(PCISLOT).toString() : "",
Daniel Park95f73312018-07-31 15:48:34 +090074 getIntfNameFromPciAddress(port));
75 }
76
Daniel Parkc4d06402018-05-28 15:57:37 +090077 }
78 }
79}