MultiFieldFilter Class Reference

#include <filter.h>

Inheritance diagram for MultiFieldFilter:

Filter Connector NsObject TclObject Handler Collaboration diagram for MultiFieldFilter:

Collaboration graph
[legend]

Detailed Description

Definition at line 87 of file filter.h.

Public Types

enum  filter_e { DROP, PASS, FILTER, DUPLIC }

Public Member Functions

virtual void debug (const char *fmt,...)
virtual int delay_bind_dispatch (const char *varName, const char *localName, TclObject *tracer)
virtual void delay_bind_init_all ()
virtual void drop (Packet *p)
NsObjectfilter_target ()
int isdebug () const
 MultiFieldFilter ()
virtual void recv (Packet *p, const char *s)
virtual void recvOnly (Packet *)
void setDropTarget (NsObject *dt)
void target (NsObject *target)
NsObjecttarget ()

Protected Member Functions

void add_field (fieldobj *p)
int command (int argc, const char *const *argv)
virtual void drop (Packet *p, const char *s)
filter_e filter (Packet *p)
void handle (Event *)
void recv (Packet *, Handler *h=0)
virtual void reset ()
void send (Packet *p, Handler *h)

Protected Attributes

int debug_
NsObjectdrop_
fieldobjfield_list_
NsObjectfilter_target_
NsObjecttarget_


Member Enumeration Documentation

enum Filter::filter_e [inherited]
 

Enumerator:
DROP 
PASS 
FILTER 
DUPLIC 

Definition at line 60 of file filter.h.

00060 { DROP, PASS, FILTER, DUPLIC };


Constructor & Destructor Documentation

MultiFieldFilter::MultiFieldFilter  ) 
 

Definition at line 136 of file filter.cc.

00136                                    : field_list_(0)
00137 {
00138 
00139 }


Member Function Documentation

void MultiFieldFilter::add_field fieldobj p  )  [protected]
 

Definition at line 141 of file filter.cc.

References field_list_, and fieldobj::next.

Referenced by command().

00142 {
00143     p->next = field_list_;
00144     field_list_ = p;
00145 }

int MultiFieldFilter::command int  argc,
const char *const *  argv
[protected, virtual]
 

Reimplemented from Filter.

Definition at line 162 of file filter.cc.

References add_field(), Connector::command(), Filter::filter_target_, fieldobj::match, fieldobj::offset, and Connector::target_.

00163 {
00164     Tcl& tcl = Tcl::instance();
00165     if (argc == 2) {
00166         if (strcmp(argv[1], "filter-target") == 0) {
00167             if (filter_target_ != 0)
00168                 tcl.result(target_->name());
00169             return TCL_OK;
00170         }
00171     }
00172     else if (argc == 3) {
00173         if (strcmp(argv[1], "filter-target") == 0) {
00174             filter_target_ = (NsObject*)TclObject::lookup(argv[2]);
00175             return TCL_OK;
00176         }
00177     }
00178        else if (argc == 4) {
00179         if (strcmp(argv[1], "filter-field") == 0) {
00180             fieldobj *tmp = new fieldobj;
00181             tmp->offset = atoi(argv[2]);
00182             tmp->match = atoi(argv[3]);
00183             add_field(tmp);
00184             return TCL_OK;
00185         }
00186     }
00187     return Connector::command(argc, argv);
00188 }

Here is the call graph for this function:

void NsObject::debug const char *  fmt,
  ...
[virtual, inherited]
 

Definition at line 102 of file object.cc.

References NsObject::debug_.

00103 {
00104     if (!debug_)
00105         return;
00106     va_list ap;
00107     va_start(ap, fmt);
00108     vprintf(fmt, ap);
00109 }

int NsObject::delay_bind_dispatch const char *  varName,
const char *  localName,
TclObject tracer
[virtual, inherited]
 

Reimplemented in BayFullTcpAgent, Agent, MPLSAddressClassifier, LDPAgent, HbAfterRtoSctpAgent, MfrHbAfterRtoSctpAgent, MfrTimestampSctpAgent, MultipleFastRtxSctpAgent, NewRenoSctpAgent, TimestampSctpAgent, SctpAgent, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, TcpSink, TcpAgent, VegasTcpAgent, XcpAgent, and XcpSink.

Definition at line 63 of file object.cc.

References NsObject::debug_.

