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


Public Types | |
| enum | classify_ret { ONCE = -2, TWICE = -1 } |
Public Member Functions | |
| FidHashClassifier () | |
| virtual int | classify (Packet *p) |
| virtual int | lookup (Packet *p) |
| virtual int | unknown (Packet *p) |
| void | set_default (int slot) |
| int | do_set_hash (nsaddr_t src, nsaddr_t dst, int fid, int slot) |
| void | set_table_size (int nn) |
| virtual void | set_table_size (int level, int nn) |
| int | maxslot () const |
| NsObject * | slot (int slot) |
| int | mshift (int val) |
| void | set_default_target (NsObject *obj) |
| virtual void | recv (Packet *p, Handler *h) |
| virtual void | recv (Packet *p, const char *s) |
| virtual NsObject * | find (Packet *) |
| virtual void | clear (int slot) |
| virtual void | do_install (char *dst, NsObject *target) |
| int | install_next (NsObject *node) |
| virtual void | install (int slot, NsObject *) |
| virtual void | recvOnly (Packet *) |
| virtual void | delay_bind_init_all () |
| virtual int | delay_bind_dispatch (const char *varName, const char *localName, TclObject *tracer) |
| int | isdebug () const |
| virtual void | debug (const char *fmt,...) |
Protected Member Functions | |
| const char * | hashkey (nsaddr_t, nsaddr_t, int fid) |
| int | 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, int slot) |
| int | get_hash (nsaddr_t src, nsaddr_t dst, int fid) |
| virtual int | command (int argc, const char *const *argv) |
| virtual int | getnxt (NsObject *) |
| void | alloc (int) |
| void | handle (Event *) |
Protected Attributes | |
| int | default_ |
| Tcl_HashTable | ht_ |
| hkey | buf_ |
| int | keylen_ |
| NsObject ** | slot_ |
| int | nslot_ |
| int | maxslot_ |
| int | offset_ |
| int | shift_ |
| int | mask_ |
| NsObject * | default_target_ |
| int | nsize_ |
| int | debug_ |
|
|
Definition at line 64 of file classifier.h.
|
|
|
Definition at line 162 of file classifier-hash.h.
00162 : HashClassifier(TCL_ONE_WORD_KEYS) { 00163 } |
|
|
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 }
|
|
|
Reimplemented from Classifier. Reimplemented in DestHashClassifier. Definition at line 61 of file classifier-hash.cc. References HashClassifier::default_, HashClassifier::lookup(), Classifier::maxslot_, Classifier::slot(), and HashClassifier::unknown(). Referenced by SrcDestHashClassifier::SrcDestHashClassifier().
|
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().
|
|
||||||||||||
|
Reimplemented from Classifier. Reimplemented in DestHashClassifier. Definition at line 70 of file classifier-hash.cc. References Classifier::command(), HashClassifier::get_hash(), HashClassifier::hashkey(), HashClassifier::ht_, Classifier::maxslot_, nsaddr_t, HashClassifier::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 int slot= (int)Tcl_GetHashValue(ep);
00137 Tcl_DeleteHashEntry(ep);
00138 tcl.resultf("%u", 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, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, TcpSink, TcpAgent, and VegasTcpAgent. 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, FullTcpAgent, SackFullTcpAgent, RFC793eduTcpAgent, TcpSink, TcpAgent, and VegasTcpAgent. 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 }
|
|
||||||||||||
|
Reimplemented in DestHashClassifier, HierClassifier, and VirtualClassifier. Definition at line 66 of file classifier.h. References Classifier::install(). 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 HashClassifier::set_hash(). Referenced by ManualRoutingModule::add_route().
00067 {
00068 return (set_hash(src,dst,fid,slot));
00069 }
|
Here is the call graph for this function:

|
|
Reimplemented in BcastAddressClassifier, QSClassifier, NixClassifier, and SRClassifier. Definition at line 154 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(), QSAgent::recv(), MIPDecapsulator::recv(), Classifier::recv(), MacClassifier::recv(), and MCastBSTClassifier::recv().
00155 {
00156 NsObject* node = NULL;
00157 int cl = classify(p);
00158 if (cl < 0 || cl >= nslot_ || (node = slot_[cl]) == 0) {
00159 if (default_target_)
00160 return default_target_;
00161 /*
00162 * Sigh. Can't pass the pkt out to tcl because it's
00163 * not an object.
00164 */
00165 Tcl::instance().evalf("%s no-slot %ld", name(), cl);
00166 if (cl == TWICE) {
00167 /*
00168 * Try again. Maybe callback patched up the table.
00169 */
00170 cl = classify(p);
00171 if (cl < 0 || cl >= nslot_ || (node = slot_[cl]) == 0)
00172 return (NULL);
00173 }
00174 }
00175 return (node);
00176 }
|
Here is the call graph for this function:

