net ipv4: Convert ipv4.ip_local_port_range to be per netns v3
- Move sysctl_local_ports from a global variable into struct netns_ipv4. - Modify inet_get_local_port_range to take a struct net, and update all of the callers. - Move the initialization of sysctl_local_ports into sysctl_net_ipv4.c:ipv4_sysctl_init_net from inet_connection_sock.c v2: - Ensure indentation used tabs - Fixed ip.h so it applies cleanly to todays net-next v3: - Compile fixes of strange callers of inet_get_local_port_range. This patch now successfully passes an allmodconfig build. Removed manual inlining of inet_get_local_port_range in ipv4_local_port_range Originally-by: Samya <samya@twitter.com> Acked-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
56d7b53f47
commit
0bbf87d852
@@ -29,27 +29,19 @@ const char inet_csk_timer_bug_msg[] = "inet_csk BUG: unknown timer value\n";
|
||||
EXPORT_SYMBOL(inet_csk_timer_bug_msg);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This struct holds the first and last local port number.
|
||||
*/
|
||||
struct local_ports sysctl_local_ports __read_mostly = {
|
||||
.lock = __SEQLOCK_UNLOCKED(sysctl_local_ports.lock),
|
||||
.range = { 32768, 61000 },
|
||||
};
|
||||
|
||||
unsigned long *sysctl_local_reserved_ports;
|
||||
EXPORT_SYMBOL(sysctl_local_reserved_ports);
|
||||
|
||||
void inet_get_local_port_range(int *low, int *high)
|
||||
void inet_get_local_port_range(struct net *net, int *low, int *high)
|
||||
{
|
||||
unsigned int seq;
|
||||
|
||||
do {
|
||||
seq = read_seqbegin(&sysctl_local_ports.lock);
|
||||
seq = read_seqbegin(&net->ipv4.sysctl_local_ports.lock);
|
||||
|
||||
*low = sysctl_local_ports.range[0];
|
||||
*high = sysctl_local_ports.range[1];
|
||||
} while (read_seqretry(&sysctl_local_ports.lock, seq));
|
||||
*low = net->ipv4.sysctl_local_ports.range[0];
|
||||
*high = net->ipv4.sysctl_local_ports.range[1];
|
||||
} while (read_seqretry(&net->ipv4.sysctl_local_ports.lock, seq));
|
||||
}
|
||||
EXPORT_SYMBOL(inet_get_local_port_range);
|
||||
|
||||
@@ -116,7 +108,7 @@ int inet_csk_get_port(struct sock *sk, unsigned short snum)
|
||||
int remaining, rover, low, high;
|
||||
|
||||
again:
|
||||
inet_get_local_port_range(&low, &high);
|
||||
inet_get_local_port_range(net, &low, &high);
|
||||
remaining = (high - low) + 1;
|
||||
smallest_rover = rover = net_random() % remaining + low;
|
||||
|
||||
|
Reference in New Issue
Block a user