source: libpacketdump/link_21.c @ 4c88365

develop
Last change on this file since 4c88365 was 4c88365, checked in by Jacob Van Walraven <jcv9@…>, 20 months ago

libpacketdump cleanup ERF output

  • Property mode set to 100644
File size: 2.9 KB
Line 
1/* ERF META PACKET */
2#include "libtrace.h"
3#include "libpacketdump.h"
4#include "format_erf.h"
5
6#include <arpa/inet.h>
7
8DLLEXPORT void decode(int link_type UNUSED, const char *packet UNUSED, unsigned len UNUSED) {
9}
10
11static void print_section(libtrace_meta_t *meta) {
12        int i;
13        for (i=0; i<meta->num; i++) {
14
15                if (meta->items[i].datatype == TRACE_META_STRING) {
16                        printf("   %s: %s\n",
17                                meta->items[i].option_name,
18                                (char *)meta->items[i].data);
19                } else if (meta->items[i].datatype == TRACE_META_UINT8) {
20                        printf("   %s: %u\n",
21                                meta->items[i].option_name,
22                                *(uint8_t *)meta->items[i].data);
23                } else if (meta->items[i].datatype == TRACE_META_UINT32) {
24                        printf("   %s: %u\n",
25                                meta->items[i].option_name,
26                                *(uint32_t *)meta->items[i].data);
27                } else if (meta->items[i].datatype == TRACE_META_UINT64) {
28                        printf("   %s: %lu\n",
29                                meta->items[i].option_name,
30                                *(uint64_t *)meta->items[i].data);
31                } else if (meta->items[i].datatype == TRACE_META_IPV4) {
32                        struct in_addr ip;
33                        ip.s_addr = *(uint32_t *)meta->items[i].data;
34                        printf("   %s: %s\n",
35                                meta->items[i].option_name,
36                                inet_ntoa(ip));
37                } else if (meta->items[i].datatype == TRACE_META_IPV6) {
38                        printf("   %s: %s\n",
39                                meta->items[i].option_name,
40                                (char *)meta->items[i].data);
41                } else if (meta->items[i].datatype == TRACE_META_MAC) {
42                        unsigned char *mac = meta->items[i].data;
43                        printf("   %s: %02x:%02x:%02x:%02x:%02x:%02x\n",
44                                meta->items[i].option_name,
45                                mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
46                } else {
47                        printf("   Unknown Option ID %u (output RAW): ", meta->items[i].option);
48                        int k;
49                        unsigned char *curr = (unsigned char *)meta->items[i].data;
50                        for (k=0; k<meta->items[i].len; k++) {
51                                printf("%02x ", curr[k]);
52                        }
53                        printf("\n");
54                }
55        }
56}
57
58DLLEXPORT void decode_meta(int link_type UNUSED, const char *packet UNUSED, unsigned len UNUSED,
59        libtrace_packet_t *p) {
60
61        printf(" ERF Provenance Packet\n");
62
63        /* Try to find each section from the meta packet */
64        libtrace_meta_t *sec_cap = trace_get_section(p, ERF_PROV_SECTION_CAPTURE);
65        libtrace_meta_t *sec_host = trace_get_section(p, ERF_PROV_SECTION_HOST);
66        libtrace_meta_t *sec_module = trace_get_section(p, ERF_PROV_SECTION_MODULE);
67        libtrace_meta_t *sec_interface = trace_get_section(p, ERF_PROV_SECTION_INTERFACE);
68
69        if (sec_cap != NULL) {
70                printf("  Capture Section\n");
71                print_section(sec_cap);
72                trace_destroy_meta(sec_cap);
73        }
74
75        if (sec_host != NULL) {
76                printf("  Host Section\n");
77                print_section(sec_host);
78                trace_destroy_meta(sec_host);
79        }
80
81        if (sec_module != NULL) {
82                printf("  Module Section\n");
83                print_section(sec_module);
84                trace_destroy_meta(sec_module);
85        }
86
87        if (sec_interface != NULL) {
88                printf("  Interface Section\n");
89                print_section(sec_interface);
90                trace_destroy_meta(sec_interface);
91        }
92
93}
Note: See TracBrowser for help on using the repository browser.