Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Jan 2016 13:59:27 +0000 (UTC)
From:      Michael Tuexen <tuexen@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r294910 - stable/10/lib/libc/net
Message-ID:  <201601271359.u0RDxR2d066320@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: tuexen
Date: Wed Jan 27 13:59:27 2016
New Revision: 294910
URL: https://svnweb.freebsd.org/changeset/base/294910

Log:
  MFC r294688:
  sctp_sendv() needs to fill in the association id on return.

Modified:
  stable/10/lib/libc/net/sctp_sys_calls.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/lib/libc/net/sctp_sys_calls.c
==============================================================================
--- stable/10/lib/libc/net/sctp_sys_calls.c	Wed Jan 27 13:40:44 2016	(r294909)
+++ stable/10/lib/libc/net/sctp_sys_calls.c	Wed Jan 27 13:59:27 2016	(r294910)
@@ -984,6 +984,7 @@ sctp_sendv(int sd,
 	struct sockaddr *addr;
 	struct sockaddr_in *addr_in;
 	struct sockaddr_in6 *addr_in6;
+	sctp_assoc_t *assoc_id;
 
 	if ((addrcnt < 0) ||
 	    (iovcnt < 0) ||
@@ -1002,6 +1003,7 @@ sctp_sendv(int sd,
 		errno = ENOMEM;
 		return (-1);
 	}
+	assoc_id = NULL;
 	msg.msg_control = cmsgbuf;
 	msg.msg_controllen = 0;
 	cmsg = (struct cmsghdr *)cmsgbuf;
@@ -1025,6 +1027,7 @@ sctp_sendv(int sd,
 		memcpy(CMSG_DATA(cmsg), info, sizeof(struct sctp_sndinfo));
 		msg.msg_controllen += CMSG_SPACE(sizeof(struct sctp_sndinfo));
 		cmsg = (struct cmsghdr *)((caddr_t)cmsg + CMSG_SPACE(sizeof(struct sctp_sndinfo)));
+		assoc_id = &(((struct sctp_sndinfo *)info)->snd_assoc_id);
 		break;
 	case SCTP_SENDV_PRINFO:
 		if ((info == NULL) || (infolen < sizeof(struct sctp_prinfo))) {
@@ -1066,6 +1069,7 @@ sctp_sendv(int sd,
 			memcpy(CMSG_DATA(cmsg), &spa_info->sendv_sndinfo, sizeof(struct sctp_sndinfo));
 			msg.msg_controllen += CMSG_SPACE(sizeof(struct sctp_sndinfo));
 			cmsg = (struct cmsghdr *)((caddr_t)cmsg + CMSG_SPACE(sizeof(struct sctp_sndinfo)));
+			assoc_id = &(spa_info->sendv_sndinfo.snd_assoc_id);
 		}
 		if (spa_info->sendv_flags & SCTP_SEND_PRINFO_VALID) {
 			cmsg->cmsg_level = IPPROTO_SCTP;
@@ -1164,6 +1168,9 @@ sctp_sendv(int sd,
 	msg.msg_flags = 0;
 	ret = sendmsg(sd, &msg, flags);
 	free(cmsgbuf);
+	if ((ret >= 0) && (addrs != NULL) && (assoc_id != NULL)) {
+		*assoc_id = sctp_getassocid(sd, addrs);
+	}
 	return (ret);
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201601271359.u0RDxR2d066320>