ok no probem but first please explain what are rules for this protocols and where is used to try to help you and send to me the code to try to help Good Luck
--- On Sun, 7/10/11, M.Mehran Ajmal <[email protected]> wrote: From: M.Mehran Ajmal <[email protected]> Subject: [ns] problem in adding a new protocol in ns2.34 To: [email protected] Date: Sunday, July 10, 2011, 6:05 PM i am adding a new protocol in ns2.34 after removing all the errors during make. it started compiling and an unknown error occured without reference to the line which is as follows. corp/corp.o: In function `Corp::Corp(int)': corp.cc:(.text+0x5b): undefined reference to `Corp_rtable::Corp_rtable()' collect2: ld returned 1 exit status make: *** [ns] Error 1 the code of corp.cc is as follows in which error is coming if any one can help i will be great full. //int corp_pkt; int hdr_corp_pkt::offset_; static class CorpHeaderClass : public PacketHeaderClass { public: CorpHeaderClass() : PacketHeaderClass("PacketHeader/Corp", sizeof(hdr_corp_pkt)) { bind_offset(&hdr_corp_pkt::offset_); } } class_rtProtoCorp_hdr; static class CorpClass : public TclClass { public: CorpClass() : TclClass("Agent/Corp") {} TclObject* create(int argc, const char*const* argv) { assert(argc == 5); return (new Corp((nsaddr_t)Address::instance().str2addr(argv[4]))); } } class_rtProtoCorp; // Timers void Corp_PktTimer::expire(Event* e) { agent_->send_corp_pkt(); agent_->reset_corp_pkt_timer(); } //constructor Corp::Corp(nsaddr_t id) : Agent(PT_CORP), pkt_timer_(this) { bind_bool("accessible_var_", &accessible_var_); ra_addr_ = id; } //Command int Corp::command(int argc, const char*const* argv) { if (argc == 2) { if (strcasecmp(argv[1], "start") == 0) { pkt_timer_.resched(0.0); return TCL_OK; } else if (strcasecmp(argv[1], "print_rtable") == 0) { if (logtarget_ != 0) { sprintf(logtarget_->pt_->buffer(), "P %f _%d_ Routing Table",CURRENT_TIME,ra_addr()); logtarget_->pt_->dump(); rtable_.print(logtarget_); } else { fprintf(stdout, "%f _%d_ If you want to print this routing table you must create a trace file in your tcl script",CURRENT_TIME,ra_addr()); } return TCL_OK; } } else if (argc == 3) { // Obtains corresponding dmux to carry packets to upper layers if (strcmp(argv[1], "port-dmux") == 0) { dmux_ = (PortClassifier*)TclObject::lookup(argv[2]); if (dmux_ == 0) { fprintf(stderr, "%s: %s lookup of %s failed\n",__FILE__,argv[1],argv[2]); return TCL_ERROR; } return TCL_OK; } // Obtains corresponding tracer else if (strcmp(argv[1], "log-target") == 0 || strcmp(argv[1], "tracetarget") == 0) { logtarget_ = (Trace*)TclObject::lookup(argv[2]); if (logtarget_ == 0) return TCL_ERROR; return TCL_OK; } } // Pass the command to the base class return Agent::command(argc, argv); } //Recive void Corp::recv(Packet* p, Handler* h) { struct hdr_cmn* ch = HDR_CMN(p); struct hdr_ip* ih= HDR_IP(p); if (ih->saddr() == ra_addr()) { // If there exists a loop, must drop the packet if (ch->num_forwards() > 0) { drop(p, DROP_RTR_ROUTE_LOOP); return; } // else if this is a packet I am originating, must add IP header else if (ch->num_forwards() == 0) ch->size() += IP_HDR_LEN; } // If it is a corp packet, must process it if (ch->ptype() == PT_CORP) recv_corp_pkt(p); // Otherwise, must forward the packet (unless TTL has reached zero) else { ih->ttl_--; if (ih->ttl_ == 0) { drop(p, DROP_RTR_TTL); return; } forward_data(p); } } // Recv Corp pkt void Corp::recv_corp_pkt(Packet* p) { struct hdr_ip* ih= HDR_IP(p); struct hdr_corp_pkt* ph = HDR_CORP_PKT(p); // All routing messages are sent from and to port RT_PORT, // so we check it. assert(ih->sport() == RT_PORT); assert(ih->dport() == RT_PORT); /* ... processing of corp packet ... */ // Release resources Packet::free(p); } //Send Corp pkt void Corp::send_corp_pkt() { Packet* p= allocpkt(); struct hdr_cmn* ch= HDR_CMN(p); struct hdr_ip* ih= HDR_IP(p); struct hdr_corp_pkt* ph = HDR_CORP_PKT(p); ph->pkt_src()= ra_addr(); ph->pkt_len()= 7; ph->pkt_seq_num()= seq_num_++; ch->ptype()= PT_CORP; ch->direction() = hdr_cmn::DOWN; ch->size() = IP_HDR_LEN + ph->pkt_len(); ch->error() = 0; ch->next_hop() = IP_BROADCAST; ch->addr_type() = NS_AF_INET; ih->saddr() = ra_addr(); ih->daddr() = IP_BROADCAST; ih->sport() = RT_PORT; ih->dport() = RT_PORT; ih->ttl() = IP_DEF_TTL; Scheduler::instance().schedule(target_, p, JITTER); } //Reset Timer void Corp::reset_corp_pkt_timer() { pkt_timer_.resched((double)5.0); } //Forward data void Corp::forward_data(Packet* p) { struct hdr_cmn* ch = HDR_CMN(p); struct hdr_ip* ih = HDR_IP(p); if (ch->direction() == hdr_cmn::UP &&((u_int32_t)ih->daddr() == IP_BROADCAST || ih->daddr() == ra_addr())) { dmux_->recv(p,0); return; } else { ch->direction() = hdr_cmn::DOWN; ch->addr_type() = NS_AF_INET; if ((u_int32_t)ih->daddr() == IP_BROADCAST) ch->next_hop() = IP_BROADCAST; else { nsaddr_t next_hop = rtable_.lookup(ih->daddr()); if (next_hop == IP_BROADCAST) { debug("%f: Agent %d can not forward a packet destined to %d\n",CURRENT_TIME,ra_addr(),ih->daddr()); drop(p, DROP_RTR_NO_ROUTE); return; } else ch->next_hop() = next_hop; } Scheduler::instance().schedule(target_, p, 0.0); } }
