diff options
author | Jamal Hadi Salim <hadi@cyberus.ca> | 2007-04-26 03:10:29 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-04-26 03:10:29 -0400 |
commit | 28d8909bc790d936ce33f4402adf7577533bbd4b (patch) | |
tree | 8de479d6660aba23bc99fa555c150852548df58d /net/xfrm/xfrm_state.c | |
parent | 98486fa2f4894e2b01e325c659635596bdec1614 (diff) |
[XFRM]: Export SAD info.
On a system with a lot of SAs, counting SAD entries chews useful
CPU time since you need to dump the whole SAD to user space;
i.e something like ip xfrm state ls | grep -i src | wc -l
I have seen taking literally minutes on a 40K SAs when the system
is swapping.
With this patch, some of the SAD info (that was already being tracked)
is exposed to user space. i.e you do:
ip xfrm state count
And you get the count; you can also pass -s to the command line and
get the hash info.
Signed-off-by: Jamal Hadi Salim <hadi@cyberus.ca>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/xfrm/xfrm_state.c')
-rw-r--r-- | net/xfrm/xfrm_state.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c index 743f07e7f698..f3a61ebd8d65 100644 --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c | |||
@@ -421,6 +421,16 @@ restart: | |||
421 | } | 421 | } |
422 | EXPORT_SYMBOL(xfrm_state_flush); | 422 | EXPORT_SYMBOL(xfrm_state_flush); |
423 | 423 | ||
424 | void xfrm_sad_getinfo(struct xfrm_sadinfo *si) | ||
425 | { | ||
426 | spin_lock_bh(&xfrm_state_lock); | ||
427 | si->sadcnt = xfrm_state_num; | ||
428 | si->sadhcnt = xfrm_state_hmask; | ||
429 | si->sadhmcnt = xfrm_state_hashmax; | ||
430 | spin_unlock_bh(&xfrm_state_lock); | ||
431 | } | ||
432 | EXPORT_SYMBOL(xfrm_sad_getinfo); | ||
433 | |||
424 | static int | 434 | static int |
425 | xfrm_init_tempsel(struct xfrm_state *x, struct flowi *fl, | 435 | xfrm_init_tempsel(struct xfrm_state *x, struct flowi *fl, |
426 | struct xfrm_tmpl *tmpl, | 436 | struct xfrm_tmpl *tmpl, |