Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Wireless Won't Start Up Correctly (ipw2100)
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index Networking & Security
View previous topic :: View next topic  
Author Message
Dark Ninja
Tux's lil' helper
Tux's lil' helper


Joined: 31 Jan 2005
Posts: 127

PostPosted: Fri Feb 25, 2005 5:54 am    Post subject: Wireless Won't Start Up Correctly (ipw2100) Reply with quote

I have both net.eth0 and net.eth1 in my /etc/init.d. They are both
pointing to net.lo. From what I've read, this is correct. It seems
to work correctly on boot, as well. First, net.eth0 is checked. If
that fails, then net.eth1 tries to start.

Here's the problem. For eth1 to appear, I first need to modprobe
ipw2100. I do this by putting it in my /etc/conf.d/local.start file.
Unfortunately, not only does this enable eth1, it also does some other
stuff, like running dhcp on it.

When it comes time to check net.eth0, if it is plugged in, dhcp will
also be run on that as well. When I boot into gnome, both eth0 and
eth1 are running dhcp, and both have IPs, and it conflicts. My
internet doesn't work. To get my internet to work, I have to do
/etc/init.d/net.eth1 stop.

If net.eth0 is not plugged in, however, net.eth1 then tries to start.
However, I get an error stating that "dhcp is already enabled on
eth1". This is because of the modprobe ipw2100 step. Since that
fails and eth0 isn't connected either, my internet refuses to work
there too.

It's still kinda fuzzy, and I'm not sure how it all works. I think
it'd be a good idea to post it somewhere and see if anyone replies.
Back to top
View user's profile Send private message
fuzzyfelt
n00b
n00b


Joined: 08 Jan 2003
Posts: 49
Location: York, UK

PostPosted: Fri Feb 25, 2005 11:53 am    Post subject: Reply with quote

Ok,
First of all there's a bunch of scripts to handle modprobing on startup.

Code:
echo ipw2100 > /etc/modules.autoload.d/kernel-2.6


And remove your modprobe line from local.start

Next edit /etc/conf.d/net to reflect your setup and stop dhcpcd starting against each card.
Back to top
View user's profile Send private message
Dark Ninja
Tux's lil' helper
Tux's lil' helper


Joined: 31 Jan 2005
Posts: 127

PostPosted: Fri Feb 25, 2005 6:51 pm    Post subject: Reply with quote

Okay, I changed ipw2100 from local to kernel-2.6 and things still didn't seem to work.

I do have two lines in my /etc/conf.d/net dhcpcd_eth0="-t 10" and dhcpcd_eth1="-t 10" to have a timeout set on the my cards. Should this be removed?


Thanks for your help.
Back to top
View user's profile Send private message
NilOGrav
n00b
n00b


Joined: 11 Apr 2004
Posts: 8
Location: The Netherlands

PostPosted: Mon May 09, 2005 9:56 pm    Post subject: Reply with quote

Ninja,

All your ethernet network devices (e.g. the ipw2100 card) should use an init script other than net.lo. If you dont have a "real" net.eth0 script (in stead of a link) use mine I will post it at the end of the message (it is the default gentoo net.eth0)

Code:
ls -al /etc/init.d/net.eth*

-rwxr-xr-x   1 root root 9776 Apr  3 23:05 net.eth0
lrwxrwxrwx   1 root root    8 Apr  4 03:37 net.eth1 -> net.eth0


These are configured in the /etc/conf.d/net file (you did this according to you dhcp comment) => be sure that you not have enabled a static ip as well.

Furthermore: every network card needs a specific driver in order to function properly. These drivers will be loaded on startup if you put them in the kernel-2.6 file as mentioned earlier. This means for your wireless card the ipw2100 module, but for any other card you will ALSO need to put the module in this file. the order in which the modules are loaded will also be the order in which the ethernet devices are numbered:

in the kernel-2.6 file:
ipw2100 this will be eth0
e100 (my other networkcard) this will be eth1

Good luck, hope you get it working!


/etc/init.d/net.eth0


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Code:
#!/sbin/runscript
# Copyright 1999-2004 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License v2
# $Header: /home/cvsroot/gentoo-src/rc-scripts/init.d/net.eth0,v 1.41 2004/05/10 14:16:35 agriffis Exp $

