Cleanup deprecation warnings in bgp/testtool
[bgpcep.git] / bgp / testtool / src / main / java / org / opendaylight / protocol / bgp / testtool / BGPTestTool.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. 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
9 package org.opendaylight.protocol.bgp.testtool;
10
11 import static org.opendaylight.protocol.bgp.testtool.BGPPeerBuilder.createPeer;
12
13 import com.google.common.collect.Lists;
14 import com.google.common.net.InetAddresses;
15 import io.netty.channel.nio.NioEventLoopGroup;
16 import java.net.InetAddress;
17 import java.net.InetSocketAddress;
18 import java.util.ArrayList;
19 import java.util.HashMap;
20 import java.util.List;
21 import java.util.Map;
22 import org.opendaylight.protocol.bgp.flowspec.FlowspecActivator;
23 import org.opendaylight.protocol.bgp.flowspec.SimpleFlowspecExtensionProviderContext;
24 import org.opendaylight.protocol.bgp.parser.impl.BGPActivator;
25 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
26 import org.opendaylight.protocol.bgp.parser.spi.pojo.ServiceLoaderBGPExtensionProviderContext;
27 import org.opendaylight.protocol.bgp.rib.impl.BGPDispatcherImpl;
28 import org.opendaylight.protocol.bgp.rib.impl.StrictBGPPeerRegistry;
29 import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher;
30 import org.opendaylight.protocol.bgp.rib.spi.BGPSessionListener;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.EvpnSubsequentAddressFamily;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev200120.L2vpnAddressFamily;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.l3vpn.mcast.rev180417.McastMplsLabeledVpnSubsequentAddressFamily;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.LinkstateAddressFamily;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.LinkstateSubsequentAddressFamily;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.BgpParameters;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.BgpParametersBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.OptionalCapabilities;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.OptionalCapabilitiesBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.optional.capabilities.CParametersBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.open.message.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapabilityBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1Builder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.SendReceive;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.AddPathCapabilityBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.MultiprotocolCapabilityBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.mp.capabilities.add.path.capability.AddressFamiliesBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.route.target.constrain.rev180618.RouteTargetConstrainSubsequentAddressFamily;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.AddressFamily;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv6AddressFamily;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.MplsLabeledVpnSubsequentAddressFamily;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.SubsequentAddressFamily;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily;
55
56 final class BGPTestTool {
57     private final Map<String, BGPSessionListener> listeners = new HashMap<>();
58
59     void start(final Arguments arguments) {
60         final BGPDispatcher dispatcher = initializeActivator();
61
62         final ArrayList<OptionalCapabilities> optCap = Lists.newArrayList(createMPCapability(Ipv4AddressFamily.class,
63                 UnicastSubsequentAddressFamily.class),
64             createMPCapability(LinkstateAddressFamily.class, LinkstateSubsequentAddressFamily.class),
65             createMPCapability(Ipv4AddressFamily.class, MplsLabeledVpnSubsequentAddressFamily.class),
66             createMPCapability(Ipv6AddressFamily.class, MplsLabeledVpnSubsequentAddressFamily.class),
67             createMPCapability(Ipv4AddressFamily.class, McastMplsLabeledVpnSubsequentAddressFamily.class),
68             createMPCapability(Ipv6AddressFamily.class, McastMplsLabeledVpnSubsequentAddressFamily.class),
69             createMPCapability(L2vpnAddressFamily.class, EvpnSubsequentAddressFamily.class),
70             createMPCapability(Ipv4AddressFamily.class, RouteTargetConstrainSubsequentAddressFamily.class),
71                 createAs4BytesMPCapability(arguments.getAs()));
72         if (arguments.getMultiPathSupport()) {
73             optCap.add(createAddPathCapability());
74         }
75         final BgpParameters bgpParameters = createBgpParameters(optCap);
76
77         final InetSocketAddress localAddress = arguments.getLocalAddresses();
78         final int port = localAddress.getPort();
79         InetAddress address = localAddress.getAddress();
80         int numberOfSpeakers = arguments.getSpeakerCount();
81         do {
82             final BGPSessionListener sessionListener = new TestingListener(arguments.getNumberOfPrefixes(),
83                     arguments.getExtendedCommunities(),
84                 arguments.getMultiPathSupport());
85             this.listeners.put(address.getHostAddress(), sessionListener);
86             createPeer(dispatcher, arguments, new InetSocketAddress(address, port), sessionListener, bgpParameters);
87             numberOfSpeakers--;
88             address = InetAddresses.increment(address);
89         } while (numberOfSpeakers > 0);
90     }
91
92     private static BGPDispatcher initializeActivator() {
93         final BGPActivator activator = new BGPActivator();
94         final BGPExtensionProviderContext ctx = ServiceLoaderBGPExtensionProviderContext.getSingletonInstance();
95         activator.start(ctx);
96
97         final org.opendaylight.protocol.bgp.inet.BGPActivator inetActivator
98                 = new org.opendaylight.protocol.bgp.inet.BGPActivator();
99         inetActivator.start(ctx);
100
101         final org.opendaylight.protocol.bgp.evpn.impl.BGPActivator evpnActivator = new org.opendaylight.protocol.bgp
102                 .evpn.impl.BGPActivator();
103         evpnActivator.start(ctx);
104
105         final SimpleFlowspecExtensionProviderContext fsContext = new SimpleFlowspecExtensionProviderContext();
106         final FlowspecActivator flowspecActivator = new FlowspecActivator(fsContext);
107         final org.opendaylight.protocol.bgp.flowspec.BGPActivator flowspecBGPActivator
108                 = new org.opendaylight.protocol.bgp.flowspec.BGPActivator(flowspecActivator);
109         flowspecBGPActivator.start(ctx);
110
111         final org.opendaylight.protocol.bgp.labeled.unicast.BGPActivator labeledActivator
112                 = new org.opendaylight.protocol.bgp.labeled.unicast.BGPActivator();
113         labeledActivator.start(ctx);
114
115         final org.opendaylight.protocol.bgp.l3vpn.BGPActivator l3vpnBGPActivator
116                 = new org.opendaylight.protocol.bgp.l3vpn.BGPActivator();
117         l3vpnBGPActivator.start(ctx);
118
119         final org.opendaylight.protocol.bgp.route.targetcontrain.impl.activators.BGPActivator rtBGPActivator
120                 = new org.opendaylight.protocol.bgp.route.targetcontrain.impl.activators.BGPActivator();
121         rtBGPActivator.start(ctx);
122
123         return new BGPDispatcherImpl(ctx.getMessageRegistry(), new NioEventLoopGroup(), new NioEventLoopGroup(),
124             new StrictBGPPeerRegistry());
125     }
126
127     private static OptionalCapabilities createMPCapability(final Class<? extends AddressFamily> afi,
128             final Class<? extends SubsequentAddressFamily> safi) {
129         return new OptionalCapabilitiesBuilder()
130                 .setCParameters(new CParametersBuilder()
131                     .addAugmentation(new CParameters1Builder()
132                         .setMultiprotocolCapability(new MultiprotocolCapabilityBuilder()
133                             .setAfi(afi)
134                             .setSafi(safi)
135                             .build())
136                         .build())
137                     .build())
138                 .build();
139     }
140
141     private static OptionalCapabilities createAs4BytesMPCapability(final AsNumber as) {
142         return new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder()
143             .setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(as).build()).build()).build();
144     }
145
146     private static BgpParameters createBgpParameters(final List<OptionalCapabilities> optionalCapabilities) {
147         return new BgpParametersBuilder().setOptionalCapabilities(optionalCapabilities).build();
148     }
149
150     private static OptionalCapabilities createAddPathCapability() {
151         return new OptionalCapabilitiesBuilder()
152                 .setCParameters(new CParametersBuilder()
153                     .addAugmentation(new CParameters1Builder()
154                         .setAddPathCapability(new AddPathCapabilityBuilder()
155                             .setAddressFamilies(Lists.newArrayList(new AddressFamiliesBuilder()
156                                 .setAfi(Ipv4AddressFamily.class)
157                                 .setSafi(UnicastSubsequentAddressFamily.class)
158                                 .setSendReceive(SendReceive.Both)
159                                 .build()))
160                             .build())
161                         .build())
162                     .build())
163                 .build();
164     }
165
166     void printCount(final String localAddress) {
167         final BGPSessionListener listener = this.listeners.get(localAddress);
168         if (listener != null) {
169             ((TestingListener) listener).printCount(localAddress);
170         }
171     }
172 }