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/          [EMAIL PROTECTED]
-------------------------------------------------------


On Sat, 8 Apr 2000, Keith Owens wrote:

> Date: Sat, 08 Apr 2000 13:06:53 +1000
> From: Keith Owens <[EMAIL PROTECTED]>
> To: Jim Roland <[EMAIL PROTECTED]>
> Cc: [EMAIL PROTECTED], [EMAIL PROTECTED]
> Subject: Re: Ethernet-multiple NICs and laptop 
> 
> On Thu, 6 Apr 2000 08:32:36 -0600 (CST), 
> Jim Roland <[EMAIL PROTECTED]> 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.
> 

Reply via email to