All pastes #613522 Raw Edit

yay

public text v1 · immutable
·published 2007-07-11 00:54 UTC
rendered paste body
#!/bin/sh
#LGPL 2006,2007 www.puppyos.com
#v2.14 rc.network now a separate process.
#this file is included (inserted) in rc.local0
#setup the networking.
#note, analog modem dialup is configured after bootup, by the
#Modem Wizard and Gkdial (or ppp).
#Ethernet network is configured after bootup, by the Puppy Ethernet Wizard.

#note, "> out.txt 2>&1" is syntax required to redirect both stdout and
#stderr to a file, using BusyBox Ash shell (not "&>").

#v2.14 SERIALSTUFF is set in rc.local0...
SERIALSTUFF=""
[ -f /tmp/serialstuff ] && SERIALSTUFF="`cat /tmp/serialstuff`"

echoBoth ()
{
	echo $@
	echo $@ > /dev/console
}

#Color mnemonics to use for messages
color_red="\\033[1;31m"
color_green="\\033[1;32m"
color_yellow="\\033[1;33m"
color_blue="\\033[1;34m"
color_purple="\\033[1;35m"
color_aquablue="\\033[1;36m"
color_black="\\033[1;38m"
color_normal="\\033[0;39m"

#echo "Setting up interface lo..."
ifconfig lo 127.0.0.1
route add -net 127.0.0.0 netmask 255.0.0.0 lo

#autodetect serial mouse and serial modem, puppyserialdetect run in rc.local0...
rm -f /dev/modem 2>/dev/null #must remove. rc.local0 depends on it.
#puppyserialdetect output format: "Type:modem|Port:/dev/ttyS0|Speed:230000"
MODEMPORT="`echo "$SERIALSTUFF" | grep "modem" | head -n 1 | cut -f 2 -d '|' | cut -f 3 -d '/'`"
#jcoder24 has mouse thinks it is a modem...
if [ ! "$MODEMPORT" = "" ];then
 [ ! "`echo "$SERIALSTUFF" | grep "mouse" | grep "$MODEMPORT"`" = "" ] && MODEMPORT=""
fi
[ ! "$MODEMPORT" = "" ] && ln -s /dev/$MODEMPORT /dev/modem
#...run modem-wizard to override autodetection.

#d*m*, running setserial if eth0 or eth1 "up" causes setserial to hang.
#dunno why, just doing a quick fix here, moved this modem code up before
#the ethernet setup code...
#...maybe conflicting with dhcpcd daemon.
 #Modem Wizard creates this file, also pinstall.sh of ltmodem pupget pkg...
 if [ -e /etc/modemdevice ];then
  #do this every bootup, as /dev is pristine, not saved (except for full h.d. install)...
  rm -f /dev/modem 2>/dev/null
  DEVM="`cat /etc/modemdevice`"
  echo "Linking /dev/modem to $DEVM"
  ln -s $DEVM /dev/modem
  #k2.6 has serial_core, 8250, 8250_pci builtin, else need to load them.

  if [ "$DEVM" = "/dev/ttyLT0" ];then #Lucent Linmodem
   #precaution, in case modprobe.conf gets changed...
   cat /etc/modprobe.conf | grep "ltserial" > /dev/null 2>&1
   if [ ! $? -eq 0 ];then #=0 found.
    echo "alias char-major-62 ltserial" >> /etc/modprobe.conf
    echo "alias /dev/ttyLT0 ltserial" >> /etc/modprobe.conf
    echo "alias /dev/modem ltserial" >> /etc/modprobe.conf
    touch -t 0512010101 /etc/modprobe.conf #set modify date back before modules.dep.
   fi
   modprobe ltmodem
   modprobe ltserial
  fi

  if [ "$DEVM" = "/dev/ttySL0" ];then #Smart-Link Linmodem
   #precaution in case modprobe.conf gets changed...
   if [ "`cat /etc/modprobe.conf | grep "slamr"`" = "" ];then
    #rerwin found, need to change 212,213 to 242,243...
    echo "alias char-major-242 slamr" >> /etc/modprobe.conf
    #v2.02 rerwin dev t=1533 to auto load modules...
    echo "install slamr modprobe --ignore-install ungrab-winmodem ; modprobe --ignore-install slamr" >> /etc/modprobe.conf
    echo "alias char-major-243 slusb" >> /etc/modprobe.conf
    touch -t 0512010101 /etc/modprobe.conf #set modify date back before modules.dep.
    #v2.02 rerwin, moved if down from here, as modules autoloaded.
    #v2.01 bug, rerwin found needs ungrab-winmodem before load slamr...
    #v2.02 rerwin, rmmod...
    rmmod slamr #unload for ungrab, in case slamr misloaded as serial driver.
    modprobe ungrab-winmodem
    modprobe slamr
    modprobe slusb #ok to load both.
    sleep 1
   fi
   #and also start the daemon...
   if [ -f /usr/sbin/slmodemdshell ];then
    /usr/sbin/slmodemdshell &
   else
    echo
    echo "ERROR: /usr/sbin/slmodemdshell does not exist."
    echo "Run Modem Wizard and setup Smartlink modem properly."
    #sleep 10
   fi
   #...note, this is created by Modem Wizard.
  fi

  if [ "$DEVM" = "/dev/ttyS_ESS0" ];then #ESS2898 Linmodem
   #No, now taken care of in /etc/modprobe.conf...
   ##to avoid conflict with pctel linmodem.ko...
   #modprobe -o linmodem linmodem_ess
   #modem wizard also put country-code param into /etc/modprobe.conf...
   modprobe esscom #will also load esscom_hw.
  fi

  if [ "$DEVM" = "/dev/ttyS_PCTEL0" ];then #PCTEL pct789 Linmodem
   #modem wizard put country-code param into /etc/modprobe.conf...
   modprobe pctel #also loads linmodem,pctel_hw.
  fi

  #YOU MAY NOT NEED TO USE SETSERIAL... the docs are vague, even
  #suggesting setserial can sometimes mess things up...
  #v1.0.2 do not use setserial for linmodems...
  #ummm, will leave it in for now...
  #if [ "`echo "$DEVM" | grep --extended-regexp "ttyLT0|ttySL0"`" = "" ];then
   setserial -v -b $DEVM auto_irq skip_test autoconfig
  #fi
  #v1.0.2 perhaps should also disable setserial for a pcmcia modem, as
  #pcmcia startup in /etc/pcmcia/ calls setserial.
 fi


