Module Name:    src
Committed By:   ozaki-r
Date:           Tue Jul 11 10:06:07 UTC 2017

Modified Files:
        src/sys/netipsec: key.c

Log Message:
Separate sending message routine (NFC)


To generate a diff of this commit:
cvs rdiff -u -r1.175 -r1.176 src/sys/netipsec/key.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/netipsec/key.c
diff -u src/sys/netipsec/key.c:1.175 src/sys/netipsec/key.c:1.176
--- src/sys/netipsec/key.c:1.175	Tue Jul 11 09:49:15 2017
+++ src/sys/netipsec/key.c	Tue Jul 11 10:06:07 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: key.c,v 1.175 2017/07/11 09:49:15 ozaki-r Exp $	*/
+/*	$NetBSD: key.c,v 1.176 2017/07/11 10:06:07 ozaki-r Exp $	*/
 /*	$FreeBSD: src/sys/netipsec/key.c,v 1.3.2.3 2004/02/14 22:23:23 bms Exp $	*/
 /*	$KAME: key.c,v 1.191 2001/06/27 10:46:49 sakane Exp $	*/
 
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: key.c,v 1.175 2017/07/11 09:49:15 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: key.c,v 1.176 2017/07/11 10:06:07 ozaki-r Exp $");
 
 /*
  * This code is referd to RFC 2367
@@ -972,6 +972,60 @@ key_allocsa_policy(const struct secasind
 	return NULL;
 }
 
+static void
+key_sendup_message_delete(struct secasvar *sav)
+{
+	struct mbuf *m, *result = 0;
+	uint8_t satype;
+
+	satype = key_proto2satype(sav->sah->saidx.proto);
+	if (satype == 0)
+		goto msgfail;
+
+	m = key_setsadbmsg(SADB_DELETE, 0, satype, 0, 0, sav->refcnt - 1);
+	if (m == NULL)
+		goto msgfail;
+	result = m;
+
+	/* set sadb_address for saidx's. */
+	m = key_setsadbaddr(SADB_EXT_ADDRESS_SRC, &sav->sah->saidx.src.sa,
+	    sav->sah->saidx.src.sa.sa_len << 3, IPSEC_ULPROTO_ANY);
+	if (m == NULL)
+		goto msgfail;
+	m_cat(result, m);
+
+	/* set sadb_address for saidx's. */
+	m = key_setsadbaddr(SADB_EXT_ADDRESS_DST, &sav->sah->saidx.src.sa,
+	    sav->sah->saidx.src.sa.sa_len << 3, IPSEC_ULPROTO_ANY);
+	if (m == NULL)
+		goto msgfail;
+	m_cat(result, m);
+
+	/* create SA extension */
+	m = key_setsadbsa(sav);
+	if (m == NULL)
+		goto msgfail;
+	m_cat(result, m);
+
+	if (result->m_len < sizeof(struct sadb_msg)) {
+		result = m_pullup(result, sizeof(struct sadb_msg));
+		if (result == NULL)
+			goto msgfail;
+	}
+
+	result->m_pkthdr.len = 0;
+	for (m = result; m; m = m->m_next)
+		result->m_pkthdr.len += m->m_len;
+	mtod(result, struct sadb_msg *)->sadb_msg_len =
+	    PFKEY_UNIT64(result->m_pkthdr.len);
+
+	key_sendup_mbuf(NULL, result, KEY_SENDUP_REGISTERED);
+	result = NULL;
+msgfail:
+	if (result)
+		m_freem(result);
+}
+
 /*
  * searching SAD with direction, protocol, mode and state.
  * called by key_allocsa_policy().
@@ -1027,65 +1081,9 @@ key_do_allocsa_policy(struct secashead *
 		 * permanent.
 		 */
 		if (d->lft_c->sadb_lifetime_addtime != 0) {
-			struct mbuf *m, *result = 0;
-			uint8_t satype;
-
 			key_sa_chgstate(d, SADB_SASTATE_DEAD);
-
 			KASSERT(d->refcnt > 0);
-
-			satype = key_proto2satype(d->sah->saidx.proto);
-			if (satype == 0)
-				goto msgfail;
-
-			m = key_setsadbmsg(SADB_DELETE, 0,
-			    satype, 0, 0, d->refcnt - 1);
-			if (!m)
-				goto msgfail;
-			result = m;
-
-			/* set sadb_address for saidx's. */
-			m = key_setsadbaddr(SADB_EXT_ADDRESS_SRC,
-			    &d->sah->saidx.src.sa,
-			    d->sah->saidx.src.sa.sa_len << 3,
-			    IPSEC_ULPROTO_ANY);
-			if (!m)
-				goto msgfail;
-			m_cat(result, m);
-
-			/* set sadb_address for saidx's. */
-			m = key_setsadbaddr(SADB_EXT_ADDRESS_DST,
-			    &d->sah->saidx.src.sa,
-			    d->sah->saidx.src.sa.sa_len << 3,
-			    IPSEC_ULPROTO_ANY);
-			if (!m)
-				goto msgfail;
-			m_cat(result, m);
-
-			/* create SA extension */
-			m = key_setsadbsa(d);
-			if (!m)
-				goto msgfail;
-			m_cat(result, m);
-
-			if (result->m_len < sizeof(struct sadb_msg)) {
-				result = m_pullup(result,
-				    sizeof(struct sadb_msg));
-				if (result == NULL)
-					goto msgfail;
-			}
-
-			result->m_pkthdr.len = 0;
-			for (m = result; m; m = m->m_next)
-				result->m_pkthdr.len += m->m_len;
-			mtod(result, struct sadb_msg *)->sadb_msg_len =
-			    PFKEY_UNIT64(result->m_pkthdr.len);
-
-			key_sendup_mbuf(NULL, result, KEY_SENDUP_REGISTERED);
-			result = 0;
-		 msgfail:
-			if (result)
-				m_freem(result);
+			key_sendup_message_delete(d);
 			KEY_FREESAV(&d);
 		}
 	}

Reply via email to