unsigned char *data = skb_put(skb, user_data_len); int err = 0; skb->csum = csum_and_copy_from_user(user_pointer, data, user_data_len, 0, &err); if (err) goto user_fault;
This is what a new SKB looks like right after the user datais added.
skb_put() advances 'skb->tail' by the specified number ofbytes, it also increments 'skb->len' by that number of bytes as well.This routine must not be called on a SKB that has any paged data.You must also be sure that there is enough tail room in the SKB forthe amount of bytes you are trying to put. Both of these conditionsare checked for by skb_put() and an assertion failure willtrigger if either rule is violated.
The computed checksum is remembered in 'skb->csum'. Now, it's time tobuild the protocol headers. We'll build a UDP header, then one forIPV4.