ipvs: Pass ipvs into .conn_in_get and ip_vs_conn_in_get_proto
authorEric W. Biederman <ebiederm@xmission.com>
Mon, 21 Sep 2015 18:02:38 +0000 (13:02 -0500)
committerSimon Horman <horms@verge.net.au>
Thu, 24 Sep 2015 00:34:41 +0000 (09:34 +0900)
Stop relying on "net_ipvs(skb_net(skb))" to derive the ipvs as
skb_net is a hack.

Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Acked-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Simon Horman <horms@verge.net.au>
include/net/ip_vs.h
net/netfilter/ipvs/ip_vs_conn.c
net/netfilter/ipvs/ip_vs_core.c
net/netfilter/ipvs/ip_vs_proto_ah_esp.c

index fe3373c9bb3ba0190f02645645b500fb61de7ad5..5c26383542e39b95c5560617314551af01b494ce 100644 (file)
@@ -493,7 +493,8 @@ struct ip_vs_protocol {
                             struct ip_vs_iphdr *iph);
 
        struct ip_vs_conn *
-       (*conn_in_get)(int af,
+       (*conn_in_get)(struct netns_ipvs *ipvs,
+                      int af,
                       const struct sk_buff *skb,
                       const struct ip_vs_iphdr *iph);
 
@@ -1222,7 +1223,8 @@ static inline void ip_vs_conn_fill_param(struct netns_ipvs *ipvs, int af, int pr
 struct ip_vs_conn *ip_vs_conn_in_get(const struct ip_vs_conn_param *p);
 struct ip_vs_conn *ip_vs_ct_in_get(const struct ip_vs_conn_param *p);
 
-struct ip_vs_conn * ip_vs_conn_in_get_proto(int af, const struct sk_buff *skb,
+struct ip_vs_conn * ip_vs_conn_in_get_proto(struct netns_ipvs *ipvs, int af,
+                                           const struct sk_buff *skb,
                                            const struct ip_vs_iphdr *iph);
 
 struct ip_vs_conn *ip_vs_conn_out_get(const struct ip_vs_conn_param *p);
index 6754e3595a72da4c7697655bdc56831ed932ee85..439d6fb8bc296da1ca48d61722281506a7b3fdc1 100644 (file)
@@ -335,10 +335,10 @@ ip_vs_conn_fill_param_proto(struct netns_ipvs *ipvs,
 }
 
 struct ip_vs_conn *
-ip_vs_conn_in_get_proto(int af, const struct sk_buff *skb,
+ip_vs_conn_in_get_proto(struct netns_ipvs *ipvs, int af,
+                       const struct sk_buff *skb,
                        const struct ip_vs_iphdr *iph)
 {
-       struct netns_ipvs *ipvs = net_ipvs(skb_net(skb));
        struct ip_vs_conn_param p;
 
        if (ip_vs_conn_fill_param_proto(ipvs, af, skb, iph, &p))
index 01398eb757fa0ff7ec0a37ec573141f56f34f657..9b5c2af7b63adf535cffeecfc36b70c9d47cb3e6 100644 (file)
@@ -469,7 +469,7 @@ ip_vs_schedule(struct ip_vs_service *svc, struct sk_buff *skb,
         */
        if ((!skb->dev || skb->dev->flags & IFF_LOOPBACK)) {
                iph->hdr_flags ^= IP_VS_HDR_INVERSE;
-               cp = pp->conn_in_get(svc->af, skb, iph);
+               cp = pp->conn_in_get(svc->ipvs, svc->af, skb, iph);
                iph->hdr_flags ^= IP_VS_HDR_INVERSE;
 
                if (cp) {
@@ -1490,7 +1490,7 @@ ip_vs_in_icmp(struct sk_buff *skb, int *related, unsigned int hooknum)
        /* The embedded headers contain source and dest in reverse order.
         * For IPIP this is error for request, not for reply.
         */
-       cp = pp->conn_in_get(AF_INET, skb, &ciph);
+       cp = pp->conn_in_get(ipvs, AF_INET, skb, &ciph);
 
        if (!cp) {
                int v;
@@ -1648,7 +1648,7 @@ static int ip_vs_in_icmp_v6(struct sk_buff *skb, int *related,
        /* The embedded headers contain source and dest in reverse order
         * if not from localhost
         */
-       cp = pp->conn_in_get(AF_INET6, skb, &ciph);
+       cp = pp->conn_in_get(ipvs, AF_INET6, skb, &ciph);
 
        if (!cp) {
                int v;
@@ -1780,7 +1780,7 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af)
        /*
         * Check if the packet belongs to an existing connection entry
         */
-       cp = pp->conn_in_get(af, skb, &iph);
+       cp = pp->conn_in_get(ipvs, af, skb, &iph);
 
        conn_reuse_mode = sysctl_conn_reuse_mode(ipvs);
        if (conn_reuse_mode && !iph.fragoffs &&
index 406d9a433d929b50877c409b33da7f076d928fe7..a96d93d11807bf131322c632b92562f2bb549ec2 100644 (file)
@@ -56,12 +56,11 @@ ah_esp_conn_fill_param_proto(struct netns_ipvs *ipvs, int af,
 }
 
 static struct ip_vs_conn *
-ah_esp_conn_in_get(int af, const struct sk_buff *skb,
+ah_esp_conn_in_get(struct netns_ipvs *ipvs, int af, const struct sk_buff *skb,
                   const struct ip_vs_iphdr *iph)
 {
        struct ip_vs_conn *cp;
        struct ip_vs_conn_param p;
-       struct netns_ipvs *ipvs = net_ipvs(skb_net(skb));
 
        ah_esp_conn_fill_param_proto(ipvs, af, iph, &p);
        cp = ip_vs_conn_in_get(&p);