2 * Copyright (c) 2016 Hewlett Packard Enterprise, Co. 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
9 package org.opendaylight.unimgr.mef.netvirt;
11 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
12 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
13 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.MefInterfaces;
14 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.Unis;
15 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni;
16 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.UniKey;
17 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.IpUnis;
18 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.PhysicalLayers;
19 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.ip.unis.IpUni;
20 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.ip.unis.IpUniKey;
21 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.Links;
22 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.Link;
23 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.LinkKey;
24 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.MefServices;
25 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.MefService;
26 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.MefServiceKey;
27 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.Evc;
28 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.EvcBuilder;
29 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.ipvc.choice.Ipvc;
30 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.MefTopology;
31 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.Devices;
32 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.devices.Device;
33 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.devices.DeviceKey;
34 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.devices.device.Interfaces;
35 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.devices.device.interfaces.Interface;
36 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.devices.device.interfaces.InterfaceKey;
37 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.EvcIdType;
38 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.EvcType;
39 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.Identifier45;
40 import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.RetailSvcIdType;
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
43 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
44 import org.slf4j.Logger;
45 import org.slf4j.LoggerFactory;
47 import com.google.common.base.Optional;
49 public final class MefUtils {
50 @SuppressWarnings("unused")
51 private static final Logger logger = LoggerFactory.getLogger(MefUtils.class);
53 public static InstanceIdentifier<Interface> getDeviceInterfaceInstanceIdentifier(String deviceId,
55 return InstanceIdentifier.builder(MefTopology.class).child(Devices.class)
56 .child(Device.class, new DeviceKey(new Identifier45(deviceId))).child(Interfaces.class)
57 .child(Interface.class, new InterfaceKey(new Identifier45(interfaceId))).build();
60 public static InstanceIdentifier<Uni> getUniInstanceIdentifier(String uniId) {
61 return InstanceIdentifier.builder(MefInterfaces.class).child(Unis.class)
62 .child(Uni.class, new UniKey(new Identifier45(uniId))).build();
65 public static InstanceIdentifier<Uni> getUniListInterfaceInstanceIdentifier() {
66 return InstanceIdentifier.builder(MefInterfaces.class).child(Unis.class).child(Uni.class).build();
69 public static InstanceIdentifier<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.Unis> getUnisInstanceIdentifier(
71 return InstanceIdentifier.builder(MefServices.class)
72 .child(MefService.class, new MefServiceKey(RetailSvcIdType.getDefaultInstance(evcId))).child(Evc.class)
73 .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.Unis.class)
77 public static InstanceIdentifier<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.Uni> getEvcUniInstanceIdentifier(
79 return InstanceIdentifier.builder(MefServices.class).child(MefService.class).child(Evc.class)
80 .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.Unis.class)
81 .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.Uni.class,
82 new org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.UniKey(
83 new Identifier45(uniId)))
87 public static InstanceIdentifier<Link> getUniLinkInstanceIdentifier(String uniId, String deviceId,
89 return InstanceIdentifier.builder(MefInterfaces.class).child(Unis.class)
90 .child(Uni.class, new UniKey(new Identifier45(uniId))).child(PhysicalLayers.class).child(Links.class)
91 .child(Link.class, new LinkKey(new Identifier45(deviceId), interfaceId)).build();
94 public static InstanceIdentifier<IpUni> getIpUniInstanceIdentifier(String uniId, String ipUniId) {
95 return InstanceIdentifier.builder(MefInterfaces.class).child(Unis.class)
96 .child(Uni.class, new UniKey(new Identifier45(uniId))).child(IpUnis.class)
97 .child(IpUni.class, new IpUniKey(new Identifier45(ipUniId))).build();
100 public static InstanceIdentifier<Evc> getEvcInstanceIdentifier() {
101 return getMefServiceInstanceIdentifier().child(Evc.class);
104 public static InstanceIdentifier<MefService> getMefServiceInstanceIdentifier() {
105 return InstanceIdentifier.create(MefServices.class).child(MefService.class);
108 public static InstanceIdentifier<MefService> getMefServiceInstanceIdentifier(RetailSvcIdType retailSvcIdType) {
109 return InstanceIdentifier.create(MefServices.class).child(MefService.class, new MefServiceKey(retailSvcIdType));
112 public static InstanceIdentifier<MefServices> getMefServicesInstanceIdentifier() {
113 return InstanceIdentifier.create(MefServices.class);
116 public static void createEvcInstance(DataBroker dataBroker, String instanceName) {
117 Evc einst = createEvcInstance(instanceName);
119 MdsalUtils.syncWrite(dataBroker, LogicalDatastoreType.CONFIGURATION,
120 getEvcInstanceInstanceIdentifier(instanceName), einst);
123 private static InstanceIdentifier<Evc> getEvcInstanceInstanceIdentifier(String instanceName) {
124 return InstanceIdentifier.builder(MefServices.class)
125 .child(MefService.class, new MefServiceKey(RetailSvcIdType.getDefaultInstance(instanceName)))
126 .child(Evc.class).build();
129 private static InstanceIdentifier<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.Uni> getEvcUniInstanceIdentifier(
130 String serviceName, String uniId) {
131 return InstanceIdentifier.builder(MefServices.class)
132 .child(MefService.class, new MefServiceKey(RetailSvcIdType.getDefaultInstance(serviceName)))
134 .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.Unis.class)
135 .child(org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.Uni.class, //
136 new org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.UniKey(
137 Identifier45.getDefaultInstance(uniId)))
141 private static Evc createEvcInstance(String instanceName) {
142 EvcBuilder evcBuilder = new EvcBuilder();
143 evcBuilder.setAdminStateEnabled(false);
144 evcBuilder.setEvcId(EvcIdType.getDefaultInstance(instanceName));
145 evcBuilder.setEvcType(EvcType.MultipointToMultipoint);
146 return evcBuilder.build();
149 public static Boolean EvcExists(DataBroker dataBroker, String instanceName) {
150 Optional<Evc> evc = getEvc(dataBroker, instanceName);
151 return evc.isPresent();
154 public static Boolean isEvcAdminStateEnabled(DataBroker dataBroker, String instanceName) {
155 Optional<Evc> evc = getEvc(dataBroker, instanceName);
156 return evc.isPresent() && evc.get().isAdminStateEnabled();
160 public static Optional<Evc> getEvc(DataBroker dataBroker, String instanceName) {
161 Optional<Evc> evc = MdsalUtils.read(dataBroker, LogicalDatastoreType.CONFIGURATION,
162 getEvcInstanceInstanceIdentifier(instanceName));
166 public static Boolean EvcUniExists(DataBroker dataBroker, String instanceName, String uniId) {
167 logger.info("searching for uni id {} in service {}", uniId, instanceName);
168 Optional<org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.services.rev150526.mef.services.mef.service.mef.service.choice.evc.choice.evc.unis.Uni> uni = MdsalUtils
169 .read(dataBroker, LogicalDatastoreType.CONFIGURATION, getEvcUniInstanceIdentifier(instanceName, uniId));
170 if (uni.isPresent()) {
171 logger.info("found uni");
173 logger.info("no uni");
175 return uni.isPresent();
178 public static String getTrunkParentName(Link link) {
179 String interfaceName = link.getInterface().toString();
180 return interfaceName;
183 public static String getInterfaceName(Link link, String uniId) {
184 String device = link.getDevice().getValue();
185 return NetvirtUtils.getDeviceInterfaceName(device, uniId);
188 public static InstanceIdentifier<Ipvc> getIpvcInstanceIdentifier() {
189 return InstanceIdentifier.create(MefServices.class).child(MefService.class).child(Ipvc.class);
192 public static String ipPrefixToString(IpPrefix ipAddress) {
193 if (ipAddress.getIpv4Prefix() != null) {
194 return ipAddress.getIpv4Prefix().getValue();
197 return ipAddress.getIpv6Prefix().getValue();
200 public static String ipAddressToString(IpAddress ipAddress) {
201 if (ipAddress.getIpv4Address() != null) {
202 return ipAddress.getIpv4Address().getValue();
205 return ipAddress.getIpv6Address().getValue();