aboutsummaryrefslogtreecommitdiff
path: root/pfinet/linux-src/net/ipv4/udp.c
diff options
context:
space:
mode:
Diffstat (limited to 'pfinet/linux-src/net/ipv4/udp.c')
-rw-r--r--pfinet/linux-src/net/ipv4/udp.c12
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;