[XFRM]: Introduce a helper to compare id protocol.
authorMasahide NAKAMURA <nakam@linux-ipv6.org>
Fri, 22 Sep 2006 22:06:24 +0000 (15:06 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 22 Sep 2006 22:06:24 +0000 (15:06 -0700)
Put the helper to header for future use.
Based on MIPL2 kernel patch.

Signed-off-by: Masahide NAKAMURA <nakam@linux-ipv6.org>
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/xfrm.h
net/xfrm/xfrm_state.c

index 762795624b10a88f67509645ffe64f3ce83368fb..5b364b0a6a2812d7b97628ff6886baf2ce47ad01 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/skbuff.h>
 #include <linux/socket.h>
 #include <linux/pfkeyv2.h>
+#include <linux/ipsec.h>
 #include <linux/in6.h>
 #include <linux/mutex.h>
 
@@ -835,6 +836,11 @@ static inline int xfrm_state_kern(struct xfrm_state *x)
        return atomic_read(&x->tunnel_users);
 }
 
+static inline int xfrm_id_proto_match(u8 proto, u8 userproto)
+{
+       return (userproto == IPSEC_PROTO_ANY || proto == userproto);
+}
+
 /*
  * xfrm algorithm information
  */
index 1c796087ee786e2432b9d4b089da4d8a55f9c127..34c038cbdf464d50e2c316f052d54ad09c9fab71 100644 (file)
@@ -294,7 +294,7 @@ void xfrm_state_flush(u8 proto)
 restart:
                list_for_each_entry(x, xfrm_state_bydst+i, bydst) {
                        if (!xfrm_state_kern(x) &&
-                           (proto == IPSEC_PROTO_ANY || x->id.proto == proto)) {
+                           xfrm_id_proto_match(x->id.proto, proto)) {
                                xfrm_state_hold(x);
                                spin_unlock_bh(&xfrm_state_lock);
 
@@ -772,7 +772,7 @@ int xfrm_state_walk(u8 proto, int (*func)(struct xfrm_state *, int, void*),
        spin_lock_bh(&xfrm_state_lock);
        for (i = 0; i < XFRM_DST_HSIZE; i++) {
                list_for_each_entry(x, xfrm_state_bydst+i, bydst) {
-                       if (proto == IPSEC_PROTO_ANY || x->id.proto == proto)
+                       if (xfrm_id_proto_match(x->id.proto, proto))
                                count++;
                }
        }
@@ -783,7 +783,7 @@ int xfrm_state_walk(u8 proto, int (*func)(struct xfrm_state *, int, void*),
 
        for (i = 0; i < XFRM_DST_HSIZE; i++) {
                list_for_each_entry(x, xfrm_state_bydst+i, bydst) {
-                       if (proto != IPSEC_PROTO_ANY && x->id.proto != proto)
+                       if (!xfrm_id_proto_match(x->id.proto, proto))
                                continue;
                        err = func(x, --count, data);
                        if (err)