Re: Ethernet-multiple NICs and laptop

From: Jim Roland (jim@roland.net)
Date: Sat Apr 08 2000 - 02:10:23 EST


Thanks! That's exactly what I need. I just wish the kernel and init
understood laptop docking and undocking like (no flames please) Winblows
does. That's the only redeeming value to Winblows, IMHO.

-------------------------------------------------------
Jim Roland, President
Roland Internet Services, "The host with the most"
Offering premier web, email and CGI custom programming.
Ask us about Frontpage98 Extensions!
http://www.roland.net/ info@roland.net
-------------------------------------------------------

On Sat, 8 Apr 2000, Keith Owens wrote:

> Date: Sat, 08 Apr 2000 13:06:53 +1000
> From: Keith Owens <kaos@ocs.com.au>
> To: Jim Roland <jim@roland.net>
> Cc: linux-kernel@vger.rutgers.edu, linux-laptop@vger.rutgers.edu
> Subject: Re: Ethernet-multiple NICs and laptop
>
> On Thu, 6 Apr 2000 08:32:36 -0600 (CST),
> Jim Roland <jim@roland.net> wrote:
> >I have a port replicator with a 3Com 3C905C NIC built-in. When I'm docked,
> >my port replicator's NIC enables with eth0 and my PCMCIA network card
> >enables with eth1. When I'm undocked my PCMCIA card takes over eth0. How
> >do I get the PCMCIA card to ALWAYS use eth1???
>
> Don't bother trying. eth0/eth1 are what the kernel calls the hardware
> and is always going to be hardware dependent. The mistake is trying to
> override the kernel's hardware numbering, this mistake arises because
> the user wants to use eth0 and eth1 instead of "eth-pcmcia" and
> "eth-docking". That is, you are trying to use a kernel construct as a
> user identifier.
>
> The solution to the problem of multiple NICs is to use separate kernel
> and user identifiers. Anything in user space should use the user
> identifier to get the kernel identifier. "Any problem can be solved by
> another level of indirection".
>
> Example.
>
> In directory /etc/sysconfig/network-scripts (this is RedHat, other
> distributions may use different names) there are ifup and ifdown
> scripts. These are general scripts that obtain IP addresses and
> routing data from ifcfg-<device>, e.g. ifcfg-eth0. Instead of hard
> coding the pcmcia data in ifcfg-eth0 and the docking station data in
> ifcfg-eth1, make the data dynamic. Create two files in
> /etc/sysconfig/network-scripts for the pcmcia card and the docking
> station data, call them eth-pcmcia and eth-docking. In those files you
> store the IP data for the relevant card, lines like
>
> # eth-pcmcia
> USERDEVICENAME=eth-pcmcia
> ONBOOT=no
> BOOTPROTO=dhcp
>
> # eth-docking
> USERDEVICENAME=eth-docking
> IPADDR=192.168.255.3
> NETMASK=255.255.255.0
> NETWORK=192.168.255.0
> BROADCAST=192.168.255.255
> GATEWAY=192.168.255.1
> ONBOOT=yes
>
> The job of ifcfg-eth[01] is now to work out which card is being
> accessed and to map the kernel identifier (eth[01]) to a user
> identifier (eth-{docking,pcmcia}). This example ifcfg-eth0 script uses
> MAC addresses, replace the sample MAC addresses with your own. If you
> do not like using MAC to identify cards, find some other way to
> identify which physical card is being configured. Replace both the
> ifcfg-eth0 and ifcfg-eth1 files (make one a link to the other) with
>
> # ifcfg-eth*
> USERDEVICENAME=
> case `ifconfig $DEVICE | sed -ne 's/.*HWaddr *\([^ ]*\) */\1/p'` in
> 00:10:A4:F3:A3:79) . eth-pcmcia;; # read pcmcia data
> 00:80:AD:79:82:D8) . eth-docking;; # read docking station data
> *) echo Unknown MAC address, please update ifcfg-eth0
> esac
> [ -n "$USERDEVICENAME" ] && echo $DEVICE > /var/tmp/$USERDEVICENAME
>
> Now it does not matter whether the kernel calls a network card eth0 or
> eth1 or even eth99. The configure scripts assign the correct IP and
> routing data no matter what the kernel id is. If you need to access
> the kernel id, use the value in /var/tmp/eth-*, e.g.
>
> route add -net 192.168.0.0 netmask 255.255.0.0 dev `cat /var/tmp/eth-docking`
>
> I use this technique on multi NIC boxes where device numbers have a
> tendency to move around as slots or IRQs or the kernel scan order
> changes. Instead of trying to force the kernel into your order, accept
> whatever the kernel gives you and handle the mapping in user space.
>

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Apr 15 2000 - 21:00:11 EST