lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [lwip-users] DHCP renewing/ rebinding and on going connexions


From: PELISSIER Christophe
Subject: RE: [lwip-users] DHCP renewing/ rebinding and on going connexions
Date: Mon, 5 Jan 2009 10:34:16 +0100

Ok! thanks for your information Jonathan.

Maybe it should be a good things for me to upgrade from lwip v1.2 to v1.3 
rather than creating my own call-back mechanisms in lwip v1.2.


Regards,
Christophe  

-----Original Message-----
From: address@hidden [mailto:address@hidden On Behalf Of Jonathan Larmour
Sent: Saturday, January 03, 2009 10:29 PM
To: Mailing list for lwIP users
Subject: Re: [lwip-users] DHCP renewing/ rebinding and on going connexions

PELISSIER Christophe wrote:
> Hi all,
> 
> i am using lwip V1.2 on a blackfin CPU. the lwip port has been made by 
> Analog Device. I have not a long experience in lwip use. Looking at 
> the DHCP client, i was wondering how on going connection are managed 
> during an IP address change.
> 
> For example, during the IP renewing phase if the client receives a 
> DHCPNAK (or never receives a DHCPACK), it should stop using its 
> current IP address. The RFC2131adds on page 41 that it "MUST 
> immediately stop any other network processing and requests network 
> initialization parameters...".
> 
> In the current dhcp code, i have seen that in such cases a 
> dhcp_release is performed. This shutdown the NETIF flags but for my 
> understanding nothing is done for the connexions currently in use.

I believe lwIP behaves correctly here. Because the netif is set down,
ip_route() will never match it. And ip_route() is always used before sending 
normal packets. lwIP doesn't have the complexity of a proper route cache and 
rightly so really. There is some small-scale support for "hardware hints" to 
save on ARP lookups which also saves the netif lookup, but ip_route is still 
called first in those cases too as far as I know.

If you can find somewhere where ip_route is not called before calling 
ip_output_if, then that might be an issue. Note that anything that results from 
an incoming packet on a netif is ok because ip_input() does not accept packets 
from interfaces which are marked down, apart from some special cases like DHCP 
and IGMP.

> Do i miss something? Is shutting down on going connection not required?
> That is the behaviour of opened sockets in such cases? If shutting 
> down is required, does this action have to be performed by the stack? 
> By the application level? If this action is related to application 
> level, is there any call-back mechanism available to inform the 
> application when these events are raised?
> 
> In the same way, RFC2131 says page 41, during a renewing phase,  "if 
> the client is given a new network address, it MUST NOT continue using 
> the previous network address and SHOULD notify le local users of the 
> problem".

For the MUST NOT bit, again lwIP should be ok.

For the notification of local users, there is a netif status callback in lwIP 
1.3 (NOT 1.2) you can use - enable LWIP_NETIF_STATUS_CALLBACK in lwipopts.h, 
and include/lwip/netif.h which has netif_set_status_callback(). netif_set_up() 
calls this callback, and that in turn is called when an interface is brought up 
or changes IP by DHCP. 
Of course you don't see the netif using the abstract sockets API, so you have 
to break the layering abstractions a bit here.

There is no official way in the sockets API to be informed of course. The word 
SHOULD is of course vital here. It's (obviously) not required. In fact it's a 
bit tricky to deal with: consider the case with multiple netifs, where the 
local socket is bound to 0.0.0.0 (i.e. any interface). 
For connection-less sockets it may still be possible to use another interface. 
That's why ip_route() is called of course. If packets genuinely can't be routed 
when there's something to be sent, then in lwIP, ERR_RTE is returned, which 
will be translated to EHOSTUNREACH for sockets API users. So it's not 
necessarily correct to go around shutting down sockets which had been using an 
interface which has now gone down or changed IP.

Alternatively for connection-oriented sockets and you try to send data[1] or 
have KEEPALIVEs on, all you can do is wait for the connection to eventually 
time out. That's not necessarily a big deal. After all, all you would probably 
want to do when informed the netif has changed IP is to
shutdown() or close() any associated sockets anyway.

Hope this helps,

Jifl

[1] As per the other message I sent to the list, for some reason I can't find 
where retransmits do this, so if they don't at present, you may have to rely 
solely on KEEPALIVEs.
-- 
eCosCentric Limited      http://www.eCosCentric.com/     The eCos experts
Barnwell House, Barnwell Drive, Cambridge, UK.       Tel: +44 1223 245571
Registered in England and Wales: Reg No 4422071.
------["The best things in life aren't things."]------      Opinions==mine


_______________________________________________
lwip-users mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/lwip-users




reply via email to

[Prev in Thread] Current Thread [Next in Thread]