Skip to content

Commit

Permalink
udp: Clean up some functions.
Browse files Browse the repository at this point in the history
[ Upstream commit 919dfa0 ]

This patch adds no functional change and cleans up some functions
that the following patches touch around so that we make them tidy
and easy to review/revert.  The change is mainly to keep reverse
christmas tree order.

Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Stable-dep-of: 7a7160e ("net: Return errno in sk->sk_prot->get_port().")
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
q2ven authored and gregkh committed Dec 31, 2022
1 parent 53fc231 commit 073b50d
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 20 deletions.
39 changes: 23 additions & 16 deletions net/ipv4/udp.c
Original file line number Diff line number Diff line change
Expand Up @@ -232,16 +232,16 @@ static int udp_reuseport_add_sock(struct sock *sk, struct udp_hslot *hslot)
int udp_lib_get_port(struct sock *sk, unsigned short snum,
unsigned int hash2_nulladdr)
{
struct udp_hslot *hslot, *hslot2;
struct udp_table *udptable = sk->sk_prot->h.udp_table;
int error = 1;
struct udp_hslot *hslot, *hslot2;
struct net *net = sock_net(sk);
int error = 1;

if (!snum) {
DECLARE_BITMAP(bitmap, PORTS_PER_CHAIN);
unsigned short first, last;
int low, high, remaining;
unsigned int rand;
unsigned short first, last;
DECLARE_BITMAP(bitmap, PORTS_PER_CHAIN);

inet_get_local_port_range(net, &low, &high);
remaining = (high - low) + 1;
Expand Down Expand Up @@ -2518,10 +2518,13 @@ static struct sock *__udp4_lib_mcast_demux_lookup(struct net *net,
__be16 rmt_port, __be32 rmt_addr,
int dif, int sdif)
{
struct sock *sk, *result;
unsigned short hnum = ntohs(loc_port);
unsigned int slot = udp_hashfn(net, hnum, udp_table.mask);
struct udp_hslot *hslot = &udp_table.hash[slot];
struct sock *sk, *result;
struct udp_hslot *hslot;
unsigned int slot;

slot = udp_hashfn(net, hnum, udp_table.mask);
hslot = &udp_table.hash[slot];

/* Do not bother scanning a too big list */
if (hslot->count > 10)
Expand Down Expand Up @@ -2549,14 +2552,18 @@ static struct sock *__udp4_lib_demux_lookup(struct net *net,
__be16 rmt_port, __be32 rmt_addr,
int dif, int sdif)
{
unsigned short hnum = ntohs(loc_port);
unsigned int hash2 = ipv4_portaddr_hash(net, loc_addr, hnum);
unsigned int slot2 = hash2 & udp_table.mask;
struct udp_hslot *hslot2 = &udp_table.hash2[slot2];
INET_ADDR_COOKIE(acookie, rmt_addr, loc_addr);
const __portpair ports = INET_COMBINED_PORTS(rmt_port, hnum);
unsigned short hnum = ntohs(loc_port);
unsigned int hash2, slot2;
struct udp_hslot *hslot2;
__portpair ports;
struct sock *sk;

hash2 = ipv4_portaddr_hash(net, loc_addr, hnum);
slot2 = hash2 & udp_table.mask;
hslot2 = &udp_table.hash2[slot2];
ports = INET_COMBINED_PORTS(rmt_port, hnum);

udp_portaddr_for_each_entry_rcu(sk, &hslot2->head) {
if (inet_match(net, sk, acookie, ports, dif, sdif))
return sk;
Expand Down Expand Up @@ -2957,10 +2964,10 @@ EXPORT_SYMBOL(udp_prot);

static struct sock *udp_get_first(struct seq_file *seq, int start)
{
struct sock *sk;
struct udp_seq_afinfo *afinfo;
struct udp_iter_state *state = seq->private;
struct net *net = seq_file_net(seq);
struct udp_seq_afinfo *afinfo;
struct sock *sk;

if (state->bpf_seq_afinfo)
afinfo = state->bpf_seq_afinfo;
Expand Down Expand Up @@ -2991,9 +2998,9 @@ static struct sock *udp_get_first(struct seq_file *seq, int start)

static struct sock *udp_get_next(struct seq_file *seq, struct sock *sk)
{
struct udp_seq_afinfo *afinfo;
struct udp_iter_state *state = seq->private;
struct net *net = seq_file_net(seq);
struct udp_seq_afinfo *afinfo;

if (state->bpf_seq_afinfo)
afinfo = state->bpf_seq_afinfo;
Expand Down Expand Up @@ -3049,8 +3056,8 @@ EXPORT_SYMBOL(udp_seq_next);

void udp_seq_stop(struct seq_file *seq, void *v)
{
struct udp_seq_afinfo *afinfo;
struct udp_iter_state *state = seq->private;
struct udp_seq_afinfo *afinfo;

if (state->bpf_seq_afinfo)
afinfo = state->bpf_seq_afinfo;
Expand Down
12 changes: 8 additions & 4 deletions net/ipv6/udp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1063,12 +1063,16 @@ static struct sock *__udp6_lib_demux_lookup(struct net *net,
int dif, int sdif)
{
unsigned short hnum = ntohs(loc_port);
unsigned int hash2 = ipv6_portaddr_hash(net, loc_addr, hnum);
unsigned int slot2 = hash2 & udp_table.mask;
struct udp_hslot *hslot2 = &udp_table.hash2[slot2];
const __portpair ports = INET_COMBINED_PORTS(rmt_port, hnum);
unsigned int hash2, slot2;
struct udp_hslot *hslot2;
__portpair ports;
struct sock *sk;

hash2 = ipv6_portaddr_hash(net, loc_addr, hnum);
slot2 = hash2 & udp_table.mask;
hslot2 = &udp_table.hash2[slot2];
ports = INET_COMBINED_PORTS(rmt_port, hnum);

udp_portaddr_for_each_entry_rcu(sk, &hslot2->head) {
if (sk->sk_state == TCP_ESTABLISHED &&
inet6_match(net, sk, rmt_addr, loc_addr, ports, dif, sdif))
Expand Down

0 comments on commit 073b50d

Please sign in to comment.