ipvs: provide default ip_vs_conn_{in,out}_get_proto
Simon Horman [Mon, 2 Aug 2010 15:12:44 +0000 (17:12 +0200)]
This removes duplicate code by providing a default implementation
which is used by 3 of the 4 modules that provide these call.

Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Patrick McHardy <kaber@trash.net>

include/net/ip_vs.h
net/netfilter/ipvs/ip_vs_conn.c
net/netfilter/ipvs/ip_vs_proto_sctp.c
net/netfilter/ipvs/ip_vs_proto_tcp.c
net/netfilter/ipvs/ip_vs_proto_udp.c

index 1f9e511..a4747a0 100644 (file)
@@ -632,10 +632,22 @@ extern struct ip_vs_conn *ip_vs_ct_in_get
 (int af, int protocol, const union nf_inet_addr *s_addr, __be16 s_port,
  const union nf_inet_addr *d_addr, __be16 d_port);
 
+struct ip_vs_conn * ip_vs_conn_in_get_proto(int af, const struct sk_buff *skb,
+                                           struct ip_vs_protocol *pp,
+                                           const struct ip_vs_iphdr *iph,
+                                           unsigned int proto_off,
+                                           int inverse);
+
 extern struct ip_vs_conn *ip_vs_conn_out_get
 (int af, int protocol, const union nf_inet_addr *s_addr, __be16 s_port,
  const union nf_inet_addr *d_addr, __be16 d_port);
 
+struct ip_vs_conn * ip_vs_conn_out_get_proto(int af, const struct sk_buff *skb,
+                                            struct ip_vs_protocol *pp,
+                                            const struct ip_vs_iphdr *iph,
+                                            unsigned int proto_off,
+                                            int inverse);
+
 /* put back the conn without restarting its timer */
 static inline void __ip_vs_conn_put(struct ip_vs_conn *cp)
 {
index 654544e..b71c69a 100644 (file)
@@ -271,6 +271,29 @@ struct ip_vs_conn *ip_vs_conn_in_get
        return cp;
 }
 
+struct ip_vs_conn *
+ip_vs_conn_in_get_proto(int af, const struct sk_buff *skb,
+                       struct ip_vs_protocol *pp,
+                       const struct ip_vs_iphdr *iph,
+                       unsigned int proto_off, int inverse)
+{
+       __be16 _ports[2], *pptr;
+
+       pptr = skb_header_pointer(skb, proto_off, sizeof(_ports), _ports);
+       if (pptr == NULL)
+               return NULL;
+
+       if (likely(!inverse))
+               return ip_vs_conn_in_get(af, iph->protocol,
+                                        &iph->saddr, pptr[0],
+                                        &iph->daddr, pptr[1]);
+       else
+               return ip_vs_conn_in_get(af, iph->protocol,
+                                        &iph->daddr, pptr[1],
+                                        &iph->saddr, pptr[0]);
+}
+EXPORT_SYMBOL_GPL(ip_vs_conn_in_get_proto);
+
 /* Get reference to connection template */
 struct ip_vs_conn *ip_vs_ct_in_get
 (int af, int protocol, const union nf_inet_addr *s_addr, __be16 s_port,
@@ -356,6 +379,28 @@ struct ip_vs_conn *ip_vs_conn_out_get
        return ret;
 }
 
