Ignore:
Timestamp:
01/24/19 15:10:43 (21 months ago)
Author:
Jacob Van Walraven <jcv9@…>
Branches:
develop
Children:
5299c55
Parents:
254c926
Message:

libpacketdump ERF print metadata based on its datatype

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libpacketdump/link_21.c

    rd0f25d4 r39567d9  
    33#include "libpacketdump.h"
    44#include "format_erf.h"
     5
     6#include <arpa/inet.h>
     7#include <netinet/ether.h>
    58
    69DLLEXPORT void decode(int link_type UNUSED, const char *packet UNUSED, unsigned len UNUSED) {
     
    1013        int i;
    1114        for (i=0; i<meta->num; i++) {
    12                 printf("   Option ID: %u Option Value: %s\n",
    13                         meta->items[i].option, (char *)meta->items[i].data);
     15
     16                if (meta->items[i].datatype == TRACE_META_STRING) {
     17                        printf("   Name: %s ID: %u Value: %s\n",
     18                                meta->items[i].option_name,
     19                                meta->items[i].option,
     20                                (char *)meta->items[i].data);
     21                } else if (meta->items[i].datatype == TRACE_META_UINT8) {
     22                        printf("   Name: %s ID: %u Value: %u\n",
     23                                meta->items[i].option_name,
     24                                meta->items[i].option,
     25                                *(uint8_t *)meta->items[i].data);
     26                } else if (meta->items[i].datatype == TRACE_META_UINT32) {
     27                        printf("   Name: %s ID: %u Value: %u\n",
     28                                meta->items[i].option_name,
     29                                meta->items[i].option,
     30                                *(uint32_t *)meta->items[i].data);
     31                } else if (meta->items[i].datatype == TRACE_META_UINT64) {
     32                        printf("   Name: %s ID: %u Value: %lu\n",
     33                                meta->items[i].option_name,
     34                                meta->items[i].option,
     35                                *(uint64_t *)meta->items[i].data);
     36                } else if (meta->items[i].datatype == TRACE_META_IPV4) {
     37                        struct in_addr ip;
     38                        ip.s_addr = *(uint32_t *)meta->items[i].data;
     39                        printf("   Name: %s ID: %u Value: %s\n",
     40                                meta->items[i].option_name,
     41                                meta->items[i].option,
     42                                inet_ntoa(ip));
     43                } else if (meta->items[i].datatype == TRACE_META_IPV6) {
     44                        printf("   Name: %s ID: %u Value: %s\n",
     45                                meta->items[i].option_name,
     46                                meta->items[i].option,
     47                                (char *)meta->items[i].data);
     48                } else if (meta->items[i].datatype == TRACE_META_MAC) {
     49                        printf("   Name: %s ID: %u Value: %s\n",
     50                                meta->items[i].option_name,
     51                                meta->items[i].option,
     52                                ether_ntoa((struct ether_addr *)(char *)meta->items[i].data));
     53                } else {
     54                        printf("   Option ID: %u Option Value: ", meta->items[i].option);
     55                        int k;
     56                        unsigned char *curr = (unsigned char *)meta->items[i].data;
     57                        for (k=0; k<meta->items[i].len; k++) {
     58                                printf("%02x ", curr[k]);
     59                        }
     60                        printf("\n");
     61                }
    1462        }
    1563}
Note: See TracChangeset for help on using the changeset viewer.