2 * Copyright (c) 2020 Pantheon Technologies, s.r.o. 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.netconf.callhome.mount.tls;
10 import static java.util.Objects.requireNonNull;
12 import io.netty.channel.EventLoopGroup;
13 import org.opendaylight.mdsal.binding.api.DataBroker;
14 import org.opendaylight.netconf.callhome.protocol.CallHomeNetconfSubsystemListener;
15 import org.opendaylight.netconf.callhome.protocol.tls.NetconfCallHomeTlsServer;
16 import org.opendaylight.netconf.callhome.protocol.tls.NetconfCallHomeTlsServerBuilder;
17 import org.opendaylight.netconf.callhome.protocol.tls.TlsAllowedDevicesMonitor;
18 import org.opendaylight.netconf.client.SslHandlerFactory;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
22 public class NetconfCallHomeTlsService implements AutoCloseable {
23 private static final Logger LOG = LoggerFactory.getLogger(NetconfCallHomeTlsService.class);
25 private final Configuration config;
26 private final SslHandlerFactory sslHandlerFactory;
27 private final CallHomeNetconfSubsystemListener subsystemListener;
28 private final EventLoopGroup bossGroup;
29 private final EventLoopGroup workerGroup;
30 private final TlsAllowedDevicesMonitor allowedDevicesMonitor;
32 private NetconfCallHomeTlsServer server;
34 public NetconfCallHomeTlsService(final DataBroker dataBroker, final TlsAllowedDevicesMonitor allowedDevicesMonitor,
35 final CallHomeNetconfSubsystemListener subsystemListener, final EventLoopGroup bossGroup,
36 final EventLoopGroup workerGroup) {
37 this(dataBroker, allowedDevicesMonitor, subsystemListener, bossGroup, workerGroup, defaultTlsConfiguration());
40 public NetconfCallHomeTlsService(final DataBroker dataBroker,
41 final TlsAllowedDevicesMonitor allowedDevicesMonitor,
42 final CallHomeNetconfSubsystemListener subsystemListener,
43 final EventLoopGroup bossGroup,
44 final EventLoopGroup workerGroup, final Configuration config) {
45 this.config = requireNonNull(config);
46 this.subsystemListener = requireNonNull(subsystemListener);
47 this.bossGroup = requireNonNull(bossGroup);
48 this.workerGroup = requireNonNull(workerGroup);
49 this.allowedDevicesMonitor = requireNonNull(allowedDevicesMonitor);
50 sslHandlerFactory = new SslHandlerFactoryAdapter(dataBroker, allowedDevicesMonitor);
54 LOG.info("Initializing Call Home TLS server instance");
56 final NetconfCallHomeTlsServerBuilder builder = new NetconfCallHomeTlsServerBuilder();
57 server = builder.setHost(config.getHost())
58 .setPort(config.getPort())
59 .setTimeout(config.getTimeout())
60 .setMaxConnections(config.getMaxConnections())
61 .setSslHandlerFactory(sslHandlerFactory)
62 .setSubsystemListener(subsystemListener)
63 .setBossGroup(bossGroup)
64 .setWorkerGroup(workerGroup)
65 .setAllowedDevicesMonitor(allowedDevicesMonitor)
69 LOG.info("Initializing Call Home TLS server instance completed successfuly");
72 // FIXME: convert to OSGi/MD-SAL configuration
73 private static Configuration defaultTlsConfiguration() {
74 final var conf = new Configuration();
75 conf.setHost("0.0.0.0");
77 conf.setTimeout(10_000);
78 conf.setMaxConnections(64);