#include "config.h"
#include <assert.h>
#include <stdlib.h>
#include "Event.h"
#include "Net.h"
#include "TCP_Rewriter.h"
#include "common-rw.bif.func_def"
Include dependency graph for TCP_Rewriter.cc:
Go to the source code of this file.
Classes | |
struct | TCPOptionRewriting |
Defines | |
#define | MSG_PREFIX "TCP trace rewriter: " |
#define | DEBUG_MSG_A(x...) |
#define | KEEP_ORIG 1 |
#define | REUSE_OPT 1 |
#define | TO_NOP 0 |
#define | MAX_TCP_OPTION_REWRITING 9 |
Functions | |
timeval | double_to_timeval (double t) |
int | time_compare (struct timeval *tv_a, struct timeval *tv_b) |
uint16 | NextIP_ID (const uint32 src_addr, const uint16 id) |
void | schedule_funeral (TCP_Rewriter *rewriter) |
void | schedule_flush (TCP_RewriterEndpoint *endp) |
void | flush_rewriter_packet () |
TCP_Rewriter * | get_trace_rewriter (Val *conn_val) |
TCP_Rewriter * | get_trace_rewriter (Connection *conn) |
TCP_SourcePacketWriter * | get_src_pkt_writer (Connection *conn) |
Variables | |
IP_IDSet * | ip_id_set = 0 |
int | num_packets_held |
int | num_packets_cleaned |
TCPOptionRewriting | tcp_option_rewriting [MAX_TCP_OPTION_REWRITING] |
std::queue< TCP_Rewriter * > | rewriter_funerals |
std::queue< TCP_RewriterEndpoint * > | rewriters_to_flush |
|
|
Definition at line 1261 of file TCP_Rewriter.cc. |
|
Definition at line 1264 of file TCP_Rewriter.cc. Referenced by TCP_Rewriter::RewriteTCPOption(). |
|
|
Definition at line 1262 of file TCP_Rewriter.cc. |
|
Definition at line 1263 of file TCP_Rewriter.cc. |
|
Definition at line 53 of file TCP_Rewriter.cc. References double, double_to_timeval(), and int. Referenced by double_to_timeval(), and TCP_TracePacket::Finish().
|
|
Definition at line 1515 of file TCP_Rewriter.cc. References TCP_Rewriter::Conn(), TCP_RewriterEndpoint::Conn(), TCP_RewriterEndpoint::Flush(), TCP_Rewriter::Funeral(), EventMgr::HasEvents(), internal_error(), mgr, rewriter_funerals, rewriters_to_flush, and Unref(). Referenced by EventMgr::Drain().
01516 { 01517 while ( ! rewriter_funerals.empty() ) 01518 { 01519 TCP_Rewriter* rewriter = rewriter_funerals.front(); 01520 rewriter_funerals.pop(); 01521 rewriter->Funeral(); 01522 Unref(rewriter->Conn()); 01523 } 01524 01525 while ( ! rewriters_to_flush.empty() ) 01526 { 01527 TCP_RewriterEndpoint* endp = rewriters_to_flush.front(); 01528 rewriters_to_flush.pop(); 01529 01530 if ( endp ) 01531 { 01532 endp->Flush(); 01533 Unref(endp->Conn()); 01534 } 01535 } 01536 01537 if ( mgr.HasEvents() ) 01538 internal_error("flushing packets generates additional events!"); 01539 } |
|
Definition at line 1616 of file TCP_Rewriter.cc. References builtin_run_time(), CONN_TCP, Connection::ConnType(), internal_error(), and pkt_dump.
01617 { 01618 if ( ! conn || conn->ConnType() != CONN_TCP ) 01619 internal_error("connection for the trace rewriter does not exist"); 01620 01621 TCP_SourcePacketWriter* writer = ((TCP_Connection*) conn)->SourcePacketWriter(); 01622 if ( ! writer ) 01623 { 01624 if ( ! pkt_dump ) 01625 return 0; // don't complain if no output file 01626 else if ( ! dump_source_packets ) 01627 builtin_run_time("flag dump_source_packets is not set"); 01628 else 01629 internal_error("source packet writer not initialized"); 01630 } 01631 01632 return writer; 01633 } |
|
Definition at line 1547 of file TCP_Rewriter.cc. References builtin_run_time(), CONN_TCP, Connection::ConnType(), internal_error(), Connection::RewritingTrace(), and transformed_pkt_dump. Referenced by get_trace_rewriter().
01548 { 01549 if ( ! conn || conn->ConnType() != CONN_TCP ) 01550 internal_error("connection for the trace rewriter does not exist"); 01551 01552 TCP_Rewriter* rewriter = ((TCP_Connection*) conn)->TraceRewriter(); 01553 if ( ! rewriter ) 01554 { 01555 if ( ! transformed_pkt_dump ) 01556 return 0; // okay if we don't have an output file 01557 01558 else if ( ! conn->RewritingTrace() ) 01559 builtin_run_time("flag rewriting_..._trace is not set properly"); 01560 01561 else 01562 internal_error("trace rewriter not initialized"); 01563 } 01564 01565 return rewriter; 01566 } |
|
Definition at line 1541 of file TCP_Rewriter.cc.
01542 { 01543 Connection* conn = (Connection*) conn_val->AsRecordVal()->GetOrigin(); 01544 return get_trace_rewriter(conn); 01545 } |
|
Definition at line 438 of file TCP_Rewriter.cc. References IP_ID::id, IP_ID::ip, ip_id_set, IP_IDSet, uint16, and uint32.
00439 { 00440 if ( ip_id_set == 0 ) 00441 ip_id_set = new IP_IDSet(); 00442 00443 IP_ID ipid; 00444 ipid.ip = src_addr; 00445 ipid.id = id; 00446 00447 while ( ip_id_set->find(ipid) != ip_id_set->end() ) 00448 { 00449 ipid.id = (ipid.id + 1) & 0xffff; 00450 00451 if ( ipid.id == id ) 00452 { // clear all entries of the IP 00453 IP_ID first_id, last_id; 00454 first_id.ip = last_id.ip = src_addr; 00455 first_id.id = 0; last_id.id = 0xffff; 00456 ip_id_set->erase(ip_id_set->find(first_id), 00457 ip_id_set->find(last_id)); 00458 } 00459 } 00460 00461 ip_id_set->insert(ipid); 00462 00463 return uint16(ipid.id & 0xffff); 00464 } |
|
Definition at line 1509 of file TCP_Rewriter.cc. References TCP_RewriterEndpoint::Conn(), Ref(), and rewriters_to_flush. Referenced by TCP_RewriterEndpoint::ScheduleFlush().
01510 { 01511 Ref(endp->Conn()); 01512 rewriters_to_flush.push(endp); 01513 } |
|
Definition at line 1503 of file TCP_Rewriter.cc. References TCP_Rewriter::Conn(), Ref(), and rewriter_funerals. Referenced by TCP_Rewriter::Done().
01504 { 01505 Ref(rewriter->Conn()); 01506 rewriter_funerals.push(rewriter); 01507 } |
|
Definition at line 67 of file TCP_Rewriter.cc. Referenced by PacketDumper::SortTimeStamp().
00068 { 00069 if ( tv_a->tv_sec == tv_b->tv_sec ) 00070 return tv_a->tv_usec - tv_b->tv_usec; 00071 else 00072 return tv_a->tv_sec - tv_b->tv_sec; 00073 } |
|
Definition at line 50 of file TCP_Rewriter.cc. Referenced by NextIP_ID(). |
|
Definition at line 51 of file TCP_Rewriter.cc. Referenced by TCP_Rewriter::CleanUpEmptyPlaceHolders(), and net_finish(). |
|
Definition at line 51 of file TCP_Rewriter.cc. Referenced by TCP_Rewriter::HoldPacket(), net_finish(), and TCP_Rewriter::NextPacket(). |
|
Definition at line 1500 of file TCP_Rewriter.cc. Referenced by flush_rewriter_packet(), and schedule_funeral(). |
|
Definition at line 1501 of file TCP_Rewriter.cc. Referenced by flush_rewriter_packet(), and schedule_flush(). |
|
Referenced by TCP_Rewriter::RewriteTCPOption(). |