On 07/28/2017 04:22 PM, Tom Herbert wrote:
> Add skb_send_sock to send an skbuff on a socket within the kernel.
> Arguments include an offset so that an skbuf might be sent in mulitple
> calls (e.g. send buffer limit is hit).
> 
> Signed-off-by: Tom Herbert <t...@quantonium.net>
> ---

[...]

> +/* Send skb data on a socket. Socket must be locked. */
> +int skb_send_sock_locked(struct sock *sk, struct sk_buff *skb, int offset,
> +                      int len)
> +{
> +     unsigned int orig_len = len;
> +     struct sk_buff *head = skb;
> +     unsigned short fragidx;
> +     int slen, ret;
> +
> +do_frag_list:
> +
> +     /* Deal with head data */
> +     while (offset < skb_headlen(skb) && len) {
> +             struct kvec kv;
> +             struct msghdr msg;
> +
> +             slen = min_t(int, len, skb_headlen(skb) - offset);
> +             kv.iov_base = skb->data + offset;
> +             kv.iov_len = len;
                            ^^^^^^

This should be slen right?

> +             memset(&msg, 0, sizeof(msg));
> +
> +             ret = kernel_sendmsg_locked(sk, &msg, &kv, 1, slen);
> +             if (ret <= 0)
> +                     goto error;
> +
> +             offset += ret;
> +             len -= ret;
> +     }
> +

Thanks,
John

Reply via email to