[Click] assertion problem with port
Ian Rose
ianrose at eecs.harvard.edu
Wed Mar 2 10:01:39 EST 2011
Your implementation of push() is quite basic - not sure what is wrong
there. This element does have equal numbers of input and output ports
right? (your header file implies that it must)
Sprinkle 'assert(p != NULL)' statements throughout that function and see
if any of them blow up. Also ensure that the element upstream is
passing a valid packet.
- Ian
On 03/02/2011 09:26 AM, iaaaguru at tce.edu wrote:
> i think the problem is with the line " output(h).push(p);". in the "push"
> finction..if its commented the element works fine... can u pls help
>
>
> ########### time.cc ##########
> #include<click/config.h>
> #include "time.hh"
> #include<click/confparse.hh>
> #include<click/error.hh>
> #include<click/glue.hh>
> #include<click/router.hh>
> CLICK_DECLS
>
> Time::Time()
> : _interval(0, Timestamp::subsec_per_sec / 2),
> _count0(0),_count1(0), _active(true), _timer(this)
> {
> click_chatter("constructor count0: %d count1: %d",_count0,_count1);
> }
>
> Time::~Time()
> {
> }
>
> int
> Time::configure(Vector<String> &conf, ErrorHandler *errh)
> {
> if (cp_va_kparse(conf, this, errh,
> "INTERVAL", cpkP, cpTimestamp,&_interval,
> "ACTIVE", 0, cpBool,&_active,
> cpEnd)< 0)
> return -1;
>
> }
>
> int
> Time::initialize(ErrorHandler *)
> {
> _timer.initialize(this);
> if (_active)
> _timer.schedule_after(_interval);
> return 0;
> }
>
> void
> Time::run_timer(Timer *)
> {
>
>
> //@@@@@@@@@@@@@@@@@ get counters from pull element @@@@@@@@@@@@@@@
>
> click_chatter("Left count : %d Right count :%d",_count1,_count0);
>
> if ((_count0==0)&&(_count1)==0)
> click_chatter("No netowrk flow");
>
> if(_count0>_count1)
> {
> click_chatter("Right is hot");
> hot_int =0;
> }
>
> else if ((_count0==0)||(_count1)==0)
> {
> if(_count0=0)
> {
> if(_count1=0)
> click_chatter("No network flow");
> else
> click_chatter("No flow from left");
> }
>
> }
>
> if(_count1>_count0)
> {
> click_chatter("Left is hot");
> hot_int=1;
> }
>
> //@@@@@@@@@@@@@@@@@@ reset all counters @@@@@@@@@@@@@@@@@@@@@@@@@@
> _count0=0;
> _count1=0;
> click_chatter("Timer reset");
>
> //@@@@@@@@@@@@@@@@@@@@ UDP section @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>
> pudp=input(2).pull();
> if(pudp)
> {
>
> click_chatter("@@@@@@@@@@@@ Recieved UDP packet @@@@@@@@@@@@@@@@@");
> push(hot_int,pudp);
>
> }
>
> _timer.reschedule_after(_interval);
> }
>
> Packet*
> Time::pull(int)
> {
>
> p0=input(0).pull();
>
> if(p0)
> {
> _count0+=1;
> p0->kill();
> }
>
> p1=input(1).pull();
>
> if(p1)
> {
> _count1+=1;
> p1->kill();
> }
>
>
> return p0;
>
> }
>
> void
> Time::push(int h, Packet *p)
> {
>
> if(p)
> {
> // pudp_n = p->clone();
>
> click_chatter("Made packet");
> output(h).push(p);
> click_chatter("Pushed packet");
> }
> }
>
> CLICK_ENDDECLS
> ELEMENT_REQUIRES(userlevel)
> EXPORT_ELEMENT(Time)
> ELEMENT_MT_SAFE(Time)
>
> ########### time.hh ##########
>
>
> #ifndef CLICK_TIME_HH
> #define CLICK_TIME_HH
> #include<click/element.hh>
> #include<click/timer.hh>
> CLICK_DECLS
>
>
> class Time : public Element { public:
>
> Time();
> ~Time();
>
> const char *class_name() const { return "Time"; }
> const char *port_count() const { return "-/="; }
> const char *processing() const { return AGNOSTIC; }
>
> int configure(Vector<String> &, ErrorHandler *);
> int initialize(ErrorHandler *);
>
> void run_timer(Timer *);
> Packet* pull(int);
> void push(int, Packet *p);
>
> private:
> Packet *p0, *p1, *pudp,*pudp_n;
> Timestamp _interval;
> int _count0,_count1,hot_int;
> bool _active;
> Timer _timer;
> int counter;
> String _data;
>
> };
>
> CLICK_ENDDECLS
> #endif
>
>
>
>
>> Please include your code.
>> - Ian
>>
>>
>> On 03/02/2011 08:16 AM, iaaaguru at tce.edu wrote:
>>> hi all...
>>> i wrote an agnostic element. its pull ekement pull packet from 3 input
>>> ports and push elements on having certain conditions based on pulled
>>> packets generates packet and pushes it to output port.. while doing
>>> this
>>> i get an error..
>>>
>>> "click: ../include/click/element.hh:559: void
>>> Element::Port::push(Packet*)
>>> const: Assertion `_e&& p' failed."
>>>
>>> can u pls help...
>>>
>>>
>>>
>>> -----------------------------------------
>>> This email was sent using TCEMail Service.
>>> Thiagarajar College of Engineering
>>> Madurai-625 015, India
>>>
>>> _______________________________________________
>>> click mailing list
>>> click at amsterdam.lcs.mit.edu
>>> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>> _______________________________________________
>> click mailing list
>> click at amsterdam.lcs.mit.edu
>> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>>
>
>
>
> -----------------------------------------
> This email was sent using TCEMail Service.
> Thiagarajar College of Engineering
> Madurai-625 015, India
>
>
>
> -----------------------------------------
> This email was sent using TCEMail Service.
> Thiagarajar College of Engineering
> Madurai-625 015, India
>
> _______________________________________________
> click mailing list
> click at amsterdam.lcs.mit.edu
> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
More information about the click
mailing list