mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-11-07 19:52:03 +01:00
[ONOS-3585] Add the cli of setting external port name.
Change-Id: I71833063c8e3f27fff7d69499cd3d24fd5537274
This commit is contained in:
parent
08c1efc0c3
commit
74f2d531ca
@ -49,5 +49,9 @@
|
|||||||
<artifactId>onos-app-vtn-rsc</artifactId>
|
<artifactId>onos-app-vtn-rsc</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.karaf.shell</groupId>
|
||||||
|
<artifactId>org.apache.karaf.shell.console</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015 Open Networking Laboratory
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.onosproject.vtn.cli;
|
||||||
|
|
||||||
|
import org.apache.karaf.shell.commands.Command;
|
||||||
|
import org.apache.karaf.shell.commands.Option;
|
||||||
|
import org.onosproject.cli.AbstractShellCommand;
|
||||||
|
import org.onosproject.vtn.manager.impl.VTNManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Supports for updating the external gateway virtualPort.
|
||||||
|
*/
|
||||||
|
@Command(scope = "onos", name = "externalportname-set",
|
||||||
|
description = "Supports for setting the external port name.")
|
||||||
|
public class VtnCommand extends AbstractShellCommand {
|
||||||
|
|
||||||
|
@Option(name = "-n", aliases = "--name", description = "external port name.", required = true,
|
||||||
|
multiValued = false)
|
||||||
|
String exPortName = "";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void execute() {
|
||||||
|
VTNManager.setExPortName(exPortName);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2015 Open Networking Laboratory
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* VTN application that applies configuration and flows to the device.
|
||||||
|
*/
|
||||||
|
package org.onosproject.vtn.cli;
|
||||||
@ -26,6 +26,7 @@ import java.util.Iterator;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.apache.felix.scr.annotations.Activate;
|
import org.apache.felix.scr.annotations.Activate;
|
||||||
@ -84,8 +85,12 @@ import org.onosproject.vtn.table.DnatService;
|
|||||||
import org.onosproject.vtn.table.L2ForwardService;
|
import org.onosproject.vtn.table.L2ForwardService;
|
||||||
import org.onosproject.vtn.table.L3ForwardService;
|
import org.onosproject.vtn.table.L3ForwardService;
|
||||||
import org.onosproject.vtn.table.SnatService;
|
import org.onosproject.vtn.table.SnatService;
|
||||||
|
import org.onosproject.vtn.table.impl.ArpServiceImpl;
|
||||||
import org.onosproject.vtn.table.impl.ClassifierServiceImpl;
|
import org.onosproject.vtn.table.impl.ClassifierServiceImpl;
|
||||||
|
import org.onosproject.vtn.table.impl.DnatServiceImpl;
|
||||||
import org.onosproject.vtn.table.impl.L2ForwardServiceImpl;
|
import org.onosproject.vtn.table.impl.L2ForwardServiceImpl;
|
||||||
|
import org.onosproject.vtn.table.impl.L3ForwardServiceImpl;
|
||||||
|
import org.onosproject.vtn.table.impl.SnatServiceImpl;
|
||||||
import org.onosproject.vtn.util.DataPathIdGenerator;
|
import org.onosproject.vtn.util.DataPathIdGenerator;
|
||||||
import org.onosproject.vtn.util.VtnConfig;
|
import org.onosproject.vtn.util.VtnConfig;
|
||||||
import org.onosproject.vtn.util.VtnData;
|
import org.onosproject.vtn.util.VtnData;
|
||||||
@ -94,9 +99,6 @@ import org.onosproject.vtnrsc.BindingHostId;
|
|||||||
import org.onosproject.vtnrsc.DefaultVirtualPort;
|
import org.onosproject.vtnrsc.DefaultVirtualPort;
|
||||||
import org.onosproject.vtnrsc.FixedIp;
|
import org.onosproject.vtnrsc.FixedIp;
|
||||||
import org.onosproject.vtnrsc.FloatingIp;
|
import org.onosproject.vtnrsc.FloatingIp;
|
||||||
import org.onosproject.vtnrsc.Router;
|
|
||||||
import org.onosproject.vtnrsc.RouterGateway;
|
|
||||||
import org.onosproject.vtnrsc.RouterId;
|
|
||||||
import org.onosproject.vtnrsc.RouterInterface;
|
import org.onosproject.vtnrsc.RouterInterface;
|
||||||
import org.onosproject.vtnrsc.SecurityGroup;
|
import org.onosproject.vtnrsc.SecurityGroup;
|
||||||
import org.onosproject.vtnrsc.SegmentationId;
|
import org.onosproject.vtnrsc.SegmentationId;
|
||||||
@ -110,7 +112,6 @@ import org.onosproject.vtnrsc.event.VtnRscEvent;
|
|||||||
import org.onosproject.vtnrsc.event.VtnRscEventFeedback;
|
import org.onosproject.vtnrsc.event.VtnRscEventFeedback;
|
||||||
import org.onosproject.vtnrsc.event.VtnRscListener;
|
import org.onosproject.vtnrsc.event.VtnRscListener;
|
||||||
import org.onosproject.vtnrsc.floatingip.FloatingIpService;
|
import org.onosproject.vtnrsc.floatingip.FloatingIpService;
|
||||||
import org.onosproject.vtnrsc.router.RouterService;
|
|
||||||
import org.onosproject.vtnrsc.routerinterface.RouterInterfaceService;
|
import org.onosproject.vtnrsc.routerinterface.RouterInterfaceService;
|
||||||
import org.onosproject.vtnrsc.service.VtnRscService;
|
import org.onosproject.vtnrsc.service.VtnRscService;
|
||||||
import org.onosproject.vtnrsc.subnet.SubnetService;
|
import org.onosproject.vtnrsc.subnet.SubnetService;
|
||||||
@ -172,9 +173,6 @@ public class VTNManager implements VTNService {
|
|||||||
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
||||||
protected FloatingIpService floatingIpService;
|
protected FloatingIpService floatingIpService;
|
||||||
|
|
||||||
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
|
||||||
protected RouterService routerService;
|
|
||||||
|
|
||||||
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
||||||
protected RouterInterfaceService routerInterfaceService;
|
protected RouterInterfaceService routerInterfaceService;
|
||||||
|
|
||||||
@ -190,10 +188,10 @@ public class VTNManager implements VTNService {
|
|||||||
private final DeviceListener deviceListener = new InnerDeviceListener();
|
private final DeviceListener deviceListener = new InnerDeviceListener();
|
||||||
private final VtnRscListener l3EventListener = new VtnL3EventListener();
|
private final VtnRscListener l3EventListener = new VtnL3EventListener();
|
||||||
|
|
||||||
|
private static String exPortName = "eth0";
|
||||||
private static final String IFACEID = "ifaceid";
|
private static final String IFACEID = "ifaceid";
|
||||||
private static final String CONTROLLER_IP_KEY = "ipaddress";
|
private static final String CONTROLLER_IP_KEY = "ipaddress";
|
||||||
public static final String DRIVER_NAME = "onosfw";
|
public static final String DRIVER_NAME = "onosfw";
|
||||||
private static final String EX_PORT_NAME = "eth0";
|
|
||||||
private static final String VIRTUALPORT = "vtn-virtual-port";
|
private static final String VIRTUALPORT = "vtn-virtual-port";
|
||||||
private static final String SWITCHES_OF_CONTROLLER = "switchesOfController";
|
private static final String SWITCHES_OF_CONTROLLER = "switchesOfController";
|
||||||
private static final String SWITCH_OF_LOCAL_HOST_PORTS = "switchOfLocalHostPorts";
|
private static final String SWITCH_OF_LOCAL_HOST_PORTS = "switchOfLocalHostPorts";
|
||||||
@ -215,9 +213,14 @@ public class VTNManager implements VTNService {
|
|||||||
appId = coreService.registerApplication(APP_ID);
|
appId = coreService.registerApplication(APP_ID);
|
||||||
classifierService = new ClassifierServiceImpl(appId);
|
classifierService = new ClassifierServiceImpl(appId);
|
||||||
l2ForwardService = new L2ForwardServiceImpl(appId);
|
l2ForwardService = new L2ForwardServiceImpl(appId);
|
||||||
|
arpService = new ArpServiceImpl(appId);
|
||||||
|
l3ForwardService = new L3ForwardServiceImpl(appId);
|
||||||
|
snatService = new SnatServiceImpl(appId);
|
||||||
|
dnatService = new DnatServiceImpl(appId);
|
||||||
|
|
||||||
deviceService.addListener(deviceListener);
|
deviceService.addListener(deviceListener);
|
||||||
hostService.addListener(hostListener);
|
hostService.addListener(hostListener);
|
||||||
|
vtnRscService.addListener(l3EventListener);
|
||||||
|
|
||||||
KryoNamespace.Builder serializer = KryoNamespace.newBuilder()
|
KryoNamespace.Builder serializer = KryoNamespace.newBuilder()
|
||||||
.register(KryoNamespaces.API)
|
.register(KryoNamespaces.API)
|
||||||
@ -307,7 +310,7 @@ public class VTNManager implements VTNService {
|
|||||||
config.driver(DRIVER_NAME);
|
config.driver(DRIVER_NAME);
|
||||||
configService.applyConfig(deviceId, BasicDeviceConfig.class, config.node());
|
configService.applyConfig(deviceId, BasicDeviceConfig.class, config.node());
|
||||||
// Add Bridge
|
// Add Bridge
|
||||||
VtnConfig.applyBridgeConfig(handler, dpid, EX_PORT_NAME);
|
VtnConfig.applyBridgeConfig(handler, dpid, exPortName);
|
||||||
log.info("A new ovs is created in node {}", localIp.toString());
|
log.info("A new ovs is created in node {}", localIp.toString());
|
||||||
switchesOfController.put(localIp, true);
|
switchesOfController.put(localIp, true);
|
||||||
}
|
}
|
||||||
@ -471,6 +474,28 @@ public class VTNManager implements VTNService {
|
|||||||
if (virtualPort == null) {
|
if (virtualPort == null) {
|
||||||
virtualPort = VtnData.getPort(vPortStore, virtualPortId);
|
virtualPort = VtnData.getPort(vPortStore, virtualPortId);
|
||||||
}
|
}
|
||||||
|
Iterator<FixedIp> fixip = virtualPort.fixedIps().iterator();
|
||||||
|
SubnetId subnetId = null;
|
||||||
|
if (fixip.hasNext()) {
|
||||||
|
subnetId = fixip.next().subnetId();
|
||||||
|
}
|
||||||
|
if (subnetId != null) {
|
||||||
|
Map<HostId, Host> hosts = new ConcurrentHashMap();
|
||||||
|
if (hostsOfSubnet.get(subnetId) != null) {
|
||||||
|
hosts = hostsOfSubnet.get(subnetId);
|
||||||
|
}
|
||||||
|
if (type == Objective.Operation.ADD) {
|
||||||
|
hosts.put(host.id(), host);
|
||||||
|
hostsOfSubnet.put(subnetId, hosts);
|
||||||
|
} else if (type == Objective.Operation.REMOVE) {
|
||||||
|
hosts.remove(host.id());
|
||||||
|
if (hosts.size() != 0) {
|
||||||
|
hostsOfSubnet.put(subnetId, hosts);
|
||||||
|
} else {
|
||||||
|
hostsOfSubnet.remove(subnetId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Iterable<Device> devices = deviceService.getAvailableDevices();
|
Iterable<Device> devices = deviceService.getAvailableDevices();
|
||||||
PortNumber inPort = host.location().port();
|
PortNumber inPort = host.location().port();
|
||||||
@ -887,15 +912,8 @@ public class VTNManager implements VTNService {
|
|||||||
List gwIpMac = getGwIpAndMac(vmPort);
|
List gwIpMac = getGwIpAndMac(vmPort);
|
||||||
IpAddress dstVmGwIp = (IpAddress) gwIpMac.get(0);
|
IpAddress dstVmGwIp = (IpAddress) gwIpMac.get(0);
|
||||||
MacAddress dstVmGwMac = (MacAddress) gwIpMac.get(1);
|
MacAddress dstVmGwMac = (MacAddress) gwIpMac.get(1);
|
||||||
FixedIp fixedGwIp = getGwFixedIp(floatingIp);
|
List fGwIpMac = getGwIpAndMac(fipPort);
|
||||||
MacAddress fGwMac = null;
|
MacAddress fGwMac = (MacAddress) fGwIpMac.get(1);
|
||||||
if (fixedGwIp != null) {
|
|
||||||
VirtualPort gwPort = virtualPortService.getPort(fixedGwIp);
|
|
||||||
if (gwPort == null) {
|
|
||||||
gwPort = VtnData.getPort(vPortStore, fixedGwIp);
|
|
||||||
}
|
|
||||||
fGwMac = gwPort.macAddress();
|
|
||||||
}
|
|
||||||
TenantNetwork vmNetwork = tenantNetworkService
|
TenantNetwork vmNetwork = tenantNetworkService
|
||||||
.getNetwork(vmPort.networkId());
|
.getNetwork(vmPort.networkId());
|
||||||
TenantNetwork fipNetwork = tenantNetworkService
|
TenantNetwork fipNetwork = tenantNetworkService
|
||||||
@ -947,7 +965,7 @@ public class VTNManager implements VTNService {
|
|||||||
Port exPort = null;
|
Port exPort = null;
|
||||||
for (Port port : ports) {
|
for (Port port : ports) {
|
||||||
String portName = port.annotations().value(AnnotationKeys.PORT_NAME);
|
String portName = port.annotations().value(AnnotationKeys.PORT_NAME);
|
||||||
if (portName != null && portName.equals(EX_PORT_NAME)) {
|
if (portName != null && portName.equals(exPortName)) {
|
||||||
exPort = port;
|
exPort = port;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -977,21 +995,6 @@ public class VTNManager implements VTNService {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
private FixedIp getGwFixedIp(FloatingIp floatingIp) {
|
|
||||||
RouterId routerId = floatingIp.routerId();
|
|
||||||
Router router = routerService.getRouter(routerId);
|
|
||||||
RouterGateway routerGateway = router.externalGatewayInfo();
|
|
||||||
Iterable<FixedIp> externalFixedIps = routerGateway.externalFixedIps();
|
|
||||||
FixedIp fixedGwIp = null;
|
|
||||||
if (externalFixedIps != null) {
|
|
||||||
Iterator<FixedIp> exFixedIps = externalFixedIps.iterator();
|
|
||||||
if (exFixedIps.hasNext()) {
|
|
||||||
fixedGwIp = exFixedIps.next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return fixedGwIp;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void applyHostMonitoredL3Rules(Host host,
|
private void applyHostMonitoredL3Rules(Host host,
|
||||||
Objective.Operation operation) {
|
Objective.Operation operation) {
|
||||||
String ifaceId = host.annotations().value(IFACEID);
|
String ifaceId = host.annotations().value(IFACEID);
|
||||||
@ -1060,4 +1063,8 @@ public class VTNManager implements VTNService {
|
|||||||
l3vni, exPort, operation);
|
l3vni, exPort, operation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void setExPortName(String name) {
|
||||||
|
exPortName = name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,23 @@
|
|||||||
|
<!--
|
||||||
|
~ Copyright 2015 Open Networking Laboratory
|
||||||
|
~
|
||||||
|
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
~ you may not use this file except in compliance with the License.
|
||||||
|
~ You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing, software
|
||||||
|
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
~ See the License for the specific language governing permissions and
|
||||||
|
~ limitations under the License.
|
||||||
|
-->
|
||||||
|
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
|
||||||
|
|
||||||
|
<command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
|
||||||
|
<command>
|
||||||
|
<action class="org.onosproject.vtn.cli.VtnCommand"/>
|
||||||
|
</command>
|
||||||
|
</command-bundle>
|
||||||
|
</blueprint>
|
||||||
Loading…
x
Reference in New Issue
Block a user