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->tstamp
是ktime_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
实现