Module Name: src
Committed By: ozaki-r
Date: Fri Aug 28 06:19:13 UTC 2020
Modified Files:
src/sys/netinet: ip_input.c ip_output.c ip_var.h
src/sys/netinet6: ip6_forward.c ip6_input.c ip6_output.c ip6_var.h
src/sys/netipsec: ipsec.c ipsec.h
Log Message:
inet, inet6: count packets dropped by IPsec
The counters count packets dropped due to security policy checks.
To generate a diff of this commit:
cvs rdiff -u -r1.393 -r1.394 src/sys/netinet/ip_input.c
cvs rdiff -u -r1.315 -r1.316 src/sys/netinet/ip_output.c
cvs rdiff -u -r1.128 -r1.129 src/sys/netinet/ip_var.h
cvs rdiff -u -r1.99 -r1.100 src/sys/netinet6/ip6_forward.c
cvs rdiff -u -r1.218 -r1.219 src/sys/netinet6/ip6_input.c
cvs rdiff -u -r1.223 -r1.224 src/sys/netinet6/ip6_output.c
cvs rdiff -u -r1.84 -r1.85 src/sys/netinet6/ip6_var.h
cvs rdiff -u -r1.170 -r1.171 src/sys/netipsec/ipsec.c
cvs rdiff -u -r1.89 -r1.90 src/sys/netipsec/ipsec.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/netinet/ip_input.c
diff -u src/sys/netinet/ip_input.c:1.393 src/sys/netinet/ip_input.c:1.394
--- src/sys/netinet/ip_input.c:1.393 Wed Nov 13 02:51:22 2019
+++ src/sys/netinet/ip_input.c Fri Aug 28 06:19:13 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ip_input.c,v 1.393 2019/11/13 02:51:22 ozaki-r Exp $ */
+/* $NetBSD: ip_input.c,v 1.394 2020/08/28 06:19:13 ozaki-r Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -91,7 +91,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_input.c,v 1.393 2019/11/13 02:51:22 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_input.c,v 1.394 2020/08/28 06:19:13 ozaki-r Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -741,6 +741,7 @@ ip_input(struct mbuf *m)
/* Check the security policy (SP) for the packet */
if (ipsec_used) {
if (ipsec_ip_input(m, true) != 0) {
+ IP_STATINC(IP_STAT_IPSECDROP_IN);
goto out;
}
}
@@ -788,6 +789,7 @@ ours:
if (ipsec_used &&
(inetsw[ip_protox[ip->ip_p]].pr_flags & PR_LASTHDR) != 0) {
if (ipsec_ip_input(m, false) != 0) {
+ IP_STATINC(IP_STAT_IPSECDROP_IN);
goto out;
}
}
Index: src/sys/netinet/ip_output.c
diff -u src/sys/netinet/ip_output.c:1.315 src/sys/netinet/ip_output.c:1.316
--- src/sys/netinet/ip_output.c:1.315 Fri Dec 27 10:17:56 2019
+++ src/sys/netinet/ip_output.c Fri Aug 28 06:19:13 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ip_output.c,v 1.315 2019/12/27 10:17:56 msaitoh Exp $ */
+/* $NetBSD: ip_output.c,v 1.316 2020/08/28 06:19:13 ozaki-r Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -91,7 +91,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_output.c,v 1.315 2019/12/27 10:17:56 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_output.c,v 1.316 2020/08/28 06:19:13 ozaki-r Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -609,10 +609,13 @@ sendit:
#ifdef IPSEC
if (ipsec_used) {
bool ipsec_done = false;
+ bool count_drop = false;
/* Perform IPsec processing, if any. */
error = ipsec4_output(m, inp, flags, &mtu, &natt_frag,
- &ipsec_done);
+ &ipsec_done, &count_drop);
+ if (count_drop)
+ IP_STATINC(IP_STAT_IPSECDROP_OUT);
if (error || ipsec_done)
goto done;
}
Index: src/sys/netinet/ip_var.h
diff -u src/sys/netinet/ip_var.h:1.128 src/sys/netinet/ip_var.h:1.129
--- src/sys/netinet/ip_var.h:1.128 Mon May 13 07:47:59 2019
+++ src/sys/netinet/ip_var.h Fri Aug 28 06:19:13 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ip_var.h,v 1.128 2019/05/13 07:47:59 ozaki-r Exp $ */
+/* $NetBSD: ip_var.h,v 1.129 2020/08/28 06:19:13 ozaki-r Exp $ */
/*
* Copyright (c) 1982, 1986, 1993
@@ -149,8 +149,10 @@ struct ip_pktopts {
#define IP_STAT_NOIPSEC 31 /* no match ipsec(4) found */
#define IP_STAT_PFILDROP_IN 32 /* dropped by pfil (PFIL_IN) */
#define IP_STAT_PFILDROP_OUT 33 /* dropped by pfil (PFIL_OUT) */
+#define IP_STAT_IPSECDROP_IN 34 /* dropped by IPsec SP check */
+#define IP_STAT_IPSECDROP_OUT 35 /* dropped by IPsec SP check */
-#define IP_NSTATS 34
+#define IP_NSTATS 36
#ifdef _KERNEL
Index: src/sys/netinet6/ip6_forward.c
diff -u src/sys/netinet6/ip6_forward.c:1.99 src/sys/netinet6/ip6_forward.c:1.100
--- src/sys/netinet6/ip6_forward.c:1.99 Fri Jun 12 11:04:45 2020
+++ src/sys/netinet6/ip6_forward.c Fri Aug 28 06:19:13 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ip6_forward.c,v 1.99 2020/06/12 11:04:45 roy Exp $ */
+/* $NetBSD: ip6_forward.c,v 1.100 2020/08/28 06:19:13 ozaki-r Exp $ */
/* $KAME: ip6_forward.c,v 1.109 2002/09/11 08:10:17 sakane Exp $ */
/*
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip6_forward.c,v 1.99 2020/06/12 11:04:45 roy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip6_forward.c,v 1.100 2020/08/28 06:19:13 ozaki-r Exp $");
#ifdef _KERNEL_OPT
#include "opt_gateway.h"
@@ -192,6 +192,7 @@ ip6_forward(struct mbuf *m, int srcrt)
if (error == -EINVAL)
error = 0;
m_freem(m);
+ IP6_STATINC(IP6_STAT_IPSECDROP_OUT);
goto freecopy;
}
}
Index: src/sys/netinet6/ip6_input.c
diff -u src/sys/netinet6/ip6_input.c:1.218 src/sys/netinet6/ip6_input.c:1.219
--- src/sys/netinet6/ip6_input.c:1.218 Mon Jul 27 14:06:58 2020
+++ src/sys/netinet6/ip6_input.c Fri Aug 28 06:19:13 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ip6_input.c,v 1.218 2020/07/27 14:06:58 roy Exp $ */
+/* $NetBSD: ip6_input.c,v 1.219 2020/08/28 06:19:13 ozaki-r Exp $ */
/* $KAME: ip6_input.c,v 1.188 2001/03/29 05:34:31 itojun Exp $ */
/*
@@ -62,7 +62,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip6_input.c,v 1.218 2020/07/27 14:06:58 roy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip6_input.c,v 1.219 2020/08/28 06:19:13 ozaki-r Exp $");
#ifdef _KERNEL_OPT
#include "opt_gateway.h"
@@ -756,8 +756,10 @@ hbhcheck:
int error;
error = ipsec_ip_input(m, false);
- if (error)
+ if (error) {
+ IP6_STATINC(IP6_STAT_IPSECDROP_IN);
goto bad;
+ }
}
}
#endif
Index: src/sys/netinet6/ip6_output.c
diff -u src/sys/netinet6/ip6_output.c:1.223 src/sys/netinet6/ip6_output.c:1.224
--- src/sys/netinet6/ip6_output.c:1.223 Fri Jun 12 11:04:45 2020
+++ src/sys/netinet6/ip6_output.c Fri Aug 28 06:19:13 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ip6_output.c,v 1.223 2020/06/12 11:04:45 roy Exp $ */
+/* $NetBSD: ip6_output.c,v 1.224 2020/08/28 06:19:13 ozaki-r Exp $ */
/* $KAME: ip6_output.c,v 1.172 2001/03/25 09:55:56 itojun Exp $ */
/*
@@ -62,7 +62,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip6_output.c,v 1.223 2020/06/12 11:04:45 roy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip6_output.c,v 1.224 2020/08/28 06:19:13 ozaki-r Exp $");
#ifdef _KERNEL_OPT
#include "opt_inet.h"
@@ -295,6 +295,7 @@ ip6_output(
*/
if (error == -EINVAL)
error = 0;
+ IP6_STATINC(IP6_STAT_IPSECDROP_OUT);
goto freehdrs;
}
}
Index: src/sys/netinet6/ip6_var.h
diff -u src/sys/netinet6/ip6_var.h:1.84 src/sys/netinet6/ip6_var.h:1.85
--- src/sys/netinet6/ip6_var.h:1.84 Fri Jun 19 16:08:06 2020
+++ src/sys/netinet6/ip6_var.h Fri Aug 28 06:19:13 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ip6_var.h,v 1.84 2020/06/19 16:08:06 maxv Exp $ */
+/* $NetBSD: ip6_var.h,v 1.85 2020/08/28 06:19:13 ozaki-r Exp $ */
/* $KAME: ip6_var.h,v 1.33 2000/06/11 14:59:20 jinmei Exp $ */
/*
@@ -188,8 +188,10 @@ struct ip6_pktopts {
#define IP6_STAT_NOIPSEC 402 /* no match ipsec(4) found */
#define IP6_STAT_PFILDROP_IN 403 /* dropped by pfil (PFIL_IN) */
#define IP6_STAT_PFILDROP_OUT 404 /* dropped by pfil (PFIL_OUT) */
+#define IP6_STAT_IPSECDROP_IN 405 /* dropped by IPsec SP check */
+#define IP6_STAT_IPSECDROP_OUT 406 /* dropped by IPsec SP check */
-#define IP6_NSTATS 405
+#define IP6_NSTATS 407
#define IP6FLOW_HASHBITS 6 /* should not be a multiple of 8 */
Index: src/sys/netipsec/ipsec.c
diff -u src/sys/netipsec/ipsec.c:1.170 src/sys/netipsec/ipsec.c:1.171
--- src/sys/netipsec/ipsec.c:1.170 Wed Aug 7 10:10:00 2019
+++ src/sys/netipsec/ipsec.c Fri Aug 28 06:19:13 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ipsec.c,v 1.170 2019/08/07 10:10:00 knakahara Exp $ */
+/* $NetBSD: ipsec.c,v 1.171 2020/08/28 06:19:13 ozaki-r Exp $ */
/* $FreeBSD: ipsec.c,v 1.2.2.2 2003/07/01 01:38:13 sam Exp $ */
/* $KAME: ipsec.c,v 1.103 2001/05/24 07:14:18 sakane Exp $ */
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ipsec.c,v 1.170 2019/08/07 10:10:00 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipsec.c,v 1.171 2020/08/28 06:19:13 ozaki-r Exp $");
/*
* IPsec controller part.
@@ -616,7 +616,7 @@ ipsec_checkpolicy(struct mbuf *m, u_int
int
ipsec4_output(struct mbuf *m, struct inpcb *inp, int flags,
- u_long *mtu, bool *natt_frag, bool *done)
+ u_long *mtu, bool *natt_frag, bool *done, bool *count_drop)
{
struct secpolicy *sp = NULL;
u_long _mtu = 0;
@@ -660,6 +660,7 @@ ipsec4_output(struct mbuf *m, struct inp
error = 0;
m_freem(m);
*done = true;
+ *count_drop = true;
return error;
}
/* No IPsec processing for this packet. */
Index: src/sys/netipsec/ipsec.h
diff -u src/sys/netipsec/ipsec.h:1.89 src/sys/netipsec/ipsec.h:1.90
--- src/sys/netipsec/ipsec.h:1.89 Fri Nov 1 04:23:21 2019
+++ src/sys/netipsec/ipsec.h Fri Aug 28 06:19:13 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ipsec.h,v 1.89 2019/11/01 04:23:21 knakahara Exp $ */
+/* $NetBSD: ipsec.h,v 1.90 2020/08/28 06:19:13 ozaki-r Exp $ */
/* $FreeBSD: ipsec.h,v 1.2.4.2 2004/02/14 22:23:23 bms Exp $ */
/* $KAME: ipsec.h,v 1.53 2001/11/20 08:32:38 itojun Exp $ */
@@ -275,7 +275,7 @@ void ipsec_pcbdisconn(struct inpcbpolicy
void ipsec_invalpcbcacheall(void);
struct inpcb;
-int ipsec4_output(struct mbuf *, struct inpcb *, int, u_long *, bool *, bool *);
+int ipsec4_output(struct mbuf *, struct inpcb *, int, u_long *, bool *, bool *, bool *);
int ipsec_ip_input(struct mbuf *, bool);
void ipsec_mtu(struct mbuf *, int *);