|
@@ -3490,10 +3490,10 @@ int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb)
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(sock_queue_err_skb);
|
|
EXPORT_SYMBOL(sock_queue_err_skb);
|
|
|
|
|
|
-void skb_tstamp_tx(struct sk_buff *orig_skb,
|
|
|
|
- struct skb_shared_hwtstamps *hwtstamps)
|
|
|
|
|
|
+void __skb_tstamp_tx(struct sk_buff *orig_skb,
|
|
|
|
+ struct skb_shared_hwtstamps *hwtstamps,
|
|
|
|
+ struct sock *sk, int tstype)
|
|
{
|
|
{
|
|
- struct sock *sk = orig_skb->sk;
|
|
|
|
struct sock_exterr_skb *serr;
|
|
struct sock_exterr_skb *serr;
|
|
struct sk_buff *skb;
|
|
struct sk_buff *skb;
|
|
int err;
|
|
int err;
|
|
@@ -3521,7 +3521,7 @@ void skb_tstamp_tx(struct sk_buff *orig_skb,
|
|
memset(serr, 0, sizeof(*serr));
|
|
memset(serr, 0, sizeof(*serr));
|
|
serr->ee.ee_errno = ENOMSG;
|
|
serr->ee.ee_errno = ENOMSG;
|
|
serr->ee.ee_origin = SO_EE_ORIGIN_TIMESTAMPING;
|
|
serr->ee.ee_origin = SO_EE_ORIGIN_TIMESTAMPING;
|
|
- serr->ee.ee_info = SCM_TSTAMP_SND;
|
|
|
|
|
|
+ serr->ee.ee_info = tstype;
|
|
if (sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID)
|
|
if (sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID)
|
|
serr->ee.ee_data = skb_shinfo(skb)->tskey;
|
|
serr->ee.ee_data = skb_shinfo(skb)->tskey;
|
|
|
|
|
|
@@ -3530,6 +3530,14 @@ void skb_tstamp_tx(struct sk_buff *orig_skb,
|
|
if (err)
|
|
if (err)
|
|
kfree_skb(skb);
|
|
kfree_skb(skb);
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL_GPL(__skb_tstamp_tx);
|
|
|
|
+
|
|
|
|
+void skb_tstamp_tx(struct sk_buff *orig_skb,
|
|
|
|
+ struct skb_shared_hwtstamps *hwtstamps)
|
|
|
|
+{
|
|
|
|
+ return __skb_tstamp_tx(orig_skb, hwtstamps, orig_skb->sk,
|
|
|
|
+ SCM_TSTAMP_SND);
|
|
|
|
+}
|
|
EXPORT_SYMBOL_GPL(skb_tstamp_tx);
|
|
EXPORT_SYMBOL_GPL(skb_tstamp_tx);
|
|
|
|
|
|
void skb_complete_wifi_ack(struct sk_buff *skb, bool acked)
|
|
void skb_complete_wifi_ack(struct sk_buff *skb, bool acked)
|