Refactor NETCONF node defaults
[netconf.git] / netconf / callhome-provider / src / main / java / org / opendaylight / netconf / callhome / mount / CallHomeMountSessionContext.java
index 16257a76d202a862531c7bb6c6f9aed38b153442..5d30148108d43b5a4059e6f6e9d96b31493d05e2 100644 (file)
@@ -12,6 +12,7 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.base.MoreObjects;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import io.netty.util.concurrent.Future;
+import java.math.BigDecimal;
 import org.opendaylight.netconf.api.NetconfMessage;
 import org.opendaylight.netconf.api.NetconfTerminationReason;
 import org.opendaylight.netconf.callhome.protocol.CallHomeChannelActivator;
@@ -20,10 +21,14 @@ import org.opendaylight.netconf.client.NetconfClientSession;
 import org.opendaylight.netconf.client.NetconfClientSessionListener;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Host;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.parameters.Protocol;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.parameters.ProtocolBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPasswordBuilder;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
+import org.opendaylight.yangtools.yang.common.Uint16;
+import org.opendaylight.yangtools.yang.common.Uint32;
 
 // Non-final to allow mocking
 class CallHomeMountSessionContext {
@@ -61,18 +66,41 @@ class CallHomeMountSessionContext {
         return key;
     }
 
+    /**
+     * Create device default configuration.
+     *
+     * <p>
+     * This configuration is a replacement of configuration device data
+     * which is normally stored in configuration datastore but is absent for call-home devices.
+     *
+     * @return {@link Node} containing the default device configuration
+     */
+    // FIXME make these defaults tune-able in odl-netconf-callhome-server
     Node getConfigNode() {
         return new NodeBuilder()
                 .setNodeId(getId())
                 .addAugmentation(new NetconfNodeBuilder()
-                    .setHost(new Host(key.getIpAddress()))
-                    .setPort(key.getPort())
-                    .setTcpOnly(Boolean.FALSE)
-                    .setCredentials(new LoginPasswordBuilder()
-                        .setUsername("ommited")
-                        .setPassword("ommited")
-                        .build())
-                    .setSchemaless(Boolean.FALSE)
+                        .setHost(new Host(key.getIpAddress()))
+                        .setPort(key.getPort())
+                        .setTcpOnly(false)
+                        .setProtocol(new ProtocolBuilder()
+                                .setName(Protocol.Name.valueOf(protocol.getTransportType().name()))
+                                .build())
+                        .setSchemaless(false)
+                        .setReconnectOnChangedSchema(false)
+                        .setConnectionTimeoutMillis(Uint32.valueOf(20000))
+                        .setDefaultRequestTimeoutMillis(Uint32.valueOf(60000))
+                        .setMaxConnectionAttempts(Uint32.ZERO)
+                        .setBetweenAttemptsTimeoutMillis(Uint16.valueOf(2000))
+                        .setSleepFactor(new BigDecimal("1.5"))
+                        .setKeepaliveDelay(Uint32.valueOf(120))
+                        .setConcurrentRpcLimit(Uint16.ZERO)
+                        .setActorResponseWaitTime(Uint16.valueOf(5))
+                        // the real call-home device credentials are applied in CallHomeAuthProviderImpl
+                        .setCredentials(new LoginPasswordBuilder()
+                                .setUsername("omitted")
+                                .setPassword("omitted")
+                                .build())
                     .build())
                 .build();
     }