diff options
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/geneve.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/net/ipv4/geneve.c b/net/ipv4/geneve.c index 4fe5a592821c..5b52046ec7a2 100644 --- a/net/ipv4/geneve.c +++ b/net/ipv4/geneve.c | |||
@@ -65,14 +65,15 @@ static inline struct genevehdr *geneve_hdr(const struct sk_buff *skb) | |||
65 | return (struct genevehdr *)(udp_hdr(skb) + 1); | 65 | return (struct genevehdr *)(udp_hdr(skb) + 1); |
66 | } | 66 | } |
67 | 67 | ||
68 | /* Find geneve socket based on network namespace and UDP port */ | 68 | static struct geneve_sock *geneve_find_sock(struct net *net, |
69 | static struct geneve_sock *geneve_find_sock(struct net *net, __be16 port) | 69 | sa_family_t family, __be16 port) |
70 | { | 70 | { |
71 | struct geneve_net *gn = net_generic(net, geneve_net_id); | 71 | struct geneve_net *gn = net_generic(net, geneve_net_id); |
72 | struct geneve_sock *gs; | 72 | struct geneve_sock *gs; |
73 | 73 | ||
74 | list_for_each_entry(gs, &gn->sock_list, list) { | 74 | list_for_each_entry(gs, &gn->sock_list, list) { |
75 | if (inet_sk(gs->sock->sk)->inet_sport == port) | 75 | if (inet_sk(gs->sock->sk)->inet_sport == port && |
76 | inet_sk(gs->sock->sk)->sk.sk_family == family) | ||
76 | return gs; | 77 | return gs; |
77 | } | 78 | } |
78 | 79 | ||
@@ -375,7 +376,7 @@ struct geneve_sock *geneve_sock_add(struct net *net, __be16 port, | |||
375 | 376 | ||
376 | mutex_lock(&geneve_mutex); | 377 | mutex_lock(&geneve_mutex); |
377 | 378 | ||
378 | gs = geneve_find_sock(net, port); | 379 | gs = geneve_find_sock(net, ipv6 ? AF_INET6 : AF_INET, port); |
379 | if (gs) { | 380 | if (gs) { |
380 | if (!no_share && gs->rcv == rcv) | 381 | if (!no_share && gs->rcv == rcv) |
381 | gs->refcnt++; | 382 | gs->refcnt++; |