00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef lint
00028 static const char rcsid[] =
00029 "@(#) $Header: /nfs/jade/vint/CVSROOT/ns-2/link/dynalink.cc,v 1.9 1998/06/27 01:23:46 gnguyen Exp $ (USC/ISI)";
00030 #endif
00031
00032 #include "connector.h"
00033
00034
00035
00036
00037 class DynamicLink : public Connector {
00038 public:
00039 DynamicLink() : down_(0), status_(1) { bind("status_", &status_); }
00040 protected:
00041 int command(int argc, const char*const* argv);
00042 void recv(Packet* p, Handler* h);
00043 NsObject* down_;
00044 int status_;
00045 };
00046
00047 static class DynamicLinkClass : public TclClass {
00048 public:
00049 DynamicLinkClass() : TclClass("DynamicLink") {}
00050 TclObject* create(int, const char*const*) {
00051 return (new DynamicLink);
00052 }
00053 } class_dynamic_link;
00054
00055
00056 int DynamicLink::command(int argc, const char*const* argv)
00057 {
00058 if (argc == 2) {
00059 if (strcmp(argv[1], "status?") == 0) {
00060 Tcl::instance().result(status_ ? "up" : "down");
00061 return TCL_OK;
00062 }
00063 }
00064 return Connector::command(argc, argv);
00065 }
00066
00067 void DynamicLink::recv(Packet* p, Handler* h)
00068 {
00069 if (status_)
00070 target_->recv(p, h);
00071 else
00072 drop(p);
00073 }