+struct ip_vs_conn *
+ip_vs_conn_out_get_proto(int af, const struct sk_buff *skb,
+                        struct ip_vs_protocol *pp,
+                        const struct ip_vs_iphdr *iph,
+                        unsigned int proto_off, int inverse)
+{
+       __be16 _ports[2], *pptr;
+
+       pptr = skb_header_pointer(skb, proto_off, sizeof(_ports), _ports);
+       if (pptr == NULL)
+               return NULL;
+
+       if (likely(!inverse))
+               return ip_vs_conn_out_get(af, iph->protocol,
+                                         &iph->saddr, pptr[0],
+                                         &iph->daddr, pptr[1]);
+       else
+               return ip_vs_conn_out_get(af, iph->protocol,
+                                         &iph->daddr, pptr[1],
+                                         &iph->saddr, pptr[0]);
+}
+EXPORT_SYMBOL_GPL(ip_vs_conn_out_get_proto);
 
 /*
  *      Put back the conn and restart its timer with its timeout
index db55759..4c0855c 100644 (file)
@@ -8,55 +8,6 @@
 #include <net/sctp/checksum.h>
 #include <net/ip_vs.h>
 
-
-static struct ip_vs_conn *
-sctp_conn_in_get(int af,
-                const struct sk_buff *skb,
-                struct ip_vs_protocol *pp,
-                const struct ip_vs_iphdr *iph,
-                unsigned int proto_off,
-                int inverse)
-{
-       __be16 _ports[2], *pptr;
-
-       pptr = skb_header_pointer(skb, proto_off, sizeof(_ports), _ports);
-       if (pptr == NULL)
-               return NULL;
-
-       if (likely(!inverse)) 
-               return ip_vs_conn_in_get(af, iph->protocol,
-                                        &iph->saddr, pptr[0],
-                                        &iph->daddr, pptr[1]);
-       else 
-               return ip_vs_conn_in_get(af, iph->protocol,
-                                        &iph->daddr, pptr[1],
-                                        &iph->saddr, pptr[0]);
-}
-
-static struct ip_vs_conn *
-sctp_conn_out_get(int af,
-                 const struct sk_buff *skb,
-                 struct ip_vs_protocol *pp,
-                 const struct ip_vs_iphdr *iph,
-                 unsigned int proto_off,
-                 int inverse)
-{
-       __be16 _ports[2], *pptr;
-
-       pptr = skb_header_pointer(skb, proto_off, sizeof(_ports), _ports);
-       if (pptr == NULL)
-               return NULL;
-
-       if (likely(!inverse)) 
-               return ip_vs_conn_out_get(af, iph->protocol,
-                                         &iph->saddr, pptr[0],
-                                         &iph->daddr, pptr[1]);
-       else 
-               return ip_vs_conn_out_get(af, iph->protocol,
-                                         &iph->daddr, pptr[1],
-                                         &iph->saddr, pptr[0]);
-}
-
 static int
 sctp_conn_schedule(int af, struct sk_buff *skb, struct ip_vs_protocol *pp,
                   int *verdict, struct ip_vs_conn **cpp)
@@ -1169,8 +1120,8 @@ struct ip_vs_protocol ip_vs_protocol_sctp = {
        .register_app = sctp_register_app,
        .unregister_app = sctp_unregister_app,
        .conn_schedule = sctp_conn_schedule,
-       .conn_in_get = sctp_conn_in_get,
-       .conn_out_get = sctp_conn_out_get,
+       .conn_in_get = ip_vs_conn_in_get_proto,
+       .conn_out_get = ip_vs_conn_out_get_proto,
        .snat_handler = sctp_snat_handler,
        .dnat_handler = sctp_dnat_handler,
        .csum_check = sctp_csum_check,
index 91d28e0..282d24d 100644 (file)
 
 #include <net/ip_vs.h>
 
-
-static struct ip_vs_conn *
-tcp_conn_in_get(int af, const struct sk_buff *skb, struct ip_vs_protocol *pp,
-               const struct ip_vs_iphdr *iph, unsigned int proto_off,
-               int inverse)
-{
-       __be16 _ports[2], *pptr;
-
-       pptr = skb_header_pointer(skb, proto_off, sizeof(_ports), _ports);
-       if (pptr == NULL)
-               return NULL;
-
-       if (likely(!inverse)) {
-               return ip_vs_conn_in_get(af, iph->protocol,
-                                        &iph->saddr, pptr[0],
-                                        &iph->daddr, pptr[1]);
-       } else {
-               return ip_vs_conn_in_get(af, iph->protocol,
-                                        &iph->daddr, pptr[1],
-                                        &iph->saddr, pptr[0]);
-       }
-}
-
-static struct ip_vs_conn *
-tcp_conn_out_get(int af, const struct sk_buff *skb, struct ip_vs_protocol *pp,
-                const struct ip_vs_iphdr *iph, unsigned int proto_off,
-                int inverse)
-{
-       __be16 _ports[2], *pptr;
-
-       pptr = skb_header_pointer(skb, proto_off, sizeof(_ports), _ports);
-       if (pptr == NULL)
-               return NULL;
-
-       if (likely(!inverse)) {
-               return ip_vs_conn_out_get(af, iph->protocol,
-                                         &iph->saddr, pptr[0],
-                                         &iph->daddr, pptr[1]);
-       } else {
-               return ip_vs_conn_out_get(af, iph->protocol,
-                                         &iph->daddr, pptr[1],
-                                         &iph->saddr, pptr[0]);
-       }
-}
-
-
 static int
 tcp_conn_schedule(int af, struct sk_buff *skb, struct ip_vs_protocol *pp,
                  int *verdict, struct ip_vs_conn **cpp)
@@ -721,8 +675,8 @@ struct ip_vs_protocol ip_vs_protocol_tcp = {
        .register_app =         tcp_register_app,
        .unregister_app =       tcp_unregister_app,
        .conn_schedule =        tcp_conn_schedule,
-       .conn_in_get =          tcp_conn_in_get,
-       .conn_out_get =         tcp_conn_out_get,
+       .conn_in_get =          ip_vs_conn_in_get_proto,
+       .conn_out_get =         ip_vs_conn_out_get_proto,
        .snat_handler =         tcp_snat_handler,
        .dnat_handler =         tcp_dnat_handler,
        .csum_check =           tcp_csum_check,
index e7a6885..8553231 100644 (file)
 #include <net/ip.h>
 #include <net/ip6_checksum.h>
 
-static struct ip_vs_conn *
-udp_conn_in_get(int af, const struct sk_buff *skb, struct ip_vs_protocol *pp,
-               const struct ip_vs_iphdr *iph, unsigned int proto_off,
-               int inverse)
-{
-       struct ip_vs_conn *cp;
-       __be16 _ports[2], *pptr;
-
-       pptr = skb_header_pointer(skb, proto_off, sizeof(_ports), _ports);
-       if (pptr == NULL)
-               return NULL;
-
-       if (likely(!inverse)) {
-               cp = ip_vs_conn_in_get(af, iph->protocol,
-                                      &iph->saddr, pptr[0],
-                                      &iph->daddr, pptr[1]);
-       } else {
-               cp = ip_vs_conn_in_get(af, iph->protocol,
-                                      &iph->daddr, pptr[1],
-                                      &iph->saddr, pptr[0]);
-       }
-
-       return cp;
-}
-
-
-static struct ip_vs_conn *
-udp_conn_out_get(int af, const struct sk_buff *skb, struct ip_vs_protocol *pp,
-                const struct ip_vs_iphdr *iph, unsigned int proto_off,
-                int inverse)
-{
-       struct ip_vs_conn *cp;
-       __be16 _ports[2], *pptr;
-
-       pptr = skb_header_pointer(skb, proto_off, sizeof(_ports), _ports);
-       if (pptr == NULL)
-               return NULL;
-
-       if (likely(!inverse)) {
-               cp = ip_vs_conn_out_get(af, iph->protocol,
-                                       &iph->saddr, pptr[0],
-                                       &iph->daddr, pptr[1]);
-       } else {
-               cp = ip_vs_conn_out_get(af, iph->protocol,
-                                       &iph->daddr, pptr[1],
-                                       &iph->saddr, pptr[0]);
-       }
-
-       return cp;
-}
-
-
 static int
 udp_conn_schedule(int af, struct sk_buff *skb, struct ip_vs_protocol *pp,
                  int *verdict, struct ip_vs_conn **cpp)
@@ -520,8 +468,8 @@ struct ip_vs_protocol ip_vs_protocol_udp = {
        .init =                 udp_init,
        .exit =                 udp_exit,
        .conn_schedule =        udp_conn_schedule,
-       .conn_in_get =          udp_conn_in_get,
-       .conn_out_get =         udp_conn_out_get,
+       .conn_in_get =          ip_vs_conn_in_get_proto,
+       .conn_out_get =         ip_vs_conn_out_get_proto,
        .snat_handler =         udp_snat_handler,
        .dnat_handler =         udp_dnat_handler,
        .csum_check =           udp_csum_check,