Changeset 8f4152b
- Timestamp:
- 10/21/05 12:17:08 (16 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:
- 41660d5
- Parents:
- b4cb91f
- Location:
- lib
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
lib/dagformat.h
r641dc7c r8f4152b 82 82 #define dag_record_size 16 83 83 84 85 typedef struct legacy_cell {86 uint64_t ts;87 uint32_t crc;88 } legacy_cell_t;89 90 typedef struct legacy_ether {91 uint64_t ts;92 uint16_t wlen;93 } legacy_ether_t;94 95 typedef struct legacy_pos {96 uint64_t ts;97 uint32_t slen;98 uint32_t wlen;99 } legacy_pos_t;100 101 102 84 #endif // _DAGFORMAT_H_ -
lib/format_erf.c
ref90843 r8f4152b 192 192 #endif 193 193 194 /* Dag erf ether packets have a 2 byte padding before the packet 195 * so that the ip header is aligned on a 32 bit boundary. 196 */ 197 static int erf_get_padding(const struct libtrace_packet_t *packet) 198 { 199 switch(trace_get_link_type(packet)) { 200 case TRACE_TYPE_ETH: return 2; 201 default: return 0; 202 } 203 } 204 205 static int erf_get_erf_headersize(const struct libtrace_packet_t *packet) 206 { 207 return dag_record_size + erf_get_padding(packet); 208 } 209 210 194 211 static int erf_init_input(struct libtrace_t *libtrace) { 195 212 struct stat buf; … … 498 515 } 499 516 rlen = ntohs(((dag_record_t *)buffer)->rlen); 517 buffer2 = buffer + dag_record_size; 500 518 size = rlen - dag_record_size; 501 519 assert(size < LIBTRACE_PACKET_BUFSIZE); 502 buffer2 = buffer + dag_record_size;503 520 /* If your trace is legacy, or corrupt, then this assert may fire. */ 504 521 assert(ntohs(((dag_record_t *)buffer)->rlen) <= 505 ntohs(((dag_record_t*)buffer)->wlen)+ dag_record_size);522 ntohs(((dag_record_t*)buffer)->wlen)+erf_get_erf_headersize(packet)); 506 523 /* If it's an unknown type, your trace is legacy */ 507 524 assert(((dag_record_t *)buffer)->type != 0); … … 512 529 if ((numbytes=LIBTRACE_READ(INPUT.file, 513 530 buffer2, 514 size)) == -1) {531 size)) != size) { 515 532 perror("libtrace_read"); 516 533 return -1; … … 578 595 // read in the ERF header 579 596 if ((numbytes = tracefifo_out_read(libtrace->fifo, buffer, 580 sizeof(dag_record_t))) == 0) {597 dag_record_size)) == 0) { 581 598 tracefifo_out_reset(libtrace->fifo); 582 599 read_required = 1; … … 603 620 } 604 621 605 static int erf_dump_packet(struct libtrace_out_t *libtrace, dag_record_t *erfptr, void *buffer, size_t size) {622 static int erf_dump_packet(struct libtrace_out_t *libtrace, dag_record_t *erfptr, int pad, void *buffer, size_t size) { 606 623 int numbytes = 0; 607 if ((numbytes = LIBTRACE_WRITE(OUTPUT.file, erfptr, dag_record_size + 2)) == 0) {624 if ((numbytes = LIBTRACE_WRITE(OUTPUT.file, erfptr, dag_record_size + pad)) == 0) { 608 625 perror("libtrace_write"); 609 626 return -1; … … 613 630 return -1; 614 631 } 615 return numbytes + sizeof(dag_record_t); 616 632 return numbytes + pad + dag_record_size; 617 633 } 618 634 … … 620 636 int numbytes = 0; 621 637 dag_record_t erfhdr; 638 int pad = 0; 622 639 void *payload = (void *)trace_get_link(packet); 623 640 641 pad = erf_get_padding(packet); 624 642 if (packet->trace->format == erf_ptr || 625 643 #if HAVE_DAG … … 629 647 numbytes = erf_dump_packet(libtrace, 630 648 (dag_record_t *)packet->buffer, 649 pad, 631 650 payload, 632 651 packet->size - 633 (dag_record_size + 2));652 (dag_record_size + pad)); 634 653 } else { 635 654 // convert format - build up a new erf header 636 655 // Timestamp 637 656 erfhdr.ts = trace_get_erf_timestamp(packet); 638 // Link type639 switch(trace_get_link_type(packet)) {640 case TRACE_TYPE_ETH:641 erfhdr.type=TYPE_ETH; break;642 case TRACE_TYPE_ATM:643 erfhdr.type=TYPE_ATM; break;644 default:645 erfhdr.type=0;646 }647 657 // Flags. Can't do this 648 658 memset(&erfhdr.flags,1,1); 649 659 // Packet length (rlen includes format overhead) 650 erfhdr.rlen = trace_get_capture_length(packet) + sizeof(dag_record_t);660 erfhdr.rlen = trace_get_capture_length(packet) + erf_get_erf_headersize(packet); 651 661 // loss counter. Can't do this 652 662 erfhdr.lctr = 0; … … 657 667 numbytes = erf_dump_packet(libtrace, 658 668 &erfhdr, 669 pad, 659 670 payload, 660 671 erfhdr.rlen); … … 693 704 } 694 705 ethptr = ((uint8_t *)packet->buffer + 695 dag_record_size + 2);706 erf_get_erf_headersize(packet)); 696 707 return (void *)ethptr; 697 708 } … … 747 758 dag_record_t *erfptr = 0; 748 759 erfptr = (dag_record_t *)packet->buffer; 749 return (ntohs(erfptr->rlen) - sizeof(dag_record_t));760 return (ntohs(erfptr->rlen) - erf_get_erf_headersize(packet)); 750 761 } 751 762 … … 759 770 dag_record_t *erfptr = 0; 760 771 assert(packet); 761 if((size + sizeof(dag_record_t)) > packet->size) {772 if((size + erf_get_erf_headersize(packet)) > packet->size) { 762 773 // can't make a packet larger 763 return (packet->size - sizeof(dag_record_t));774 return (packet->size - erf_get_erf_headersize(packet)); 764 775 } 765 776 erfptr = (dag_record_t *)packet->buffer; 766 erfptr->rlen = htons(size + sizeof(dag_record_t));767 packet->size = size + sizeof(dag_record_t);777 erfptr->rlen = htons(size + erf_get_erf_headersize(packet)); 778 packet->size = size + erf_get_erf_headersize(packet); 768 779 return size; 769 780 } -
lib/format_pcap.c
r194d49b r8f4152b 232 232 } 233 233 234 static int pcap_write_packet(struct libtrace_out_t *libtrace, struct libtrace_packet_t *packet) {234 static int pcap_write_packet(struct libtrace_out_t *libtrace, const struct libtrace_packet_t *packet) { 235 235 struct pcap_pkthdr pcap_pkt_hdr; 236 236 void *link = trace_get_link(packet); -
lib/format_template.c
r9c6aa95 r8f4152b 70 70 } 71 71 72 static int template_write_packet(struct libtrace_out_t *libtrace, struct libtrace_packet_t *packet) {72 static int template_write_packet(struct libtrace_out_t *libtrace, const struct libtrace_packet_t *packet) { 73 73 return -1; 74 74 } -
lib/libtrace_int.h
rc95b923 r8f4152b 69 69 # include "dagformat.h" 70 70 #endif 71 #include "daglegacy.h" 71 72 72 73 typedef enum {SOCKET, TRACE, STDIN, DEVICE, INTERFACE, RT } source_t;
Note: See TracChangeset
for help on using the changeset viewer.