Zeitstempelfehler im Linux-Kernel?

Zeitstempelfehler im Linux-Kernel?


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

Die obige API ist die empfängerseitige API, die die Daten vom Absender empfängt. Ich möchte die Zeit berechnen, zu der es die Daten empfängt, und sie in einem Puffer speichern. Die obige API in Zeilennummer 2993 ist im Kernel-Quellcode verfügbar unter:/linux/net/core/dev.c
aber ich erhalte einen FEHLER:as struct sk_buff has no member named stamp.


http://lxr.free-electrons.com/source/include/linux/skbuff.h Könnte mir bitte jemand helfen:wie bekomme ich den Zeitstempel für den Linux-Kernel.


Später änderte ich meinen Code zu :


 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


--------------------überprüfen Sie dies in Zeile 81-------------------- --------------------------


Jetzt bekomme ich einen Fehler:ktime_t hat kein Mitglied namens "tv_sec". struct timeval, aber das Argument ist vom Typ unio ktime_t.


Antworten:


sk_buff->tstamp ist eine Variable von ktime_t Typ. do_gettimeofday setzt die Zeit auf die Variable struct timeval . Sie haben hier unterschiedliche Typen und benötigen daher eine Umrechnung. Eine einfache wäre:


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

Bearbeiten:
Wenn Sie nur den Socket-Puffer mit einem Zeitstempel versehen möchten, können Sie __net_timestamp aufrufen


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

Oder wenn Sie __net_timestamp nicht anrufen können Sie können es mit Ihren Händen tun:


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