linux内核中的时间戳错误?

int netif_rx(struct sk_buff *skb) { if(skb -> stamp.tv_sec ==0) do_gettimeofday(&skb->stamp); } 

上面的api是接收方api,它从发送方接收数据。 我想计算一下接收数据的时间并将其存储在缓冲区中。 行号2993上面的api在内核源代码中可用:/linux/net/core/dev.c但是我得到错误:因为结构sk_buff没有成员命名的邮票。

http://lxr.free-electrons.com/source/include/linux/skbuff.h有人可以帮我:如何获得Linux内核的时间戳

后来我把我的代码改为:

  int netif_rx(struct sk_buff *skb) { if(skb -> tstamp.off_sec ==0) do_gettimeofday(&skb->tstamp); } 

1: http : //www.fsl.cs.sunysb.edu/kernel-api/re498.html


2: https : //github.com/embest-tech/platform_prebuilt/blob/master/ndk/android-ndk-r7/platforms/android-4/arch-x86/usr/include/linux/skbuff.h

————————-在第81行查看——————– ————————–

现在我得到的错误是:ktime_t没有名为“tv_sec”的memeber。 结构timeval但参数的typesunio ktime_t。

sk_buff->tstampktime_t类型的变量。 do_gettimeofday将时间设置为struct timeval变量。 你在这里有不同的类型,所以你需要一个转换。 一个简单的将是:

 int netif_rx(struct sk_buff *skb) { if(skb -> tstamp.off_sec ==0) { struct timespec now; getnstimeofday(&now); skb->tstamp = timespec_to_ktime(now); } } 

编辑:如果你只是想要时间戳套接字缓冲区,你可以调用__net_timestamp

 int netif_rx(struct sk_buff *skb) { __net_timestamp(skb); } 

或者如果你不能打电话__net_timestamp你可以用你的双手:

 int netif_rx(struct sk_buff *skb) { skb->tstamp = ktime_get_real(); } 

你可以这样做

 your_function(struct sk_buff *skb) { struct timeval tv; do_gettimeofday(&tv); skb->tstamp = timeval_to_ktime(tv); } 

看看这个代码 mwifiex_hard_start_xmit函数

在大多数情况下,您不需要提供自己的netif_rx实现