public inbox for ecos-discuss@sourceware.org
 help / color / mirror / Atom feed
From: Hugo Tyson <hmt@redhat.com>
To: ecos-discuss@sources.redhat.com
Subject: Re: [ECOS] DHCP shuts down Ethernet device?
Date: Mon, 23 Apr 2001 11:30:00 -0000	[thread overview]
Message-ID: <wwtn197cvxo.fsf@masala.cambridge.redhat.com> (raw)
In-Reply-To: <20010423123926.A2035@visi.com>


Grant Edwards <grante@visi.com> writes:
> I just discovered that when the DHCP task fails to find a
> server, it then shuts down the Ethernet driver using the code:
> 
>     // Shut down interface so it can be reinitialized
>     ifr.ifr_flags &= ~(IFF_UP | IFF_RUNNING);
>     if (ioctl(s, SIOCSIFFLAGS, &ifr)) { /* set ifnet flags */
>         perror("SIOCSIFFLAGS down");   
>         return false;
>         }
> 
> This generates a call to the _stop() method in the Ethernet
> driver.
> 
> I realise that if DHCP fails, the IP stack needs to be shut
> down, but stopping the ethernet device entirely keeps non-IP
> stuff from working.  Does the DHCP code assume that there are
> no non-IP network protocols, or is the above supposed to shut
> down only IP networking on the device?  The other drivers I've
> looked at all seem to shut off the interface completely.

It shuts down everything, deliberately.
 
> I think I'm going to have to either comment out the above call,
> or make my Ethernet driver's _stop() method into a noop...

Either of those would do.

Here's a cleaner suggestion: the DHCP system is separated into two parts.
The protocol and the thread that runs it.  The protocol is in dhcp_prot.c;
the thread in dhcp_support.c.  You can configure out the automatic start of
that management thread and use your own.  It can trivially detect an
interface going down, and bring it back up again in whatever fashion you
like, if you want it to remain up despite having no IP address.

BTW, a little background: the interface(s) are torn right down in order to
make it possible to direct the initial broadcast to a particular interface.
Using normal sockets for the broadcast *before you have an IP address at
all* only works if you ensure there is only one interface up at one time
and a naive route installed.  A re-write using raw sockets would solve
this, AIUI, but we have not had the resource available to do this.
Contributions welcome!  [We all knew that was coming, right? ;-) ]

OTOH you could add a config opt to control how vigorously we close down the
interface - thats probably a much shorter task, and all would still be well
if you only have one interface present.  Contributions welcome again.


Like much of the stuff in the lib part of the network source tree, it is
intended that implementors are free to mess with it - requirements about
booting networks being as diverse as they are.

HTH,
	- Huge

  reply	other threads:[~2001-04-23 11:30 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-04-23 10:38 Grant Edwards
2001-04-23 11:30 ` Hugo Tyson [this message]
2001-04-23 12:27   ` Jonathan Larmour
2001-04-23 13:35     ` Grant Edwards

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=wwtn197cvxo.fsf@masala.cambridge.redhat.com \
    --to=hmt@redhat.com \
    --cc=ecos-discuss@sources.redhat.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 read-only IMAP folder(s) and NNTP newsgroup(s).