This is the mail archive of the ecos-discuss@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

lwIP 1.3 port


Hi

I've invested a bit of time into porting lwIP 1.3 to eCos. I got a basic port up and running (using the synth ethernet driver). I have more or less completely rewritten the CDL script, having most of the lwIP configuration options in the CDL. I also adapted the system architecture, the tests, and changed some of the glue code. The glue code is where I'm not quite happy right now. lwIP offers two modes of operation, a single-thread model (using the event API) as well as a threaded model, using the sequential API (netconn or sockets). lwIP is primeraly used when resources are low, and the single-threaded model is the preferred mode of operation in that scenario. Let me outline what I have in mind for implementation, and let me know if you have any concerns, criticism or hints.

Multi-threaded operation:

In this mode, lwIP implicitly creates a thread called "tcpip" which basically processes incoming messages on an event queue. These events contain requests from the sequential APIs (netconn, sockets) as well as requests to process ethernet packets. The current eCos glue code adds another thread for ethernet packet delivery. All this thread does is waiting on a counting semaphore (posted by the ethernet drivers when packets arrive), receive the packets on reception, and post an event to the tcpip thread for processing. This model is quite wasteful on resources, as the two threads could probably be consolidated into one, but this would require changes in the lwIP code base, which I would like to avoid, so I guess the current model is OK.

Single-threaded operation:

In this mode, a single thread is used for all handling of the stack. In the current port, the user needs to initialize lwIP "by hand", setup timeouts etc. I would like to write some glue code to simplify usage of lwIP in this mode. The glue code should implement an initialization routine as well as the basic operation of the lwip thread (similar to what the tcpip thread in the threaded version provides). Basic timeouts of the protocols should automatically be handled when enabled in the configuration, and ethernet drivers should be polled. I would also like to integrate SLIP and PPP support. As these have to run in a separate thread (for serial communication), we need a simple queue to pass received packets to the main thread.

If this all sounds a big vague, I'm sorry, I'm just trying to lay it all out in my head. I guess I'll have to implement it and see where it goes. If anyone is interested in the current port, you can get it at https://hg.inthemill.ch/hg/ecos but it is all work in progress and subject to change.

Simon

--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]