|
1 | 1 | #include <linux/icmp.h> |
| 2 | +#include <time.h> |
| 3 | +#include <linux/unistd.h> |
| 4 | +#include <linux/kernel.h> |
| 5 | +#include <sys/sysinfo.h> |
2 | 6 | #define _LINUX_IN_H |
3 | 7 | #include <netinet/in.h> |
4 | 8 |
|
5 | 9 | #include "pkt_utils.h" |
6 | 10 |
|
7 | | -int ts_print_packet(char *buf, packet_t *pkt, char *minfo) |
| 11 | +static time_t time_offset; |
| 12 | +static struct tm *convert_ts_to_date(u64 ts) |
| 13 | +{ |
| 14 | + struct tm *p; |
| 15 | + time_t tmp; |
| 16 | + |
| 17 | + if (!time_offset) { |
| 18 | + struct sysinfo s_info; |
| 19 | + sysinfo(&s_info); |
| 20 | + |
| 21 | + time(&time_offset); |
| 22 | + time_offset -= s_info.uptime; |
| 23 | + } |
| 24 | + |
| 25 | + tmp = time_offset + (ts / 1000000000); |
| 26 | + return localtime(&tmp); |
| 27 | +} |
| 28 | + |
| 29 | +int ts_print_packet(char *buf, packet_t *pkt, char *minfo, |
| 30 | + bool date_format) |
8 | 31 | { |
9 | 32 | static char saddr[MAX_ADDR_LENGTH], daddr[MAX_ADDR_LENGTH]; |
| 33 | + u64 ts = pkt->ts; |
| 34 | + struct tm *p; |
10 | 35 | u8 flags, l4; |
11 | 36 | int pos = 0; |
12 | | - u64 ts; |
13 | 37 |
|
14 | | - ts = pkt->ts; |
15 | | - if (ts) |
| 38 | + if (date_format) { |
| 39 | + p = convert_ts_to_date(ts); |
| 40 | + BUF_FMT("[%d-%d-%d %02d:%02d:%02d.%06d] ", 1900 + p->tm_year, |
| 41 | + 1 + p->tm_mon, p->tm_mday, p->tm_hour, p->tm_min, |
| 42 | + p->tm_sec, ts % 1000000000 / 1000); |
| 43 | + } else { |
16 | 44 | BUF_FMT("[%llu.%06llu] ", ts / 1000000000, |
17 | 45 | ts % 1000000000 / 1000); |
| 46 | + } |
| 47 | + |
18 | 48 | if (minfo) |
19 | 49 | BUF_FMT("%s", minfo); |
| 50 | + |
20 | 51 | if (!pkt->proto_l3) { |
21 | 52 | BUF_FMT("unknow"); |
22 | 53 | goto out; |
@@ -97,5 +128,5 @@ int ts_print_packet(char *buf, packet_t *pkt, char *minfo) |
97 | 128 |
|
98 | 129 | int base_print_packet(char *buf, packet_t *pkt) |
99 | 130 | { |
100 | | - return ts_print_packet(buf, pkt, NULL); |
| 131 | + return ts_print_packet(buf, pkt, NULL, false); |
101 | 132 | } |
0 commit comments