2 * Copyright (c) 2017 HPE, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.netvirt.neutronvpn;
10 import java.util.List;
11 import javax.annotation.PreDestroy;
12 import javax.inject.Inject;
13 import javax.inject.Singleton;
14 import org.eclipse.jdt.annotation.Nullable;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network;
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
21 public class NeutronExternalSubnetHandler implements AutoCloseable {
22 private static final Logger LOG = LoggerFactory.getLogger(NeutronExternalSubnetHandler.class);
23 private final NeutronvpnManager nvpnManager;
24 private final NeutronvpnNatManager nvpnNatManager;
27 public NeutronExternalSubnetHandler(final NeutronvpnManager neutronvpnManager,
28 final NeutronvpnNatManager neutronvpnNatMgr) {
29 this.nvpnManager = neutronvpnManager;
30 this.nvpnNatManager = neutronvpnNatMgr;
36 LOG.info("{} close", getClass().getSimpleName());
39 public void handleExternalSubnetAdded(Network network, Uuid subnetId, @Nullable List<Uuid> routerIds) {
40 Uuid networkId = network.getUuid();
41 if (NeutronvpnUtils.getIsExternal(network) && NeutronvpnUtils.isFlatOrVlanNetwork(network)) {
42 LOG.info("Added external subnet {} part of external network {} will create NAT external subnet",
43 subnetId.getValue(), networkId.getValue());
44 nvpnNatManager.updateOrAddExternalSubnet(networkId, subnetId, routerIds);
45 nvpnManager.updateSubnetNode(subnetId, null/* routerId */, subnetId, null /* internet-vpn-id */);
46 nvpnManager.createVpnInstanceForSubnet(subnetId);
50 public void handleExternalSubnetRemoved(Network network, Uuid subnetId) {
51 Uuid networkId = network.getUuid();
52 if (NeutronvpnUtils.getIsExternal(network) && NeutronvpnUtils.isFlatOrVlanNetwork(network)) {
53 LOG.info("Removed subnet {} part of external network {} will remove NAT external subnet",
54 subnetId.getValue(), networkId.getValue());
55 nvpnManager.removeVpnInstanceForSubnet(subnetId);
56 nvpnNatManager.removeExternalSubnet(networkId, subnetId);