svn commit: r298549 - head/sys/netipsec

Andrey V. Elsukov ae at FreeBSD.org
Sun Apr 24 17:09:53 UTC 2016


Author: ae
Date: Sun Apr 24 17:09:51 2016
New Revision: 298549
URL: https://svnweb.freebsd.org/changeset/base/298549

Log:
  Fix build for NOINET and NOINET6 kernels.
  
  Use own protosw structures for both address families.
  Check proto in encapcheck function and use -1 as proto argument in
  encap_attach_func(), both address families can have IPPROTO_IPV4
  and IPPROTO_IPV6 protocols.
  
  Reported by:	bz

Modified:
  head/sys/netipsec/xform_ipcomp.c

Modified: head/sys/netipsec/xform_ipcomp.c
==============================================================================
--- head/sys/netipsec/xform_ipcomp.c	Sun Apr 24 16:41:54 2016	(r298548)
+++ head/sys/netipsec/xform_ipcomp.c	Sun Apr 24 17:09:51 2016	(r298549)
@@ -50,7 +50,6 @@
 #include <netinet/ip_encap.h>
 
 #include <net/netisr.h>
-#include <net/route.h>
 #include <net/vnet.h>
 
 #include <netipsec/ipsec.h>
@@ -58,6 +57,7 @@
 
 #ifdef INET6
 #include <netinet/ip6.h>
+#include <netinet6/ip6_var.h>
 #include <netipsec/ipsec6.h>
 #endif
 
@@ -65,7 +65,6 @@
 #include <netipsec/ipcomp_var.h>
 
 #include <netipsec/key.h>
-#include <netipsec/key_debug.h>
 
 #include <opencrypto/cryptodev.h>
 #include <opencrypto/deflate.h>
@@ -101,7 +100,6 @@ ipcomp_algorithm_lookup(int alg)
 	return NULL;
 }
 
-#if defined(INET) || defined(INET6)
 /*
  * RFC 3173 p 2.2. Non-Expansion Policy:
  * If the total size of a compressed payload and the IPComp header, as
@@ -157,19 +155,6 @@ ipcomp_nonexp_input(struct mbuf **mp, in
 	return (IPPROTO_DONE);
 }
 
-extern struct domain inetdomain;
-static struct protosw ipcomp_protosw = {
-	.pr_type =	SOCK_RAW,
-	.pr_domain =	&inetdomain,
-	.pr_protocol =	0 /* IPPROTO_IPV[46] */,
-	.pr_flags =	PR_ATOMIC | PR_ADDR | PR_LASTHDR,
-	.pr_input =	ipcomp_nonexp_input,
-	.pr_output =	rip_output,
-	.pr_ctloutput =	rip_ctloutput,
-	.pr_usrreqs =	&rip_usrreqs
-};
-#endif /* INET || INET6 */
-
 /*
  * ipcomp_init() is called when an CPI is being set up.
  */
@@ -702,6 +687,18 @@ static struct xformsw ipcomp_xformsw = {
 
 #ifdef INET
 static const struct encaptab *ipe4_cookie = NULL;
+extern struct domain inetdomain;
+static struct protosw ipcomp4_protosw = {
+	.pr_type =	SOCK_RAW,
+	.pr_domain =	&inetdomain,
+	.pr_protocol =	0 /* IPPROTO_IPV[46] */,
+	.pr_flags =	PR_ATOMIC | PR_ADDR | PR_LASTHDR,
+	.pr_input =	ipcomp_nonexp_input,
+	.pr_output =	rip_output,
+	.pr_ctloutput =	rip_ctloutput,
+	.pr_usrreqs =	&rip_usrreqs
+};
+
 static int
 ipcomp4_nonexp_encapcheck(const struct mbuf *m, int off, int proto,
     void *arg __unused)
@@ -711,6 +708,8 @@ ipcomp4_nonexp_encapcheck(const struct m
 
 	if (V_ipcomp_enable == 0)
 		return (0);
+	if (proto != IPPROTO_IPV4 && proto != IPPROTO_IPV6)
+		return (0);
 	bzero(&src, sizeof(src));
 	bzero(&dst, sizeof(dst));
 	src.sa.sa_family = dst.sa.sa_family = AF_INET;
@@ -723,6 +722,18 @@ ipcomp4_nonexp_encapcheck(const struct m
 #endif
 #ifdef INET6
 static const struct encaptab *ipe6_cookie = NULL;
+extern struct domain inet6domain;
+static struct protosw ipcomp6_protosw = {
+	.pr_type =	SOCK_RAW,
+	.pr_domain =	&inet6domain,
+	.pr_protocol =	0 /* IPPROTO_IPV[46] */,
+	.pr_flags =	PR_ATOMIC | PR_ADDR | PR_LASTHDR,
+	.pr_input =	ipcomp_nonexp_input,
+	.pr_output =	rip6_output,
+	.pr_ctloutput =	rip6_ctloutput,
+	.pr_usrreqs =	&rip6_usrreqs
+};
+
 static int
 ipcomp6_nonexp_encapcheck(const struct mbuf *m, int off, int proto,
     void *arg __unused)
@@ -732,6 +743,8 @@ ipcomp6_nonexp_encapcheck(const struct m
 
 	if (V_ipcomp_enable == 0)
 		return (0);
+	if (proto != IPPROTO_IPV4 && proto != IPPROTO_IPV6)
+		return (0);
 	bzero(&src, sizeof(src));
 	bzero(&dst, sizeof(dst));
 	src.sa.sa_family = dst.sa.sa_family = AF_INET;
@@ -760,12 +773,12 @@ ipcomp_attach(void)
 {
 
 #ifdef INET
-	ipe4_cookie = encap_attach_func(AF_INET, IPPROTO_IPV4,
-	    ipcomp4_nonexp_encapcheck, &ipcomp_protosw, NULL);
+	ipe4_cookie = encap_attach_func(AF_INET, -1,
+	    ipcomp4_nonexp_encapcheck, &ipcomp4_protosw, NULL);
 #endif
 #ifdef INET6
-	ipe6_cookie = encap_attach_func(AF_INET6, IPPROTO_IPV6,
-	    ipcomp6_nonexp_encapcheck, &ipcomp_protosw, NULL);
+	ipe6_cookie = encap_attach_func(AF_INET6, -1,
+	    ipcomp6_nonexp_encapcheck, &ipcomp6_protosw, NULL);
 #endif
 	xform_register(&ipcomp_xformsw);
 }


More information about the svn-src-all mailing list