Changeset b27ed21


Ignore:
Timestamp:
01/21/19 11:43:12 (20 months ago)
Author:
Jacob Van Walraven <jcv9@…>
Branches:
develop
Children:
ddad48c
Parents:
c8171e5
Message:

Add datatype enum to libtrace_meta_item_t structure, Convert interface speeds from network to host byte ordering

Location:
lib
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • lib/format_erf.c

    rd4eed70 rb27ed21  
    10021002                        result->items[result->num-1].option = ntohs(sec->type);
    10031003                        result->items[result->num-1].len = ntohs(sec->len);
    1004                         result->items[result->num-1].data_type = 0;
     1004                        result->items[result->num-1].datatype = TRACE_META_UNKNOWN;
    10051005                        result->items[result->num-1].data = malloc(ntohs(sec->len));
    10061006                        memcpy(result->items[result->num-1].data,
     
    10811081                        result->items[result->num-1].option = ntohs(sec->type);
    10821082                        result->items[result->num-1].len = ntohs(sec->len);
    1083                         result->items[result->num-1].data_type = 0;
     1083                        result->items[result->num-1].datatype = TRACE_META_UNKNOWN;
    10841084                        result->items[result->num-1].data = calloc(1, ntohs(sec->len));
    10851085
  • lib/format_pcapng.c

    r66ffac4 rb27ed21  
    22322232                result->items[result->num-1].option = optcode;
    22332233                result->items[result->num-1].len = len;
    2234                 result->items[result->num-1].data_type = 0;
     2234                result->items[result->num-1].datatype = TRACE_META_UNKNOWN;
    22352235                result->items[result->num-1].data = calloc(1, len);
    22362236                memcpy(result->items[result->num-1].data,
     
    23442344                result->items[result->num-1].option = option;
    23452345                result->items[result->num-1].len = len;
    2346                 result->items[result->num-1].data_type = 0;
     2346                result->items[result->num-1].datatype = TRACE_META_UNKNOWN;
    23472347                result->items[result->num-1].data = calloc(1, len);
    23482348
    2349                 memcpy(result->items->data, ptr+sizeof(struct pcapng_optheader), len);
     2349                memcpy(result->items[result->num-1].data,
     2350                        ptr+sizeof(struct pcapng_optheader), len);
    23502351
    23512352                return (void *)result;
  • lib/format_pktmeta.c

    rc8171e5 rb27ed21  
    77#include <stdlib.h>
    88#include <string.h>
    9 
     9#include <endian.h>
    1010
    1111/* Internal Meta functions */
     
    2222}
    2323
     24static libtrace_meta_t *trace_meta_set_datatype(libtrace_meta_t *r, meta_datatype_t dt) {
     25        if (r == NULL) { return NULL; }
     26
     27        int i;
     28        for (i=0; i<r->num; i++) {
     29                r->items[i].datatype = dt;
     30        }
     31        return r;
     32}
     33
    2434/* API functions to retrieve interface related packet data */
    2535
     
    6070        }
    6171
     72        libtrace_meta_t *r = NULL;
     73
    6274        /* get the result */
    6375        if (packet->trace->format->type == TRACE_FORMAT_ERF) {
    64                 return packet->trace->format->get_meta_section_option(packet,
     76                r = packet->trace->format->get_meta_section_option(packet,
    6577                        ERF_PROV_SECTION_INTERFACE, ERF_PROV_NAME);
    6678        }
    6779        if (packet->trace->format->type == TRACE_FORMAT_PCAPNG) {
    68                 return packet->trace->format->get_meta_section_option(packet,
     80                r = packet->trace->format->get_meta_section_option(packet,
    6981                        PCAPNG_INTERFACE_TYPE, PCAPNG_META_IF_NAME);
    7082        }
    7183
    72         return NULL;
     84        return trace_meta_set_datatype(r, TRACE_META_STRING);
    7385}
    7486/* Get the interface name for a meta packet.
     
    112124        }
    113125
    114         if (packet->trace->format->type == TRACE_FORMAT_ERF) {
    115                 return packet->trace->format->get_meta_section_option(packet,
     126        libtrace_meta_t *r = NULL;
     127
     128        if (packet->trace->format->type == TRACE_FORMAT_ERF) {
     129                r = packet->trace->format->get_meta_section_option(packet,
    116130                        ERF_PROV_SECTION_INTERFACE, ERF_PROV_IF_MAC);
    117131        }
    118132        if (packet->trace->format->type == TRACE_FORMAT_PCAPNG) {
    119                 return packet->trace->format->get_meta_section_option(packet,
     133                r = packet->trace->format->get_meta_section_option(packet,
    120134                        PCAPNG_INTERFACE_TYPE, PCAPNG_META_IF_MAC);
    121135        }
    122136
    123         return NULL;
     137        return trace_meta_set_datatype(r, TRACE_META_STRING);
    124138}
    125139/* Get the interface MAC address for a meta packet.
     
    160174        }
    161175
    162         if (packet->trace->format->type == TRACE_FORMAT_ERF) {
    163                 return packet->trace->format->get_meta_section_option(packet,
     176        libtrace_meta_t *r = NULL;
     177
     178        if (packet->trace->format->type == TRACE_FORMAT_ERF) {
     179                r = packet->trace->format->get_meta_section_option(packet,
    164180                        ERF_PROV_SECTION_INTERFACE, ERF_PROV_IF_SPEED);
    165181        }
    166182        if (packet->trace->format->type == TRACE_FORMAT_PCAPNG) {
    167                 return packet->trace->format->get_meta_section_option(packet,
     183                r = packet->trace->format->get_meta_section_option(packet,
    168184                        PCAPNG_INTERFACE_TYPE, PCAPNG_META_IF_SPEED);
    169185        }
    170186
    171         return NULL;
     187        /* Flip from network to host byte ordering */
     188        int i;
     189        if (r != NULL) {
     190                for (i=0; i<r->num; i++) {
     191                        uint64_t d = be64toh(*(uint64_t *)r->items[i].data);
     192                        memcpy(r->items[i].data, &d, r->items[i].len);
     193                }
     194        }
     195
     196        return trace_meta_set_datatype(r, TRACE_META_UINT64_T);
    172197}
    173198/* Get the interface speed for a meta packet.
     
    202227        }
    203228
    204         if (packet->trace->format->type == TRACE_FORMAT_ERF) {
    205                 return packet->trace->format->get_meta_section_option(packet,
     229        libtrace_meta_t *r = NULL;
     230
     231        if (packet->trace->format->type == TRACE_FORMAT_ERF) {
     232                r = packet->trace->format->get_meta_section_option(packet,
    206233                        ERF_PROV_SECTION_INTERFACE, ERF_PROV_IF_IPV4);
    207234        }
    208235        if (packet->trace->format->type == TRACE_FORMAT_PCAPNG) {
    209                 return packet->trace->format->get_meta_section_option(packet,
     236                r = packet->trace->format->get_meta_section_option(packet,
    210237                        PCAPNG_INTERFACE_TYPE, PCAPNG_META_IF_IP4);
    211238        }
    212239
    213         return NULL;
     240        return trace_meta_set_datatype(r, TRACE_META_UINT32_T);
    214241}
    215242/* Get the interface ipv4 address for a meta packet.
     
    263290        }
    264291
    265         if (packet->trace->format->type == TRACE_FORMAT_ERF) {
    266                 return packet->trace->format->get_meta_section_option(packet,
     292        libtrace_meta_t *r = NULL;
     293
     294        if (packet->trace->format->type == TRACE_FORMAT_ERF) {
     295                r = packet->trace->format->get_meta_section_option(packet,
    267296                        ERF_PROV_SECTION_INTERFACE, ERF_PROV_IF_IPV4);
    268297        }
    269298        if (packet->trace->format->type == TRACE_FORMAT_PCAPNG) {
    270                 return packet->trace->format->get_meta_section_option(packet,
     299                r = packet->trace->format->get_meta_section_option(packet,
    271300                        PCAPNG_INTERFACE_TYPE, PCAPNG_META_IF_IP4);
    272301        }
    273302
    274         return NULL;
     303        return trace_meta_set_datatype(r, TRACE_META_UINT128_T);
    275304}
    276305/* Get the interface ipv6 address for a meta packet.
     
    342371        }
    343372
    344         if (packet->trace->format->type == TRACE_FORMAT_ERF) {
    345                 return packet->trace->format->get_meta_section_option(packet,
     373        libtrace_meta_t *r = NULL;
     374
     375        if (packet->trace->format->type == TRACE_FORMAT_ERF) {
     376                r = packet->trace->format->get_meta_section_option(packet,
    346377                        ERF_PROV_SECTION_INTERFACE, ERF_PROV_DESCR);
    347378        }
    348379        if (packet->trace->format->type == TRACE_FORMAT_PCAPNG) {
    349                 return packet->trace->format->get_meta_section_option(packet,
     380                r = packet->trace->format->get_meta_section_option(packet,
    350381                        PCAPNG_INTERFACE_TYPE, PCAPNG_META_IF_DESCR);
    351382        }
    352383
    353         return NULL;
     384        return trace_meta_set_datatype(r, TRACE_META_STRING);
    354385}
    355386/* Get the interface description for a meta packet.
     
    390421        }
    391422
    392         if (packet->trace->format->type == TRACE_FORMAT_ERF) {
    393                 return packet->trace->format->get_meta_section_option(packet,
     423        libtrace_meta_t *r = NULL;
     424
     425        if (packet->trace->format->type == TRACE_FORMAT_ERF) {
     426                r = packet->trace->format->get_meta_section_option(packet,
    394427                        ERF_PROV_SECTION_HOST, ERF_PROV_OS);
    395428        }
    396429        if (packet->trace->format->type == TRACE_FORMAT_PCAPNG) {
    397                 return packet->trace->format->get_meta_section_option(packet,
     430                r = packet->trace->format->get_meta_section_option(packet,
    398431                        PCAPNG_INTERFACE_TYPE, PCAPNG_META_IF_OS);
    399432        }
    400433
    401         return NULL;
     434        return trace_meta_set_datatype(r, TRACE_META_STRING);
    402435}
    403436/* Get the host OS for a meta packet.
     
    432465        }
    433466
    434         if (packet->trace->format->type == TRACE_FORMAT_ERF) {
    435                 return packet->trace->format->get_meta_section_option(packet,
     467        libtrace_meta_t *r = NULL;
     468
     469        if (packet->trace->format->type == TRACE_FORMAT_ERF) {
     470                r = packet->trace->format->get_meta_section_option(packet,
    436471                        ERF_PROV_SECTION_INTERFACE, ERF_PROV_FCS_LEN);
    437472        }
    438473        if (packet->trace->format->type == TRACE_FORMAT_PCAPNG) {
    439                 return packet->trace->format->get_meta_section_option(packet,
     474                r = packet->trace->format->get_meta_section_option(packet,
    440475                        PCAPNG_INTERFACE_TYPE, PCAPNG_META_IF_FCSLEN);
    441476        }
    442477
    443         return NULL;
     478        return trace_meta_set_datatype(r, TRACE_META_UINT32_T);
    444479}
    445480/* Get the interface frame check sequence length for a meta packet.
     
    471506        }
    472507
    473         if (packet->trace->format->type == TRACE_FORMAT_ERF) {
    474                 return packet->trace->format->get_meta_section_option(packet,
     508        libtrace_meta_t *r = NULL;
     509
     510        if (packet->trace->format->type == TRACE_FORMAT_ERF) {
     511                r = packet->trace->format->get_meta_section_option(packet,
    475512                        ERF_PROV_SECTION_INTERFACE, ERF_PROV_COMMENT);
    476513        }
    477514        if (packet->trace->format->type == TRACE_FORMAT_PCAPNG) {
    478                 return packet->trace->format->get_meta_section_option(packet,
     515                r = packet->trace->format->get_meta_section_option(packet,
    479516                        PCAPNG_INTERFACE_TYPE, PCAPNG_OPTION_COMMENT);
    480517        }
    481518
    482         return NULL;
     519        return trace_meta_set_datatype(r, TRACE_META_STRING);
    483520}
    484521/* Get the interface comment for a meta packet.
     
    518555        }
    519556
    520         if (packet->trace->format->type == TRACE_FORMAT_ERF) {
    521                 return packet->trace->format->get_meta_section_option(packet,
     557        libtrace_meta_t *r = NULL;
     558
     559        if (packet->trace->format->type == TRACE_FORMAT_ERF) {
     560                r = packet->trace->format->get_meta_section_option(packet,
    522561                        ERF_PROV_SECTION_CAPTURE, ERF_PROV_APP_NAME);
    523562        }
    524563        if (packet->trace->format->type == TRACE_FORMAT_PCAPNG) {
    525                 return packet->trace->format->get_meta_section_option(packet,
     564                r = packet->trace->format->get_meta_section_option(packet,
    526565                        PCAPNG_SECTION_TYPE, PCAPNG_META_SHB_USERAPPL);
    527566        }
    528567
    529         return NULL;
     568        return trace_meta_set_datatype(r, TRACE_META_STRING);
    530569}
    531570/* Get the capture application for a meta packet.
  • lib/libtrace.h.in

    rc8171e5 rb27ed21  
    581581} libtrace_ethertype_t;
    582582
     583/** Enumeration of datatype returned inside libtrace_meta_item_t structure */
     584typedef enum {
     585        TRACE_META_UINT32_T     = 1,       
     586        TRACE_META_UINT64_T     = 2,
     587        TRACE_META_STRING       = 3,
     588        TRACE_META_UNKNOWN      = 4,
     589        TRACE_META_UINT128_T    = 5
     590} meta_datatype_t;
     591
    583592typedef struct libtrace_meta_result {
    584593        uint16_t type;
     
    589598        uint16_t option;
    590599        uint16_t len;
    591         uint8_t data_type;
     600        meta_datatype_t datatype;
    592601        void *data;
    593602} libtrace_meta_item_t;
     
    37323741/*@}*/
    37333742
    3734 
    3735 
    37363743DLLEXPORT int trace_destroy_meta(libtrace_meta_t *result);
    37373744
Note: See TracChangeset for help on using the changeset viewer.