Add l3vpn support
[unimgr.git] / netvirt / src / main / java / org / opendaylight / unimgr / mef / netvirt / IpvcUniUtils.java
1 /*
2  * Copyright (c) 2016 Hewlett Packard Enterprise, Co. 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
9 package org.opendaylight.unimgr.mef.netvirt;
10
11 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
12 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
13 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
14 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
15 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.ip.unis.IpUni;
16 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.Link;
17 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.ipvc.choice.ipvc.unis.Uni;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
21
22 import com.google.common.base.Optional;
23 import com.google.common.util.concurrent.CheckedFuture;
24
25 public class IpvcUniUtils {
26
27     private static final Logger logger = LoggerFactory.getLogger(IpvcUniUtils.class);
28
29     public static void addUni(DataBroker dataBroker, Uni data, String interfaceName, Integer vlanId) {
30         try {
31             String uniId = data.getUniId().getValue();
32             WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
33             Link link = EvcUniUtils.getLink(dataBroker, uniId);
34             addTrunkInterface(interfaceName, MefUtils.getTrunkParentName(link), vlanId, tx);
35             commitTransaction(tx);
36         } catch (final Exception e) {
37             logger.error("Add uni failed !", e);
38         }
39     }
40
41     private static void addTrunkInterface(String interfaceName, String parentInterfaceName, Integer vlanId,
42             WriteTransaction tx) {
43         logger.info("Adding VLAN trunk {} ParentRef {}", interfaceName, parentInterfaceName);
44         Interface trunkInterface = null;
45         if (vlanId != null) {
46             trunkInterface = NetvirtUtils.createTrunkMemberInterface(interfaceName, parentInterfaceName, vlanId);
47         } else {
48             trunkInterface = NetvirtUtils.createTrunkInterface(interfaceName, parentInterfaceName);
49         }
50         NetvirtUtils.writeInterface(trunkInterface, tx);
51     }
52
53     public static org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni getUni(
54             DataBroker dataBroker, String uniId) {
55         Optional<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni> optional = MdsalUtils
56                 .read(dataBroker, LogicalDatastoreType.CONFIGURATION, MefUtils.getUniInstanceIdentifier(uniId));
57         if (!optional.isPresent()) {
58             logger.error("Couldn't find uni {} for ipvc-uni", uniId);
59             return null;
60         }
61         return optional.get();
62     }
63
64     public static IpUni getIpUni(DataBroker dataBroker, String uniId, String ipUniId) {
65         Optional<IpUni> optional = MdsalUtils.read(dataBroker, LogicalDatastoreType.CONFIGURATION,
66                 MefUtils.getIpUniInstanceIdentifier(uniId, ipUniId));
67
68         if (!optional.isPresent()) {
69             logger.error("A matching IpUni doesn't exist Uni {} IpUni {}", uniId, ipUniId);
70             return null;
71         }
72
73         return optional.get();
74     }
75
76     private static void commitTransaction(WriteTransaction tx) {
77         try {
78             CheckedFuture<Void, TransactionCommitFailedException> futures = tx.submit();
79             futures.get();
80         } catch (Exception e) {
81             logger.error("failed to commit transaction due to exception ", e);
82         }
83     }
84 }