#NB: Config is in /etc/conf.d/net

if [[ -n $NET_DEBUG ]]; then
        set -x
        devnull=/dev/stderr
else
        devnull=/dev/null
fi

# For pcmcia users. note that pcmcia must be added to the same
# runlevel as the net.* script that needs it.
depend() {
        use hotplug pcmcia
}

checkconfig() {
        if [[ -z "${ifconfig_IFACE}" ]]; then
                eerror "Please make sure that /etc/conf.d/net has \$ifconfig_$IFACE set"
                eerror "(or \$iface_$IFACE for old-style configuration)"
                return 1
        fi
        if [[ -n "${vlans_IFACE}" && ! -x /sbin/vconfig ]]; then
                eerror "For VLAN (802.1q) support, emerge net-misc/vconfig"
                return 1
        fi
}

# Fix bug 50039 (init.d/net.eth0 localization)
# Some other commands in this script might need to be wrapped, but
# we'll get them one-by-one.  Note that LC_ALL trumps LC_anything_else
# according to locale(7)
ifconfig() {
        LC_ALL=C /sbin/ifconfig "$@"
}

# setup_vars: setup variables based on $1 and content of /etc/conf.d/net
# The following variables are set, which should be declared local by
# the calling routine.
#       status_IFACE                    (up or '')
#       vlans_IFACE                             (space-separated list)
#       ifconfig_IFACE                  (array of ifconfig lines, replaces iface_IFACE)
#       dhcpcd_IFACE                    (command-line args for dhcpcd)
#       routes_IFACE                    (array of route lines)
#       inet6_IFACE                             (array of inet6 lines)
#       ifconfig_fallback_IFACE (fallback ifconfig if dhcp fails)
setup_vars() {
        local i iface="${1//\./_}"

        status_IFACE="$(ifconfig ${1} 2>${devnull} | gawk '$1 == "UP" {print "up"}')"
        eval vlans_IFACE=\"\$\{iface_${iface}_vlans\}\"
        eval ifconfig_IFACE=( \"\$\{ifconfig_$iface\[@\]\}\" )
        eval dhcpcd_IFACE=\"\$\{dhcpcd_$iface\}\"
        eval routes_IFACE=( \"\$\{routes_$iface\[@\]\}\" )
        eval inet6_IFACE=( \"\$\{inet6_$iface\[@\]\}\" )
        eval ifconfig_fallback_IFACE=( \"\$\{ifconfig_fallback_$iface\[@\]\}\" )

        # BACKWARD COMPATIBILITY: populate the ifconfig_IFACE array
        # if iface_IFACE is set (fex. iface_eth0 instead of ifconfig_eth0)
        eval local iface_IFACE=\"\$\{iface_$iface\}\"
        if [[ -n ${iface_IFACE} && -z ${ifconfig_IFACE} ]]; then
                # Make sure these get evaluated as arrays
                local -a aliases broadcasts netmasks

                # Start with the primary interface
                ifconfig_IFACE=( "${iface_IFACE}" )

                # ..then add aliases
                eval aliases=( \$\{alias_$iface\} )
                eval broadcasts=( \$\{broadcast_$iface\} )
                eval netmasks=( \$\{netmask_$iface\} )
                for ((i = 0; i < ${#aliases[@]}; i = i + 1)); do
                        ifconfig_IFACE[i+1]="${aliases[i]} ${broadcasts[i]:+broadcast ${broadcasts[i]}} ${netmasks[i]:+netmask ${netmasks[i]}}"
                done
        fi

        # BACKWARD COMPATIBILITY: check for space-separated inet6 addresses
        if [[ ${#inet6_IFACE[@]} == 1 && ${inet6_IFACE} == *' '* ]]; then
                inet6_IFACE=( ${inet6_IFACE} )
        fi
}

iface_start() {
        local IFACE=${1} i x retval
        checkconfig || return 1

        if [[ ${ifconfig_IFACE} != dhcp ]]; then
                # Show the address, but catch if this interface will be inet6 only
                i=${ifconfig_IFACE%% *}
                if [[ ${i} == *.*.*.* ]]; then
                        ebegin "Bringing ${IFACE} up (${i})"
                else
                        ebegin "Bringing ${IFACE} up"
                fi
                # ifconfig does not always return failure ..
                ifconfig ${IFACE} ${ifconfig_IFACE} >${devnull} && \
                ifconfig ${IFACE} up &>${devnull}
                eend $? || return $?
        else
                # Check that eth0 was not brought up by the kernel ...
                if [[ ${status_IFACE} == up ]]; then
                        einfo "Keeping kernel configuration for ${IFACE}"
                else
                        ebegin "Bringing ${IFACE} up via DHCP"
                        /sbin/dhcpcd ${dhcpcd_IFACE} ${IFACE}
                        retval=$?
                        eend $retval
                        if [[ $retval == 0 ]]; then
                                # DHCP succeeded, show address retrieved
                                i=$(ifconfig ${IFACE} | grep -m1 -o 'inet addr:[^ ]*' |
                                        cut -d: -f2)
                                [[ -n ${i} ]] && einfo "  ${IFACE} received address ${i}"
                        elif [[ -n "${ifconfig_fallback_IFACE}" ]]; then
                                # DHCP failed, try fallback.
                                # Show the address, but catch if this interface will be inet6 only
                                i=${ifconfig_fallback_IFACE%% *}
                                if [[ ${i} == *.*.*.* ]]; then
                                        ebegin "Using fallback configuration (${i}) for ${IFACE}"
                                else
                                        ebegin "Using fallback configuration for ${IFACE}"
                                fi
                                ifconfig ${IFACE} ${ifconfig_fallback_IFACE} >${devnull} && \
                                ifconfig ${IFACE} up &>${devnull}
                                eend $? || return $?
                        else
                                return $retval
                        fi
                fi
        fi

        if [[ ${#ifconfig_IFACE[@]} -gt 1 ]]; then
                einfo "  Adding aliases"
                for ((i = 1; i < ${#ifconfig_IFACE[@]}; i = i + 1)); do
                        ebegin "    ${IFACE}:${i} (${ifconfig_IFACE[i]%% *})"
                        ifconfig ${IFACE}:${i} ${ifconfig_IFACE[i]}
                        eend $?
                done
        fi

        if [[ -n ${inet6_IFACE} ]]; then
                einfo "  Adding inet6 addresses"
                for ((i = 0; i < ${#inet6_IFACE[@]}; i = i + 1)); do
                        ebegin "    ${IFACE} inet6 add ${inet6_IFACE[i]}"
                        ifconfig ${IFACE} inet6 add ${inet6_IFACE[i]} >${devnull}
                        eend $?
                done
        fi

        # Set static routes
        if [[ -n ${routes_IFACE} ]]; then
                einfo "  Adding routes"
                for ((i = 0; i < ${#routes_IFACE[@]}; i = i + 1)); do
                        ebegin "    ${routes_IFACE[i]}"
                        /sbin/route add ${routes_IFACE[i]}
                        eend $?
                done
        fi

        # Set default route if applicable to this interface
        if [[ ${gateway} == ${IFACE}/* ]]; then
                local ogw=$(/bin/netstat -rn | awk '$1 == "0.0.0.0" {print $2}')
                local gw=${gateway#*/}
                if [[ ${ogw} != ${gw} ]]; then
                        ebegin "  Setting default gateway ($gw)"

                        # First delete any existing route if it was setup by kernel...
                        /sbin/route del default dev ${IFACE} &>${devnull}

                        # Second delete old gateway if it was set...
                        /sbin/route del default gw ${ogw} &>${devnull}

                        # Third add our new default gateway
                        /sbin/route add default gw ${gw} >${devnull}
                        eend $? || {
                                true # need to have some command in here
                                # Note: This originally called stop, which is obviously
                                # wrong since it's calling with a local version of IFACE.
                                # The below code works correctly to abort configuration of
                                # the interface, but is commented because we're assuming
                                # that default route failure should not cause the interface
                                # to be unconfigured.
                                #local error=$?
                                #ewarn "Aborting configuration of ${IFACE}"
                                #iface_stop ${IFACE}
                                #return ${error}
                        }
                fi
        fi

        # Enabling rp_filter causes wacky packets to be auto-dropped by
        # the kernel.  Note that we only do this if it is not set via
        # /etc/sysctl.conf ...
        if [[ -e /proc/sys/net/ipv4/conf/${IFACE}/rp_filter && \
                        -z "$(grep -s '^[^#]*rp_filter' /etc/sysctl.conf)" ]]; then
                echo -n 1 > /proc/sys/net/ipv4/conf/${IFACE}/rp_filter
        fi
}

# iface_stop: bring down an interface.  Don't trust information in
# /etc/conf.d/net since the configuration might have changed since
# iface_start ran.  Instead query for current configuration and bring
# down the interface.
iface_stop() {
        local IFACE=${1} i x aliases inet6 count

        # Try to do a simple down (no aliases, no inet6, no dhcp)
        aliases="$(ifconfig | grep -o "^$IFACE:[0-9]*" | tac)"
        inet6="$(ifconfig ${IFACE} | awk '$1 == "inet6" {print $2}')"
        if [[ -z ${aliases} && -z ${inet6} && ! -e /var/run/dhcpcd-${IFACE}.pid ]]; then
                ebegin "Bringing ${IFACE} down"
                ifconfig ${IFACE} down &>/dev/null
                eend 0
                return 0
        fi

        einfo "Bringing ${IFACE} down"

        # Stop aliases before primary interface.
        # Note this must be done in reverse order, since ifconfig eth0:1
        # will remove eth0:2, etc.  It might be sufficient to simply remove
        # the base interface but we're being safe here.
        for i in ${aliases} ${IFACE}; do

                # Delete all the inet6 addresses for this interface
                inet6="$(ifconfig ${i} | awk '$1 == "inet6" {print $3}')"
                if [[ -n ${inet6} ]]; then
                        einfo "  Removing inet6 addresses"
                        for x in ${inet6}; do
                                ebegin "    ${IFACE} inet6 del ${x}"
                                ifconfig ${i} inet6 del ${x}
                                eend $?
                        done
                fi

                # Stop DHCP (should be N/A for aliases)
                # Don't trust current configuration... investigate ourselves
                if /sbin/dhcpcd -z ${i} &>${devnull}; then
                        ebegin "  Releasing DHCP lease for ${IFACE}"
                        for ((count = 0; count < 9; count = count + 1)); do
                                /sbin/dhcpcd -z ${i} &>${devnull} || break
                                sleep 1
                        done
                        [[ ${count} -lt 9 ]]
                        eend $? "Timed out"
                fi
                ebegin "  Stopping ${i}"
                ifconfig ${i} down &>${devnull}
                eend 0
        done

        return 0
}

start() {
        # These variables are set by setup_vars
        local status_IFACE vlans_IFACE dhcpcd_IFACE
        local -a ifconfig_IFACE routes_IFACE inet6_IFACE

        # Call user-defined preup function if it exists
        if [[ $(type -t preup) == function ]]; then
                einfo "Running preup function"
                preup ${IFACE} || {
                        eerror "preup ${IFACE} failed"
                        return 1
                }
        fi

        # Start the primary interface and aliases
        setup_vars ${IFACE}
        iface_start ${IFACE} || return 1

        # Start vlans
        local vlan
        for vlan in ${vlans_IFACE}; do
                /sbin/vconfig add ${IFACE} ${vlan} >${devnull}
                setup_vars ${IFACE}.${vlan}
                iface_start ${IFACE}.${vlan}
        done

        # Call user-defined postup function if it exists
        if [[ $(type -t postup) == function ]]; then
                einfo "Running postup function"
                postup ${IFACE}
        fi
}

stop() {
        # Call user-defined predown function if it exists
        if [[ $(type -t predown) == function ]]; then
                einfo "Running predown function"
                predown ${IFACE}
        fi

        # Don't depend on setup_vars since configuration might have changed.
        # Investigate current configuration instead.
        local vlan
        for vlan in $(ifconfig | grep -o "^${IFACE}\.[^ ]*"); do
                iface_stop ${vlan}
                /sbin/vconfig rem ${vlan} >${devnull}
        done

        iface_stop ${IFACE} || return 1  # always succeeds, btw

        # Call user-defined postdown function if it exists
        if [[ $(type -t postdown) == function ]]; then
                einfo "Running postdown function"
                postdown ${IFACE}
        fi
}

# vim:ts=4

++++++++++++++++++++++++++++++++++++++++++++++++++
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Networking & Security All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum