netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ben Greear <greearb@candelatech.com>
To: netdev@oss.sgi.com
Cc: "David S. Miller" <davem@davemloft.net>
Subject: Re: An interface goes away while a socket is bound to it..what happens?
Date: Tue, 18 Jan 2005 13:18:16 -0800	[thread overview]
Message-ID: <41ED7D18.30506@candelatech.com> (raw)
In-Reply-To: <41ECB05B.8060207@candelatech.com>

Ben Greear wrote:
> David S. Miller wrote:
> 
>> On Mon, 17 Jan 2005 19:28:27 -0800
>> Ben Greear <greearb@candelatech.com> wrote:
>>
>>
>>> The interesting part to me is that I do not appearantly see any errors
>>> while continuing to send UDP packets on the socket that was bound to the
>>> original ppp0 interface, and yet no packets are ever routed over the new
>>> ppp0 interface.  I would expect it to either fail the write, or to just
>>> magically keep working.
>>
>>
>>
>> If you have bound to the local IP address, when your T1 goes down
>> that local IP address should no longer be assosciated with the
>> system even when the PPP interface comes back up, so what should
>> happen is that the route lookup in udp_sendmsg() will fail and sendmsg()
>> will return with that error code.
> 
> 
> Well, the new interface will come back with the same name, and same IP.
> 
> Also, I bind to the local interface with BIND_TO_DEVICE.  I can imagine
> how that might confuse things...
> 
> I will do some double-checking to make sure I'm not missing an error
> code on the sendmsg call...

I've done some more checking.  The call to sendto is returning the number
of bytes I tried to write, ie no errors.  The (new) ppp0 interface is showing
no increase in tx or rx packets.

I groped the kernel, and and so far my conjecture of how things are working
is this:

When I BINDTODEVICE, the kernel socket struct saves the interface id.  It
uses this for it's routing tricks from here on out.

When the old ppp0 device goes away, and the new one comes
back, the device-index is different.  This means, as far as I can tell, that
udp_sendmsg should return -ENODEV.

What it actually seems to do is to start generating traffic out of eth0
(which holds the default route).  I guess one could argue that if the
bound-to device does not actually exist, then we might as well send
the packet to the default gateway.  But, that could also be considered
a security risk if indeed you are using BINDTODEVICE to make sure
traffic goes out a specific interface...


Ben

-- 
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc  http://www.candelatech.com

      reply	other threads:[~2005-01-18 21:18 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-01-18  3:28 An interface goes away while a socket is bound to it..what happens? Ben Greear
2005-01-18  3:39 ` David S. Miller
2005-01-18  6:44   ` Ben Greear
2005-01-18 21:18     ` Ben Greear [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=41ED7D18.30506@candelatech.com \
    --to=greearb@candelatech.com \
    --cc=davem@davemloft.net \
    --cc=netdev@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).