Commit 91d0d8bf authored by Boris Glimcher's avatar Boris Glimcher Committed by Tomasz Zawadzki
Browse files

go/rpc: add support for TCP connection



Change-Id: I3431ef2b9cfeabddd358322b15f17248ca003b04
Signed-off-by: default avatarBoris Glimcher <Boris.Glimcher@emc.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/20037


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <ben@nvidia.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent 2c9faeaa
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
/*   SPDX-License-Identifier: BSD-3-Clause
 *   Copyright (C) 2023 Intel Corporation.
 *   Copyright (c) 2023 Dell Inc, or its subsidiaries.
 *   All rights reserved.
 */

@@ -18,6 +19,8 @@ const (
	jsonRPCVersion = "2.0"
	// Unix specifies network type for socket connection.
	Unix = "unix"
	// TCP specifies network type for tcp connection.
	TCP = "tcp"
)

// Client represents JSON-RPC 2.0 client.
@@ -105,6 +108,21 @@ func createConnectionToSocket(socketAddress string) (net.Conn, error) {
	return conn, nil
}

func createConnectionToTcp(tcpAddress string) (net.Conn, error) {
	address, err := net.ResolveTCPAddr(TCP, tcpAddress)
	if err != nil {
		return nil, err
	}

	conn, err := net.DialTCP(TCP, nil, address)
	if err != nil {
		return nil, fmt.Errorf("could not connect to a TCP socket on address %s, err: %w",
			address.String(), err)
	}

	return conn, nil
}

func verifyRequestParamsType(params any) error {
	// Nil is allowed value for params field.
	if params == nil {
@@ -135,6 +153,14 @@ func CreateClientWithJsonCodec(network, address string) (*Client, error) {
				"err: %w", err)
		}

		return &Client{codec: createJsonCodec(conn), requestId: atomic.Uint64{}}, nil
	case "tcp", "tcp4", "tcp6":
		conn, err := createConnectionToTcp(address)
		if err != nil {
			return nil, fmt.Errorf("error during client creation for TCP socket, " +
				"err: %w", err)
		}

		return &Client{codec: createJsonCodec(conn), requestId: atomic.Uint64{}}, nil
	default:
		return nil, fmt.Errorf("unsupported network type")