c3dc1dcfb537d40cfaf16d54ac931ea875d6fc8e
[netvirt.git] / neutronvpn / impl / src / main / java / org / opendaylight / netvirt / neutronvpn / NeutronExternalSubnetHandler.java
1 /*
2  * Copyright (c) 2017 HPE, Inc. and others. All rights reserved.
3  *
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
7  */
8 package org.opendaylight.netvirt.neutronvpn;
9
10 import java.util.List;
11
12 import javax.annotation.Nullable;
13 import javax.annotation.PreDestroy;
14 import javax.inject.Inject;
15 import javax.inject.Singleton;
16
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;
21
22 @Singleton
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;
27
28     @Inject
29     public NeutronExternalSubnetHandler(final NeutronvpnManager neutronvpnManager,
30             final NeutronvpnNatManager neutronvpnNatMgr) {
31         this.nvpnManager = neutronvpnManager;
32         this.nvpnNatManager = neutronvpnNatMgr;
33     }
34
35     @Override
36     @PreDestroy
37     public void close() {
38         LOG.info("{} close", getClass().getSimpleName());
39     }
40
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);
49         }
50     }
51
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);
59         }
60     }
61 }