udp: Access &udp_table via net.
[platform/kernel/linux-rpi.git] / net / ipv6 / udp.c
index c3dee1f..9fb2f33 100644 (file)
@@ -217,7 +217,7 @@ static inline struct sock *udp6_lookup_run_bpf(struct net *net,
        struct sock *sk, *reuse_sk;
        bool no_reuseport;
 
-       if (udptable != &udp_table)
+       if (udptable != net->ipv4.udp_table)
                return NULL; /* only UDP is supported */
 
        no_reuseport = bpf_sk_lookup_run_v6(net, IPPROTO_UDP, saddr, sport,
@@ -298,10 +298,11 @@ struct sock *udp6_lib_lookup_skb(const struct sk_buff *skb,
                                 __be16 sport, __be16 dport)
 {
        const struct ipv6hdr *iph = ipv6_hdr(skb);
+       struct net *net = dev_net(skb->dev);
 
-       return __udp6_lib_lookup(dev_net(skb->dev), &iph->saddr, sport,
+       return __udp6_lib_lookup(net, &iph->saddr, sport,
                                 &iph->daddr, dport, inet6_iif(skb),
-                                inet6_sdif(skb), &udp_table, NULL);
+                                inet6_sdif(skb), net->ipv4.udp_table, NULL);
 }
 
 /* Must be called under rcu_read_lock().
@@ -314,7 +315,7 @@ struct sock *udp6_lib_lookup(struct net *net, const struct in6_addr *saddr, __be
        struct sock *sk;
 
        sk =  __udp6_lib_lookup(net, saddr, sport, daddr, dport,
-                               dif, 0, &udp_table, NULL);
+                               dif, 0, net->ipv4.udp_table, NULL);
        if (sk && !refcount_inc_not_zero(&sk->sk_refcnt))
                sk = NULL;
        return sk;
@@ -689,7 +690,8 @@ static __inline__ int udpv6_err(struct sk_buff *skb,
                                struct inet6_skb_parm *opt, u8 type,
                                u8 code, int offset, __be32 info)
 {
-       return __udp6_lib_err(skb, opt, type, code, offset, info, &udp_table);
+       return __udp6_lib_err(skb, opt, type, code, offset, info,
+                             dev_net(skb->dev)->ipv4.udp_table);
 }
 
 static int udpv6_queue_rcv_one_skb(struct sock *sk, struct sk_buff *skb)
@@ -1063,6 +1065,7 @@ static struct sock *__udp6_lib_demux_lookup(struct net *net,
                        __be16 rmt_port, const struct in6_addr *rmt_addr,
                        int dif, int sdif)
 {
+       struct udp_table *udptable = net->ipv4.udp_table;
        unsigned short hnum = ntohs(loc_port);
        unsigned int hash2, slot2;
        struct udp_hslot *hslot2;
@@ -1070,8 +1073,8 @@ static struct sock *__udp6_lib_demux_lookup(struct net *net,
        struct sock *sk;
 
        hash2 = ipv6_portaddr_hash(net, loc_addr, hnum);
-       slot2 = hash2 & udp_table.mask;
-       hslot2 = &udp_table.hash2[slot2];
+       slot2 = hash2 & udptable->mask;
+       hslot2 = &udptable->hash2[slot2];
        ports = INET_COMBINED_PORTS(rmt_port, hnum);
 
        udp_portaddr_for_each_entry_rcu(sk, &hslot2->head) {
@@ -1127,7 +1130,7 @@ void udp_v6_early_demux(struct sk_buff *skb)
 
 INDIRECT_CALLABLE_SCOPE int udpv6_rcv(struct sk_buff *skb)
 {
-       return __udp6_lib_rcv(skb, &udp_table, IPPROTO_UDP);
+       return __udp6_lib_rcv(skb, dev_net(skb->dev)->ipv4.udp_table, IPPROTO_UDP);
 }
 
 /*