[Click] Trying to install new element

Anthony G Persaud ironstar at iastate.edu
Wed Mar 31 17:28:29 EST 2004


I'm trying to install the new element mmarpwaitrandom. I placed it in
the elements directory, and recompiled the click router, and it seems to
pick it up, but it says I'm missing the header information for
'elements/mmarp/mmarp.hh'. Does anyone know which file this is since I
looked all over the distribution but did not find the file. I am trying
to compile click1.4pre1.

Any help would GREATLY be appreciated,

Thanks,

Anthony G Persaud
ironstar at iastate.edu

Date: Sat, 20 Mar 2004 11:03:49 +0100
From: Fran <franciscojgc at eresmas.com>
Subject: Re: [Click] Using Click while adding random packet delay
To: ironstar at iastate.edu
Cc: click at amsterdam.lcs.mit.edu
Message-ID: <5.1.0.14.2.20040320105646.00bbd728 at pop.eresmas.com>
Content-Type: text/plain; charset="us-ascii"

I have created a new element that add a random packet delay to each
packet 
before send it to the interface.

This is the code. I hope this could help you!!!

         Fran.

.hh file
--------------------------
#ifndef CLICK_MMARPWAITRANDOM_HH
#define CLICK_MMARPWAITRANDOM_HH
#include <click/element.hh>
#include <elements/mmarp/mmarp.hh>
#include <click/timer.hh>

CLICK_DECLS

class MMARPWaitRandom : public Element { public:

   MMARPWaitRandom();
   ~MMARPWaitRandom();


   const char *class_name() const        { return "MMARPWaitRandom"; }
   const char *processing() const        { return AGNOSTIC; }
   MMARPWaitRandom *clone() const        { return new MMARPWaitRandom; }
   int configure(Vector<String> &, ErrorHandler *);
   int initialize(ErrorHandler *);

   Packet *simple_action(Packet *);

private:

   struct PacketTimerPair {
       MMARPWaitRandom *obj;
       Packet *p;

       PacketTimerPair(MMARPWaitRandom *o) : obj(o) { }

     private:
       PacketTimerPair() { }
   };

   static void static_expire_packet(Timer *, void *v)
   { ((PacketTimerPair *) v)->obj->expire_packet(*((PacketTimerPair *) 
v)->p); }
   void expire_packet(Packet &);

   Timer *t;
   PacketTimerPair *ptp;

   unsigned long _wait;
};

CLICK_ENDDECLS
#endif
---------------------------------------------
.cc file
---------------------------------------------
/*
  * mmarpwaitrandom.{cc,hh} --
  *
  */

#include <click/config.h>
#include "mmarpwaitrandom.hh"
#include <click/timer.hh>
#include <time.h>
#include <click/confparse.hh>

CLICK_DECLS

MMARPWaitRandom::MMARPWaitRandom()
   : Element(1, 1)
{
   MOD_INC_USE_COUNT;
}

MMARPWaitRandom::~MMARPWaitRandom()
{
   MOD_DEC_USE_COUNT;
}

int
MMARPWaitRandom::initialize(ErrorHandler *)
{
     srand(time(NULL));

     return 0;
}
int
MMARPWaitRandom::configure(Vector<String> &conf, ErrorHandler *errh) {
         return cp_va_parse(conf, this, errh,
                         cpUnsigned, "limit ms to wait", &_wait,
                         0);
}

void
MMARPWaitRandom::expire_packet(Packet &p){
   t->unschedule();
   output(0).push(&p);
}

Packet *
MMARPWaitRandom::simple_action(Packet *p)
{
   ptp = new PacketTimerPair(this);
   ptp->p = p;
   t = new Timer(static_expire_packet, (void *) ptp);
   t->initialize(this);

   uint32_t micros = _wait * 1000;
   uint32_t num = (uint32_t)((double)micros * rand()/(RAND_MAX+1.0));
   double d = (double)num / 1000.0;
   t->schedule_after_ms(d);

   return 0;
}

CLICK_ENDDECLS
EXPORT_ELEMENT(MMARPWaitRandom)
ELEMENT_MT_SAFE(MMARPWaitRandom)

----------------------------------------------

At 14:18 19/03/2004 -0600, you wrote:

>I am wondering how I could use your software router to add a random 
>packet delay to each packet that the router sends. (Maybe do some code 
>modifications? But where?). Any information to do this would greatly be

>appreciated.
>
>Thanks,
>
>Anthony G Persaud
>ironstar at iastate.edu
>




More information about the click mailing list