diff options
Diffstat (limited to 'pfinet/linux-src/net/ipv4/udp.c')
-rw-r--r-- | pfinet/linux-src/net/ipv4/udp.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/pfinet/linux-src/net/ipv4/udp.c b/pfinet/linux-src/net/ipv4/udp.c index f9be2e04..ff5812a9 100644 --- a/pfinet/linux-src/net/ipv4/udp.c +++ b/pfinet/linux-src/net/ipv4/udp.c @@ -127,20 +127,16 @@ struct udp_mib udp_statistics; struct sock *udp_hash[UDP_HTABLE_SIZE]; -/* Shared by v4/v6 udp. */ -int udp_port_rover = 0; - static int udp_v4_get_port(struct sock *sk, unsigned short snum) { SOCKHASH_LOCK(); if (snum == 0) { + int low = sysctl_local_port_range[0]; + int high = sysctl_local_port_range[1]; int best_size_so_far, best, result, i; - if (udp_port_rover > sysctl_local_port_range[1] || - udp_port_rover < sysctl_local_port_range[0]) - udp_port_rover = sysctl_local_port_range[0]; best_size_so_far = 32767; - best = result = udp_port_rover; + best = result = net_random() % (high - low) + low; for (i = 0; i < UDP_HTABLE_SIZE; i++, result++) { struct sock *sk; int size; @@ -173,7 +169,7 @@ static int udp_v4_get_port(struct sock *sk, unsigned short snum) break; } gotit: - udp_port_rover = snum = result; + snum = result; } else { struct sock *sk2; |