[Xorp-hackers] Socket error

Pavlin Radoslavov pavlin at ICSI.Berkeley.EDU
Mon Feb 16 20:29:54 PST 2009


illidan <illidan at lineway.net> wrote:

> Pavlin Radoslavov wrote:
> > illidan <illidan at lineway.net> wrote:
> >
> >  
> >> Hello,
> >>
> >> I was trying to open a socket using socket4 library.
> >> I used function send_tcp_open_and_bind :
> >>
> >> create_socket.cc :
> >> void SocketServer::get_create_socket() {
> >>     XorpCallback2<void, const XrlError&, const string*>::RefPtr cb;
> >>     IPv4 localIP("10.10.10.10");
> >>     int localPort = 100;
> >>     cb = callback(this,&SocketServer::get_socket_id);
> >>     
> >> send_tcp_open_and_bind("fea",_rtr.instance_name(),localIP,localPort,cb);
> >> }
> >> void SocketServer::get_socket_id(const XrlError& e,const string* id) {
> >>     if(e==XrlCmdError::OKAY()) {
> >>         fprintf(stderr,"I receive the response : %s\n",id->c_str());
> >>         _socket_id = id->c_str();
> >>         listen();
> >>         return;
> >>     }
> >> }
> >>
> >> When I run this program, I receive correctly the socket_id, but I get 
> >> an error in rtrmgr process :
> >>
> >> "[ 2009/02/16 13:11:01 WARNING xorp_rtrmgr:32679 XrlFinderTarget +721 
> >> ../xrl/targets/finder_base.cc 
> >> handle_finder_event_notifier_0_1_register_instance_event_interest ] 
> >> Handling method for 
> >> finder_event_notifier/0.1/register_instance_event_interest failed: 
> >> XrlCmdError 102 Command failed failed to add watch
> >> [ 2009/02/16 13:11:01 ERROR xorp_fea:32681 FEA +128 xrl_fea_io.cc 
> >> register_instance_event_interest_cb ] Failed to register event 
> >> interest in instance create_socket: 102 Command failed failed to add 
> >> watch"
> >>
> >> What could be the problem? Did I do something wrong??
> >>     
> >
> > Was your create_socket program still running, and in READY state?
> >
> > You can verify both by using the following XRL by hand (you need to
> > replace "fea" with the target name of your module):
> > libxipc/call_xrl finder://fea/common/0.1/get_status
> >
> > If everything is normal you should see the following output:
> > status:u32=3&reason:txt=
> >   
> In fact, create_socket was not a process but a tool.
> I did it like bgp/tools/xorpsh_print_peers.
> I have my own process (call consensus), but I don't really know  when  
> to start the tcp socket. So I did this tool to try to open a socket 
> (like a tester).
> 
> I just try to create my socket in consensus
> 
> XrlCmdError
> ConsensusTarget::consensus_0_1_add_ip(const string& ip) {
>    _ip = ip;
>    // I try to create my socket
>    XLOG_INFO("%s\n", "Starting up CONSENSUS");
>    SocketServer socket(_rtr,_eventloop);
>    socket.get_create_socket();
>    return XrlCmdError::OKAY();
> }

The issue seems to be that the SocketServer instance is created on
the stack so it will be destroyed when you return from the above
consensus_0_1_add_ip() method. You should make it a member of class
ConsensusTarget.

Regards,
Pavlin

> I run rtrmgr with the config file "static.boot and I add a consensus IP 
> with CLI. When I add the IP and "commit"  it makes an error and kill my 
> process :
> 
> Starting consensus protocol
> [ 2009/02/16 23:00:34 TRACE xorp_rtrmgr RTRMGR ] Validating with XRL: 
>  >finder://consensus/common/0.1/get_status<
> [ 2009/02/16 23:00:34 TRACE xorp_rtrmgr RTRMGR ] Expanding xrl 
> $(consensus.targetname)/consensus/0.1/add_ip?ip:txt=$(@)
> [ 2009/02/16 23:00:34 TRACE xorp_rtrmgr RTRMGR ] Executing XRL: 
>  >finder://consensus/consensus/0.1/add_ip?ip:txt=10.10.10.1<
> [ 2009/02/16 23:00:34 INFO xorp_consensus CONSENSUS ] Starting up CONSENSUS
> [ 2009/02/16 23:00:34 INFO xorp_consensus CONSENSUS ] Starting up CONSENSUS
> [ 2009/02/16 23:00:34 TRACE xorp_rtrmgr RTRMGR ] Validating with XRL: 
>  >finder://consensus/common/0.1/get_status<
> [ 2009/02/16 23:00:34  INFO xorp_rtrmgr:13806 RTRMGR +2233 task.cc 
> run_task ] No more tasks to run
> [ 2009/02/16 23:00:34 TRACE xorp_rtrmgr RTRMGR ] 
> apply_config_change_done: status: 1 response:  target: 
> xorpsh-13811-my_computer
> [ 2009/02/16 23:00:34  ERROR xorp_rtrmgr:13806 RTRMGR +754 
> module_manager.cc done_cb ] Command 
> "path_to_xorp/consensus/xorp_consensus": terminated with signal 11.
> [ 2009/02/16 23:00:34  INFO xorp_rtrmgr:13806 RTRMGR +299 
> module_manager.cc module_exited ] Module abnormally killed: consensus
> 
> And apparently the process has not been started :
> #./call_xrl finder://consensus/common/0.1/get_status
> [ 2009/02/16 23:03:05  ERROR call_xrl:13896 XRL +57 call_xrl.cc 
> response_handler ] Failed.  Reason: 201 Resolve failed 
> ("finder://consensus/common/0.1/get_status")
> [ 2009/02/16 23:03:06 WARNING call_xrl XRL ] request: 
> finder://consensus/common/0.1/get_status resolve failed
> [ 2009/02/16 23:03:06 WARNING call_xrl XRL ] request: 
> finder://consensus/common/0.1/get_status failed after 0 retries
> [ 2009/02/16 23:03:06  ERROR call_xrl:13896 XRL +231 call_xrl.cc 
> input_cmds ] No callback: finder://consensus/common/0.1/get_status
> Stopping.
> 
> What did I do wrong??
> 
> Thanks for your help!
> 
> Michael
> > FYI, the values for the static codes are listed in
> > libxorp/status_codes.h and the value for PROC_READY is 3.
> >
> > Regards,
> > Pavlin
> >
> >  
> >> Thanks
> >>
> >> Michael
> >>
> >> _______________________________________________
> >> Xorp-hackers mailing list
> >> Xorp-hackers at icir.org
> >> http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/xorp-hackers
> >>     
> 
> 
> _______________________________________________
> Xorp-hackers mailing list
> Xorp-hackers at icir.org
> http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/xorp-hackers



More information about the Xorp-hackers mailing list