Yes. The framing is done in Openflow_stream_connection::do_recv_openflow(). I made myself confused because that I thought it was done in Datapath::do_recv_openflow().
Sorry guys. I think this is a trivial question. Deng On Tue, Jan 20, 2009 at 12:15 AM, Ye Deng <[email protected]> wrote: > Sorry. The last mail is incomplete, please ignore it!! > > > Hi all, > > I am wondering where is the framing code for the OpenFlow protocol > messages. > I mean the OpenFlow switch talks to NOX through a reliable byte stream > channel (e.i. TCP or SSL). > So, there must be a model to buffer the received bytes from a OpenFlow > Switch, and returns a completed OpenFlow message when it has received enough > bytes. > > Please see the comments, [1] [2] [3], I added into the source code below: > > in the file "noxcore/src/builtin": > bool > Conn::do_poll() > { > int error; > > //[1] the framing job must be done in the oconn->recv_openflow() > std::auto_ptr<Buffer> b(oconn->recv_openflow(error, false)); > switch (error) { > case 0: { > datapathid dp_id = oconn->get_datapath_id(); > > //[2] here, the Buffer b contains a completed OpenFlow message > std::auto_ptr<Event> event(openflow_packet_to_event(dp_id, b)); > if (event.get()) { > event_dispatcher.dispatch(*event); > } > return true; > } > ... ... > } > > in the file "noxcore/src/lib" > //[3] the framing job is actually done here implicitly? > std::auto_ptr<Buffer> > Datapath::do_recv_openflow(int& error) //this is called by > oconn->recv_openflow() > { ... ... } > > > Deng > > > > > > > On Tue, Jan 20, 2009 at 12:00 AM, Ye Deng <[email protected]> wrote: > >> Hi all, >> >> I am wondering where is the framing code for the OpenFlow protocol. >> I mean the OpenFlow talks to NOX through a reliable byte stream channel >> (e.i. TCP or SSL). >> So, there must be a model to buffer the received bytes from a OpenFlow >> Switch, and returns a completed OpenFlow message when it has received enough >> bytes. >> >> Please see the comments, [1] [2], I added into the source code below: >> >> in the file "noxcore/src/builtin": >> bool >> Conn::do_poll() >> { >> int error; >> std::auto_ptr<Buffer> b(oconn->recv_openflow(error, false)); >> switch (error) { >> case 0: { >> datapathid dp_id = oconn->get_datapath_id(); >> >> // [2] >> std::auto_ptr<Event> event(openflow_packet_to_event(dp_id, b)); >> if (event.get()) { >> event_dispatcher.dispatch(*event); >> } >> return true; >> } >> ... ... >> } >> >> >> >> >
_______________________________________________ nox-dev mailing list [email protected] http://noxrepo.org/mailman/listinfo/nox-dev_noxrepo.org
