|
@@ -143,18 +143,17 @@ static inline int __udp_lib_lport_inuse(struct net *net, __u16 num,
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * __udp_lib_get_port - UDP/-Lite port lookup for IPv4 and IPv6
|
|
|
+ * udp_lib_get_port - UDP/-Lite port lookup for IPv4 and IPv6
|
|
|
*
|
|
|
* @sk: socket struct in question
|
|
|
* @snum: port number to look up
|
|
|
- * @udptable: hash list table, must be of UDP_HTABLE_SIZE
|
|
|
* @saddr_comp: AF-dependent comparison of bound local IP addresses
|
|
|
*/
|
|
|
-int __udp_lib_get_port(struct sock *sk, unsigned short snum,
|
|
|
- struct hlist_head udptable[],
|
|
|
+int udp_lib_get_port(struct sock *sk, unsigned short snum,
|
|
|
int (*saddr_comp)(const struct sock *sk1,
|
|
|
const struct sock *sk2 ) )
|
|
|
{
|
|
|
+ struct hlist_head *udptable = sk->sk_prot->h.udp_hash;
|
|
|
struct hlist_node *node;
|
|
|
struct hlist_head *head;
|
|
|
struct sock *sk2;
|
|
@@ -240,13 +239,7 @@ fail:
|
|
|
return error;
|
|
|
}
|
|
|
|
|
|
-int udp_get_port(struct sock *sk, unsigned short snum,
|
|
|
- int (*scmp)(const struct sock *, const struct sock *))
|
|
|
-{
|
|
|
- return __udp_lib_get_port(sk, snum, udp_hash, scmp);
|
|
|
-}
|
|
|
-
|
|
|
-int ipv4_rcv_saddr_equal(const struct sock *sk1, const struct sock *sk2)
|
|
|
+static int ipv4_rcv_saddr_equal(const struct sock *sk1, const struct sock *sk2)
|
|
|
{
|
|
|
struct inet_sock *inet1 = inet_sk(sk1), *inet2 = inet_sk(sk2);
|
|
|
|
|
@@ -255,9 +248,9 @@ int ipv4_rcv_saddr_equal(const struct sock *sk1, const struct sock *sk2)
|
|
|
inet1->rcv_saddr == inet2->rcv_saddr ));
|
|
|
}
|
|
|
|
|
|
-static inline int udp_v4_get_port(struct sock *sk, unsigned short snum)
|
|
|
+int udp_v4_get_port(struct sock *sk, unsigned short snum)
|
|
|
{
|
|
|
- return udp_get_port(sk, snum, ipv4_rcv_saddr_equal);
|
|
|
+ return udp_lib_get_port(sk, snum, ipv4_rcv_saddr_equal);
|
|
|
}
|
|
|
|
|
|
/* UDP is nearly always wildcards out the wazoo, it makes no sense to try
|
|
@@ -1498,6 +1491,7 @@ struct proto udp_prot = {
|
|
|
.sysctl_wmem = &sysctl_udp_wmem_min,
|
|
|
.sysctl_rmem = &sysctl_udp_rmem_min,
|
|
|
.obj_size = sizeof(struct udp_sock),
|
|
|
+ .h.udp_hash = udp_hash,
|
|
|
#ifdef CONFIG_COMPAT
|
|
|
.compat_setsockopt = compat_udp_setsockopt,
|
|
|
.compat_getsockopt = compat_udp_getsockopt,
|
|
@@ -1741,12 +1735,12 @@ EXPORT_SYMBOL(udp_disconnect);
|
|
|
EXPORT_SYMBOL(udp_hash);
|
|
|
EXPORT_SYMBOL(udp_hash_lock);
|
|
|
EXPORT_SYMBOL(udp_ioctl);
|
|
|
-EXPORT_SYMBOL(udp_get_port);
|
|
|
EXPORT_SYMBOL(udp_prot);
|
|
|
EXPORT_SYMBOL(udp_sendmsg);
|
|
|
EXPORT_SYMBOL(udp_lib_getsockopt);
|
|
|
EXPORT_SYMBOL(udp_lib_setsockopt);
|
|
|
EXPORT_SYMBOL(udp_poll);
|
|
|
+EXPORT_SYMBOL(udp_lib_get_port);
|
|
|
|
|
|
#ifdef CONFIG_PROC_FS
|
|
|
EXPORT_SYMBOL(udp_proc_register);
|