#include <classifier-hash.h>
Inheritance diagram for HashClassifier:


Definition at line 43 of file classifier-hash.h.
Public Types | |
| enum | classify_ret { ONCE = -2, TWICE = -1 } |
Public Member Functions | |
| int | allocPort (NsObject *) |
| virtual int | classify (Packet *p) |
| virtual void | clear (int slot) |
| 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 | do_install (char *dst, NsObject *target) |
| int | do_set_hash (nsaddr_t src, nsaddr_t dst, int fid, int slot) |
| virtual NsObject * | find (Packet *) |
| HashClassifier (int keylen) | |
| virtual void | install (int slot, NsObject *) |
| int | install_next (NsObject *node) |
| int | isdebug () const |
| virtual long | lookup (Packet *p) |
| int | maxslot () const |
| int | mshift (int val) |
| virtual void | recv (Packet *p, const char *s) |
| virtual void | recv (Packet *p, Handler *h) |
| virtual void | recvOnly (Packet *) |
| void | set_default (int slot) |
| void | set_default_target (NsObject *obj) |
| virtual void | set_table_size (int level, int nn) |
| void | set_table_size (int nn) |
| NsObject * | slot (int slot) |
| virtual long | unknown (Packet *p) |
| ~HashClassifier () | |
Protected Member Functions | |
| void | alloc (int) |
| virtual int | command (int argc, const char *const *argv) |
| long | get_hash (nsaddr_t src, nsaddr_t dst, int fid) |
| virtual int | getnxt (NsObject *) |
| void | handle (Event *) |
| virtual const char * | hashkey (nsaddr_t, nsaddr_t, int)=0 |
| long | lookup (nsaddr_t src, nsaddr_t dst, int fid) |
| int | newflow (Packet *pkt) |
| void | reset () |
| int | set_hash (nsaddr_t src, nsaddr_t dst, int fid, long slot) |
Protected Attributes | |
| hkey | buf_ |
| int | debug_ |
| int | default_ |
| NsObject * | default_target_ |
| Tcl_HashTable | ht_ |
| int | keylen_ |
| int | mask_ |
| int | maxslot_ |
| int | nsize_ |
| int | nslot_ |
| int | offset_ |
| int | shift_ |
| NsObject ** | slot_ |
Data Structures | |
| union | hkey |
|
|
Definition at line 64 of file classifier.h.
|
|
|
Definition at line 45 of file classifier-hash.h. 00045 : default_(-1), keylen_(keylen) { 00046 // shift + mask picked up from underlying Classifier object 00047 bind("default_", &default_); 00048 Tcl_InitHashTable(&ht_, keylen); 00049 }
|
|
|
Definition at line 50 of file classifier-hash.h. References ht_. 00050 { 00051 Tcl_DeleteHashTable(&ht_); 00052 };
|
|
|
Definition at line 79 of file classifier.cc. References Classifier::nsize_, Classifier::nslot_, and Classifier::slot_. Referenced by ReservePortClassifier::command(), ReserveAddressClassifier::command(), Classifier::getnxt(), ReservePortClassifier::getnxt(), ReserveAddressClassifier::getnxt(), and Classifier::install(). 00080 { 00081 NsObject** old = slot_; 00082 int n = nslot_; 00083 if (old == 0) 00084 if (nsize_ != 0) { 00085 //printf("classifier %x set to %d....%dth visit\n", this, nsize_, i++); 00086 nslot_ = nsize_; 00087 } 00088 else { 00089 //printf("classifier %x set to 32....%dth visit\n", this, j++); 00090 nslot_ = 32; 00091 } 00092 while (nslot_ <= slot) 00093 nslot_ <<= 1; 00094 slot_ = new NsObject*[nslot_]; 00095 memset(slot_, 0, nslot_ * sizeof(NsObject*)); 00096 for (int i = 0; i < n; ++i) 00097 slot_[i] = old[i]; 00098 delete [] old; 00099 }
|
|
|
Definition at line 120 of file classifier.cc. References Classifier::getnxt(). 00121 { 00122 return getnxt (nullagent); 00123 }
Here is the call graph for this function: ![]() |
|
|
Reimplemented from Classifier. Reimplemented in DestHashClassifier. Definition at line 61 of file classifier-hash.cc. References default_, lookup(), Classifier::maxslot_, Classifier::slot(), and unknown(). Referenced by SrcDestHashClassifier::SrcDestHashClassifier(). 00061 { 00062 int slot= lookup(p); 00063 if (slot >= 0 && slot <=maxslot_) 00064 return (slot); 00065 else if (default_ >= 0) 00066 return (default_); 00067 return (unknown(p)); 00068 } // HashClassifier::classify
Here is the call graph for this function: ![]() |
|
|
Reimplemented in ReserveAddressClassifier, and ReservePortClassifier. Definition at line 111 of file classifier.cc. References Classifier::maxslot_, and Classifier::slot_. Referenced by Classifier::command(), and HierClassifier::command(). 00112 { 00113 slot_[slot] = 0; 00114 if (slot == maxslot_) { 00115 while (--maxslot_ >= 0 && slot_[maxslot_] == 0) 00116 ; 00117 } 00118 }
|
|
||||||||||||
|
Reimplemented from Classifier. Reimplemented in DestHashClassifier. Definition at line 70 of file classifier-hash.cc. References Classifier::command(), upstream_info::dst, get_hash(), hashkey(), ht_, Classifier::maxslot_, set_hash(), Classifier::slot(), and Classifier::slot_. Referenced by DestHashClassifier::command(), and SrcDestHashClassifier::SrcDestHashClassifier(). 00071 { 00072 Tcl& tcl = Tcl::instance(); 00073 /* 00074 * $classifier set-hash $hashbucket src dst fid $slot 00075 */ 00076 00077 if (argc == 7) { 00078 if (strcmp(argv[1], "set-hash") == 0) { 00079 //xxx: argv[2] is ignored for now 00080 nsaddr_t src = atoi(argv[3]); 00081 nsaddr_t dst = atoi(argv[4]); 00082 int fid = atoi(argv[5]); 00083 int slot = atoi(argv[6]); 00084 if (0 > set_hash(src, dst, fid, slot)) 00085 return TCL_ERROR; 00086 return TCL_OK; 00087 } 00088 } else if (argc == 6) { 00089 /* $classifier lookup $hashbuck $src $dst $fid */ 00090 if (strcmp(argv[1], "lookup") == 0) { 00091 nsaddr_t src = atoi(argv[3]); 00092 nsaddr_t dst = atoi(argv[4]); 00093 int fid = atoi(argv[5]); 00094 int slot= get_hash(src, dst, fid); 00095 if (slot>=0 && slot <=maxslot_) { 00096 tcl.resultf("%s", slot_[slot]->name()); 00097 return (TCL_OK); 00098 } 00099 tcl.resultf(""); 00100 return (TCL_OK); 00101 } 00102 // Added by Yun Wang to set rate for TBFlow or TSWFlow 00103 if (strcmp(argv[1], "set-flowrate") == 0) { 00104 int fid = atoi(argv[2]); 00105 nsaddr_t src = 0; // only use fid 00106 nsaddr_t dst = 0; // to classify flows 00107 int slot = get_hash( src, dst, fid ); 00108 if ( slot >= 0 && slot <= maxslot_ ) { 00109 Flow* f = (Flow*)slot_[slot]; 00110 tcl.evalf("%u set target_rate_ %s", 00111 f, argv[3]); 00112 tcl.evalf("%u set bucket_depth_ %s", 00113 f, argv[4]); 00114 tcl.evalf("%u set tbucket_ %s", 00115 f, argv[5]); 00116 return (TCL_OK); 00117 } 00118 else { 00119 tcl.evalf("%s set-rate %u %u %u %u %s %s %s", 00120 name(), src, dst, fid, slot, argv[3], argv[4],argv[5]) 00121 ; 00122 return (TCL_OK); 00123 } 00124 } 00125 } else if (argc == 5) { 00126 /* $classifier del-hash src dst fid */ 00127 if (strcmp(argv[1], "del-hash") == 0) { 00128 nsaddr_t src = atoi(argv[2]); 00129 nsaddr_t dst = atoi(argv[3]); 00130 int fid = atoi(argv[4]); 00131 00132 Tcl_HashEntry *ep= Tcl_FindHashEntry(&ht_, 00133 hashkey(src, dst, 00134 fid)); 00135 if (ep) { 00136 long slot = (long)Tcl_GetHashValue(ep); 00137 Tcl_DeleteHashEntry(ep); 00138 tcl.resultf("%lu", slot); 00139 return (TCL_OK); 00140 } 00141 return (TCL_ERROR); 00142 } 00143 } 00144 return (Classifier::command(argc, argv)); 00145 }
Here is the call graph for this function: ![]() |
|
||||||||||||
|
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 }
|
|
||||||||||||||||
|
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 }
|
|
|
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().
|
|
||||||||||||
|
Reimplemented in DestHashClassifier, HierClassifier, and VirtualClassifier. Definition at line 66 of file classifier.h. References Classifier::install(), and Classifier::slot(). Referenced by RoutingModule::add_route(), BroadcastNode::add_route(), RoutingModule::delete_route(), and BroadcastNode::delete_route().
Here is the call graph for this function: ![]() |
|
||||||||||||||||||||
|
Definition at line 67 of file classifier-hash.h. References set_hash(). Referenced by ManualRoutingModule::add_route().
Here is the call graph for this function: ![]() |
|
|
Reimplemented in BcastAddressClassifier, QSClassifier, NixClassifier, and SRClassifier. Definition at line 159 of file classifier.cc. References Classifier::classify(), Classifier::default_target_, Classifier::nslot_, Classifier::slot_, and Classifier::TWICE. Referenced by FlowMon::drop(), FlowMon::edrop(), FlowMon::find(), FlowMon::in(), Tagger::in(), FlowMon::mon_edrop(), FlowMon::out(), MIPDecapsulator::recv(), Classifier::recv(), MacClassifier::recv(), MCastBSTClassifier::recv(), and SctpAgent::SetSource(). 00160 { 00161 NsObject* node = NULL; 00162 int cl = classify(p); 00163 if (cl < 0 || cl >= nslot_ || (node = slot_[cl]) == 0) { 00164 if (default_target_) 00165 return default_target_; 00166 /* 00167 * Sigh. Can't pass the pkt out to tcl because it's 00168 * not an object. 00169 */ 00170 Tcl::instance().evalf("%s no-slot %ld", name(), cl); 00171 if (cl == TWICE) { 00172 /* 00173 * Try again. Maybe callback patched up the table. 00174 */ 00175 cl = classify(p); 00176 if (cl < 0 || cl >= nslot_ || (node = slot_[cl]) == 0) 00177 return (NULL); 00178 } 00179 } 00180 return (node); 00181 }
Here is the call graph for this function: ![]() |
|
||||||||||||||||
|
Definition at line 116 of file classifier-hash.h. References hashkey(), and ht_. Referenced by command(), and lookup(). 00116 { 00117 Tcl_HashEntry *ep= Tcl_FindHashEntry(&ht_, 00118 hashkey(src, dst, fid)); 00119 if (ep) 00120 return (long)Tcl_GetHashValue(ep); 00121 return -1; 00122 }
Here is the call graph for this function: ![]() |
|
|
Reimplemented in ReserveAddressClassifier, and ReservePortClassifier. Definition at line 125 of file classifier.cc. References Classifier::alloc(), Classifier::nslot_, and Classifier::slot_. Referenced by Classifier::allocPort(), Classifier::command(), and DestHashClassifier::do_install(). 00126 { 00127 int i; 00128 for (i=0; i < nslot_; i++) 00129 if (slot_[i]==0 || slot_[i]==nullagent) 00130 return i; 00131 i=nslot_; 00132 alloc(nslot_); 00133 return i; 00134 }
Here is the call graph for this function: ![]() |
|
|
Implements Handler. Reimplemented in LinkDelay, LL, AckRecons, and Snoop. Definition at line 91 of file object.cc. References NsObject::recv().
Here is the call graph for this function: ![]() |
|
||||||||||||||||
|
Implemented in SrcDestFidHashClassifier, SrcDestHashClassifier, FidHashClassifier, and DestHashClassifier. Referenced by command(), get_hash(), and set_hash(). |
|
||||||||||||
|
Reimplemented in MPLSAddressClassifier. Definition at line 102 of file classifier.cc. References Classifier::alloc(), Classifier::maxslot_, Classifier::nslot_, and Classifier::slot_. Referenced by Classifier::command(), Classifier::do_install(), HierClassifier::do_install(), DestHashClassifier::do_install(), MPLSAddressClassifier::install(), and Classifier::install_next(). 00103 { 00104 if (slot >= nslot_) 00105 alloc(slot); 00106 slot_[slot] = p; 00107 if (slot >= maxslot_) 00108 maxslot_ = slot; 00109 }
Here is the call graph for this function: ![]() |
|
|
Definition at line 183 of file classifier.cc. References Classifier::install(), Classifier::maxslot_, and Classifier::slot(). Referenced by ManualRoutingModule::add_route(), and Classifier::command().
Here is the call graph for this function: ![]() |
|
|
Definition at line 61 of file object.h. References NsObject::debug_. 00061 { return debug_; }
|
|
||||||||||||||||
|
Definition at line 88 of file classifier-hash.h. References get_hash(). 00088 { 00089 return get_hash(src, dst, fid); 00090 }
Here is the call graph for this function: ![]() |
|
|
Definition at line 54 of file classifier-hash.h. References hdr_ip::access(), hdr_ip::daddr(), hdr_ip::flowid(), get_hash(), Classifier::mshift(), and hdr_ip::saddr(). Referenced by DestHashClassifier::classify(), classify(), newflow(), and unknown(). 00054 { 00055 hdr_ip* h = hdr_ip::access(p); 00056 return get_hash(mshift(h->saddr()), mshift(h->daddr()), 00057 h->flowid()); 00058 }
Here is the call graph for this function: ![]() |
|
|
Definition at line 49 of file classifier.h. References Classifier::maxslot_. Referenced by FlowMon::dumpflows(), Tagger::dumpflows(), FlowMon::flow_list(), and Tagger::flow_list(). 00049 { return maxslot_; }
|
|
|
Definition at line 55 of file classifier.h. References Classifier::mask_, and Classifier::shift_. Referenced by Classifier::classify(), VirtualClassifier::classify(), AddressClassifier::classify(), DestHashClassifier::hashkey(), SrcDestHashClassifier::hashkey(), SrcDestFidHashClassifier::hashkey(), and lookup().
|
|
|
Definition at line 91 of file classifier-hash.h. References hdr_ip::access(), hdr_ip::daddr(), hdr_ip::flowid(), lookup(), and hdr_ip::saddr(). 00091 { 00092 hdr_ip* h = hdr_ip::access(pkt); 00093 Tcl::instance().evalf("%s unknown-flow %u %u %u", 00094 name(), h->saddr(), h->daddr(), 00095 h->flowid()); 00096 return lookup(pkt); 00097 };
Here is the call graph for this function: ![]() |
|
||||||||||||
|
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: ![]() |
|
||||||||||||
|
Implements NsObject. Reimplemented in MCastBSTClassifier, HierClassifier, MacClassifier, VirtualClassifier, Replicator, and MIPDecapsulator. Definition at line 140 of file classifier.cc. References Classifier::find(), Packet::free(), and NsObject::recv(). Referenced by AODV::forward(), ErrorModule::recv(), DumbAgent::recv(), and HierClassifier::recv(). 00141 { 00142 NsObject* node = find(p); 00143 if (node == NULL) { 00144 /* 00145 * XXX this should be "dropped" somehow. Right now, 00146 * these events aren't traced. 00147 */ 00148 Packet::free(p); 00149 return; 00150 } 00151 node->recv(p,h); 00152 }
Here is the call graph for this function: ![]() |
|
|
Reimplemented in Agent, and Trace. Definition at line 56 of file object.h. Referenced by Trace::recvOnly().
|
|
|
Reimplemented from NsObject. Definition at line 98 of file classifier-hash.h.
|
|
|
Definition at line 66 of file classifier-hash.h. References default_. Referenced by ManualRoutingModule::add_route().
|
|
|
Definition at line 56 of file classifier.h. References Classifier::default_target_. Referenced by HierClassifier::command(). 00056 { 00057 default_target_ = obj; 00058 }
|
|
||||||||||||||||||||
|
Definition at line 105 of file classifier-hash.h. References hashkey(), and ht_. Referenced by command(), DestHashClassifier::do_install(), and do_set_hash(). 00105 { 00106 int newEntry; 00107 Tcl_HashEntry *ep= Tcl_CreateHashEntry(&ht_, 00108 hashkey(src, dst, fid), 00109 &newEntry); 00110 if (ep) { 00111 Tcl_SetHashValue(ep, slot); 00112 return slot; 00113 } 00114 return -1; 00115 }
Here is the call graph for this function: ![]() |
|
||||||||||||
|
Reimplemented in HierClassifier. Definition at line 75 of file classifier.h.
|
|
|
Reimplemented from Classifier. Definition at line 70 of file classifier-hash.h.
|
|
|
Definition at line 50 of file classifier.h. References Classifier::nslot_, and Classifier::slot_. Referenced by DestHashClassifier::classify(), classify(), Classifier::command(), MCastClassifier::command(), HierClassifier::command(), command(), MPLSAddressClassifier::command(), Classifier::do_install(), DestHashClassifier::do_install(), FlowMon::dumpflows(), Tagger::dumpflows(), FlowMon::flow_list(), Tagger::flow_list(), and Classifier::install_next().
|
|
|
Definition at line 59 of file classifier-hash.h. References hdr_ip::access(), hdr_ip::daddr(), hdr_ip::flowid(), lookup(), and hdr_ip::saddr(). Referenced by classify(). 00059 { 00060 hdr_ip* h = hdr_ip::access(p); 00061 Tcl::instance().evalf("%s unknown-flow %u %u %u", 00062 name(), h->saddr(), h->daddr(), 00063 h->flowid()); 00064 return lookup(p); 00065 };
Here is the call graph for this function: ![]() |
|
|
Definition at line 129 of file classifier-hash.h. Referenced by SrcDestHashClassifier::hashkey(), and SrcDestFidHashClassifier::hashkey(). |
|
|
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(). |
|
|
Definition at line 127 of file classifier-hash.h. Referenced by DestHashClassifier::classify(), classify(), HashClassifier(), and set_default(). |
|
|
Definition at line 88 of file classifier.h. Referenced by Classifier::Classifier(), Classifier::command(), Classifier::find(), BcastAddressClassifier::find(), and Classifier::set_default_target(). |
|
|
Definition at line 128 of file classifier-hash.h. Referenced by command(), get_hash(), HashClassifier(), reset(), set_hash(), and ~HashClassifier(). |
|
|
Definition at line 130 of file classifier-hash.h. Referenced by reset(). |
|
|
Definition at line 87 of file classifier.h. Referenced by Classifier::Classifier(), and Classifier::mshift(). |
|
|
|
Definition at line 89 of file classifier.h. Referenced by Classifier::alloc(), and Classifier::set_table_size(). |
|
|
|
Definition at line 85 of file classifier.h. Referenced by Classifier::Classifier(), and Classifier::classify(). |
|
|
Definition at line 86 of file classifier.h. Referenced by Classifier::Classifier(), and Classifier::mshift(). |
|
1.4.6