2 * Copyright (c) 2015 Cisco Systems, Inc. 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.protocol.bgp.openconfig.impl.openconfig;
11 import com.google.common.base.Optional;
12 import java.math.BigDecimal;
13 import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
14 import org.opendaylight.protocol.bgp.openconfig.impl.spi.BGPConfigStateStore;
15 import org.opendaylight.protocol.bgp.openconfig.impl.util.OpenConfigUtil;
16 import org.opendaylight.protocol.bgp.openconfig.spi.pojo.BGPPeerInstanceConfiguration;
17 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.RouteReflectorBuilder;
18 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.TimersBuilder;
19 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.TransportBuilder;
20 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
21 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborBuilder;
22 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborKey;
23 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.PeerType;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerRole;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.bgp.rib.impl.rev160330.BgpPeer;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.modules.ModuleKey;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.tcpmd5.cfg.rev140427.Rfc2385Key;
29 final class BGPNeighborProviderImpl extends AbstractBGPNeighborProvider<BGPPeerInstanceConfiguration> {
31 public BGPNeighborProviderImpl(final BindingTransactionChain txChain, final BGPConfigStateStore stateHolders) {
32 super(txChain, stateHolders, Neighbor.class);
36 public Neighbor apply(final BGPPeerInstanceConfiguration config) {
37 return toNeighborConfiguration(config);
41 public ModuleKey createModuleKey(final String instanceName) {
42 return new ModuleKey(instanceName, BgpPeer.class);
46 public Class<BGPPeerInstanceConfiguration> getInstanceConfigurationType() {
47 return BGPPeerInstanceConfiguration.class;
50 private static Neighbor toNeighborConfiguration(final BGPPeerInstanceConfiguration config) {
51 return new NeighborBuilder()
52 .setNeighborAddress(config.getHost())
53 .setKey(new NeighborKey(config.getHost()))
54 .setTransport(new TransportBuilder().setConfig(
55 new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.transport.ConfigBuilder()
56 .setPassiveMode(!config.isActive())
59 new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.ConfigBuilder()
60 .setAuthPassword(getPassword(config.getPassword()))
61 .setPeerAs(config.getAsNumber())
62 .setPeerType(toPeerTye(config.getPeerRole()))
65 new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.AfiSafisBuilder()
66 .setAfiSafi(OpenConfigUtil.toAfiSafis(config.getAdvertizedTables(),
67 (afiSAfi, tableType) -> OpenConfigUtil.toNeigborAfiSafiMultiPath(afiSAfi, tableType, config.getAddPathCapabilities())))
69 .setTimers(new TimersBuilder().setConfig(
70 new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.timers.ConfigBuilder()
71 .setHoldTime(BigDecimal.valueOf(config.getHoldTimer()))
73 .setRouteReflector(new RouteReflectorBuilder().setConfig(
74 new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.route.reflector.ConfigBuilder()
75 .setRouteReflectorClient(config.getPeerRole() == PeerRole.RrClient).build()).build())
79 private static PeerType toPeerTye(final PeerRole peerRole) {
83 return PeerType.INTERNAL;
85 return PeerType.EXTERNAL;
94 private static String getPassword(final Optional<Rfc2385Key> maybePassword) {
95 if (maybePassword.isPresent()) {
96 return maybePassword.get().getValue();