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;
12 import javax.annotation.Nullable;
13 import javax.annotation.PreDestroy;
14 import javax.inject.Inject;
15 import javax.inject.Singleton;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.networks.Network;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
23 public class NeutronExternalSubnetHandler implements AutoCloseable {
24 private static final Logger LOG = LoggerFactory.getLogger(NeutronExternalSubnetHandler.class);
25 private final NeutronvpnManager nvpnManager;
26 private final NeutronvpnNatManager nvpnNatManager;
29 public NeutronExternalSubnetHandler(final NeutronvpnManager neutronvpnManager,
30 final NeutronvpnNatManager neutronvpnNatMgr) {
31 this.nvpnManager = neutronvpnManager;
32 this.nvpnNatManager = neutronvpnNatMgr;
38 LOG.info("{} close", getClass().getSimpleName());
41 public void handleExternalSubnetAdded(Network network, Uuid subnetId, @Nullable List<Uuid> routerIds) {
42 Uuid networkId = network.getUuid();
43 if (NeutronvpnUtils.getIsExternal(network) && NeutronvpnUtils.isFlatOrVlanNetwork(network)) {
44 LOG.info("Added external subnet {} part of external network {} will create NAT external subnet",
45 subnetId.getValue(), networkId.getValue());
46 nvpnNatManager.updateOrAddExternalSubnet(networkId, subnetId, routerIds);
47 nvpnManager.updateSubnetNode(subnetId, null/* routerId */, subnetId, null /* internet-vpn-id */);
48 nvpnManager.createVpnInstanceForSubnet(subnetId);
52 public void handleExternalSubnetRemoved(Network network, Uuid subnetId) {
53 Uuid networkId = network.getUuid();
54 if (NeutronvpnUtils.getIsExternal(network) && NeutronvpnUtils.isFlatOrVlanNetwork(network)) {
55 LOG.info("Removed subnet {} part of external network {} will remove NAT external subnet",
56 subnetId.getValue(), networkId.getValue());
57 nvpnManager.removeVpnInstanceForSubnet(subnetId);
58 nvpnNatManager.removeExternalSubnet(networkId, subnetId);