On 2017-01-31 at 23:31:34 +0100, Vadim Kochan <vadi...@gmail.com> wrote:
> Add pcap_get_tstamp(...) function to get packet's timestamp considering
> different packet types & bytes order.
> 
> Signed-off-by: Vadim Kochan <vadi...@gmail.com>
> ---
>  pcap_io.h | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 53 insertions(+)
> 
> diff --git a/pcap_io.h b/pcap_io.h
> index 4e41362..7bf5fe6 100644
> --- a/pcap_io.h
> +++ b/pcap_io.h
> @@ -373,6 +373,59 @@ static inline void pcap_set_length(pcap_pkthdr_t *phdr, 
> enum pcap_type type, u32
>       }
>  }
>  
> +static inline void pcap_get_tstamp(pcap_pkthdr_t *phdr, enum pcap_type type,
> +                                struct timeval *tv)

This should take a struct timespec in order to retain nanosecond
precision.

> +{
> +     switch (type) {
> +     case DEFAULT:
> +     case DEFAULT_LL:
> +             tv->tv_sec = phdr->ppo.ts.tv_sec;
> +             tv->tv_usec = phdr->ppo.ts.tv_usec;
> +             break;
> +
> +     case DEFAULT_SWAPPED:
> +     case DEFAULT_LL_SWAPPED:
> +             tv->tv_sec = ___constant_swab32(phdr->ppo.ts.tv_sec);
> +             tv->tv_usec = ___constant_swab32(phdr->ppo.ts.tv_usec);
> +             break;
> +
> +     case NSEC:
> +     case NSEC_LL:
> +             tv->tv_sec = phdr->ppn.ts.tv_sec;
> +             tv->tv_usec = phdr->ppn.ts.tv_nsec / 1000;
> +             break;
> +
> +     case NSEC_SWAPPED:
> +     case NSEC_LL_SWAPPED:
> +             tv->tv_sec = ___constant_swab32(phdr->ppn.ts.tv_sec);
> +             tv->tv_usec = ___constant_swab32(phdr->ppn.ts.tv_nsec) / 1000;
> +             break;
> +
> +     case KUZNETZOV:
> +             tv->tv_sec = phdr->ppk.ts.tv_sec;
> +             tv->tv_usec = phdr->ppk.ts.tv_usec;
> +             break;
> +
> +     case KUZNETZOV_SWAPPED:
> +             tv->tv_sec = ___constant_swab32(phdr->ppk.ts.tv_sec);
> +             tv->tv_usec = ___constant_swab32(phdr->ppk.ts.tv_usec);
> +             break;
> +
> +     case BORKMANN:
> +             tv->tv_sec = phdr->ppb.ts.tv_sec;
> +             tv->tv_usec = phdr->ppb.ts.tv_nsec / 1000;
> +             break;
> +
> +     case BORKMANN_SWAPPED:
> +             tv->tv_sec = ___constant_swab32(phdr->ppb.ts.tv_sec);
> +             tv->tv_usec = ___constant_swab32(phdr->ppb.ts.tv_nsec) / 1000;
> +             break;
> +
> +     default:
> +             bug();
> +     }
> +}
> +
>  static inline u32 pcap_get_hdr_length(pcap_pkthdr_t *phdr, enum pcap_type 
> type)
>  {
>       switch (type) {
> -- 
> 2.11.0
> 

-- 
You received this message because you are subscribed to the Google Groups 
"netsniff-ng" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to netsniff-ng+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to