e838967001fdb1674af99f6f45480b375317be83
[bgpcep.git] / bgp / bmp-mock / src / main / java / org / opendaylight / protocol / bmp / mock / BmpMock.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.bmp.mock;
10
11 import com.google.common.net.InetAddresses;
12 import io.netty.channel.Channel;
13 import java.net.InetAddress;
14 import java.net.InetSocketAddress;
15 import org.opendaylight.protocol.bgp.parser.impl.BGPActivator;
16 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
17 import org.opendaylight.protocol.bgp.parser.spi.pojo.SimpleBGPExtensionProviderContext;
18 import org.opendaylight.protocol.bmp.api.BmpSession;
19 import org.opendaylight.protocol.bmp.api.BmpSessionFactory;
20 import org.opendaylight.protocol.bmp.api.BmpSessionListenerFactory;
21 import org.opendaylight.protocol.bmp.parser.BmpActivator;
22 import org.opendaylight.protocol.bmp.spi.registry.BmpExtensionProviderActivator;
23 import org.opendaylight.protocol.bmp.spi.registry.BmpExtensionProviderContext;
24 import org.opendaylight.protocol.bmp.spi.registry.SimpleBmpExtensionProviderContext;
25 import org.opendaylight.protocol.util.LoggerUtil;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28
29 public final class BmpMock {
30
31     private static final Logger LOG = LoggerFactory.getLogger(BmpMock.class);
32
33     private BmpMock() {
34         throw new UnsupportedOperationException();
35     }
36
37     public static void main(final String[] args) {
38         LOG.info("Starting BMP test tool.");
39         final BmpMockArguments arguments = BmpMockArguments.parseArguments(args);
40         LoggerUtil.initiateLogger(arguments);
41
42         final BmpMockDispatcher dispatcher = initiateMock(arguments);
43         // now start the server / client
44         if (arguments.isOnPassiveMode()) {
45             deployServers(dispatcher, arguments);
46         } else {
47             deployClients(dispatcher, arguments);
48         }
49     }
50
51
52     private static BmpMockDispatcher initiateMock(final BmpMockArguments arguments) {
53         final BGPExtensionProviderContext bgpCtx = new SimpleBGPExtensionProviderContext();
54         final BGPActivator bgpActivator = new BGPActivator();
55         bgpActivator.start(bgpCtx);
56         final BmpExtensionProviderContext ctx = new SimpleBmpExtensionProviderContext();
57         final BmpExtensionProviderActivator bmpActivator = new BmpActivator(bgpCtx);
58         bmpActivator.start(ctx);
59
60         return new BmpMockDispatcher(ctx.getBmpMessageRegistry(),
61             (channel, sessionListenerFactory) -> new BmpMockSession(arguments.getPeersCount(), arguments.getPrePolicyRoutesCount(), arguments.getPostPolicyRoutesCount()));
62     }
63
64     private static void deployClients(final BmpMockDispatcher dispatcher, final BmpMockArguments arguments) {
65         final InetSocketAddress localAddress = arguments.getLocalAddress();
66         final InetSocketAddress remoteAddress = arguments.getRemoteAddress();
67         InetAddress currentLocal = localAddress.getAddress();
68         final int port = localAddress.getPort();
69         for (int i = 0; i < arguments.getRoutersCount(); i++) {
70             dispatcher.createClient(new InetSocketAddress(currentLocal, port), remoteAddress);
71             currentLocal = InetAddresses.increment(currentLocal);
72         }
73     }
74
75     private static void deployServers(final BmpMockDispatcher dispatcher, final BmpMockArguments arguments) {
76         final InetSocketAddress localAddress = arguments.getLocalAddress();
77         InetAddress currentLocal = localAddress.getAddress();
78         final int port = localAddress.getPort();
79         for (int i = 0; i < arguments.getRoutersCount(); i++) {
80             dispatcher.createServer(new InetSocketAddress(currentLocal, port));
81             currentLocal = InetAddresses.increment(currentLocal);
82         }
83     }
84 }