[Click] nsclick readhandler and writehandler patches

Eddie Kohler kohler at cs.ucla.edu
Wed Feb 22 03:12:05 EST 2006


Hi Bart, Michael,

Thanks -- applied!  But in future, please, please, please, please send patches 
in patch format (i.e. output of 'diff -ru').

Eddie


Bart Braem wrote:
> Hello,
> 
> Currently nsclick does not pass a simstate when calling handlers from ns. This 
> can pose problems as the time passed by ns might be completely wrong. This 
> poses problems when handler callback functions use something with time. The 
> proper approach is the same as when running loadclick.
> 
> classifier-click.cc should contain the following code:
>     else if (strcmp(argv[1], "readhandler") == 0) {
>       char* readreturn = 0;
>       simclick_simstate simstate; 
>       simstate.curtime = GetSimTime(); 
>       readreturn = simclick_click_read_handler(clickinst_,argv[2],argv[3],0,0, 
> &simstate);
>       //fprintf(stderr, "readhandler: %s\n",clickretc);
>       if (readreturn) {
>         tcl.resultf("%s", readreturn);
>         free(readreturn);
>         readreturn = 0;
>       }
>       else {
>         tcl.resultf("");
>       }
>       return TCL_OK;
>     }
>   } else if (argc == 5) {
>     if (strcmp(argv[1], "writehandler") == 0) {
>       int clickret;
>        simclick_simstate simstate; 
>        simstate.curtime = GetSimTime(); 
>        clickret = simclick_click_write_handler(clickinst_, argv[2], argv[3],
>                                               argv[4], &simstate);
>       //fprintf(stderr, "writehandler: %i\n",clickret);
>       tcl.resultf("%i", clickret);
>       return TCL_OK;
>     }
>   }
> 
> (Perhaps the simstate initialisation part should become a separate 
> method/constructor)
> 
> include/click/simclick.h should accept the simstate parameter:
> char* simclick_click_read_handler(simclick_click clickinst,
>                                   const char* elementname,
>                                   const char* handlername,
>                                   SIMCLICK_MEM_ALLOC memalloc,
>                                   void* memparam,
>                                   simclick_simstate* state);
> 
> int simclick_click_write_handler(simclick_click clickinst,
>                                  const char* elemname, const char* 
> handlername,
>                                  const char* writestring, simclick_simstate* 
> state);
> 
> ns/nsclick.cc should set the state:
> char* simclick_click_read_handler(simclick_click clickinst,
>                                   const char* elementname,
>                                   const char* handlername,
>                                   SIMCLICK_MEM_ALLOC memalloc,
>                                   void* memparam,
>                                   simclick_simstate* state){
>     Router *r = ((SimState*)clickinst)->router;
>     if (!r) {
>       click_chatter("simclick_click_read_handler: call with null router");
>       return 0;
>     }
>     setsimstate(state);
> 
> int simclick_click_write_handler(simclick_click clickinst,
>                                  const char* elemname, const char* 
> handlername,
>                                  const char* writestring, simclick_simstate* 
> state){
>     Router *r = ((SimState*)clickinst)->router;
>     if (!r) {
>       click_chatter("simclick_click_write_handler: call with null router");
>       return -3;
>     }
>     setsimstate(state);
> 
> Credit for this patch goes to Michael Voorhaen, he discovered the problem and 
> worked out the solution.
> 
> Bart
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> click mailing list
> click at amsterdam.lcs.mit.edu
> https://amsterdam.lcs.mit.edu/mailman/listinfo/click


More information about the click mailing list