- Timestamp:
- 02/21/06 15:48:53 (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:
- 9ff68ff
- Parents:
- 1b4901a
- Location:
- lib
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
lib/format_erf.c
r0a6638f r6dbc47a 30 30 #define _GNU_SOURCE 31 31 32 #define RT_MSG 233 #define RT_DATA 134 35 32 #include "config.h" 36 33 #include "common.h" … … 153 150 static int dag_start_input(struct libtrace_t *libtrace) { 154 151 struct stat buf; 155 if (stat( packet->trace->uridata) == -1) {152 if (stat(libtrace->uridata, &buf) == -1) { 156 153 trace_set_err(errno,"stat(%s)",libtrace->uridata); 157 154 return 0; … … 159 156 if (S_ISCHR(buf.st_mode)) { 160 157 /* DEVICE */ 161 if((INPUT.fd = dag_open( packet->trace->uridata)) < 0) {158 if((INPUT.fd = dag_open(libtrace->uridata)) < 0) { 162 159 trace_set_err(errno,"Cannot open DAG %s", 163 packet->trace->uridata);160 libtrace->uridata); 164 161 return 0; 165 162 } 166 163 if((DAG.buf = (void *)dag_mmap(INPUT.fd)) == MAP_FAILED) { 167 164 trace_set_err(errno,"Cannot mmap DAG %s", 168 packet->trace->uridata);165 libtrace->uridata); 169 166 return 0; 170 167 } 171 168 if(dag_start(INPUT.fd) < 0) { 172 169 trace_set_err(errno,"Cannot start DAG %s", 173 packet->trace->uridata);170 libtrace->uridata); 174 171 return 0; 175 172 } 176 173 } else { 177 174 trace_set_err(errno,"Not a valid dag device: %s", 178 packet->trace->uridata);175 libtrace->uridata); 179 176 return 0; 180 177 } … … 305 302 #endif 306 303 304 static int rtclient_fin_input(struct libtrace_t *libtrace) { 305 close(INPUT.fd); 306 return 0; 307 } 308 307 309 static int erf_fin_input(struct libtrace_t *libtrace) { 308 310 LIBTRACE_CLOSE(INPUT.file); 309 311 free(libtrace->format_data); 310 return 0;311 }312 313 static int rtclient_fin_input(struct libtrace_t *libtrace) {314 close(INPUT.fd);315 312 return 0; 316 313 } … … 376 373 packet->buffer = erfptr; 377 374 packet->header = erfptr; 378 if (((dag_record_t *) buffer)->flags.rxerror == 1) {375 if (((dag_record_t *)packet->buffer)->flags.rxerror == 1) { 379 376 packet->payload = NULL; 380 377 } else { … … 470 467 } 471 468 469 #define RT_DATA 1 470 #define RT_MSG 2 471 472 472 static int rtclient_read_packet(struct libtrace_t *libtrace, struct libtrace_packet_t *packet) { 473 473 int numbytes = 0; … … 594 594 } 595 595 596 if (packet->trace->format == &erf ||596 if (packet->trace->format == &erf 597 597 #if HAVE_DAG 598 packet->trace->format == &dag ||599 #endif 600 packet->trace->format == &rtclient) {598 || packet->trace->format == &dag 599 #endif 600 ) { 601 601 numbytes = erf_dump_packet(libtrace, 602 602 (dag_record_t *)packet->buffer, … … 751 751 752 752 static void rtclient_help() { 753 printf("rtclient format module\n"); 753 printf("rtclient format module: $Revision$\n"); 754 printf("DEPRECATED - use rt module instead\n"); 754 755 printf("Supported input URIs:\n"); 755 printf("\trtclient:hostname:port\n"); 756 printf("\trtclient:hostname (connects on default port)\n"); 757 printf("\n"); 758 printf("\te.g.: rtclient:localhost\n"); 759 printf("\te.g.: rtclient:localhost:32500\n"); 760 printf("\n"); 761 printf("Supported output URIs:\n"); 762 printf("\trtclient: \t(will output on default port on all available IP addresses) \n"); 763 printf("\trtclient:hostname:port\n"); 764 printf("\trtclient:port\n"); 765 printf("\n"); 766 printf("\te.g.: rtclient:32500\n"); 767 printf("\te.g.: rtclient:\n"); 768 printf("\n"); 769 770 } 756 printf("\trtclient:host:port\n"); 757 printf("\n"); 758 printf("\te.g.:rtclient:localhost:3435\n"); 759 printf("\n"); 760 printf("Supported output URIs:\n"); 761 printf("\tnone\n"); 762 printf("\n"); 763 } 771 764 772 765 static struct libtrace_format_t erf = { 773 766 "erf", 774 767 "$Id$", 775 "erf",768 TRACE_FORMAT_ERF, 776 769 erf_init_input, /* init_input */ 777 770 NULL, /* config_input */ … … 807 800 "dag", 808 801 "$Id$", 809 "erf",802 TRACE_FORMAT_ERF, 810 803 dag_init_input, /* init_input */ 811 804 NULL, /* config_input */ 812 805 dag_start_input, /* start_input */ 806 NULL, /* pause_input */ 813 807 NULL, /* init_output */ 814 808 NULL, /* config_output */ … … 824 818 NULL, /* get_timeval */ 825 819 NULL, /* get_seconds */ 820 NULL, /* seek_erf */ 821 NULL, /* seek_timeval */ 822 NULL, /* seek_seconds */ 826 823 erf_get_capture_length, /* get_capture_length */ 827 824 erf_get_wire_length, /* get_wire_length */ … … 837 834 "rtclient", 838 835 "$Id$", 839 "erf",836 TRACE_FORMAT_ERF, 840 837 rtclient_init_input, /* init_input */ 841 838 NULL, /* config_input */ … … 868 865 869 866 void __attribute__((constructor)) erf_constructor() { 867 register_format(&rtclient); 870 868 register_format(&erf); 871 869 #ifdef HAVE_DAG -
lib/format_legacy.c
r8ee7caa r6dbc47a 238 238 "legacyatm", 239 239 "$Id$", 240 "legacyatm",240 TRACE_FORMAT_LEGACY, 241 241 erf_init_input, /* init_input */ 242 242 NULL, /* config_input */ … … 271 271 "legacyeth", 272 272 "$Id$", 273 "legacyeth",273 TRACE_FORMAT_LEGACY, 274 274 erf_init_input, /* init_input */ 275 275 NULL, /* config_input */ … … 304 304 "legacypos", 305 305 "$Id$", 306 "legacypos",306 TRACE_FORMAT_LEGACY, 307 307 erf_init_input, /* init_input */ 308 308 NULL, /* config_input */ -
lib/format_pcap.c
rdf338b3 r6dbc47a 446 446 "pcap", 447 447 "$Id$", 448 "pcap",448 TRACE_FORMAT_PCAP, 449 449 pcap_init_input, /* init_input */ 450 450 NULL, /* config_input */ … … 479 479 "pcapint", 480 480 "$Id$", 481 "pcap",481 TRACE_FORMAT_PCAP, 482 482 pcapint_init_input, /* init_input */ 483 483 pcapint_config_input, /* config_input */ -
lib/format_rt.c
rf03fc17 r6dbc47a 68 68 #define RT_INFO libtrace->format_data 69 69 70 int reliability = 0; 71 70 72 char *rt_deny_reason(uint8_t reason) { 71 73 char *string = 0; … … 106 108 struct sockaddr_in remote; 107 109 rt_header_t connect_msg; 108 uint8_t reason; 110 rt_deny_conn_t deny_hdr; 111 rt_hello_t hello_opts; 112 uint8_t reason; 109 113 110 114 if ((he=gethostbyname(RT_INFO->hostname)) == NULL) { … … 132 136 if (recv(RT_INFO->input_fd, &connect_msg, sizeof(rt_header_t), 0) != sizeof(rt_header_t) ) { 133 137 printf("An error occured while connecting to %s\n", RT_INFO->hostname); 134 return -1;138 return 0; 135 139 } 136 140 … … 138 142 case RT_DENY_CONN: 139 143 140 if (recv(RT_INFO->input_fd, &reason, 1, 0) != 1) { 144 if (recv(RT_INFO->input_fd, &deny_hdr, 145 sizeof(rt_deny_conn_t), 146 0) != sizeof(rt_deny_conn_t)) { 141 147 reason = 0; 142 148 } 149 reason = deny_hdr.reason; 143 150 printf("Connection attempt is denied by the server: %s\n", 144 151 rt_deny_reason(reason)); 145 return -1;152 return 0; 146 153 case RT_HELLO: 147 154 // do something with options 148 155 printf("Hello\n"); 156 if (recv(RT_INFO->input_fd, &hello_opts, 157 sizeof(rt_hello_t), 0) 158 != sizeof(rt_hello_t)) { 159 printf("Failed to read hello options\n"); 160 return 0; 161 } 162 reliability = hello_opts.reliable; 149 163 150 164 return 1; 151 165 case RT_DATA: 152 166 printf("Server needs to send RT_HELLO before sending data to clients\n"); 153 return -1;167 return 0; 154 168 default: 155 169 printf("Unexpected message type: %d\n", connect_msg.type); 156 return -1;157 } 158 159 return -1;170 return 0; 171 } 172 173 return 0; 160 174 } 161 175 … … 198 212 199 213 start_msg.type = RT_START; 200 start_msg.length = sizeof(rt_header_t); 214 start_msg.length = sizeof(rt_start_t); 215 216 printf("Sending start - len: %d\n", start_msg.length); 201 217 202 218 // Need to send start message to server … … 206 222 } 207 223 208 return 1;224 return 0; 209 225 } 210 226 … … 213 229 214 230 close_msg.type = RT_CLOSE; 215 close_msg.length = sizeof(rt_ header_t);231 close_msg.length = sizeof(rt_close_t); 216 232 217 233 // Send a close message to the server … … 263 279 struct libtrace_packet_t *packet, uint16_t format) { 264 280 switch (format) { 265 case RT_FORMAT_ERF:281 case TRACE_FORMAT_ERF: 266 282 if (!RT_INFO->dummy_erf) { 267 283 RT_INFO->dummy_erf = trace_create_dead("erf:-"); … … 269 285 packet->trace = RT_INFO->dummy_erf; 270 286 break; 271 case RT_FORMAT_PCAP:287 case TRACE_FORMAT_PCAP: 272 288 if (!RT_INFO->dummy_pcap) { 273 289 RT_INFO->dummy_pcap = trace_create_dead("pcap:-"); … … 275 291 packet->trace = RT_INFO->dummy_pcap; 276 292 break; 277 case RT_FORMAT_WAG:293 case TRACE_FORMAT_WAG: 278 294 if (!RT_INFO->dummy_wag) { 279 295 RT_INFO->dummy_wag = trace_create_dead("wtf:-"); … … 281 297 packet->trace = RT_INFO->dummy_wag; 282 298 break; 299 case TRACE_FORMAT_RT: 300 printf("Format in a data packet should NOT be set to RT\n"); 301 return -1; 302 case TRACE_FORMAT_LEGACY: 303 printf("Sending legacy over RT is currently not supported\n"); 304 return -1; 283 305 default: 284 306 printf("Unrecognised format: %d\n", format); … … 292 314 293 315 switch (format) { 294 case RT_FORMAT_ERF:316 case TRACE_FORMAT_ERF: 295 317 erfptr = (dag_record_t *)packet->header; 296 318 … … 310 332 311 333 static int rt_send_ack(struct libtrace_t *libtrace, 312 struct libtrace_packet_t *packet ) {334 struct libtrace_packet_t *packet, uint32_t seqno) { 313 335 314 336 static char *ack_buffer = 0; … … 327 349 328 350 hdr->type = RT_ACK; 329 hdr->length = sizeof(rt_ header_t) + sizeof(rt_ack_t);330 331 ack_hdr-> timestamp = trace_get_erf_timestamp(packet);332 333 to_write = hdr->length ;351 hdr->length = sizeof(rt_ack_t); 352 353 ack_hdr->sequence = seqno; 354 355 to_write = hdr->length + sizeof(rt_header_t); 334 356 buf_ptr = ack_buffer; 357 335 358 336 359 while (to_write > 0) { … … 360 383 int read_required = 0; 361 384 rt_header_t pkt_hdr; 362 uint16_t format;363 385 char msg_buf[RP_BUFSIZE]; 364 386 365 387 rt_data_t data_hdr; 366 388 void *buffer = 0; 367 389 … … 371 393 packet->buf_control = PACKET; 372 394 packet->buffer = malloc(LIBTRACE_PACKET_BUFSIZE); 373 } 395 } else { 396 if (!packet->buffer) 397 packet->buffer = malloc(LIBTRACE_PACKET_BUFSIZE); 398 } 374 399 375 400 buffer = packet->buffer; … … 394 419 tracefifo_out_update(libtrace->fifo, sizeof(rt_header_t)); 395 420 396 packet->size = pkt_hdr.length ;421 packet->size = pkt_hdr.length + sizeof(rt_header_t); 397 422 packet->type = pkt_hdr.type; 398 423 399 424 switch (packet->type) { 400 425 case RT_DATA: 401 426 if (tracefifo_out_read(libtrace->fifo, 402 & format,403 sizeof( uint16_t)) == 0)427 &data_hdr, 428 sizeof(rt_data_t)) == 0) 404 429 { 405 430 tracefifo_out_reset(libtrace->fifo); … … 408 433 } 409 434 if (tracefifo_out_read(libtrace->fifo, buffer, 410 packet->size - sizeof( uint16_t))== 0)435 packet->size - sizeof(rt_data_t) - sizeof(rt_header_t))== 0) 411 436 { 412 437 tracefifo_out_reset(libtrace->fifo); … … 415 440 } 416 441 // set packet->trace 417 if (rt_set_format(libtrace, packet, format) < 0) { 442 if (rt_set_format(libtrace, packet, 443 data_hdr.format) < 0) { 418 444 return -1; 419 445 } 420 446 // set packet->payload 421 rt_set_payload(packet, format);447 rt_set_payload(packet, data_hdr.format); 422 448 423 // send ack 424 if (rt_send_ack(libtrace, packet) == -1) { 425 return -1; 426 } 427 449 if (reliability > 0) { 450 // send ack 451 if (rt_send_ack(libtrace, packet, 452 data_hdr.sequence) 453 == -1) 454 { 455 return -1; 456 } 457 } 428 458 break; 429 459 case RT_STATUS: … … 471 501 472 502 // got in our whole packet, so... 473 tracefifo_out_update(libtrace->fifo,packet->size); 474 475 tracefifo_ack_update(libtrace->fifo,packet->size + 476 sizeof(rt_header_t)); 503 tracefifo_out_update(libtrace->fifo,packet->size - sizeof(rt_header_t)); 504 505 tracefifo_ack_update(libtrace->fifo,packet->size); 477 506 return 1; 478 507 } while(1); … … 502 531 "rt", 503 532 "$Id$", 504 "rt",533 TRACE_FORMAT_RT, 505 534 rt_init_input, /* init_input */ 506 535 NULL, /* config_input */ -
lib/format_wag.c
r8ee7caa r6dbc47a 434 434 "wag", 435 435 "$Id$", 436 "wtf",436 TRACE_FORMAT_WAG, 437 437 wag_init_input, /* init_input */ 438 438 NULL, /* config_input */ … … 469 469 "wtf", 470 470 "$Id$", 471 "wtf",472 471 TRACE_FORMAT_WAG, 472 wtf_init_input, /* init_input */ 473 473 NULL, /* config input */ 474 474 NULL, /* start input */ -
lib/libtrace.h
r0a6638f r6dbc47a 883 883 const char *trace_parse_uri(const char *uri, char **format); 884 884 885 /* Base format type definitions */ 886 enum base_format_t { 887 TRACE_FORMAT_ERF =1, 888 TRACE_FORMAT_PCAP =2, 889 TRACE_FORMAT_WAG =3, 890 TRACE_FORMAT_RT =4, 891 TRACE_FORMAT_LEGACY =5 892 }; 893 894 /** Gets the framing header type for a given packet. 895 * @param packet the packet opaque pointer 896 * @return the format of the packet 897 */ 898 enum base_format_t trace_get_format(struct libtrace_packet_t *packet); 899 900 885 901 /** libtrace error information */ 886 902 extern struct trace_err_t{ -
lib/libtrace_int.h
r0a6638f r6dbc47a 72 72 73 73 #include <stdbool.h> 74 75 76 74 77 75 … … 152 150 char *name; 153 151 char *version; 154 char *type;152 enum base_format_t type; 155 153 int (*init_input)(libtrace_t *libtrace); 156 154 int (*config_input)(libtrace_t *libtrace,trace_option_t option,void *value); -
lib/rt_protocol.h
r1fbd938 r6dbc47a 7 7 #define COLLECTOR_PORT 3435 8 8 9 #define RT_MAX_HDR_SIZE 256 10 #define MAX_SEQUENCE 2147483647 11 9 12 /* Type field definitions */ 13 /* NOTE: RT_DATA should always be zero */ 10 14 enum rt_field_t { 11 RT_ HELLO =0, /* Connection accepted*/12 RT_ DATA =1, /* Libtrace data packet*/15 RT_DATA =0, /* Libtrace data packet */ 16 RT_HELLO =1, /* Connection accepted */ 13 17 RT_START =2, /* Request for data transmission to begin */ 14 18 RT_ACK =3, /* Data acknowledgement */ … … 23 27 }; 24 28 25 /* Format field definitions */ 26 enum rt_format_t { 27 RT_FORMAT_ERF =1, 28 RT_FORMAT_PCAP =2, 29 RT_FORMAT_WAG =3 30 }; 31 32 typedef struct fifo_state { 29 typedef struct fifo_info { 33 30 uint64_t in; 34 31 uint64_t out; … … 36 33 uint64_t length; 37 34 uint64_t used; 38 } fifo_ state_t;35 } fifo_info_t; 39 36 40 37 /* RT packet header */ … … 46 43 typedef struct rt_data { 47 44 uint16_t format; 48 char *data;45 uint32_t sequence; 49 46 } rt_data_t; 50 47 48 /* TODO: Reorganise this struct once more hello info is added */ 51 49 typedef struct rt_hello { 52 50 uint8_t reliable; 53 51 } rt_hello_t; 54 52 … … 58 56 59 57 typedef struct rt_ack { 60 uint 64_t timestamp;58 uint32_t sequence; 61 59 } rt_ack_t; 62 60 63 61 typedef struct rt_status { 64 fifo_ state_t fifo_status;62 fifo_info_t fifo_status; 65 63 } rt_status_t; 66 64 -
lib/trace.c
r0a6638f r6dbc47a 116 116 #include "libtrace_int.h" 117 117 #include "format_helper.h" 118 #include "rt_protocol.h" 118 119 #include <err.h> 119 120 … … 544 545 * structure */ 545 546 packet->trace = libtrace; 546 547 packet->type = RT_DATA; 548 547 549 if (libtrace->format->read_packet) { 548 550 do { … … 1566 1568 return uridata; 1567 1569 } 1570 1571 enum base_format_t trace_get_format(struct libtrace_packet_t *packet) { 1572 assert(packet); 1573 1574 return packet->trace->format->type; 1575 } 1568 1576 1569 1577 /** Update the libtrace error
Note: See TracChangeset
for help on using the changeset viewer.