Re: Ethernet-multiple NICs and laptop

From: Jim Roland (jim@roland.net)
Date: Wed May 10 2000 - 22:22:39 EST


Sorry it has taken me so long to get back, but I finally got around to
modifying my system's scripts. I'm having problems with the scripts you
gave me.

1) When docked (both eth0 (docking sta) and eth1 (pcmcia) active), eth0 is
configured correctly. this part is good.
2) Either undocked (pcmcia only present) or docked, the pcmcia card, which
is supposed to be DHCP, does not work. I have to manually get pump to run
by running it from the command line.
        It's a 10/100 Cardbus card, and when not yet negotiates with the
        hub (switch), both the 10 and 100 leds are lit.
        When both leds are lit, ifconfig shows the MAC and eth0, but the
        interface is not yet assigned an IP.
        I then run "pump -i eth0" and it initializes and gets an IP.
        If I use the old scripts, all works fine.
3) My /var/tmp/eth-* files are not written with just the one card in the
system.
4) When I go to shutdown, the system screams about the MAC address being
wrong (the else condition of the case statement). (When I start the system
up, it does not complain about a wrong MAC address--if I type it wrong in
the ifcfg-eth* file, it does complain as it should).

My scripts are identical to yours except for the MAC address and IP
addresses.

Can you help?

-=>Jim Roland
 
"Never settle with words what you can settle with a flamethrower."
        --Anonymous
 

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 : Mon May 15 2000 - 21:00:17 EST