ELAN: skip remote unicast MACs
[netvirt.git] / elanmanager / impl / src / test / java / org / opendaylight / netvirt / elanmanager / tests / utils / BgpManagerTestImpl.java
1 /*
2  * Copyright © 2017 Ericsson India Global Services Pvt Ltd. 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.elanmanager.tests.utils;
9
10 import static org.opendaylight.yangtools.testutils.mockito.MoreAnswers.realOrException;
11
12 import java.util.Collections;
13 import java.util.List;
14 import org.mockito.Mockito;
15 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
16 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
17 import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
18 import org.opendaylight.netvirt.bgpmanager.api.IBgpManager;
19 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.Bgp;
20 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.BgpControlPlaneType;
21 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.EncapType;
22 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.bgp.Networks;
23 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.bgp.NetworksBuilder;
24 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.bgp.NetworksKey;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntry;
27 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
28 import org.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30
31 public abstract class BgpManagerTestImpl implements IBgpManager {
32     private static final Logger LOG = LoggerFactory.getLogger(BgpManagerTestImpl.class);
33     private SingleTransactionDataBroker singleTxdataBroker;
34
35     public static BgpManagerTestImpl newInstance(SingleTransactionDataBroker singleTxdataBroker) {
36         BgpManagerTestImpl instance = Mockito.mock(BgpManagerTestImpl.class, realOrException());
37         instance.singleTxdataBroker = singleTxdataBroker;
38         return instance;
39     }
40
41     @Override
42     public void advertisePrefix(String rd, String macAddress, String prefix, List<String> nextHopList,
43                                 VrfEntry.EncapType encapType, long vpnLabel, long l3vni, long l2vni,
44                                 String gatewayMac) throws Exception {
45         addPrefix(rd, macAddress, prefix, nextHopList,
46                 encapType, vpnLabel, l3vni, l2vni, gatewayMac);
47     }
48
49     @Override
50     public void advertisePrefix(String rd, String macAddress, String prefix, String nextHop,
51                                 VrfEntry.EncapType encapType, long vpnLabel, long l3vni, long l2vni,
52                                 String gatewayMac) throws Exception {
53         addPrefix(rd, macAddress, prefix, Collections.singletonList(nextHop), encapType,
54                 vpnLabel, l3vni, l2vni, gatewayMac);
55     }
56
57     public void addPrefix(String rd, String macAddress, String pfx, List<String> nhList,
58                             VrfEntry.EncapType encapType, long lbl, long l3vni, long l2vni, String gatewayMac)
59                             throws TransactionCommitFailedException {
60         for (String nh : nhList) {
61             Ipv4Address nexthop = nh != null ? new Ipv4Address(nh) : null;
62             Long label = lbl;
63             InstanceIdentifier<Networks> iid = InstanceIdentifier.builder(Bgp.class)
64                     .child(Networks.class, new NetworksKey(pfx, rd)).build();
65             NetworksBuilder networksBuilder = new NetworksBuilder().setRd(rd).setPrefixLen(pfx).setNexthop(nexthop)
66                     .setLabel(label).setEthtag(0L);
67             buildVpnEncapSpecificInfo(networksBuilder, encapType, label, l3vni, l2vni, macAddress, gatewayMac);
68             singleTxdataBroker.syncWrite(LogicalDatastoreType.CONFIGURATION, iid, networksBuilder.build());
69         }
70     }
71
72     private static void buildVpnEncapSpecificInfo(NetworksBuilder builder, VrfEntry.EncapType encapType, long label,
73                                                   long l3vni, long l2vni, String macAddress, String gatewayMac) {
74         if (encapType.equals(VrfEntry.EncapType.Mplsgre)) {
75             builder.setLabel(label).setBgpControlPlaneType(BgpControlPlaneType.PROTOCOLL3VPN)
76                     .setEncapType(EncapType.GRE);
77         } else {
78             builder.setL3vni(l3vni).setL2vni(l2vni).setMacaddress(macAddress).setRoutermac(gatewayMac)
79                     .setBgpControlPlaneType(BgpControlPlaneType.PROTOCOLEVPN).setEncapType(EncapType.VXLAN);
80         }
81     }
82
83     public void withdrawPrefix(String rd, String pfx) {
84         InstanceIdentifier<Networks> iid = InstanceIdentifier.builder(Bgp.class)
85                 .child(Networks.class, new NetworksKey(pfx, rd)).build();
86         try {
87             singleTxdataBroker.syncDelete(LogicalDatastoreType.CONFIGURATION, iid);
88         } catch (TransactionCommitFailedException e) {
89             LOG.info("TransactionCommitFailedException ", e);
90         }
91     }
92 }