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)
 {

Reply via email to