lishuai
Committed by Gerrit Code Review

[ONOS-3585] Add the cli of setting external port name.

Change-Id: I71833063c8e3f27fff7d69499cd3d24fd5537274
......@@ -49,5 +49,9 @@
<artifactId>onos-app-vtn-rsc</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.karaf.shell</groupId>
<artifactId>org.apache.karaf.shell.console</artifactId>
</dependency>
</dependencies>
</project>
......
/*
* 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);
}
}
/*
* 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.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
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.L3ForwardService;
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.DnatServiceImpl;
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.VtnConfig;
import org.onosproject.vtn.util.VtnData;
......@@ -94,9 +99,6 @@ import org.onosproject.vtnrsc.BindingHostId;
import org.onosproject.vtnrsc.DefaultVirtualPort;
import org.onosproject.vtnrsc.FixedIp;
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.SecurityGroup;
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.VtnRscListener;
import org.onosproject.vtnrsc.floatingip.FloatingIpService;
import org.onosproject.vtnrsc.router.RouterService;
import org.onosproject.vtnrsc.routerinterface.RouterInterfaceService;
import org.onosproject.vtnrsc.service.VtnRscService;
import org.onosproject.vtnrsc.subnet.SubnetService;
......@@ -173,9 +174,6 @@ public class VTNManager implements VTNService {
protected FloatingIpService floatingIpService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected RouterService routerService;
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected RouterInterfaceService routerInterfaceService;
private ApplicationId appId;
......@@ -190,10 +188,10 @@ public class VTNManager implements VTNService {
private final DeviceListener deviceListener = new InnerDeviceListener();
private final VtnRscListener l3EventListener = new VtnL3EventListener();
private static String exPortName = "eth0";
private static final String IFACEID = "ifaceid";
private static final String CONTROLLER_IP_KEY = "ipaddress";
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 SWITCHES_OF_CONTROLLER = "switchesOfController";
private static final String SWITCH_OF_LOCAL_HOST_PORTS = "switchOfLocalHostPorts";
......@@ -215,9 +213,14 @@ public class VTNManager implements VTNService {
appId = coreService.registerApplication(APP_ID);
classifierService = new ClassifierServiceImpl(appId);
l2ForwardService = new L2ForwardServiceImpl(appId);
arpService = new ArpServiceImpl(appId);
l3ForwardService = new L3ForwardServiceImpl(appId);
snatService = new SnatServiceImpl(appId);
dnatService = new DnatServiceImpl(appId);
deviceService.addListener(deviceListener);
hostService.addListener(hostListener);
vtnRscService.addListener(l3EventListener);
KryoNamespace.Builder serializer = KryoNamespace.newBuilder()
.register(KryoNamespaces.API)
......@@ -307,7 +310,7 @@ public class VTNManager implements VTNService {
config.driver(DRIVER_NAME);
configService.applyConfig(deviceId, BasicDeviceConfig.class, config.node());
// 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());
switchesOfController.put(localIp, true);
}
......@@ -471,6 +474,28 @@ public class VTNManager implements VTNService {
if (virtualPort == null) {
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();
PortNumber inPort = host.location().port();
......@@ -887,15 +912,8 @@ public class VTNManager implements VTNService {
List gwIpMac = getGwIpAndMac(vmPort);
IpAddress dstVmGwIp = (IpAddress) gwIpMac.get(0);
MacAddress dstVmGwMac = (MacAddress) gwIpMac.get(1);
FixedIp fixedGwIp = getGwFixedIp(floatingIp);
MacAddress fGwMac = null;
if (fixedGwIp != null) {
VirtualPort gwPort = virtualPortService.getPort(fixedGwIp);
if (gwPort == null) {
gwPort = VtnData.getPort(vPortStore, fixedGwIp);
}
fGwMac = gwPort.macAddress();
}
List fGwIpMac = getGwIpAndMac(fipPort);
MacAddress fGwMac = (MacAddress) fGwIpMac.get(1);
TenantNetwork vmNetwork = tenantNetworkService
.getNetwork(vmPort.networkId());
TenantNetwork fipNetwork = tenantNetworkService
......@@ -947,7 +965,7 @@ public class VTNManager implements VTNService {
Port exPort = null;
for (Port port : ports) {
String portName = port.annotations().value(AnnotationKeys.PORT_NAME);
if (portName != null && portName.equals(EX_PORT_NAME)) {
if (portName != null && portName.equals(exPortName)) {
exPort = port;
break;
}
......@@ -977,21 +995,6 @@ public class VTNManager implements VTNService {
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,
Objective.Operation operation) {
String ifaceId = host.annotations().value(IFACEID);
......@@ -1060,4 +1063,8 @@ public class VTNManager implements VTNService {
l3vni, exPort, operation);
}
}
public static void setExPortName(String name) {
exPortName = name;
}
}
......
<!--
~ 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>