#most modules are loaded in /etc/rc.d/rc.modules.
#after running the Puppy Ethernet wizard, the files /etc/eth0mode,
#/etc/eth1mode and /etc/ethernetmodules may exist and have to be
#handled here.
#/etc/ethernetmodules has extra modules to load, not detected by
#Antonio's libhardware program (see rc.modules). Loading...
if [ -s /etc/ethernetmodules ];then #-s tests file not zero size.
 echo "Loading extra ethernet driver modules..."
 #each line of ethernetmodules has a module plus optional params...
 EMODULE="`cat /etc/ethernetmodules | head -n 1`"
 modprobe $EMODULE
 FMODULE="`cat /etc/ethernetmodules | head -n 2 | tail -n 1`"
 if [ ! "$EMODULE" = "$FMODULE" ];then
  modprobe $FMODULE
 fi
fi
#v0.9.4 wacha reported need sleep 3 secs after loading e1000 module...
#v2.14 must have a pause after loading module, before ifconfig...
# why not delay for wireless also...
if [ -f /etc/eth[0-9]mode -o -f /etc/ethernetmodules -o -f /etc/*wireless ];then
 sleep 3
fi

#Try to connect each ethernet interface found
INTERFACES="`ifconfig -a | grep "Link encap:Ethernet" | cut -f 1 -d " " | tr "\n" " "`"

echo "The following interfaces have been found: ${INTERFACES}
Trying to connect"

for INTERFACE in ${INTERFACES}
do
 INTERFACEFAIL=0
 #code inserted by rarsa for wireless...	
 #Puppy v1.0.9 have Puppy internet wizard create /etc/${INTERFACE}wireless for wireless interfaces 
 if [ -e /etc/${INTERFACE}wireless ] ; then 
  echo "/etc/${INTERFACE}wireless found"
. /etc/${INTERFACE}wireless 
 fi	
 #end rarsa patch.
 #Puppy v0.8.4, have Puppy Ethernet Wizard, creates /etc/${INTERFACE}mode
 if [ ! -f /etc/${INTERFACE}mode ];then
		echo "WARNING: Interface ${INTERFACE} has not been configured. Use the network wizard."
		INTERFACEFAIL=1
 else
  ifconfig ${INTERFACE} up #fails if interface doesn't exist.
  if [ ! $? -eq 0 ];then #=0 success.
   echo "${INTERFACE} interface does not exist"
   INTERFACEFAIL=1
  else
   # let's find out if the ethernet cable plugged in...
   #v1.0.0 both v0.18 and 0.25 now used, sometimes one works, not the other...
   #fix from GuestToo (see Forum) ifplugstatus sometimes does not work...
   #v2.14 fix from rarsa (<Raul Suarez> "rarsa at yahoo.com"). 
   #      Some driver/addapter combinations take longer to 
   #      initialize. Now if a connection is not found, it will wait longer
   #      or until the user aborts the wait.
   echoBoth -e "\nTesting if ${INTERFACE} network is alive... (press Enter to cancel)"
   #echo -e "\nTesting if ${INTERFACE} network is alive... (press Enter to cancel)"
   UNPLUGGED='true'
   # Waits until: a) it finds a connection; b) The user presses Enter; c) after 30 seconds
   TRY_COUNT=0; TRY_MAX_COUNT=15; TRY_DELAY=2; ODDCNT=0; IFVER=""
   while [ "${TRY_COUNT}" != "${TRY_MAX_COUNT}" ] ; do
   
    #echo -n 'TEST: '
    #ifconfig | cut -f 1 -d ' ' | tr '\n' ' ' #TEST
    #ifplugstatus-0.25 -v eth0
   
    #v2.14 mighty peculiar, running rc.network as a separate process,
    #ifplugstatus only returns "unplugged". but, can get it to work with -v...
    TRY_COUNT=`expr ${TRY_COUNT} + 1`
    echoBoth -n "."
    #echo -n "."
    #v2.14 tried -v option also...
    if [ "`ifplugstatus${IFVER} ${INTERFACE} | grep "link beat detected"`" = "" ]; then
     read -t ${TRY_DELAY} a
     [ $? -eq 0 ] && TRY_COUNT=${TRY_MAX_COUNT}
    else
     UNPLUGGED='false'
     TRY_COUNT=${TRY_MAX_COUNT}
    fi
    [ $ODDCNT -eq 0 ] && IFVER='-0.25'
    [ $ODDCNT -eq 1 ] && IFVER=''
    [ $ODDCNT -eq 0 ] && ODDCNT=1
    [ $ODDCNT -eq 1 ] && ODDCNT=0
   done

#   UNPLUGGED="false" #Line 205 Remove # in column 1 to uncomment.
   if [ "$UNPLUGGED" = "true" ];then
    #no cable plugged in, no network connection possible...
    echo "ERROR: Unable to find a connection for ${INTERFACE}"
    echo "Possible causes:"
    echo "- Network unavailable"
    echo "- Ethernet cable or wireless card not plugged in correctly"
    echo "- Defective network addapter."
    echo "NOTICE: IF THIS IS WRONG, EDIT /etc/rc.d/rc.network AND UNCOMMENT LINE 205"
    ifconfig ${INTERFACE} down
    INTERFACEFAIL=1
   #else
    ##i think should bring ${INTERFACE} down first, then bring up again...
    #ifconfig ${INTERFACE} down
    #if [ "`cat /etc/${INTERFACE}mode`" = "auto" ];then #see Puppy Ethernet Wizard.
     ##i'll tackle Puppy plugged into a network with a dhcp
     ##server, so we need to be assigned an ip address...
     #echo "Trying to get IP address from DHCP server (60sec timeout)..."
		 #rm /etc/dhcpc/dhcpcd-${INTERFACE}.* 2>/dev/null #if left over from last session, causes trouble.
     #dhcpcd ${INTERFACE}
     #if [ ! $? -eq 0 ];then #=0 success
      #echo "FAILURE!"
      #ifconfig ${INTERFACE} down
	    #INTERFACEFAIL=1
     #else
      #echo "SUCCESS! nameservers written to /etc/resolv.conf, and"
      #echo "Assigned IP address written to /etc/dhcpc/dhcpcd-${INTERFACE}.cache"
      #echo "Connection information in /etc/dhcpc/dhcpcd-${INTERFACE}.info"
      #echo "DHCP client daemon now running"
      ##note, /etc/yp.conf and /etc/ntp.conf also created.
     #fi
    else
     #${INTERFACE}mode contains startup script, created by Ethernet Wizard...
     #${INTERFACE} was configured manually...
     #eval `cat /etc/${INTERFACE}mode` ...problem, concatenates multiple lines into one.
     . /etc/${INTERFACE}mode
     if [ ! $? -eq 0 ];then # =0 success
      echo "Error initializing interface ${INTERFACE}.!"
      ifconfig ${INTERFACE} down
     else
      echo "SUCCESS initializing interface ${INTERFACE}.!"
     fi
    fi
   fi
  fi
 fi
done

#TODO: how do we handle dhcp server that needs username and password?

#end