Referenced by MPLSAddressClassifier::delay_bind_dispatch(), and Agent::delay_bind_dispatch().

00064 {
00065     if (delay_bind_bool(varName, localName, "debug_", &debug_, tracer)) 
00066         return TCL_OK;
00067     return TclObject::delay_bind_dispatch(varName, localName, tracer);
00068 }

void NsObject::delay_bind_init_all  )  [virtual, inherited]
 

Reimplemented in BayFullTcpAgent, Agent, MPLSAddressClassifier, LDPAgent, HbAfterRtoSctpAgent, MfrHbAfterRtoSctpAgent, MfrTimestampSctpAgent, MultipleFastRtxSctpAgent, NewRenoSctpAgent, TimestampSctpAgent, SctpAgent, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, TcpSink, TcpAgent, VegasTcpAgent, XcpAgent, and XcpSink.

Definition at line 57 of file object.cc.

Referenced by MPLSAddressClassifier::delay_bind_init_all(), and Agent::delay_bind_init_all().

00058 {
00059     delay_bind_init_one("debug_");
00060 }

void Connector::drop Packet p,
const char *  s
[protected, virtual, inherited]
 

Definition at line 114 of file connector.cc.

References Connector::drop_, Packet::free(), and NsObject::recv().

00115 {
00116     if (drop_ != 0)
00117         drop_->recv(p, s);
00118     else
00119         Packet::free(p);
00120 }

Here is the call graph for this function:

void Connector::drop Packet p  )  [virtual, inherited]
 

Reimplemented in XCPQueue.

Definition at line 106 of file connector.cc.

References Connector::drop_, Packet::free(), and NsObject::recv().

Referenced by ARPTable::arpresolve(), XCPQueue::drop(), JoBS::dropFront(), Vq::dropPacketForECN(), DSRAgent::dropSendBuff(), JoBS::dropTail(), dsREDQueue::edrop(), Vq::enque(), SRR::enque(), SimpleIntServ::enque(), SFQ::enque(), rtqueue::enque(), RIOQueue::enque(), REMQueue::enque(), REDQueue::enque(), RedPDQueue::enque(), PIQueue::enque(), Marker::enque(), GK::enque(), dsREDQueue::enque(), DRR::enque(), DropTail::enque(), Demarker::enque(), aodv_rqueue::enque(), toraAgent::forward(), AODV::forward(), DSDV_Agent::forwardPacket(), DSRAgent::getRouteForPacket(), HDLC::goBackNMode(), Snoop::handle(), DSRAgent::handleFlowForwarding(), DSRAgent::handleForwarding(), HDLC::handleRR(), DSDV_Agent::lost_link(), TCPTapAgent::processpkt(), CMUPriQueue::prq_enqueue(), rtqueue::purge(), SessionTTLChecker::recv(), TTLChecker::recv(), FullTcpAgent::recv(), BayFullTcpAgent::recv(), SatLL::recv(), LL::recv(), GAFPartner::recv(), Filter::recv(), DynamicLink::recv(), AODV::recvError(), PriQueue::recvHighPriority(), HDLC::recvIncoming(), toraAgent::reset(), HDLC::reset(), Queue< T >::reset(), LinkDelay::reset(), AODV::rt_ll_failed(), AODV::rt_purge(), toraAgent::rtRoutePacket(), HDLC::selectiveRepeatMode(), AODV::sendRequest(), SatLL::sendUp(), LL::sendUp(), DropTail::shrink_queue(), PriQueue::Terminate(), DSRAgent::Terminate(), CMUPriQueue::Terminate(), ARPTable::Terminate(), and DSRAgent::undeliverablePkt().

00107 {
00108     if (drop_ != 0)
00109         drop_->recv(p);
00110     else
00111         Packet::free(p);
00112 }

Here is the call graph for this function:

MultiFieldFilter::filter_e MultiFieldFilter::filter Packet p  )  [protected, virtual]
 

Reimplemented from Filter.

Definition at line 147 of file filter.cc.

References Packet::access(), field_list_, Filter::FILTER, fieldobj::match, fieldobj::next, fieldobj::offset, and Filter::PASS.

00148 {
00149     fieldobj* tmpfield;
00150 
00151     tmpfield = field_list_;
00152     while (tmpfield != 0) {
00153         if (*(int *)p->access(tmpfield->offset) == tmpfield->match)
00154             tmpfield = tmpfield->next;
00155         else 
00156             return (PASS);
00157     }
00158     return(FILTER);
00159 }

