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