Hi,
i will try explain what i want and what i did and then what i am facing,
What i am trying to do :
- using only one LWIP (tcp-ip) stack
- the communication with lwip will be by using RPC calls.
- the system should be multi-threading and serve many process in the
same time
What I did,
- I created the client - server for the RPC which invoke the lwip
methods. I will use the server only .
- I created the libc_rpc_lwip plugin which is similar to libc_lwip .
in libc_rpc_lwip i have an aobject of the Connection to call the
methods.
- Since i want only one stack in the i did not initialize the lwip
from the constrcutre of the plugin that is mean :
Plugin::Plugin()
{
PDBG("using the RPC lwIP libc plugin\n");
//rpcclient.r_lwip_tcpip_init(); this is commented
}
and i made the initiation in the RPC server and i used static IP
for now ( I don't want to handle the libc_lwip_nic_dhcp right
now)
and this is the main method in the RPC server
int main(void)
{
Cap_connection cap;
static Sliced_heap sliced_heap(env()->ram_session(),
env()->rm_session());
PDBG("lwip init has been started.");
lwip_tcpip_init();
enum { BUF_SIZE = Nic::Packet_allocator::DEFAULT_PACKET_SIZE * 128
};
lwip_nic_init(inet_addr("10.0.2.18"), inet_addr("255.255.255.0"),
inet_addr("10.0.2.1"), BUF_SIZE, BUF_SIZE);
PDBG("gotting ip is done.");
enum { STACK_SIZE = 7096 };
static Rpc_entrypoint ep(&cap, STACK_SIZE, "rpclwip_ep");
static rpclwipsession::Root_component rpclwip_root(&ep, &sliced_heap);
env()->parent()->announce(ep.manage(&rpclwip_root));
/* We are done with this and only act upon client requests now. */
sleep_forever();
return 0;
}
- for testing i am using simple echo server and make it configure
it to use the libc_rpc_lwip insread of libc_lwip and i was
succeeded .
What I am Facing:
- when i tried to run more then one echo server ( in different port)
,the lwip is
not working will and what i found that when the tow echo server try
to accept
connection the first one will block the other. and it means that lwip
is not multi threading any more.
Is the RPC prevent the lwip multi-threading or I am doing some thing
wrong .
I maنe my problem easy to be understood, if not just ask me to clarify.
Thank you in advance
--
*Mohammad *