|
@@ -855,11 +855,15 @@ static int __ip_append_data(struct sock *sk,
|
|
unsigned int maxfraglen, fragheaderlen, maxnonfragsize;
|
|
unsigned int maxfraglen, fragheaderlen, maxnonfragsize;
|
|
int csummode = CHECKSUM_NONE;
|
|
int csummode = CHECKSUM_NONE;
|
|
struct rtable *rt = (struct rtable *)cork->dst;
|
|
struct rtable *rt = (struct rtable *)cork->dst;
|
|
|
|
+ u32 tskey = 0;
|
|
|
|
|
|
skb = skb_peek_tail(queue);
|
|
skb = skb_peek_tail(queue);
|
|
|
|
|
|
exthdrlen = !skb ? rt->dst.header_len : 0;
|
|
exthdrlen = !skb ? rt->dst.header_len : 0;
|
|
mtu = cork->fragsize;
|
|
mtu = cork->fragsize;
|
|
|
|
+ if (cork->tx_flags & SKBTX_ANY_SW_TSTAMP &&
|
|
|
|
+ sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID)
|
|
|
|
+ tskey = sk->sk_tskey++;
|
|
|
|
|
|
hh_len = LL_RESERVED_SPACE(rt->dst.dev);
|
|
hh_len = LL_RESERVED_SPACE(rt->dst.dev);
|
|
|
|
|
|
@@ -976,6 +980,8 @@ alloc_new_skb:
|
|
/* only the initial fragment is time stamped */
|
|
/* only the initial fragment is time stamped */
|
|
skb_shinfo(skb)->tx_flags = cork->tx_flags;
|
|
skb_shinfo(skb)->tx_flags = cork->tx_flags;
|
|
cork->tx_flags = 0;
|
|
cork->tx_flags = 0;
|
|
|
|
+ skb_shinfo(skb)->tskey = tskey;
|
|
|
|
+ tskey = 0;
|
|
|
|
|
|
/*
|
|
/*
|
|
* Find where to start putting bytes.
|
|
* Find where to start putting bytes.
|