From: Fred W. <fw...@us...> - 2006-01-24 04:40:43
|
Update of /cvsroot/linux-abi/linux-abi/linux-26/include/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2468/linux-26/include/net Modified Files: sock.h Log Message: linux-26: patch to 2.6.14, incl. audit syscalls Index: sock.h =================================================================== RCS file: /cvsroot/linux-abi/linux-abi/linux-26/include/net/sock.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** sock.h 24 Jan 2006 00:28:19 -0000 1.3 --- sock.h 24 Jan 2006 04:40:17 -0000 1.4 *************** *** 89,92 **** --- 89,93 ---- struct sock; + struct proto; /** *************** *** 99,106 **** * @skc_bind_node: bind hash linkage for various protocol lookup tables * @skc_refcnt: reference count * * This is the minimal network layer representation of sockets, the header ! * for struct sock and struct tcp_tw_bucket. ! */ struct sock_common { unsigned short skc_family; --- 100,109 ---- * @skc_bind_node: bind hash linkage for various protocol lookup tables * @skc_refcnt: reference count + * @skc_hash: hash value used with various protocol lookup tables + * @skc_prot: protocol handlers inside a network family * * This is the minimal network layer representation of sockets, the header ! * for struct sock and struct inet_timewait_sock. ! */ struct sock_common { unsigned short skc_family; *************** *** 111,119 **** struct hlist_node skc_bind_node; atomic_t skc_refcnt; }; /** * struct sock - network layer representation of sockets ! * @__sk_common: shared layout with tcp_tw_bucket * @sk_shutdown: mask of %SEND_SHUTDOWN and/or %RCV_SHUTDOWN * @sk_userlocks: %SO_SNDBUF and %SO_RCVBUF settings --- 114,124 ---- struct hlist_node skc_bind_node; atomic_t skc_refcnt; + unsigned int skc_hash; + struct proto *skc_prot; }; /** * struct sock - network layer representation of sockets ! * @__sk_common: shared layout with inet_timewait_sock * @sk_shutdown: mask of %SEND_SHUTDOWN and/or %RCV_SHUTDOWN * @sk_userlocks: %SO_SNDBUF and %SO_RCVBUF settings *************** *** 137,145 **** * @sk_route_caps: route capabilities (e.g. %NETIF_F_TSO) * @sk_lingertime: %SO_LINGER l_linger setting - * @sk_hashent: hash entry in several tables (e.g. tcp_ehash) * @sk_backlog: always used with the per-socket spinlock held * @sk_callback_lock: used with the callbacks in the end of this struct * @sk_error_queue: rarely used - * @sk_prot: protocol handlers inside a network family * @sk_prot_creator: sk_prot of original sock creator (see ipv6_setsockopt, IPV6_ADDRFORM for instance) * @sk_err: last error --- 142,148 ---- *************** *** 174,178 **** struct sock { /* ! * Now struct tcp_tw_bucket also uses sock_common, so please just * don't add nothing before this first member (__sk_common) --acme */ --- 177,181 ---- struct sock { /* ! * Now struct inet_timewait_sock also uses sock_common, so please just * don't add nothing before this first member (__sk_common) --acme */ *************** *** 185,188 **** --- 188,193 ---- #define sk_bind_node __sk_common.skc_bind_node #define sk_refcnt __sk_common.skc_refcnt + #define sk_hash __sk_common.skc_hash + #define sk_prot __sk_common.skc_prot unsigned char sk_shutdown : 2, sk_no_check : 2, *************** *** 206,210 **** int sk_sndbuf; int sk_route_caps; - int sk_hashent; unsigned long sk_flags; unsigned long sk_lingertime; --- 211,214 ---- *************** *** 219,223 **** } sk_backlog; struct sk_buff_head sk_error_queue; - struct proto *sk_prot; struct proto *sk_prot_creator; rwlock_t sk_callback_lock; --- 223,226 ---- *************** *** 254,268 **** * Hashed lists helper routines */ ! static inline struct sock *__sk_head(struct hlist_head *head) { return hlist_entry(head->first, struct sock, sk_node); } ! static inline struct sock *sk_head(struct hlist_head *head) { return hlist_empty(head) ? NULL : __sk_head(head); } ! static inline struct sock *sk_next(struct sock *sk) { return sk->sk_node.next ? --- 257,271 ---- * Hashed lists helper routines */ ! static inline struct sock *__sk_head(const struct hlist_head *head) { return hlist_entry(head->first, struct sock, sk_node); } ! static inline struct sock *sk_head(const struct hlist_head *head) { return hlist_empty(head) ? NULL : __sk_head(head); } ! static inline struct sock *sk_next(const struct sock *sk) { return sk->sk_node.next ? *************** *** 270,279 **** } ! static inline int sk_unhashed(struct sock *sk) { return hlist_unhashed(&sk->sk_node); } ! static inline int sk_hashed(struct sock *sk) { return sk->sk_node.pprev != NULL; --- 273,282 ---- } ! static inline int sk_unhashed(const struct sock *sk) { return hlist_unhashed(&sk->sk_node); } ! static inline int sk_hashed(const struct sock *sk) { return sk->sk_node.pprev != NULL; *************** *** 376,380 **** SOCK_BROADCAST, SOCK_TIMESTAMP, - SOCK_BSDISM, SOCK_ZAPPED, SOCK_USE_WRITE_QUEUE, /* whether to call sk->sk_write_space in sock_wfree */ --- 379,382 ---- *************** *** 384,389 **** --- 386,397 ---- SOCK_LOCALROUTE, /* route locally only, %SO_DONTROUTE setting */ SOCK_QUEUE_SHRUNK, /* write queue has been shrunk recently */ + SOCK_BSDISM, }; + static inline void sock_copy_flags(struct sock *nsk, struct sock *osk) + { + nsk->sk_flags = osk->sk_flags; + } + static inline void sock_set_flag(struct sock *sk, enum sock_flags flag) { *************** *** 486,489 **** --- 494,499 ---- extern int sk_wait_data(struct sock *sk, long *timeo); + struct request_sock_ops; + /* Networking protocol blocks we attach to sockets. * socket layer -> transport layer interface *************** *** 549,552 **** --- 559,568 ---- unsigned int obj_size; + kmem_cache_t *twsk_slab; + unsigned int twsk_obj_size; + atomic_t *orphan_count; + + struct request_sock_ops *rsk_prot; + struct module *owner; *************** *** 554,558 **** struct list_head node; ! struct { int inuse; --- 570,576 ---- struct list_head node; ! #ifdef SOCK_REFCNT_DEBUG ! atomic_t socks; ! #endif struct { int inuse; *************** *** 564,567 **** --- 582,610 ---- extern void proto_unregister(struct proto *prot); + #ifdef SOCK_REFCNT_DEBUG + static inline void sk_refcnt_debug_inc(struct sock *sk) + { + atomic_inc(&sk->sk_prot->socks); + } + + static inline void sk_refcnt_debug_dec(struct sock *sk) + { + atomic_dec(&sk->sk_prot->socks); + printk(KERN_DEBUG "%s socket %p released, %d are still alive\n", + sk->sk_prot->name, sk, atomic_read(&sk->sk_prot->socks)); + } + + static inline void sk_refcnt_debug_release(const struct sock *sk) + { + if (atomic_read(&sk->sk_refcnt) != 1) + printk(KERN_DEBUG "Destruction of the %s socket %p delayed, refcnt=%d\n", + sk->sk_prot->name, sk, atomic_read(&sk->sk_refcnt)); + } + #else /* SOCK_REFCNT_DEBUG */ + #define sk_refcnt_debug_inc(sk) do { } while (0) + #define sk_refcnt_debug_dec(sk) do { } while (0) + #define sk_refcnt_debug_release(sk) do { } while (0) + #endif /* SOCK_REFCNT_DEBUG */ + /* Called with local bh disabled */ static __inline__ void sock_prot_inc_use(struct proto *prot) *************** *** 575,578 **** --- 618,630 ---- } + /* With per-bucket locks this operation is not-atomic, so that + * this version is not worse. + */ + static inline void __sk_prot_rehash(struct sock *sk) + { + sk->sk_prot->unhash(sk); + sk->sk_prot->hash(sk); + } + /* About 10 seconds */ #define SOCK_DESTROY_TIME (10*HZ) *************** *** 660,663 **** --- 712,721 ---- } + static inline int sk_stream_wmem_schedule(struct sock *sk, int size) + { + return size <= sk->sk_forward_alloc || + sk_stream_mem_schedule(sk, size, 0); + } + /* Used by processes to "lock" a socket state, so that * interrupts and bottom half handlers won't change it *************** *** 682,695 **** #define bh_unlock_sock(__sk) spin_unlock(&((__sk)->sk_lock.slock)) ! extern struct sock *sk_alloc(int family, int priority, struct proto *prot, int zero_it); extern void sk_free(struct sock *sk); extern struct sk_buff *sock_wmalloc(struct sock *sk, unsigned long size, int force, ! int priority); extern struct sk_buff *sock_rmalloc(struct sock *sk, unsigned long size, int force, ! int priority); extern void sock_wfree(struct sk_buff *skb); extern void sock_rfree(struct sk_buff *skb); --- 740,756 ---- #define bh_unlock_sock(__sk) spin_unlock(&((__sk)->sk_lock.slock)) ! extern struct sock *sk_alloc(int family, ! gfp_t priority, struct proto *prot, int zero_it); extern void sk_free(struct sock *sk); + extern struct sock *sk_clone(const struct sock *sk, + const gfp_t priority); extern struct sk_buff *sock_wmalloc(struct sock *sk, unsigned long size, int force, ! gfp_t priority); extern struct sk_buff *sock_rmalloc(struct sock *sk, unsigned long size, int force, ! gfp_t priority); extern void sock_wfree(struct sk_buff *skb); extern void sock_rfree(struct sk_buff *skb); *************** *** 706,710 **** int noblock, int *errcode); ! extern void *sock_kmalloc(struct sock *sk, int size, int priority); extern void sock_kfree_s(struct sock *sk, void *mem, int size); extern void sk_send_sigurg(struct sock *sk); --- 767,772 ---- int noblock, int *errcode); ! extern void *sock_kmalloc(struct sock *sk, int size, ! gfp_t priority); extern void sock_kfree_s(struct sock *sk, void *mem, int size); extern void sk_send_sigurg(struct sock *sk); *************** *** 977,980 **** --- 1039,1052 ---- } + static inline void sk_setup_caps(struct sock *sk, struct dst_entry *dst) + { + __sk_dst_set(sk, dst); + sk->sk_route_caps = dst->dev->features; + if (sk->sk_route_caps & NETIF_F_TSO) { + if (sock_flag(sk, SOCK_NO_LARGESEND) || dst->header_len) + sk->sk_route_caps &= ~NETIF_F_TSO; + } + } + static inline void sk_charge_skb(struct sock *sk, struct sk_buff *skb) { *************** *** 1130,1142 **** static inline struct sk_buff *sk_stream_alloc_pskb(struct sock *sk, ! int size, int mem, int gfp) { ! struct sk_buff *skb = alloc_skb(size + sk->sk_prot->max_header, gfp); if (skb) { skb->truesize += mem; ! if (sk->sk_forward_alloc >= (int)skb->truesize || ! sk_stream_mem_schedule(sk, skb->truesize, 0)) { ! skb_reserve(skb, sk->sk_prot->max_header); return skb; } --- 1202,1217 ---- static inline struct sk_buff *sk_stream_alloc_pskb(struct sock *sk, ! int size, int mem, ! gfp_t gfp) { ! struct sk_buff *skb; ! int hdr_len; + hdr_len = SKB_DATA_ALIGN(sk->sk_prot->max_header); + skb = alloc_skb_fclone(size + hdr_len, gfp); if (skb) { skb->truesize += mem; ! if (sk_stream_wmem_schedule(sk, skb->truesize)) { ! skb_reserve(skb, hdr_len); return skb; } *************** *** 1150,1154 **** static inline struct sk_buff *sk_stream_alloc_skb(struct sock *sk, ! int size, int gfp) { return sk_stream_alloc_pskb(sk, size, 0, gfp); --- 1225,1230 ---- static inline struct sk_buff *sk_stream_alloc_skb(struct sock *sk, ! int size, ! gfp_t gfp) { return sk_stream_alloc_pskb(sk, size, 0, gfp); *************** *** 1159,1166 **** struct page *page = NULL; ! if (sk->sk_forward_alloc >= (int)PAGE_SIZE || ! sk_stream_mem_schedule(sk, PAGE_SIZE, 0)) ! page = alloc_pages(sk->sk_allocation, 0); ! else { sk->sk_prot->enter_memory_pressure(); sk_stream_moderate_sndbuf(sk); --- 1235,1240 ---- struct page *page = NULL; ! page = alloc_pages(sk->sk_allocation, 0); ! if (!page) { sk->sk_prot->enter_memory_pressure(); sk_stream_moderate_sndbuf(sk); *************** *** 1183,1187 **** } ! static inline int gfp_any(void) { return in_softirq() ? GFP_ATOMIC : GFP_KERNEL; --- 1257,1261 ---- } ! static inline gfp_t gfp_any(void) { return in_softirq() ? GFP_ATOMIC : GFP_KERNEL; *************** *** 1214,1227 **** sock_recv_timestamp(struct msghdr *msg, struct sock *sk, struct sk_buff *skb) { ! struct timeval *stamp = &skb->stamp; if (sock_flag(sk, SOCK_RCVTSTAMP)) { /* Race occurred between timestamp enabling and packet receiving. Fill in the current time for now. */ ! if (stamp->tv_sec == 0) ! do_gettimeofday(stamp); put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP, sizeof(struct timeval), ! stamp); } else ! sk->sk_stamp = *stamp; } --- 1288,1304 ---- sock_recv_timestamp(struct msghdr *msg, struct sock *sk, struct sk_buff *skb) { ! struct timeval stamp; ! ! skb_get_timestamp(skb, &stamp); if (sock_flag(sk, SOCK_RCVTSTAMP)) { /* Race occurred between timestamp enabling and packet receiving. Fill in the current time for now. */ ! if (stamp.tv_sec == 0) ! do_gettimeofday(&stamp); ! skb_set_timestamp(skb, &stamp); put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP, sizeof(struct timeval), ! &stamp); } else ! sk->sk_stamp = stamp; } *************** *** 1248,1256 **** #if 0 ! #define NETDEBUG(x) do { } while (0) ! #define LIMIT_NETDEBUG(x) do {} while(0) #else ! #define NETDEBUG(x) do { x; } while (0) ! #define LIMIT_NETDEBUG(x) do { if (net_ratelimit()) { x; } } while(0) #endif --- 1325,1333 ---- #if 0 ! #define NETDEBUG(fmt, args...) do { } while (0) ! #define LIMIT_NETDEBUG(fmt, args...) do { } while(0) #else ! #define NETDEBUG(fmt, args...) printk(fmt,##args) ! #define LIMIT_NETDEBUG(fmt, args...) do { if (net_ratelimit()) printk(fmt,##args); } while(0) #endif *************** *** 1299,1301 **** --- 1376,1389 ---- #endif + extern void sk_init(void); + + #ifdef CONFIG_SYSCTL + extern struct ctl_table core_table[]; + #endif + + extern int sysctl_optmem_max; + + extern __u32 sysctl_wmem_default; + extern __u32 sysctl_rmem_default; + #endif /* _SOCK_H */ |