errore timestamp nel kernel linux?

errore timestamp nel kernel linux?


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

l'API sopra è l'API lato ricevitore, che riceve i dati dal mittente. Voglio calcolare l'ora in cui riceve i dati e memorizzarli in un buffer. l'API di cui sopra alla riga numero 2993 è disponibile nel codice sorgente del kernel all'indirizzo:/linux/net/core/dev.c
ma sto ottenendo ERRORE:poiché struct sk_buff non ha alcun membro chiamato stamp.


http://lxr.free-electrons.com/source/include/linux/skbuff.h Qualcuno potrebbe aiutarmi per favore:come ottenere il timestamp per il kernel Linux.


Successivamente ho cambiato il mio codice in :


 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


--------------------------------------------------------------------------------------------------------------- ---------------------------


ora ricevo un errore come:ktime_t non ha un membro chiamato "tv_sec". struct timeval ma l'argomento è di tipo unio ktime_t.


Risposte:


sk_buff->tstamp è una variabile di ktime_t genere. do_gettimeofday imposta il tempo alla variabile di struct timeval . Ne hai di diversi tipi qui e quindi hai bisogno di una conversione. Uno semplice sarebbe:


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

Modifica:
Se vuoi solo eseguire il timestamp del buffer del socket puoi chiamare __net_timestamp


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

O se non puoi chiamare __net_timestamp puoi farlo con le tue mani:


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