Module Name: src
Committed By: christos
Date: Sat Feb 18 23:27:32 UTC 2017
Modified Files:
src/sys/net/npf: npf_ext_log.c npf_if.c
Log Message:
provide a copy function used for logging that does not lock, but can return
trash.
To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/sys/net/npf/npf_ext_log.c
cvs rdiff -u -r1.7 -r1.8 src/sys/net/npf/npf_if.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/net/npf/npf_ext_log.c
diff -u src/sys/net/npf/npf_ext_log.c:1.12 src/sys/net/npf/npf_ext_log.c:1.13
--- src/sys/net/npf/npf_ext_log.c:1.12 Sat Feb 18 13:08:16 2017
+++ src/sys/net/npf/npf_ext_log.c Sat Feb 18 18:27:32 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: npf_ext_log.c,v 1.12 2017/02/18 18:08:16 mlelstv Exp $ */
+/* $NetBSD: npf_ext_log.c,v 1.13 2017/02/18 23:27:32 christos Exp $ */
/*-
* Copyright (c) 2010-2012 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
#ifdef _KERNEL
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npf_ext_log.c,v 1.12 2017/02/18 18:08:16 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npf_ext_log.c,v 1.13 2017/02/18 23:27:32 christos Exp $");
#include <sys/types.h>
#include <sys/module.h>
@@ -104,15 +104,10 @@ npf_log(npf_cache_t *npc, void *meta, co
hdr.action = *decision == NPF_DECISION_PASS ?
0 /* pass */ : 1 /* block */;
hdr.reason = 0; /* match */
-#if 0
- struct nbuf *nb = npc->npc_nbuf;
- const char *ifname = nb && nb->nb_ifid ?
- npf_ifmap_getname(npc->npc_ctx, nb->nb_ifid) : "???";
-#else
- const char *ifname = "???";
-#endif
- strlcpy(hdr.ifname, ifname, sizeof(hdr.ifname));
+ struct nbuf *nb = npc->npc_nbuf;
+ npf_ifmap_copyname(npc->npc_ctx, nb ? nb->nb_ifid : 0,
+ hdr.ifname, sizeof(hdr.ifname));
hdr.rulenr = htonl((uint32_t)mi->mi_rid);
hdr.subrulenr = htonl((uint32_t)(mi->mi_rid >> 32));
Index: src/sys/net/npf/npf_if.c
diff -u src/sys/net/npf/npf_if.c:1.7 src/sys/net/npf/npf_if.c:1.8
--- src/sys/net/npf/npf_if.c:1.7 Mon Dec 26 18:05:06 2016
+++ src/sys/net/npf/npf_if.c Sat Feb 18 18:27:32 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: npf_if.c,v 1.7 2016/12/26 23:05:06 christos Exp $ */
+/* $NetBSD: npf_if.c,v 1.8 2017/02/18 23:27:32 christos Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -46,7 +46,7 @@
#ifdef _KERNEL
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npf_if.c,v 1.7 2016/12/26 23:05:06 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npf_if.c,v 1.8 2017/02/18 23:27:32 christos Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -155,6 +155,20 @@ npf_ifmap_getid(npf_t *npf, const ifnet_
return i;
}
+/*
+ * This function is toxic; it can return garbage since we don't
+ * lock, but it is only used temporarily and only for logging.
+ */
+void
+npf_ifmap_copyname(npf_t *npf, u_int id, char *buf, size_t len)
+{
+ if (id > 0 && id < npf->ifmap_cnt)
+ strlcpy(buf, npf->ifmap[id - 1].n_ifname,
+ MIN(len, sizeof(npf->ifmap[id - 1].n_ifname)));
+ else
+ strlcpy(buf, "???", len);
+}
+
const char *
npf_ifmap_getname(npf_t *npf, const u_int id)
{