2 * Copyright (c) 2017 Ericsson India Global Services Pvt Ltd. 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.vpnmanager;
10 import java.util.ArrayList;
11 import java.util.List;
12 import java.util.stream.Collectors;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.VpnInstanceToVpnId;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnTargets;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnTargetsBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.vpntargets.VpnTarget;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.vpntargets.VpnTargetBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.vpntargets.VpnTargetKey;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id.VpnInstance;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id.VpnInstanceBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id.VpnInstanceKey;
22 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
25 * There is one VpnInstance in ConfigDS and a VpnInstance in OperationalDS. The only reason
26 * for this class to exist is to avoid very long fully qualified class names when these 2
27 * classes coincide on the same java file. A couple of examples:
30 * org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance, versus
31 * org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id.VpnInstance
35 * org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.vpntargets.VpnTarget, versus
36 * org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn
37 * .instance.op.data.entry.vpntargets.VpnTarget
40 * <p>These class deals with those classes usually considered for the Operational DS.</p>
42 public final class VpnOperDsUtils {
44 private VpnOperDsUtils() { }
46 public static InstanceIdentifier<VpnInstance> getVpnInstanceToVpnIdIdentifier(String vpnName) {
48 return InstanceIdentifier.builder(VpnInstanceToVpnId.class).child(VpnInstance.class,
49 new VpnInstanceKey(vpnName)).build();
52 public static VpnInstance makeVpnInstance(String vpnName, String vpnRd, Long vpnTag) {
53 return new VpnInstanceBuilder().setKey(new VpnInstanceKey(vpnName)).setVpnInstanceName(vpnName)
54 .setVrfId(vpnRd).setVpnId(vpnTag).build();
57 static List<VpnTarget> makeVpnTargets(List<String> rtList, VpnTarget.VrfRTType type) {
58 return rtList.stream()
59 .map(rt -> new VpnTargetBuilder().setKey(new VpnTargetKey(rt))
60 .setVrfRTValue(rt).setVrfRTType(type).build())
61 .collect(Collectors.toList());
64 public static VpnTargets makeVpnTargets(List<String> irts, List<String> erts) {
65 List<String> commonRT = new ArrayList<>(irts);
66 commonRT.retainAll(erts);
67 List<String> pureIrts = new ArrayList<>(irts);
68 pureIrts.removeAll(commonRT);
69 List<String> pureErts = new ArrayList<>(erts);
70 pureErts.removeAll(commonRT);
71 List<VpnTarget> vpnTargetList = new ArrayList<>();
72 vpnTargetList.addAll(makeVpnTargets(commonRT, VpnTarget.VrfRTType.Both));
73 vpnTargetList.addAll(makeVpnTargets(pureIrts, VpnTarget.VrfRTType.ImportExtcommunity));
74 vpnTargetList.addAll(makeVpnTargets(pureErts, VpnTarget.VrfRTType.ExportExtcommunity));
75 return new VpnTargetsBuilder().setVpnTarget(vpnTargetList).build();