|
@@ -1087,9 +1087,11 @@ static inline int ip6_ufo_append_data(struct sock *sk,
|
|
if (!err) {
|
|
if (!err) {
|
|
struct frag_hdr fhdr;
|
|
struct frag_hdr fhdr;
|
|
|
|
|
|
- /* specify the length of each IP datagram fragment*/
|
|
|
|
- skb_shinfo(skb)->gso_size = mtu - fragheaderlen -
|
|
|
|
- sizeof(struct frag_hdr);
|
|
|
|
|
|
+ /* Specify the length of each IPv6 datagram fragment.
|
|
|
|
+ * It has to be a multiple of 8.
|
|
|
|
+ */
|
|
|
|
+ skb_shinfo(skb)->gso_size = (mtu - fragheaderlen -
|
|
|
|
+ sizeof(struct frag_hdr)) & ~7;
|
|
skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
|
|
skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
|
|
ipv6_select_ident(skb, &fhdr);
|
|
ipv6_select_ident(skb, &fhdr);
|
|
skb_shinfo(skb)->ip6_frag_id = fhdr.identification;
|
|
skb_shinfo(skb)->ip6_frag_id = fhdr.identification;
|