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.populator.impl;
10 import java.util.Collections;
11 import java.util.List;
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
15 import org.opendaylight.netvirt.bgpmanager.api.IBgpManager;
16 import org.opendaylight.netvirt.fibmanager.api.IFibManager;
17 import org.opendaylight.netvirt.fibmanager.api.RouteOrigin;
18 import org.opendaylight.netvirt.vpnmanager.VpnInterfaceManager;
19 import org.opendaylight.netvirt.vpnmanager.populator.input.L3vpnInput;
20 import org.opendaylight.netvirt.vpnmanager.populator.intfc.VpnPopulator;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntry;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.adjacency.list.Adjacency;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.adjacency.list.AdjacencyBuilder;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
27 public class L3vpnPopulator implements VpnPopulator {
28 protected final VpnInterfaceManager vpnInterfaceManager;
29 protected final IBgpManager bgpManager;
30 protected final IFibManager fibManager;
31 protected final DataBroker broker;
32 private static final Logger LOG = LoggerFactory.getLogger(L3vpnPopulator.class);
34 protected L3vpnPopulator(DataBroker dataBroker, VpnInterfaceManager vpnInterfaceManager,
35 IBgpManager bgpManager, IFibManager fibManager) {
36 this.vpnInterfaceManager = vpnInterfaceManager;
37 this.bgpManager = bgpManager;
38 this.fibManager = fibManager;
39 this.broker = dataBroker;
43 public void populateFib(L3vpnInput input, WriteTransaction writeCfgTxn,
44 WriteTransaction writeOperTxn) {}
47 public Adjacency createOperationalAdjacency(L3vpnInput input) {
48 return new AdjacencyBuilder().build();
51 @SuppressWarnings("checkstyle:IllegalCatch")
52 protected void addPrefixToBGP(String rd, String primaryRd, String macAddress, String prefix, String nextHopIp,
53 VrfEntry.EncapType encapType, long label, long l3vni, String gatewayMac,
54 RouteOrigin origin, WriteTransaction writeConfigTxn) {
56 List<String> nextHopList = Collections.singletonList(nextHopIp);
57 LOG.info("ADD: Adding Fib entry rd {} prefix {} nextHop {} label {} l3vni {} origin {}",
58 rd, prefix, nextHopIp, label, l3vni, origin.getValue());
59 fibManager.addOrUpdateFibEntry(broker, primaryRd, macAddress, prefix, nextHopList,
60 encapType, (int)label, l3vni, gatewayMac, origin, writeConfigTxn);
61 LOG.info("ADD: Added Fib entry rd {} prefix {} nextHop {} label {}, l3vni {} origin {}",
62 rd, prefix, nextHopIp, label, l3vni, origin.getValue());
63 // Advertise the prefix to BGP only if nexthop ip is available
64 if (nextHopList != null && !nextHopList.isEmpty()) {
65 bgpManager.advertisePrefix(rd, macAddress, prefix, nextHopList, encapType, (int)label,
68 LOG.warn("NextHopList is null/empty. Hence rd {} prefix {} is not advertised to BGP", rd, prefix);
70 } catch (Exception e) {
71 LOG.error("Add prefix failed", e);