Here is the call graph for this function:

NsObject* Filter::filter_target  )  [inline, inherited]
 

Definition at line 59 of file filter.h.

References Filter::filter_target_.

00059 { return filter_target_; }

void NsObject::handle Event  )  [protected, virtual, inherited]
 

Implements Handler.

Reimplemented in LinkDelay, LL, AckRecons, and Snoop.

Definition at line 91 of file object.cc.

References NsObject::recv().

00092 {
00093     recv((Packet*)e);
00094 }

Here is the call graph for this function:

int NsObject::isdebug  )  const [inline, inherited]
 

Definition at line 61 of file object.h.

References NsObject::debug_.

00061 { return debug_; }

void NsObject::recv Packet p,
const char *  s
[virtual, inherited]
 

Reimplemented in CMUTrace.

Definition at line 96 of file object.cc.

References Packet::free().

00097 {
00098     Packet::free(p);
00099 }

Here is the call graph for this function:

void Filter::recv Packet ,
Handler h = 0
[protected, virtual, inherited]
 

Reimplemented from Connector.

Definition at line 70 of file filter.cc.

References Connector::drop(), Filter::DROP, Filter::DUPLIC, Filter::FILTER, Filter::filter(), Filter::filter_target_, Filter::PASS, NsObject::recv(), and Connector::send().

00071 {
00072     switch(filter(p)) {
00073     case DROP : 
00074         if (h) h->handle(p);
00075         drop(p);
00076         break;
00077     case DUPLIC :
00078         if (filter_target_)
00079             filter_target_->recv(p->copy(), h);
00080         /* fallthrough */
00081     case PASS :
00082         send(p, h);
00083         break;
00084     case FILTER :
00085         if (filter_target_)
00086             filter_target_->recv(p, h);
00087         break;
00088     }
00089 }

Here is the call graph for this function:

virtual void NsObject::recvOnly Packet  )  [inline, virtual, inherited]
 

Reimplemented in Agent, and Trace.

Definition at line 56 of file object.h.

Referenced by Trace::recvOnly().

00056 {};

void NsObject::reset  )  [protected, virtual, inherited]
 

Reimplemented in BayFullTcpAgent, HashClassifier, IvsSource, dsREDQueue, DiffusionRate, SinkAgent, DiffusionAgent, FloodingAgent, OmniMcastAgent, LinkDelay, CBQueue, DropTail, ErrorModel, PIQueue, Queue< T >, RedPDQueue, REDQueue, REMQueue, RIOQueue, Snoop, FackTcpAgent, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, Sack1TcpAgent, TcpSink, DelAckSink, TcpAgent, VegasTcpAgent, toraAgent, Queue< T >, and XcpSink.

Definition at line 70 of file object.cc.

Referenced by NsObject::command().

00071 {
00072 }

void Connector::send Packet p,
Handler h
[inline, protected, inherited]
 

Reimplemented in Agent, and LinkDelay.

Definition at line 56 of file connector.h.

References NsObject::recv(), and Connector::target_.

Referenced by SessionTTLChecker::recv(), TTLChecker::recv(), Trace::recv(), TraceIpMac::recv(), TraceIp::recv(), SnoopQueueEDrop::recv(), SnoopQueueTagger::recv(), SnoopQueueDrop::recv(), SnoopQueueOut::recv(), SnoopQueueIn::recv(), PktCounter::recv(), NetworkInterface::recv(), MeasureMod::recv(), Filter::recv(), Connector::recv(), CMUTrace::recv(), and AddSR::recv().

00056 { target_->recv(p, h); }

Here is the call graph for this function:

void Connector::setDropTarget NsObject dt  )  [inline, inherited]
 

Definition at line 51 of file connector.h.

References Connector::drop_.

Referenced by XCPWrapQ::command().

00051 {drop_ = dt; } 

void Connector::target NsObject target  )  [inline, inherited]
 

Definition at line 49 of file connector.h.

References Connector::target(), and Connector::target_.

00049 { target_ = target; }

Here is the call graph for this function:

NsObject* Connector::target  )  [inline, inherited]
 

Definition at line 48 of file connector.h.

References Connector::target_.

Referenced by JoBS::assignRateDropsADC(), FQ::deque(), MIPMHAgent::reg(), MIPBSAgent::send_ads(), and Connector::target().

