Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/net/npf NPF: fix the interface table initialisation on l...
details: https://anonhg.NetBSD.org/src/rev/0008a6f51c35
branches: trunk
changeset: 350060:0008a6f51c35
user: rmind <rmind%NetBSD.org@localhost>
date: Tue Jan 03 00:58:05 2017 +0000
description:
NPF: fix the interface table initialisation on load.
diffstat:
sys/net/npf/npf_conf.c | 9 ++++++---
sys/net/npf/npf_ifaddr.c | 34 ++++++++++++++++++----------------
sys/net/npf/npf_impl.h | 4 ++--
sys/net/npf/npf_os.c | 11 ++++++++---
4 files changed, 34 insertions(+), 24 deletions(-)
diffs (155 lines):
diff -r 781b6a08ec73 -r 0008a6f51c35 sys/net/npf/npf_conf.c
--- a/sys/net/npf/npf_conf.c Tue Jan 03 00:50:11 2017 +0000
+++ b/sys/net/npf/npf_conf.c Tue Jan 03 00:58:05 2017 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: npf_conf.c,v 1.10 2016/12/26 23:05:06 christos Exp $ */
+/* $NetBSD: npf_conf.c,v 1.11 2017/01/03 00:58:05 rmind Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -49,7 +49,7 @@
#ifdef _KERNEL
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npf_conf.c,v 1.10 2016/12/26 23:05:06 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npf_conf.c,v 1.11 2017/01/03 00:58:05 rmind Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -157,7 +157,7 @@
npf_ifmap_flush(npf);
npf_conn_load(npf, conns, !flush);
mutex_exit(&npf->config_lock);
- return;
+ goto done;
}
/*
@@ -183,6 +183,9 @@
/* Finally, it is safe to destroy the old config. */
npf_config_destroy(onc);
+done:
+ /* Sync all interface address tables (can be done asynchronously). */
+ npf_ifaddr_syncall(npf);
}
/*
diff -r 781b6a08ec73 -r 0008a6f51c35 sys/net/npf/npf_ifaddr.c
--- a/sys/net/npf/npf_ifaddr.c Tue Jan 03 00:50:11 2017 +0000
+++ b/sys/net/npf/npf_ifaddr.c Tue Jan 03 00:58:05 2017 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: npf_ifaddr.c,v 1.1 2017/01/02 21:49:51 rmind Exp $ */
+/* $NetBSD: npf_ifaddr.c,v 1.2 2017/01/03 00:58:05 rmind Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npf_ifaddr.c,v 1.1 2017/01/02 21:49:51 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npf_ifaddr.c,v 1.2 2017/01/03 00:58:05 rmind Exp $");
#include <sys/param.h>
#include <sys/types.h>
@@ -46,20 +46,6 @@
#include "npf_impl.h"
-void
-npf_ifaddr_init(npf_t *npf)
-{
- ifnet_t *ifp;
-
- KERNEL_LOCK(1, NULL);
- IFNET_LOCK();
- IFNET_WRITER_FOREACH(ifp) {
- npf_ifaddr_sync(npf, ifp);
- }
- IFNET_UNLOCK();
- KERNEL_UNLOCK_ONE(NULL);
-}
-
static npf_table_t *
lookup_ifnet_table(npf_t *npf, ifnet_t *ifp)
{
@@ -177,3 +163,19 @@
}
replace_ifnet_table(npf, t);
}
+
+void
+npf_ifaddr_syncall(npf_t *npf)
+{
+ ifnet_t *ifp;
+
+ KERNEL_LOCK(1, NULL);
+ IFNET_LOCK();
+ IFNET_WRITER_FOREACH(ifp) {
+ npf_ifaddr_sync(npf, ifp);
+ }
+ IFNET_UNLOCK();
+ KERNEL_UNLOCK_ONE(NULL);
+}
+
+
diff -r 781b6a08ec73 -r 0008a6f51c35 sys/net/npf/npf_impl.h
--- a/sys/net/npf/npf_impl.h Tue Jan 03 00:50:11 2017 +0000
+++ b/sys/net/npf/npf_impl.h Tue Jan 03 00:58:05 2017 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: npf_impl.h,v 1.66 2017/01/02 21:49:51 rmind Exp $ */
+/* $NetBSD: npf_impl.h,v 1.67 2017/01/03 00:58:05 rmind Exp $ */
/*-
* Copyright (c) 2009-2014 The NetBSD Foundation, Inc.
@@ -247,9 +247,9 @@
u_int npf_ifmap_getid(npf_t *, const ifnet_t *);
const char * npf_ifmap_getname(npf_t *, const u_int);
-void npf_ifaddr_init(npf_t *);
void npf_ifaddr_sync(npf_t *, ifnet_t *);
void npf_ifaddr_flush(npf_t *, ifnet_t *);
+void npf_ifaddr_syncall(npf_t *);
/* Packet filter hooks. */
int npf_pfil_register(bool);
diff -r 781b6a08ec73 -r 0008a6f51c35 sys/net/npf/npf_os.c
--- a/sys/net/npf/npf_os.c Tue Jan 03 00:50:11 2017 +0000
+++ b/sys/net/npf/npf_os.c Tue Jan 03 00:58:05 2017 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: npf_os.c,v 1.4 2017/01/02 23:02:04 christos Exp $ */
+/* $NetBSD: npf_os.c,v 1.5 2017/01/03 00:58:05 rmind Exp $ */
/*-
* Copyright (c) 2009-2016 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
#ifdef _KERNEL
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: npf_os.c,v 1.4 2017/01/02 23:02:04 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: npf_os.c,v 1.5 2017/01/03 00:58:05 rmind Exp $");
#ifdef _KERNEL_OPT
#include "pf.h"
@@ -153,7 +153,6 @@
npf = npf_create(0, NULL, &kern_ifops);
npf_setkernctx(npf);
npf_pfil_register(true);
- npf_ifaddr_init(npf);
#ifdef _MODULE
devmajor_t bmajor = NODEVMAJOR, cmajor = NODEVMAJOR;
@@ -445,6 +444,12 @@
PFIL_ALL, npf_ph_inet6);
KASSERT(error == 0);
}
+
+ /*
+ * It is necessary to re-sync all/any interface address tables,
+ * since we did not listen for any changes.
+ */
+ npf_ifaddr_syncall(npf);
pfil_registered = true;
out:
KERNEL_UNLOCK_ONE(NULL);
Home |
Main Index |
Thread Index |
Old Index