Commit 5c263046 authored by Ziye Yang's avatar Ziye Yang Committed by Changpeng Liu
Browse files

sock: Update the spdk_sock_getaddr function.



Purpose: We need to get the port info in other applications
(e.g., NVMe-oF TCP/IP transport)

Change-Id: I3a4636e764e44425436bb064cb0062c6f3e44035
Signed-off-by: default avatarZiye Yang <optimistyzy@gmail.com>
Reviewed-on: https://review.gerrithub.io/428313


Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarTomasz Kulasek <tomaszx.kulasek@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
parent 5d5181db
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -103,6 +103,12 @@ scripts/config_converter.py. Example how this script can be used:
cat old_format.ini | scripts/config_converter.py > new_json_format.json
~~~

### Sock

Two additional parameters were added to spdk_sock_get_addr() for the server
port and client port. These parameters are named "sport" and "cport"
respectively.

## v18.07:

### bdev
+7 −6
Original line number Diff line number Diff line
@@ -190,6 +190,7 @@ hello_sock_connect(struct hello_context_t *ctx)
{
	int rc;
	char saddr[ADDR_STR_LEN], caddr[ADDR_STR_LEN];
	uint16_t cport, sport;

	SPDK_NOTICELOG("Connecting to the server on %s:%d\n", ctx->host, ctx->port);

@@ -199,14 +200,14 @@ hello_sock_connect(struct hello_context_t *ctx)
		return -1;
	}

	rc = spdk_sock_getaddr(ctx->sock, saddr, sizeof(saddr), caddr, sizeof(caddr));
	rc = spdk_sock_getaddr(ctx->sock, saddr, sizeof(saddr), &sport, caddr, sizeof(caddr), &cport);
	if (rc < 0) {
		SPDK_ERRLOG("Cannot get connection addresses\n");
		spdk_sock_close(&ctx->sock);
		return -1;
	}

	SPDK_NOTICELOG("Connection accepted from %s to %s\n", caddr, saddr);
	SPDK_NOTICELOG("Connection accepted from (%s, %hu) to (%s, %hu)\n", caddr, cport, saddr, sport);

	fcntl(STDIN_FILENO, F_SETFL, fcntl(STDIN_FILENO, F_GETFL) | O_NONBLOCK);

@@ -262,6 +263,7 @@ hello_sock_accept_poll(void *arg)
	int rc;
	int count = 0;
	char saddr[ADDR_STR_LEN], caddr[ADDR_STR_LEN];
	uint16_t cport, sport;

	if (!g_is_running) {
		spdk_poller_unregister(&ctx->poller_in);
@@ -275,11 +277,10 @@ hello_sock_accept_poll(void *arg)
	while (1) {
		sock = spdk_sock_accept(ctx->sock);
		if (sock != NULL) {
			spdk_sock_getaddr(sock, saddr, sizeof(saddr), &sport, caddr, sizeof(caddr), &cport);

			spdk_sock_getaddr(sock, saddr, sizeof(saddr), caddr, sizeof(caddr));

			SPDK_NOTICELOG("Accepting a new connection from %s to %s\n",
				       caddr, saddr);
			SPDK_NOTICELOG("Accepting a new connection from (%s, %hu) to (%s, %hu)\n",
				       caddr, cport, saddr, sport);

			rc = spdk_sock_group_add_sock(ctx->group, sock,
						      hello_sock_cb, ctx);
+4 −1
Original line number Diff line number Diff line
@@ -53,12 +53,15 @@ struct spdk_sock_group;
 * \param sock Socket to get address.
 * \param saddr A pointer to the buffer to hold the address of server.
 * \param slen Length of the buffer 'saddr'.
 * \param sport A pointer(May be NULL) to the buffer to hold the port info of server.
 * \param caddr A pointer to the buffer to hold the address of client.
 * \param clen Length of the buffer 'caddr'.
 * \param cport A pointer(May be NULL) to the buffer to hold the port info of server.
 *
 * \return 0 on success, -1 on failure.
 */
int spdk_sock_getaddr(struct spdk_sock *sock, char *saddr, int slen, char *caddr, int clen);
int spdk_sock_getaddr(struct spdk_sock *sock, char *saddr, int slen, uint16_t *sport,
		      char *caddr, int clen, uint16_t *cport);

/**
 * Create a socket, connect the socket to the specified address and port (of the
+2 −1
Original line number Diff line number Diff line
@@ -68,7 +68,8 @@ struct spdk_sock_group_impl {
struct spdk_net_impl {
	const char *name;

	int (*getaddr)(struct spdk_sock *sock, char *saddr, int slen, char *caddr, int clen);
	int (*getaddr)(struct spdk_sock *sock, char *saddr, int slen, uint16_t *sport, char *caddr,
		       int clen, uint16_t *cport);
	struct spdk_sock *(*connect)(const char *ip, int port);
	struct spdk_sock *(*listen)(const char *ip, int port);
	struct spdk_sock *(*accept)(struct spdk_sock *sock);
+2 −3
Original line number Diff line number Diff line
@@ -297,9 +297,8 @@ spdk_iscsi_conn_construct(struct spdk_iscsi_portal *portal,
	TAILQ_INIT(&conn->queued_datain_tasks);
	memset(&conn->open_lun_descs, 0, sizeof(conn->open_lun_descs));

	rc = spdk_sock_getaddr(sock, conn->target_addr,
			       sizeof conn->target_addr,
			       conn->initiator_addr, sizeof conn->initiator_addr);
	rc = spdk_sock_getaddr(sock, conn->target_addr, sizeof conn->target_addr, NULL,
			       conn->initiator_addr, sizeof conn->initiator_addr, NULL);
	if (rc < 0) {
		SPDK_ERRLOG("spdk_sock_getaddr() failed\n");
		goto error_return;
Loading