Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e3163493 authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by David S. Miller
Browse files

udp: provide a struct net pointer for __udp[46]_lib_mcast_deliver



They both calculate the hash chain, but currently do not have
a struct net pointer, so pass one there via additional argument,
all the more so their callers already have such.

Signed-off-by: default avatarPavel Emelyanov <xemul@openvz.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d6266281
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -1059,7 +1059,7 @@ int udp_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
 *	Note: called only from the BH handler context,
 *	so we don't need to lock the hashes.
 */
static int __udp4_lib_mcast_deliver(struct sk_buff *skb,
static int __udp4_lib_mcast_deliver(struct net *net, struct sk_buff *skb,
				    struct udphdr  *uh,
				    __be32 saddr, __be32 daddr,
				    struct hlist_head udptable[])
@@ -1156,6 +1156,7 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[],
	struct rtable *rt = (struct rtable*)skb->dst;
	__be32 saddr = ip_hdr(skb)->saddr;
	__be32 daddr = ip_hdr(skb)->daddr;
	struct net *net;

	/*
	 *  Validate the packet.
@@ -1177,10 +1178,12 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[],
	if (udp4_csum_init(skb, uh, proto))
		goto csum_error;

	net = dev_net(skb->dev);
	if (rt->rt_flags & (RTCF_BROADCAST|RTCF_MULTICAST))
		return __udp4_lib_mcast_deliver(skb, uh, saddr, daddr, udptable);
		return __udp4_lib_mcast_deliver(net, skb, uh,
				saddr, daddr, udptable);

	sk = __udp4_lib_lookup(dev_net(skb->dev), saddr, uh->source, daddr,
	sk = __udp4_lib_lookup(net, saddr, uh->source, daddr,
			uh->dest, inet_iif(skb), udptable);

	if (sk != NULL) {
+8 −4
Original line number Diff line number Diff line
@@ -353,8 +353,9 @@ static struct sock *udp_v6_mcast_next(struct sock *sk,
 * Note: called only from the BH handler context,
 * so we don't need to lock the hashes.
 */
static int __udp6_lib_mcast_deliver(struct sk_buff *skb, struct in6_addr *saddr,
			   struct in6_addr *daddr, struct hlist_head udptable[])
static int __udp6_lib_mcast_deliver(struct net *net, struct sk_buff *skb,
		struct in6_addr *saddr, struct in6_addr *daddr,
		struct hlist_head udptable[])
{
	struct sock *sk, *sk2;
	const struct udphdr *uh = udp_hdr(skb);
@@ -435,6 +436,7 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[],
	struct net_device *dev = skb->dev;
	struct in6_addr *saddr, *daddr;
	u32 ulen = 0;
	struct net *net;

	if (!pskb_may_pull(skb, sizeof(struct udphdr)))
		goto short_packet;
@@ -469,11 +471,13 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[],
	if (udp6_csum_init(skb, uh, proto))
		goto discard;

	net = dev_net(skb->dev);
	/*
	 *	Multicast receive code
	 */
	if (ipv6_addr_is_multicast(daddr))
		return __udp6_lib_mcast_deliver(skb, saddr, daddr, udptable);
		return __udp6_lib_mcast_deliver(net, skb,
				saddr, daddr, udptable);

	/* Unicast */

@@ -481,7 +485,7 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct hlist_head udptable[],
	 * check socket cache ... must talk to Alan about his plans
	 * for sock caches... i'll skip this for now.
	 */
	sk = __udp6_lib_lookup(dev_net(skb->dev), saddr, uh->source,
	sk = __udp6_lib_lookup(net, saddr, uh->source,
			       daddr, uh->dest, inet6_iif(skb), udptable);

	if (sk == NULL) {