Commit 431b22cd authored by Konrad Sztyber's avatar Konrad Sztyber Committed by Tomasz Zawadzki
Browse files

sock: add option to specify source addr/port when connecting



Signed-off-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Change-Id: Ib4904a60755f87776bd2480eb56cb4a2814f57e3
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/24065


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: default avatarSebastian Brzezinka <sebastian.brzezinka@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Community-CI: Mellanox Build Bot
parent d6fb18e5
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -237,8 +237,18 @@ struct spdk_sock_opts {
	 * Size of the impl_opts structure.
	 */
	size_t impl_opts_size;

	/**
	 * Source address.  If NULL, any available address will be used.  Only valid for connect().
	 */
	const char *src_addr;

	/**
	 * Source port.  If zero, a random ephemeral port will be used.  Only valid for connect().
	 */
	uint16_t src_port;
};
SPDK_STATIC_ASSERT(sizeof(struct spdk_sock_opts) == 40, "Incorrect size");
SPDK_STATIC_ASSERT(sizeof(struct spdk_sock_opts) == 56, "Incorrect size");

/**
 * Initialize the default value of opts.
+16 −0
Original line number Diff line number Diff line
@@ -262,6 +262,14 @@ spdk_sock_get_default_opts(struct spdk_sock_opts *opts)
	if (SPDK_SOCK_OPTS_FIELD_OK(opts, impl_opts_size)) {
		opts->impl_opts_size = 0;
	}

	if (SPDK_SOCK_OPTS_FIELD_OK(opts, src_addr)) {
		opts->src_addr = NULL;
	}

	if (SPDK_SOCK_OPTS_FIELD_OK(opts, src_port)) {
		opts->src_port = 0;
	}
}

/*
@@ -298,6 +306,14 @@ sock_init_opts(struct spdk_sock_opts *opts, struct spdk_sock_opts *opts_user)
	if (SPDK_SOCK_OPTS_FIELD_OK(opts, impl_opts_size)) {
		opts->impl_opts_size = opts_user->impl_opts_size;
	}

	if (SPDK_SOCK_OPTS_FIELD_OK(opts, src_addr)) {
		opts->src_addr = opts_user->src_addr;
	}

	if (SPDK_SOCK_OPTS_FIELD_OK(opts, src_port)) {
		opts->src_port = opts_user->src_port;
	}
}

struct spdk_sock *