git: rtsock: Make sysctl NET_RT_DUMP MPSAFE.
Sepherosa Ziehau
sephe at crater.dragonflybsd.org
Thu Mar 12 18:44:36 PDT 2015
commit 291dd55bdc005bdc5191983b74c294c6090cb925
Author: Sepherosa Ziehau <sephe at dragonflybsd.org>
Date: Mon Mar 9 22:28:15 2015 +0800
rtsock: Make sysctl NET_RT_DUMP MPSAFE.
- Add rn_walktree_at(), which walks the radix tree from a target node,
if it could be found, or from the closest node of the target node.
- Allocate temporary buffer for rtm batch, which should be large enough
for duplicated keys. We could consider reallocate it if there are
any real cases that this temporary buffer could not hold rtms for all
duplicated keys. In the current implementation, it just logs one
error and stop.
- Convert the rtentries to rtms in temporary buffer in netisr; unlike
what we do for inpcbs, routing table could be in inconsistent state
(due to blocking malloc), if we are not accessing the routing table
in netisr. If there is no more space in the temporary buffer, the
current rtentry's key and netmask are saved and we will start from it
next time. Since rn_walktree_at() only starts from the first node of
duplicated keys, we have to make sure that there is enough space for
all duplicated keys in the temoprary buffer.
- Once the temporary buffer can't hold more rtms, the rtms in it will
be delivered to userland. And we start converting the rtentries in
netisr from the last node again, until all rtentries are iterated.
Summary of changes:
sys/net/radix.c | 25 ++++-
sys/net/radix.h | 7 +-
sys/net/rtsock.c | 288 +++++++++++++++++++++++++++++++++++++++++++------------
3 files changed, 254 insertions(+), 66 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/291dd55bdc005bdc5191983b74c294c6090cb925
--
DragonFly BSD source repository
More information about the Commits
mailing list