Changeset afd0b73
- Timestamp:
- 02/27/06 14:19:41 (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:
- ab4cb04
- Parents:
- 9de8150
- Location:
- lib
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
lib/format_erf.c
r0ea3526 rafd0b73 360 360 packet->buffer = 0; 361 361 } 362 362 363 packet->type = RT_DATA_ERF; 364 363 365 if ((numbytes = dag_read(libtrace,0)) <= 0) 364 366 return numbytes; … … 402 404 403 405 packet->header = packet->buffer; 406 packet->type = RT_DATA_ERF; 404 407 405 408 if ((numbytes=LIBTRACE_READ(INPUT.file, … … 479 482 buffer = packet->buffer; 480 483 packet->header = packet->buffer; 484 485 packet->type = RT_DATA_ERF; 481 486 482 487 -
lib/format_legacy.c
r0ea3526 rafd0b73 155 155 } 156 156 buffer = packet->buffer; 157 158 switch(libtrace->format->type) { 159 case TRACE_FORMAT_LEGACY_ATM: 160 packet->type = RT_DATA_LEGACY_ATM; 161 break; 162 case TRACE_FORMAT_LEGACY_POS: 163 packet->type = RT_DATA_LEGACY_POS; 164 break; 165 case TRACE_FORMAT_LEGACY_ETH: 166 packet->type = RT_DATA_LEGACY_ETH; 167 break; 168 } 157 169 158 170 if ((numbytes=LIBTRACE_READ(INPUT.file, -
lib/format_pcap.c
r0ea3526 rafd0b73 274 274 static int pcap_read_packet(struct libtrace_t *libtrace, struct libtrace_packet_t *packet) { 275 275 int pcapbytes = 0; 276 276 277 packet->type = RT_DATA_PCAP; 278 277 279 pcapbytes = pcap_dispatch(INPUT.pcap, 278 280 1, /* number of packets */ -
lib/format_rt.c
r9836f12 rafd0b73 163 163 164 164 return 1; 165 case RT_DATA:166 printf("Server needs to send RT_HELLO before sending data to clients\n");167 return 0;168 165 default: 169 166 printf("Unexpected message type: %d\n", connect_msg.type); … … 217 214 218 215 /* Need to send start message to server */ 219 if (send(RT_INFO->input_fd, &start_msg, sizeof(rt_header_t), 0) != sizeof(rt_header_t)) { 216 if (send(RT_INFO->input_fd, &start_msg, sizeof(rt_header_t) + 217 start_msg.length, 0) != sizeof(rt_header_t)) { 220 218 printf("Failed to send start message to server\n"); 221 219 return -1; … … 232 230 233 231 /* Send a close message to the server */ 234 if (send(RT_INFO->input_fd, &close_msg, sizeof(rt_header_t), 0) != sizeof(rt_header_t)) { 232 if (send(RT_INFO->input_fd, &close_msg, sizeof(rt_header_t) + 233 close_msg.length, 0) != sizeof(rt_header_t)) { 235 234 printf("Failed to send close message to server\n"); 236 235 … … 277 276 278 277 static int rt_set_format(struct libtrace_t *libtrace, 279 struct libtrace_packet_t *packet , uint16_t format) {280 switch ( format) {281 case TRACE_FORMAT_ERF:278 struct libtrace_packet_t *packet) { 279 switch (packet->type) { 280 case RT_DATA_ERF: 282 281 if (!RT_INFO->dummy_erf) { 283 282 RT_INFO->dummy_erf = trace_create_dead("erf:-"); … … 285 284 packet->trace = RT_INFO->dummy_erf; 286 285 break; 287 case TRACE_FORMAT_PCAP:286 case RT_DATA_PCAP: 288 287 if (!RT_INFO->dummy_pcap) { 289 288 RT_INFO->dummy_pcap = trace_create_dead("pcap:-"); … … 291 290 packet->trace = RT_INFO->dummy_pcap; 292 291 break; 293 case TRACE_FORMAT_WAG:292 case RT_DATA_WAG: 294 293 if (!RT_INFO->dummy_wag) { 295 294 RT_INFO->dummy_wag = trace_create_dead("wtf:-"); … … 297 296 packet->trace = RT_INFO->dummy_wag; 298 297 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_ETH: 303 case TRACE_FORMAT_LEGACY_ATM: 304 case TRACE_FORMAT_LEGACY_POS: 298 case RT_DATA_LEGACY_ETH: 299 case RT_DATA_LEGACY_ATM: 300 case RT_DATA_LEGACY_POS: 305 301 printf("Sending legacy over RT is currently not supported\n"); 306 302 return -1; 307 303 default: 308 printf("Unrecognised format: %d\n", format);304 printf("Unrecognised format: %d\n", packet->type); 309 305 return -1; 310 306 } … … 312 308 } 313 309 314 static void rt_set_payload(struct libtrace_packet_t *packet , uint16_t format) {310 static void rt_set_payload(struct libtrace_packet_t *packet) { 315 311 dag_record_t *erfptr; 316 312 317 switch ( format) {318 case TRACE_FORMAT_ERF:313 switch (packet->type) { 314 case RT_DATA_ERF: 319 315 erfptr = (dag_record_t *)packet->header; 320 316 321 317 if (erfptr->flags.rxerror == 1) { 322 318 packet->payload = NULL; 323 } else { 324 packet->payload = (char *)packet->buffer 325 + trace_get_framing_length(packet); 326 } 327 break; 319 break; 320 } 321 /* else drop into the default case */ 328 322 default: 329 323 packet->payload = (char *)packet->buffer + … … 387 381 int pkt_size = 0; 388 382 389 rt_data_t data_hdr;390 383 void *buffer = 0; 391 384 … … 409 402 410 403 switch(packet->type) { 411 case RT_DATA: 412 if (rt_read(libtrace, &data_hdr, sizeof(rt_data_t)) 413 != sizeof(rt_data_t)) { 414 printf("Error receiving rt data header\n"); 415 return -1; 416 } 417 418 if (rt_read(libtrace, buffer, 419 pkt_size - sizeof(rt_data_t)) != 420 pkt_size - sizeof(rt_data_t)) { 404 case RT_DATA_ERF: 405 case RT_DATA_PCAP: 406 case RT_DATA_WAG: 407 case RT_DATA_LEGACY_ETH: 408 case RT_DATA_LEGACY_POS: 409 case RT_DATA_LEGACY_ATM: 410 if (rt_read(libtrace, buffer, pkt_size) != pkt_size) { 421 411 printf("Error receiving packet\n"); 422 412 return -1; 423 413 } 424 414 425 if (rt_set_format(libtrace, packet, 426 data_hdr.format) < 0) { 415 if (rt_set_format(libtrace, packet) < 0) { 427 416 return -1; 428 417 } 429 rt_set_payload(packet , data_hdr.format);418 rt_set_payload(packet); 430 419 431 420 if (reliability > 0) { 432 421 433 422 if (rt_send_ack(libtrace, packet, 434 data_hdr.sequence) == -1)423 pkt_hdr.sequence) == -1) 435 424 { 436 425 return -1; … … 461 450 462 451 } 452 453 static int rt_get_capture_length(const struct libtrace_packet_t *packet) { 454 switch (packet->type) { 455 case RT_DUCK: 456 return sizeof(rt_duck_t); 457 case RT_STATUS: 458 return sizeof(rt_status_t); 459 case RT_HELLO: 460 return sizeof(rt_hello_t); 461 case RT_START: 462 return sizeof(rt_start_t); 463 case RT_ACK: 464 return sizeof(rt_ack_t); 465 case RT_END_DATA: 466 return sizeof(rt_end_data_t); 467 case RT_CLOSE: 468 return sizeof(rt_close_t); 469 case RT_DENY_CONN: 470 return sizeof(rt_deny_conn_t); 471 case RT_PAUSE: 472 return sizeof(rt_pause_t); 473 case RT_PAUSE_ACK: 474 return sizeof(rt_pause_ack_t); 475 case RT_OPTION: 476 return sizeof(rt_option_t); 477 } 478 printf("Unknown type: %d\n", packet->type); 479 return 0; 480 } 481 482 static int rt_get_framing_length(const struct libtrace_packet_t *packet) { 483 return 0; 484 } 485 463 486 464 487 static int rt_get_fd(const struct libtrace_t *trace) { … … 505 528 NULL, /* seek_timeval */ 506 529 NULL, /* seek_seconds */ 507 NULL,/* get_capture_length */530 rt_get_capture_length, /* get_capture_length */ 508 531 NULL, /* get_wire_length */ 509 NULL,/* get_framing_length */532 rt_get_framing_length, /* get_framing_length */ 510 533 NULL, /* set_capture_length */ 511 534 rt_get_fd, /* get_fd */ -
lib/format_wag.c
r0ea3526 rafd0b73 295 295 296 296 packet->trace = libtrace; 297 packet->type = RT_DATA_WAG; 297 298 298 299 if ((numbytes = wag_read(libtrace, (void *)packet->buffer, RP_BUFSIZE)) <= 0) { … … 318 319 packet->buffer = malloc(LIBTRACE_PACKET_BUFSIZE); 319 320 } 320 321 packet->type = RT_DATA_WAG; 321 322 buffer2 = buffer = packet->buffer; 322 323 -
lib/libtrace_int.h
r9de8150 rafd0b73 41 41 #include "libtrace.h" 42 42 #include "fifo.h" 43 #include "rt_protocol.h" 43 44 44 45 #if HAVE_PCAP_BPF_H -
lib/rt_protocol.h
r6dbc47a rafd0b73 11 11 12 12 /* Type field definitions */ 13 /* NOTE: RT_DATA should always be zero */14 13 enum rt_field_t { 15 RT_DATA =0, /* Libtrace data packet */16 14 RT_HELLO =1, /* Connection accepted */ 17 15 RT_START =2, /* Request for data transmission to begin */ … … 24 22 RT_PAUSE =9, /* Request server to suspend sending data */ 25 23 RT_PAUSE_ACK =10, /* Server is paused message */ 26 RT_OPTION =11 /* Option request */ 24 RT_OPTION =11, /* Option request */ 25 26 RT_DATA_ERF =12, /* Erf data packet */ 27 RT_DATA_PCAP =13, /* Pcap data packet */ 28 RT_DATA_WAG =14, /* Wag data packet */ 29 RT_DATA_LEGACY_ATM =15, /* Legacy ATM packet */ 30 RT_DATA_LEGACY_POS =16, /* Legacy POS packet */ 31 RT_DATA_LEGACY_ETH =17 /* Legacy ETH packet */ 27 32 }; 28 33 … … 39 44 enum rt_field_t type; 40 45 uint16_t length; 46 uint32_t sequence; 41 47 } rt_header_t; 42 43 typedef struct rt_data {44 uint16_t format;45 uint32_t sequence;46 } rt_data_t;47 48 48 49 /* TODO: Reorganise this struct once more hello info is added */ -
lib/trace.c
r2e223eca rafd0b73 564 564 * structure */ 565 565 packet->trace = libtrace; 566 packet->type = RT_DATA; 567 566 567 568 568 if (libtrace->format->read_packet) { 569 569 do {
Note: See TracChangeset
for help on using the changeset viewer.