00048 { return target_; }


Field Documentation

int NsObject::debug_ [protected, inherited]
 

Reimplemented in FECModel, FloodAgent, and LandmarkAgent.

Definition at line 66 of file object.h.

Referenced by REDQueue::command(), RedPDQueue::command(), PushbackQueue::command(), NsObject::debug(), NsObject::delay_bind_dispatch(), PushbackQueue::enque(), NsObject::isdebug(), NsObject::NsObject(), TfrcAgent::recv(), PushbackQueue::reportDrop(), SctpAgent::Reset(), REDQueue::reset(), DropTail::shrink_queue(), and Delayer::try_send().

NsObject* Connector::drop_ [protected, inherited]
 

Definition at line 59 of file connector.h.

Referenced by XCPWrapQ::command(), Connector::command(), Connector::drop(), ErrorModel::recv(), and Connector::setDropTarget().

fieldobj* MultiFieldFilter::field_list_ [protected]
 

Definition at line 94 of file filter.h.

Referenced by add_field(), and filter().

NsObject* Filter::filter_target_ [protected, inherited]
 

Definition at line 67 of file filter.h.

Referenced by command(), Filter::command(), Filter::filter_target(), and Filter::recv().

NsObject* Connector::target_ [protected, inherited]
 

Definition at line 58 of file connector.h.

Referenced by SRAgent::command(), SA_Agent::command(), IvsReceiver::command(), command(), Filter::command(), Connector::command(), DiffusionAgent::DiffusionAgent(), DSRAgent::DSRAgent(), PromotionTimer::expire(), FloodingAgent::FloodingAgent(), SctpAgent::ForceSource(), toraAgent::forward(), AODV::forward(), DSDV_Agent::forwardPacket(), SensorQueryAgent::generate_query(), DSDVTriggerHandler::handle(), AckRecons::handle(), DSDV_Agent::helper_callback(), DSDV_Agent::lost_link(), OmniMcastAgent::OmniMcastAgent(), LandmarkAgent::periodic_callback(), TCPTapAgent::processpkt(), IPTapAgent::processpkt(), CMUPriQueue::prq_enqueue(), CMUPriQueue::prq_resume(), Trace::recv(), TraceIpMac::recv(), TraceIp::recv(), SRMAgent::recv(), SSMSRMAgent::recv(), SAack_Agent::recv(), Queue< T >::recv(), PingResponder::recv(), MIPEncapsulator::recv(), LmsAgent::recv(), HackLossyLink::recv(), FQ::recv(), ErrorModel::recv(), DynamicLink::recv(), DSRAgent::recv(), DelayModel::recv(), LinkDelay::recv(), CtrMcastDecap::recv(), CtrMcastEncap::recv(), CMUTrace::recv(), Trace::recvOnly(), Queue< T >::resume(), LinkDelay::send(), Connector::send(), Agent::send(), MIPBSAgent::send_ads(), SRMAgent::send_ctrl(), SSMSRMAgent::send_ctrl(), LmsSender::send_dmcast(), LmsReceiver::send_dmcast(), LmsAgent::send_downstream(), LmsSender::send_lms_pkt(), LmsReceiver::send_nak(), LmsReceiver::send_refresh(), MIPMHAgent::send_sols(), LmsSender::send_spm(), LmsAgent::send_upstream(), LandmarkAgent::SendChangedTagListUpdate(), AODV::sendError(), AODV::sendHello(), UdpAgent::sendmsg(), SRMAgent::sendmsg(), SA_Agent::sendmsg(), RTPAgent::sendmsg(), MessagePassingAgent::sendmsg(), LmsSender::sendmsg(), DSDV_Agent::sendOutBCastPkt(), SA_Agent::sendpkt(), rtProtoDV::sendpkt(), RTPAgent::sendpkt(), RTCPAgent::sendpkt(), IvsSource::sendpkt(), AODV::sendReply(), AODV::sendRequest(), TPAgent::sendto(), MessagePassingAgent::sendto(), SctpAgent::SetSource(), LmsSender::solicit_naks(), Connector::target(), toraAgent::tora_output(), and Delayer::try_send().


The documentation for this class was generated from the following files:
Generated on Tue Mar 6 17:21:27 2007 for ns2 Network Simulator 2.29 by  doxygen 1.4.6