|
||||||||||||||||
|
Definition at line 116 of file classifier-hash.h. References HashClassifier::hashkey(), and HashClassifier::ht_. Referenced by HashClassifier::command(), and HashClassifier::lookup().
00116 {
00117 Tcl_HashEntry *ep= Tcl_FindHashEntry(&ht_,
00118 hashkey(src, dst, fid));
00119 if (ep)
00120 return (int)Tcl_GetHashValue(ep);
00121 return -1;
00122 }
|
Here is the call graph for this function:

|
|
Reimplemented in ReserveAddressClassifier, and ReservePortClassifier. Definition at line 120 of file classifier.cc. References Classifier::alloc(), Classifier::nslot_, and Classifier::slot_. Referenced by Classifier::command(), and DestHashClassifier::do_install().
|
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:

|
||||||||||||||||
|
Implements HashClassifier. Definition at line 165 of file classifier-hash.h.
00165 {
00166 return (const char*) fid;
00167 }
|
|
||||||||||||
|
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().
|
Here is the call graph for this function:

|
|
Definition at line 178 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 HashClassifier::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(), HashClassifier::get_hash(), Classifier::mshift(), and hdr_ip::saddr(). Referenced by DestHashClassifier::classify(), HashClassifier::classify(), HashClassifier::newflow(), and HashClassifier::unknown().
|
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 HashClassifier::lookup().
|
|
|
Definition at line 91 of file classifier-hash.h. References hdr_ip::access(), hdr_ip::daddr(), hdr_ip::flowid(), HashClassifier::lookup(), and hdr_ip::saddr().
|
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 135 of file classifier.cc. References Classifier::find(), Packet::free(), and NsObject::recv(). Referenced by QSAgent::recv(), ErrorModule::recv(), DumbAgent::recv(), and HierClassifier::recv().
00136 {
00137 NsObject* node = find(p);
00138 if (node == NULL) {
00139 /*
00140 * XXX this should be "dropped" somehow. Right now,
00141 * these events aren't traced.
00142 */
00143 Packet::free(p);
00144 return;
00145 }
00146 node->recv(p,h);
00147 }
|
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().
00056 {};
|
|
|
Reimplemented from NsObject. Definition at line 98 of file classifier-hash.h. References HashClassifier::ht_, and HashClassifier::keylen_.
00098 {
00099 Tcl_DeleteHashTable(&ht_);
00100 Tcl_InitHashTable(&ht_, keylen_);
00101 }
|
|
|
Definition at line 66 of file classifier-hash.h. References HashClassifier::default_. Referenced by ManualRoutingModule::add_route().
00066 { default_ = slot; }
|
|
|
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 HashClassifier::hashkey(), and HashClassifier::ht_. Referenced by HashClassifier::command(), DestHashClassifier::do_install(), and HashClassifier::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.
00075 {}
|
|
|
Reimplemented from Classifier. Definition at line 70 of file classifier-hash.h.
00070 {}
|
|
|
|
Definition at line 59 of file classifier-hash.h. References hdr_ip::access(), hdr_ip::daddr(), hdr_ip::flowid(), HashClassifier::lookup(), and hdr_ip::saddr(). Referenced by HashClassifier::classify().
|
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(), RedPDQueue::enque(), PushbackQueue::enque(), NsObject::isdebug(), NsObject::NsObject(), TfrcAgent::recv(), PushbackQueue::reportDrop(), and REDQueue::reset(). |
|
|
Definition at line 127 of file classifier-hash.h. Referenced by DestHashClassifier::classify(), HashClassifier::classify(), HashClassifier::HashClassifier(), and HashClassifier::set_default(). |
|
|
Definition at line 87 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 HashClassifier::command(), HashClassifier::get_hash(), HashClassifier::HashClassifier(), HashClassifier::reset(), HashClassifier::set_hash(), and HashClassifier::~HashClassifier(). |
|
|
Definition at line 130 of file classifier-hash.h. Referenced by HashClassifier::HashClassifier(), and HashClassifier::reset(). |
|
|
Definition at line 86 of file classifier.h. Referenced by Classifier::Classifier(), and Classifier::mshift(). |
|
|
|
Definition at line 88 of file classifier.h. Referenced by Classifier::alloc(), and Classifier::set_table_size(). |
|
|
|
Definition at line 84 of file classifier.h. Referenced by Classifier::Classifier(), and Classifier::classify(). |
|
|
Definition at line 85 of file classifier.h. Referenced by Classifier::Classifier(), and Classifier::mshift(). |
|
1.3.3