mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-15 15:04:27 +08:00
fc038410b4
__udp_lib_port_inuse() cannot make direct references to inet_sk(sk)->rcv_saddr as that is ipv4 specific state and this code is used by ipv6 too. Use an operations vector to solve this, and this also paves the way for ipv6 support for non-wild saddr hashing in UDP. Signed-off-by: David S. Miller <davem@davemloft.net>
39 lines
1.5 KiB
C
39 lines
1.5 KiB
C
#ifndef _UDP4_IMPL_H
|
|
#define _UDP4_IMPL_H
|
|
#include <net/udp.h>
|
|
#include <net/udplite.h>
|
|
#include <net/protocol.h>
|
|
#include <net/inet_common.h>
|
|
|
|
extern const struct udp_get_port_ops udp_ipv4_ops;
|
|
|
|
extern int __udp4_lib_rcv(struct sk_buff *, struct hlist_head [], int );
|
|
extern void __udp4_lib_err(struct sk_buff *, u32, struct hlist_head []);
|
|
|
|
extern int __udp_lib_get_port(struct sock *sk, unsigned short snum,
|
|
struct hlist_head udptable[], int *port_rover,
|
|
const struct udp_get_port_ops *ops);
|
|
|
|
extern int udp_setsockopt(struct sock *sk, int level, int optname,
|
|
char __user *optval, int optlen);
|
|
extern int udp_getsockopt(struct sock *sk, int level, int optname,
|
|
char __user *optval, int __user *optlen);
|
|
|
|
#ifdef CONFIG_COMPAT
|
|
extern int compat_udp_setsockopt(struct sock *sk, int level, int optname,
|
|
char __user *optval, int optlen);
|
|
extern int compat_udp_getsockopt(struct sock *sk, int level, int optname,
|
|
char __user *optval, int __user *optlen);
|
|
#endif
|
|
extern int udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
|
size_t len, int noblock, int flags, int *addr_len);
|
|
extern int udp_sendpage(struct sock *sk, struct page *page, int offset,
|
|
size_t size, int flags);
|
|
extern int udp_queue_rcv_skb(struct sock * sk, struct sk_buff *skb);
|
|
extern int udp_destroy_sock(struct sock *sk);
|
|
|
|
#ifdef CONFIG_PROC_FS
|
|
extern int udp4_seq_show(struct seq_file *seq, void *v);
|
|
#endif
|
|
#endif /* _UDP4_IMPL_H */
|