Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

TCP_Rewriter.cc File Reference

#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:

Include dependency graph

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_Rewriterget_trace_rewriter (Val *conn_val)
TCP_Rewriterget_trace_rewriter (Connection *conn)
TCP_SourcePacketWriterget_src_pkt_writer (Connection *conn)

Variables

IP_IDSetip_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


Define Documentation

#define DEBUG_MSG_A x...   ) 
 

Definition at line 47 of file TCP_Rewriter.cc.

Referenced by TCP_Rewriter::add_slot(), TCP_RewriteSlot::Dump(), TCP_Rewriter::DumpPacket(), TCP_RewriterEndpoint::Flush(), TCP_RewriterEndpoint::GenerateFIN(), TCP_Rewriter::NextPacket(), TCP_Rewriter::ReleaseSlot(), TCP_Rewriter::ReserveSlot(), TCP_RewriterEndpoint::Reset(), and TCP_RewriterEndpoint::ScheduleFlush().

#define KEEP_ORIG   1
 

Definition at line 1261 of file TCP_Rewriter.cc.

#define MAX_TCP_OPTION_REWRITING   9
 

Definition at line 1264 of file TCP_Rewriter.cc.

Referenced by TCP_Rewriter::RewriteTCPOption().

#define MSG_PREFIX   "TCP trace rewriter: "
 

Definition at line 46 of file TCP_Rewriter.cc.

Referenced by TCP_TracePacket::AppendData(), TCP_TracePacket::AppendIPHeader(), TCP_TracePacket::AppendLinkHeader(), TCP_TracePacket::AppendTCPHeader(), TCP_Rewriter::DumpPacket(), TCP_RewriterEndpoint::Flush(), TCP_Rewriter::Funeral(), TCP_RewriterEndpoint::GenerateFIN(), TCP_Rewriter::NextPacket(), TCP_RewriterEndpoint::NextPacket(), PacketDumper::PacketDumper(), TCP_RewriterEndpoint::PushPacket(), TCP_RewriterEndpoint::SetNextPacket(), TCP_RewriterEndpoint::WriteData(), and TCP_RewriterEndpoint::~TCP_RewriterEndpoint().

#define REUSE_OPT   1
 

Definition at line 1262 of file TCP_Rewriter.cc.

#define TO_NOP   0
 

Definition at line 1263 of file TCP_Rewriter.cc.


Function Documentation

struct timeval double_to_timeval double  t  )  [static]
 

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().

00054         {
00055         struct timeval tv;
00056 
00057         double t1 = floor(t);
00058         tv.tv_sec = int(t1);
00059 
00060         // Round to integer to tolerate floating arithmetic
00061         // imprecision (which can be up to 0.05 here!).
00062         tv.tv_usec = int((t - t1) * 1e6 + 0.5);
00063 
00064         return tv;
00065         }

void flush_rewriter_packet  ) 
 

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         }

TCP_SourcePacketWriter* get_src_pkt_writer Connection conn  ) 
 

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         }

TCP_Rewriter* get_trace_rewriter Connection conn  ) 
 

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         }

TCP_Rewriter* get_trace_rewriter Val conn_val  ) 
 

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         }

uint16 NextIP_ID const uint32  src_addr,
const uint16  id
 

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         }

void schedule_flush TCP_RewriterEndpoint endp  ) 
 

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         }

void schedule_funeral TCP_Rewriter rewriter  ) 
 

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         }

int time_compare struct timeval *  tv_a,
struct timeval *  tv_b
[inline]
 

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         }


Variable Documentation

IP_IDSet* ip_id_set = 0 [static]
 

Definition at line 50 of file TCP_Rewriter.cc.

Referenced by NextIP_ID().

int num_packets_cleaned
 

Definition at line 51 of file TCP_Rewriter.cc.

Referenced by TCP_Rewriter::CleanUpEmptyPlaceHolders(), and net_finish().

int num_packets_held
 

Definition at line 51 of file TCP_Rewriter.cc.

Referenced by TCP_Rewriter::HoldPacket(), net_finish(), and TCP_Rewriter::NextPacket().

std::queue<TCP_Rewriter*> rewriter_funerals [static]
 

Definition at line 1500 of file TCP_Rewriter.cc.

Referenced by flush_rewriter_packet(), and schedule_funeral().

std::queue<TCP_RewriterEndpoint*> rewriters_to_flush [static]
 

Definition at line 1501 of file TCP_Rewriter.cc.

Referenced by flush_rewriter_packet(), and schedule_flush().

struct TCPOptionRewriting tcp_option_rewriting[MAX_TCP_OPTION_REWRITING]
 

Referenced by TCP_Rewriter::RewriteTCPOption().


Generated on Sat May 1 15:29:24 2004 for bro_docs.8a82 by doxygen 1.3.6