inet: Add ip_make_skb and ip_finish_skb
This patch adds the helper ip_make_skb which is like ip_append_data and ip_push_pending_frames all rolled into one, except that it does not send the skb produced. The sending part is carried out by ip_send_skb, which the transport protocol can call after it has tweaked the skb. It is meant to be called in cases where corking is not used should have a one-to-one correspondence to sendmsg. This patch also adds the helper ip_finish_skb which is meant to be replace ip_push_pending_frames when corking is required. Previously the protocol stack would peek at the socket write queue and add its header to the first packet. With ip_finish_skb, the protocol stack can directly operate on the final skb instead, just like the non-corking case with ip_make_skb. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Acked-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
1470ddf7f8
commit
1c32c5ad6f
@ -116,8 +116,24 @@ extern int ip_append_data(struct sock *sk,
|
||||
extern int ip_generic_getfrag(void *from, char *to, int offset, int len, int odd, struct sk_buff *skb);
|
||||
extern ssize_t ip_append_page(struct sock *sk, struct page *page,
|
||||
int offset, size_t size, int flags);
|
||||
extern struct sk_buff *__ip_make_skb(struct sock *sk,
|
||||
struct sk_buff_head *queue,
|
||||
struct inet_cork *cork);
|
||||
extern int ip_send_skb(struct sk_buff *skb);
|
||||
extern int ip_push_pending_frames(struct sock *sk);
|
||||
extern void ip_flush_pending_frames(struct sock *sk);
|
||||
extern struct sk_buff *ip_make_skb(struct sock *sk,
|
||||
int getfrag(void *from, char *to, int offset, int len,
|
||||
int odd, struct sk_buff *skb),
|
||||
void *from, int length, int transhdrlen,
|
||||
struct ipcm_cookie *ipc,
|
||||
struct rtable **rtp,
|
||||
unsigned int flags);
|
||||
|
||||
static inline struct sk_buff *ip_finish_skb(struct sock *sk)
|
||||
{
|
||||
return __ip_make_skb(sk, &sk->sk_write_queue, &inet_sk(sk)->cork);
|
||||
}
|
||||
|
||||
/* datagram.c */
|
||||
extern int ip4_datagram_connect(struct sock *sk,
|
||||
|
Reference in New Issue
Block a user