- Timestamp:
- 11/25/05 16:12:39 (17 years ago)
- Branches:
- 4.0.1-hotfixes, cachetimestamps, develop, dpdk-ndag, etsilive, getfragoff, help, libtrace4, master, ndag_format, pfring, rc-4.0.1, rc-4.0.2, rc-4.0.3, rc-4.0.4, ringdecrementfix, ringperformance, ringtimestampfixes
- Children:
- 3840760
- Parents:
- e9fa643
- Location:
- lib
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
lib/Makefile.am
r14e6840c r14d8a63 9 9 INCLUDES = @ADD_INCLS@ 10 10 libtrace_la_LIBADD = @ADD_LIBS@ @LTLIBOBJS@ 11 libtrace_la_LDFLAGS=-version-info 2:25:0 @ADD_LDFLAGS@11 libtrace_la_LDFLAGS=-version-info 3:0:0 @ADD_LDFLAGS@ 12 12 13 13 dagapi.c: -
lib/format_erf.c
r79dbcef r14d8a63 63 63 #include <stdlib.h> 64 64 65 /* 66 gzread (gzFile, buf, len) 67 gzdopen(path, mode) 68 gzopen(path, mode) 69 gzclose(gzFile) 70 gzwrite(gzFile, buf, len) 71 72 fread(ptr, size, num, FILE) 73 fdopen(filedes,mode) 74 fopen(path, mode) 75 fclose(FILE) 76 fwrite(ptr, size, num, FILE) 77 */ 78 /* 79 #if HAVE_ZLIB 80 # include <zlib.h> 81 # define LIBTRACE_READ(file,buf,len) gzread(file,buf,len) 82 # define LIBTRACE_FDOPEN(fd,mode) gzdopen(fd,mode) 83 # define LIBTRACE_OPEN(path,mode) gzopen(path,mode) 84 # define LIBTRACE_CLOSE(file) gzclose(file) 85 # define LIBTRACE_WRITE(file,buf,len) gzwrite(file,buf,len) 86 #else 87 # define LIBTRACE_READ(file,buf,len) fread(buf,len,1,file) 88 # define LIBTRACE_FDOPEN(fd,mode) fdopen(fd,mode) 89 # define LIBTRACE_OPEN(path,mode) fopen(path,mode) 90 # define LIBTRACE_CLOSE(file) fclose(file) 91 # define LIBTRACE_WRITE(file,buf,len) fwrite(buf,len,1,file) 92 #endif 93 */ 65 94 66 #define COLLECTOR_PORT 3435 95 67 … … 491 463 void *buffer2 = buffer; 492 464 int rlen; 493 465 466 if (packet->buf_control == PACKET) { 467 packet->buf_control = EXTERNAL; 468 free(packet->buffer); 469 packet->buffer = 0; 470 } 471 494 472 if (DAG.diff == 0) { 495 473 if ((numbytes = dag_read(libtrace,buf,RP_BUFSIZE)) <= 0) … … 505 483 assert( size < LIBTRACE_PACKET_BUFSIZE); 506 484 } 507 508 // have to copy it out of the memory hole at this stage: 509 memcpy(packet->buffer, erfptr, size); 485 486 packet->buffer = erfptr; 487 packet->header = erfptr; 488 if (((dag_record_t *)buffer)->flags.rxerror == 1) { 489 packet->payload = NULL; 490 } else { 491 packet->payload = packet->buffer + erf_get_framing_length(packet); 492 } 493 510 494 511 495 packet->status.type = RT_DATA; … … 528 512 int rlen; 529 513 514 if (packet->buf_control == EXTERNAL) { 515 packet->buf_control = PACKET; 516 packet = malloc(LIBTRACE_PACKET_BUFSIZE); 517 } 518 530 519 if ((numbytes=LIBTRACE_READ(INPUT.file, 531 520 buffer, … … 552 541 packet->status.type = RT_DATA; 553 542 packet->status.message = 0; 543 544 packet->header = packet->buffer; 545 packet->payload = packet->trace->format->get_link(packet); 546 554 547 packet->size = rlen; 555 548 return rlen; 549 556 550 } 557 551 static int erf_read_packet(struct libtrace_t *libtrace, struct libtrace_packet_t *packet) { … … 561 555 void *buffer2 = buffer; 562 556 int rlen; 557 if (packet->buf_control == EXTERNAL) { 558 packet->buf_control = PACKET; 559 packet->buffer = malloc(LIBTRACE_PACKET_BUFSIZE); 560 } 561 buffer = packet->buffer; 562 packet->header = packet->buffer; 563 564 563 565 if ((numbytes=LIBTRACE_READ(INPUT.file, 564 566 buffer, … … 595 597 packet->status.message = 0; 596 598 packet->size = rlen; 599 if (((dag_record_t *)buffer)->flags.rxerror == 1) { 600 packet->payload = NULL; 601 } else { 602 packet->payload = packet->buffer + erf_get_framing_length(packet); 603 } 597 604 return rlen; 598 605 } … … 634 641 635 642 packet->trace = libtrace; 643 644 if (packet->buf_control == EXTERNAL) { 645 packet->buf_control = PACKET; 646 packet->buffer = malloc(LIBTRACE_PACKET_BUFSIZE); 647 } 648 636 649 buffer = packet->buffer; 650 packet->header = packet->buffer; 637 651 638 652 … … 698 712 699 713 //packet->size = numbytes; 714 if (((dag_record_t *)buffer)->flags.rxerror == 1) { 715 packet->payload = NULL; 716 } else { 717 packet->payload = packet->buffer + erf_get_framing_length(packet); 718 } 700 719 return numbytes; 701 720 } while(1); … … 724 743 dag_record_t erfhdr; 725 744 int pad = 0; 726 dag_record_t *dag_hdr = (dag_record_t *)packet-> buffer;727 void *payload = (void *)trace_get_link(packet);745 dag_record_t *dag_hdr = (dag_record_t *)packet->header; 746 void *payload = packet->payload; 728 747 729 748 pad = erf_get_padding(packet); … … 769 788 } 770 789 771 772 790 static void *legacypos_get_link(const struct libtrace_packet_t *packet) { 791 return (void *)packet->payload; 792 /* 773 793 const void *posptr = 0; 774 posptr = ((uint8_t *)packet-> buffer+794 posptr = ((uint8_t *)packet-> + 775 795 legacypos_get_framing_length(packet)); 776 796 return (void *)posptr; 797 */ 777 798 } 778 799 … … 782 803 783 804 static void *legacyatm_get_link(const struct libtrace_packet_t *packet) { 805 return (void *)packet->payload; 806 /* 784 807 const void *atmptr = 0; 785 808 atmptr = ((uint8_t *)packet->buffer + 786 809 legacyatm_get_framing_length(packet)); 787 810 return (void *)atmptr; 811 */ 788 812 } 789 813 … … 793 817 794 818 static void *legacyeth_get_link(const struct libtrace_packet_t *packet) { 819 return (void *)packet->payload; 820 /* 795 821 const void *ethptr = 0; 796 822 ethptr = ((uint8_t *)packet->buffer + 797 823 legacyeth_get_framing_length(packet)); 798 824 return (void *)ethptr; 825 */ 799 826 } 800 827 … … 806 833 807 834 static void *erf_get_link(const struct libtrace_packet_t *packet) { 808 const void *ethptr = 0; 835 return (void *)packet->payload; 836 /* const void *ethptr = 0; 809 837 dag_record_t *erfptr = 0; 810 erfptr = (dag_record_t *)packet-> buffer;838 erfptr = (dag_record_t *)packet->header; 811 839 812 840 if (erfptr->flags.rxerror == 1) { … … 816 844 erf_get_framing_length(packet)); 817 845 return (void *)ethptr; 846 */ 847 818 848 } 819 849 820 850 static libtrace_linktype_t erf_get_link_type(const struct libtrace_packet_t *packet) { 821 851 dag_record_t *erfptr = 0; 822 erfptr = (dag_record_t *)packet-> buffer;852 erfptr = (dag_record_t *)packet->header; 823 853 switch (erfptr->type) { 824 854 case TYPE_LEGACY: return TRACE_TYPE_LEGACY; … … 834 864 static int8_t erf_get_direction(const struct libtrace_packet_t *packet) { 835 865 dag_record_t *erfptr = 0; 836 erfptr = (dag_record_t *)packet-> buffer;866 erfptr = (dag_record_t *)packet->header; 837 867 return erfptr->flags.iface; 838 868 } … … 840 870 static int8_t erf_set_direction(const struct libtrace_packet_t *packet, int8_t direction) { 841 871 dag_record_t *erfptr = 0; 842 erfptr = (dag_record_t *)packet-> buffer;872 erfptr = (dag_record_t *)packet->header; 843 873 erfptr->flags.iface = direction; 844 874 return erfptr->flags.iface; … … 847 877 static uint64_t erf_get_erf_timestamp(const struct libtrace_packet_t *packet) { 848 878 dag_record_t *erfptr = 0; 849 erfptr = (dag_record_t *)packet-> buffer;879 erfptr = (dag_record_t *)packet->header; 850 880 return erfptr->ts; 851 881 } … … 856 886 857 887 static int legacypos_get_wire_length(const struct libtrace_packet_t *packet) { 858 legacy_pos_t *lpos = (legacy_pos_t *)packet-> buffer;888 legacy_pos_t *lpos = (legacy_pos_t *)packet->header; 859 889 return ntohs(lpos->wlen); 860 890 } … … 865 895 866 896 static int legacyeth_get_wire_length(const struct libtrace_packet_t *packet) { 867 legacy_ether_t *leth = (legacy_ether_t *)packet-> buffer;897 legacy_ether_t *leth = (legacy_ether_t *)packet->header; 868 898 return ntohs(leth->wlen); 869 899 } 870 900 static int erf_get_capture_length(const struct libtrace_packet_t *packet) { 871 901 dag_record_t *erfptr = 0; 872 erfptr = (dag_record_t *)packet-> buffer;902 erfptr = (dag_record_t *)packet->header; 873 903 return (ntohs(erfptr->rlen) - erf_get_framing_length(packet)); 874 904 } … … 876 906 static int erf_get_wire_length(const struct libtrace_packet_t *packet) { 877 907 dag_record_t *erfptr = 0; 878 erfptr = (dag_record_t *)packet-> buffer;908 erfptr = (dag_record_t *)packet->header; 879 909 return ntohs(erfptr->wlen); 880 910 } … … 887 917 return (packet->size - erf_get_framing_length(packet)); 888 918 } 889 erfptr = (dag_record_t *)packet-> buffer;919 erfptr = (dag_record_t *)packet->header; 890 920 erfptr->rlen = htons(size + erf_get_framing_length(packet)); 891 921 packet->size = size + erf_get_framing_length(packet); 892 return size;922 return packet->size; 893 923 } 894 924 -
lib/format_pcap.c
r187a6d6 r14d8a63 210 210 int numbytes = 0; 211 211 212 memcpy(buffer,pcaphdr,sizeof(struct pcap_pkthdr)); 212 // This is ugly, but seems to be needed. We want both the 213 // header and the payload in the same block of memory (packet->buffer) 214 //memcpy(buffer,pcaphdr,sizeof(struct pcap_pkthdr)); 213 215 numbytes = pcaphdr->len; 214 memcpy(buffer + sizeof(struct pcap_pkthdr),pcappkt,numbytes); 216 //memcpy(buffer + sizeof(struct pcap_pkthdr),pcappkt,numbytes); 217 218 //packet->header = packet->buffer; 219 //packet->payload = packet->header + sizeof(struct pcap_pkthdr); 220 packet->header = (void *)pcaphdr; 221 packet->payload = (void *)pcappkt; 222 215 223 216 224 packet->size = numbytes + sizeof(struct pcap_pkthdr); … … 235 243 static int pcap_write_packet(struct libtrace_out_t *libtrace, const struct libtrace_packet_t *packet) { 236 244 struct pcap_pkthdr pcap_pkt_hdr; 237 void *link = trace_get_link(packet);238 245 239 246 if (!OUTPUT.trace.pcap) { … … 247 254 packet->trace->format == &pcapint) { 248 255 249 pcap_dump((u_char*)OUTPUT.trace.dump,(struct pcap_pkthdr *)packet-> buffer,link);256 pcap_dump((u_char*)OUTPUT.trace.dump,(struct pcap_pkthdr *)packet->header,packet->payload); 250 257 } else { 251 258 // Leave the manual copy as it is, as it gets around … … 257 264 pcap_pkt_hdr.len = trace_get_wire_length(packet); 258 265 259 pcap_dump((u_char*)OUTPUT.trace.dump, &pcap_pkt_hdr, link);266 pcap_dump((u_char*)OUTPUT.trace.dump, &pcap_pkt_hdr, packet->payload); 260 267 } 261 268 return 0; … … 269 276 270 277 static void *pcap_get_link(const struct libtrace_packet_t *packet) { 271 return (void *) (packet->buffer + sizeof(struct pcap_pkthdr));278 return (void *) packet->payload; 272 279 } 273 280 … … 275 282 struct pcap_pkthdr *pcapptr = 0; 276 283 int linktype = 0; 277 pcapptr = (struct pcap_pkthdr *)packet-> buffer;284 pcapptr = (struct pcap_pkthdr *)packet->header; 278 285 linktype = pcap_datalink(packet->trace->format_data->input.pcap); 279 286 switch(linktype) { … … 352 359 353 360 static struct timeval pcap_get_timeval(const struct libtrace_packet_t *packet) { 354 struct pcap_pkthdr *pcapptr = (struct pcap_pkthdr *)packet-> buffer;361 struct pcap_pkthdr *pcapptr = (struct pcap_pkthdr *)packet->header; 355 362 struct timeval ts; 356 363 ts.tv_sec = pcapptr->ts.tv_sec; … … 362 369 static int pcap_get_capture_length(const struct libtrace_packet_t *packet) { 363 370 struct pcap_pkthdr *pcapptr = 0; 364 pcapptr = (struct pcap_pkthdr *)packet-> buffer;371 pcapptr = (struct pcap_pkthdr *)packet->header; 365 372 return pcapptr->caplen; 366 373 } … … 368 375 static int pcap_get_wire_length(const struct libtrace_packet_t *packet) { 369 376 struct pcap_pkthdr *pcapptr = 0; 370 pcapptr = (struct pcap_pkthdr *)packet-> buffer;377 pcapptr = (struct pcap_pkthdr *)packet->header; 371 378 return ntohs(pcapptr->len); 372 379 } … … 383 390 return (packet->size - sizeof(struct pcap_pkthdr)); 384 391 } 385 pcapptr = (struct pcap_pkthdr *)packet-> buffer;392 pcapptr = (struct pcap_pkthdr *)packet->header; 386 393 pcapptr->caplen = size; 387 394 packet->size = size + sizeof(struct pcap_pkthdr); 388 return size;395 return packet->size; 389 396 } 390 397 -
lib/format_wag.c
r79dbcef r14d8a63 276 276 void *buffer = 0; 277 277 278 if (packet->buf_control == EXTERNAL) { 279 packet->buf_control = PACKET; 280 packet->buffer = malloc(LIBTRACE_PACKET_BUFSIZE); 281 } 278 282 packet->trace = libtrace; 279 283 buffer = packet->buffer; … … 318 322 packet->status.type = RT_DATA; 319 323 packet->status.message = 0; 324 packet->header = packet->buffer; 325 packet->payload = packet->buffer + pcap_get_framing_length(packet); 320 326 packet->size = numbytes; 321 327 return numbytes; … … 338 344 339 345 static void *wag_get_link(const struct libtrace_packet_t *packet) { 346 return (void *)packet->payload; 347 /* 340 348 struct wag_data_frame *wagptr = (struct wag_data_frame *)packet->buffer; 341 349 void *payload = wagptr->data; 342 350 return (void*)payload; 351 */ 343 352 } 344 353 … … 348 357 349 358 static int8_t wag_get_direction(const struct libtrace_packet_t *packet) { 350 struct wag_data_frame *wagptr = (struct wag_data_frame *)packet-> buffer;359 struct wag_data_frame *wagptr = (struct wag_data_frame *)packet->header; 351 360 if (wagptr->hdr.type == 0) { 352 361 return wagptr->hdr.subtype; … … 356 365 357 366 static uint64_t wag_get_erf_timestamp(const struct libtrace_packet_t *packet) { 358 struct wag_data_frame *wagptr = (struct wag_data_frame *)packet-> buffer;367 struct wag_data_frame *wagptr = (struct wag_data_frame *)packet->header; 359 368 uint64_t timestamp = 0; 360 369 timestamp = wagptr->ts.subsecs; … … 366 375 367 376 static int wag_get_capture_length(const struct libtrace_packet_t *packet) { 368 struct wag_data_frame *wagptr = (struct wag_data_frame *)packet-> buffer;377 struct wag_data_frame *wagptr = (struct wag_data_frame *)packet->header; 369 378 //return (wagptr->hdr.size); 370 379 return ntohs(wagptr->hdr.size); … … 372 381 373 382 static int wag_get_wire_length(const struct libtrace_packet_t *packet) { 374 struct wag_data_frame *wagptr = (struct wag_data_frame *)packet-> buffer;383 struct wag_data_frame *wagptr = (struct wag_data_frame *)packet->header; 375 384 //return (wagptr->hdr.size); 376 385 return ntohs(wagptr->hdr.size); -
lib/libtrace.h
r3b8338b r14d8a63 95 95 } libtrace_packet_status_t; 96 96 97 typedef enum {PACKET, EXTERNAL } buf_control_t; 97 98 /** Structure holding information about a packet */ 98 99 #define LIBTRACE_PACKET_BUFSIZE 65536 99 100 typedef struct libtrace_packet_t { 100 struct libtrace_t *trace; 101 //void *buffer; 102 char buffer[LIBTRACE_PACKET_BUFSIZE]; 101 struct libtrace_t *trace; 102 void *header; 103 void *payload; 104 void *buffer; 103 105 size_t size; 104 106 libtrace_packet_status_t status; 107 buf_control_t buf_control; 105 108 } __attribute__ ((packed)) libtrace_packet_t; 106 109 … … 344 347 void trace_output_destroy(struct libtrace_out_t *trace); 345 348 349 /** Create a new packet object 350 * 351 * @return a pointer to an initialised libtrace_packet_t object 352 */ 353 struct libtrace_packet_t *trace_packet_create(); 354 355 /** Destroy a packet object 356 * 357 * sideeffect: sets packet to NULL 358 */ 359 void trace_packet_destroy(struct libtrace_packet_t **packet); 360 361 346 362 /** Read one packet from the trace into buffer 347 363 * -
lib/trace.c
rf3ed52a r14d8a63 488 488 } 489 489 490 /** Create a new packet object 491 * 492 * @ return a pointer to an initialised libtrace_packet_t structure 493 */ 494 struct libtrace_packet_t *trace_packet_create() { 495 struct libtrace_packet_t *packet = calloc(1,sizeof(struct libtrace_packet_t)); 496 packet->buffer = malloc(LIBTRACE_PACKET_BUFSIZE); 497 packet->buf_control = PACKET; 498 return packet; 499 } 500 501 /** Destroy a packet object 502 * 503 * sideeffect: sets packet to NULL 504 */ 505 void trace_packet_destroy(struct libtrace_packet_t **packet) { 506 if ((*packet)->buf_control) { 507 free((*packet)->buffer); 508 } 509 free((*packet)); 510 packet = NULL; 511 } 512 490 513 /* Read one packet from the trace into buffer 491 514 * … … 543 566 */ 544 567 void *trace_get_link(const struct libtrace_packet_t *packet) { 568 return (void *)packet->payload; 569 /* 545 570 const void *ethptr = 0; 546 571 … … 551 576 } 552 577 return (void *)ethptr; 578 */ 553 579 } 554 580
Note: See TracChangeset
for help on using the changeset viewer.