The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Что за тип n_time?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Что за тип n_time?"  +/
Сообщение от goodfornothing email(ok) on 04-Май-11, 22:00 
Еще раз здравствуйте!!!

Возникла необходимость в использовании функции libnet_build_icmpv4_timestamp из библиотеки libnet. Вот ее прототип:

libnet_build_icmpv4_timestamp     (     u_int8_t      type,
        u_int8_t      code,
        u_int16_t      sum,
        u_int16_t      id,
        u_int16_t      seq,
        n_time      otime,
        n_time      rtime,
        n_time      ttime,
        u_int8_t *      payload,
        u_int32_t      payload_s,
        libnet_t *      l,
        libnet_ptag_t      ptag    
    )     

Ни как не могу понять, что за тип такой n_time??? Искал где только мог, но ничего про него не нашел. Из описания протокола видно, что под временную метку отводится 4 байта. При помощи какой функции можно получить метку системного времени для отправки ее в icmp сообщении данного типа?

Заранее спасибо!

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Что за тип n_time?"  +/
Сообщение от guest email(??) on 05-Май-11, 10:15 
> Ни как не могу понять, что за тип такой n_time??? Искал где
> только мог, но ничего про него не нашел. Из описания протокола
> видно, что под временную метку отводится 4 байта. При помощи какой
> функции можно получить метку системного времени для отправки ее в icmp
> сообщении данного типа?

Плохо искали)
это UTC время в миллисекундах от начала суток в сетевом порядке, соответственно:
n_time
getntime(void)
{
        struct timespec ts;
        u_long t;

        clock_gettime(CLOCK_REALTIME, &ts);
        t = (ts.tv_sec % (24*60*60)) * 1000 + ts.tv_nsec / 1000000;
        return (htonl(t));
}

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Что за тип n_time?"  +/
Сообщение от goodfornothing email(ok) on 05-Май-11, 22:17 
Искал я может и плохо, но в google нет ничего по запросу n_time. Как там еще искать, я уж не знаю)

За разъяснение спасибо, только вот не совсем ясен смысл следующих действий:

(ts.tv_sec % (24*60*60)) * 1000 + ts.tv_nsec / 1000000

Если первое поле структуры содержит в себе число секунд, а второе - наносекунд, то напрашивается следующий вариант:

ts.tv_sec * 1000 + ts.tv_nsec * 1000000

Не могли бы Вы разъяснить данный момент?

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Что за тип n_time?"  +/
Сообщение от Andrey Mitrofanov on 05-Май-11, 23:04 
> (ts.tv_sec % (24*60*60)) * 1000 + ts.tv_nsec / 1000000
> ts.tv_sec * 1000 + ts.tv_nsec * 1000000
> Не могли бы Вы разъяснить данный момент?

Можно я, спасибо: "от начала суток".

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Что за тип n_time?"  +/
Сообщение от goodfornothing email(ok) on 05-Май-11, 23:13 
Все, понял. Спаибо


Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Что за тип n_time?"  +/
Сообщение от pavlinux (ok) on 08-Май-11, 03:34 
>[оверквотинг удален]
>   n_time   otime,
>   n_time   rtime,
>   n_time   ttime,
>   u_int8_t *   payload,
>   u_int32_t   payload_s,
>   libnet_t *   l,
>   libnet_ptag_t   ptag
>  )
> Ни как не могу понять, что за тип такой n_time??? Искал где
> только мог, но ничего про него не нашел.

# grep " n_time" /usr/include/ -R
/usr/include/netinet/in_systm.h:typedef u_int32_t n_time;       /* ms since 00:00 GMT, byte rev   */



#ifndef _NETINET_IN_SYSTM_H
#define _NETINET_IN_SYSTM_H 1

#include <sys/cdefs.h>
#include <sys/types.h>

__BEGIN_DECLS

/*
* Network order versions of various data types. Unfortunately, BSD
* assumes specific sizes for shorts (16 bit) and longs (32 bit) which
* don't hold in general. As a consequence, the network order versions
* may not reflect the actual size of the native data types.
*/

typedef u_int16_t n_short;      /* short as received from the net */
typedef u_int32_t n_long;       /* long as received from the net  */
typedef u_int32_t n_time;       /* ms since 00:00 GMT, byte rev   */

__END_DECLS

#endif /* netinet/in_systm.h */

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Что за тип n_time?"  +/
Сообщение от goodfornothing email(ok) on 09-Май-11, 11:13 
Большое спасибо, pavlinux! Как всегда, в точку!)

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру