Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Static IP stopped working after upgrade
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
blossa
Apprentice
Apprentice


Joined: 13 Jan 2005
Posts: 169

PostPosted: Thu Feb 01, 2007 6:02 am    Post subject: Static IP stopped working after upgrade Reply with quote

Hi!

I have been away from Gentoo for a while but yesterday I finally did that 'emerge -uD world'. :) That was the first time for about six month.

So, before network did work. After the upgrade it does not. I have a router here at home that I can no longer ping. 'ifconfig eth0' gives me the IP and netmask that I provided the eth0.

I am not near that computer so I can not check my setting, but:
*I did not change any settings during the upgrade.
*I have looked in '/etc/conf.d/net' and it seems ok.
*I have looked in '/etc/resolv.conf'
*I have looked in '/etc/conf.d/hostname'

The only thing I noticed the I might had to change the way I tell what gateway-IP I want to use. I think it was like
before: routes_eth0=("192.168.1.1")
now: routes_eth0=("default via 192.168.1.1")
Anyway, what ever I try i do not work.

I also have configured some dns-IP that my ISP uses, but since I have not changed that setting it should be ok?

/etc/init.d/net.eth0 IS started at boot (default) and even with a '/etc/init.d/net.eth0 restart' it seems ok.

I do believe that it is not a hardware problem.

So, where do I look next? Can it be something with hostname? Any help would be appriciated. I do believe that there has been some change in how I should set up my network, but in what way should I do I different? :)

Thank in advance!
/ Anders
_________________
QX9650, P5E64WS Pro, 4x1GB
Back to top
View user's profile Send private message
derverstand
Guru
Guru


Joined: 15 Dec 2005
Posts: 511
Location: /dev/null

PostPosted: Thu Feb 01, 2007 9:25 am    Post subject: Reply with quote

Had the same problem some time ago. Please try this one:
Code:

###
#PUT IN /lib/rcscripts/net (fixes error with routes in net)
###########################################################

# Copyright (c) 2004-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# Contributed by Roy Marples (uberlord@gentoo.org)

# Fix any potential localisation problems
# Note that LC_ALL trumps LC_anything_else according to locale(7)
ifconfig() {
   LC_ALL=C /sbin/ifconfig "$@"
}

ifconfig_tunnel() {
   LC_ALL=C /sbin/iptunnel "$@"
}

route() {
   LC_ALL=C /sbin/route "$@"
}

# void ifconfig_depend(void)
#
# Sets up the dependancies for the module
ifconfig_depend() {
   provide interface
}

# void ifconfig_expose(void)
#
# Expose variables that can be configured
ifconfig_expose() {
   variables config routes fallback metric ifconfig \
      ifconfig_fallback routes inet6 iface alias broadcast netmask
}

# bool ifconfig_check_installed(void)
#
# Returns 1 if ifconfig is installed, otherwise 0
ifconfig_check_installed() {
   [[ -x /sbin/ifconfig ]] && return 0
   ${1:-false} && eerror "For ifconfig support, emerge sys-apps/net-tools"
   return 1
}

# bool ifconfig_exists(char *interface, bool report)
#
# Returns 1 if the interface exists, otherwise 0
ifconfig_exists() {
   local e=$(ifconfig -a | grep -o "^$1") report="${2:-false}"
   [[ -n ${e} ]] && return 0

   if ${report} ; then
      eerror "network interface $1 does not exist"
      eerror "Please verify hardware or kernel module (driver)"
   fi

   return 1
}

# char* cidr2netmask(int cidr)
#
# Returns the netmask of a given CIDR
cidr2netmask() {
   local cidr="$1" netmask="" done=0 i sum=0 cur=128
   local octets= frac=

   (( octets=cidr/8 ))
   (( frac=cidr%8 ))
   while [[ octets -gt 0 ]] ; do
      netmask="${netmask}.255"
      (( octets-- ))
      (( done++ ))
   done

   if [[ ${done} -lt 4 ]] ; then
      for (( i=0; i<${frac}; i++ )); do
         (( sum+=cur ))
         (( cur/=2 ))
      done
      netmask="${netmask}.${sum}"
      (( done++ ))

      while [[ ${done} -lt 4 ]] ; do
         netmask="${netmask}.0"
         (( done++ ))
      done
   fi

   echo "${netmask:1}"
}

# void ifconfig_up(char *iface)
#
# provides a generic interface for bringing interfaces up
ifconfig_up() {
   ifconfig "$1" up
}

# void ifconfig_down(char *iface)
#
# provides a generic interface for bringing interfaces down
ifconfig_down() {
   ifconfig "$1" down
}

# bool ifconfig_is_up(char *iface, bool withaddress)
#
# Returns 0 if the interface is up, otherwise 1
# If withaddress is true then the interface has to have an IPv4 address
# assigned as well
ifconfig_is_up() {
   local check="\<UP\>" addr="${2:-false}"
   ${addr} && check="\<inet addr:.*${check}"
   ifconfig "$1" | tr '\n' ' ' | grep -Eq "${check}" && return 0
   return 1
}

# void ifconfig_set_flag(char *iface, char *flag, bool enabled)
#
# Sets or disables the interface flag
ifconfig_set_flag() {
   local iface="$1" flag="$2" enable="$3"
   ${enable} || flag="-${flag}"
   ifconfig "${iface}" "${flag}"
}

# void ifconfig_get_address(char *interface)
#
# Fetch the address retrieved by DHCP.  If successful, echoes the
# address on stdout, otherwise echoes nothing.
ifconfig_get_address() {
   local -a x=( $( ifconfig "$1" \
   | sed -n -e 's/.*inet addr:\([^ ]*\).*Mask:\([^ ]*\).*/\1 \2/p' ) )
   x[1]=$(netmask2cidr "${x[1]}")
   [[ -n ${x[0]} ]] && echo "${x[0]}/${x[1]}"
}

# bool ifconfig_is_ethernet(char *interface)
#
# Return 0 if the link is ethernet, otherwise 1.
ifconfig_is_ethernet() {
   ifconfig "$1" | grep -q "^$1[[:space:]]*Link encap:Ethernet[[:space:]]"
}

# void ifconfig_get_mac_address(char *interface)
#
# Fetch the mac address assingned to the network card
ifconfig_get_mac_address() {
   local mac=$(ifconfig "$1" | sed -n -e \
      's/.*HWaddr[ \t]*\<\(..:..:..:..:..:..\)\>.*/\U\1/p')
   [[ ${mac} != '00:00:00:00:00:00' \
   && ${mac} != '44:44:44:44:44:44' \
   && ${mac} != 'FF:FF:FF:FF:FF:FF' ]] \
      && echo "${mac}"
}

# void ifconfig_set_mac_address(char *interface, char *mac)
#
# Assigned the mac address to the network card
ifconfig_set_mac_address() {
   ifconfig "$1" hw ether "$2"
}

# int ifconfig_set_name(char *interface, char *new_name)
#
# Renames the interface
# This will not work if the interface is setup!
ifconfig_set_name() {
   [[ -z $2 ]] && return 1
   local current="$1" new="$2"

   local mac=$(ifconfig_get_mac_address "${current}")
   if [[ -z ${mac} ]]; then
      eerror "${iface} does not have a MAC address"
      return 1
   fi

   /sbin/nameif "${new}" "${mac}"
}

# void ifconfig_get_aliases_rev(char *interface)
#
# Fetch the list of aliases for an interface. 
# Outputs a space-separated list on stdout, in reverse order, for
# example "eth0:2 eth0:1"
ifconfig_get_aliases_rev() {
   ifconfig | grep -o "^$1:[0-9]* " | tac
}

# bool ifconfig_del_addresses(char *interface, bool onlyinet)
#
# Remove addresses from interface.  Returns 0 (true) if there
# were addresses to remove (whether successful or not).  Returns 1
# (false) if there were no addresses to remove.
# If onlyinet is true then we only delete IPv4 / inet addresses
ifconfig_del_addresses() {
   local iface="$1" i= onlyinet="${2:-false}"
   # We don't remove addresses from aliases
   [[ ${iface} == *:* ]] && return 0

   # If the interface doesn't exist, don't try and delete
   ifconfig_exists "${iface}" || return 0

   # iproute2 can add many addresses to an iface unlike ifconfig ...
   # iproute2 added addresses cause problems for ifconfig
   # as we delete an address, a new one appears, so we have to
   # keep polling
   while ifconfig "${iface}" | grep -q -m1 -o 'inet addr:[^ ]*' ; do
      ifconfig "${iface}" 0.0.0.0 || break
   done

   # Remove IPv6 addresses
   if ! ${onlyinet} ; then
      for i in $( ifconfig "${iface}" \
         | sed -n -e 's/^.*inet6 addr: \([^ ]*\) Scope:[^L].*/\1/p' ) ; do
         /sbin/ifconfig "${iface}" inet6 del "${i}"
      done
   fi
   return 0
}

# bool ifconfig_get_old_config(char *iface)
#
# Returns config and config_fallback for the given interface
ifconfig_get_old_config() {
   local iface="$1" ifvar=$(bash_variable "$1") i= inet6=

   config="ifconfig_${ifvar}[@]"
   config=( "${!config}" )
   config_fallback="ifconfig_fallback_${ifvar}[@]"
   config_fallback=( "${!config_fallback}" )
   inet6="inet6_${ifvar}[@]"
   inet6=( "${!inet6}" )

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

      # Start with the primary interface
      config=( "${!i}" )

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

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

   # Add inet6 addresses to our config if required
   [[ -n ${inet6} ]] && config=( "${config[@]}" "${inet6[@]}" )

   # BACKWARD COMPATIBILITY: set the default gateway
   if [[ ${gateway} == "${iface}/"* ]]; then
      i="routes_${ifvar}[@]"
      local -a routes=( "${!i}" )
      
      # We don't add the old gateway if one has been set in routes_IFACE
      local gw=true
      for i in "${routes[@]}"; do
         [[ ${i} != *"default gw"* ]] && continue
         gw=false
         break
      done
   
      if ${gw} ; then
         eval "routes_${ifvar}=( \"default gw \${gateway#*/}\" \"\${routes[@]}\" )"
      fi
   fi

   return 0
}

# bool ifconfig_iface_stop(char *interface)
#
# Do final shutdown for an interface or alias.
#
# Returns 0 (true) when successful, non-zero (false) on failure
ifconfig_iface_stop() {
   # If an alias is already down, then "ifconfig eth0:1 down"
   # will try to bring it up with an address of "down" which
   # fails.  Do some double-checking before returning error
   # status
   ifconfig_is_up "$1" || return 0
   ifconfig_down "$1" && return 0

   # It is sometimes impossible to transition an alias from the
   # UP state... particularly if the alias has no address.  So
   # ignore the failure, which should be okay since the entire
   # interface will be shut down eventually.
   [[ $1 == *:* ]] && return 0
   return 1
}

# bool ifconfig_pre_start(char *interface)
#
# Runs any pre_start stuff on our interface - just the MTU atm
# We set MTU twice as it may be needed for DHCP - a dhcp client could
# change it in error, so we set MTU in post start too
ifconfig_pre_start() {
   local iface="$1"

   interface_exists "${iface}" || return 0

   local ifvar=$(bash_variable "$1") mtu=

   # MTU support
   mtu="mtu_${ifvar}"
   [[ -n ${!mtu} ]] && ifconfig "${iface}" mtu "${!mtu}"

   return 0
}


# bool ifconfig_post_start(char *iface)
#
# Bring up iface using ifconfig utilities, called from iface_start
#
# Returns 0 (true) when successful on the primary interface, non-zero
# (false) when the primary interface fails.  Aliases are allowed to
# fail, the routine should still return success to indicate that
# net.eth0 was successful
ifconfig_post_start() {
   local iface="$1" ifvar=$(bash_variable "$1") x= y= metric= mtu=
   local -a routes=()
   metric="metric_${ifvar}"

   ifconfig_exists "${iface}" || return 0
   
   # Make sure interface is marked UP
   ifconfig_up "${iface}"

   # MTU support
   mtu="mtu_${ifvar}"
   [[ -n ${!mtu} ]] && ifconfig "${iface}" mtu "${!mtu}"

   x="routes_${ifvar}[@]"
   routes=( "${!x}" )

   [[ -z ${routes} ]] && return 0

   # Add routes for this interface, might even include default gw
   einfo "Adding routes"
   eindent
   for x in "${routes[@]}"; do
      ebegin "${x}"

      # Support iproute2 style routes
      x="${x//via/gw} "
      x="${x//scope * / }"

      # Work out if we're a host or a net if not told
      if [[ " ${x} " != *" -net "* && " ${x} " != *" -host "* ]] ; then
         y="${x%% *}"
         if [[ ${y} == *.*.*.* && ${y} != *.*.*.0 && ${y} != *.*.*.0/* ]] ; then
            x="-host ${x}"
         else
            x="-net ${x}"
         fi
      fi

      # Support adding IPv6 addresses easily
      if [[ ${x} == *:* ]]; then
         [[ ${x} != *"-A inet6"* ]] && x="-A inet6 ${x}"
         x="${x// -net / }"
      fi

      # Add a metric if we don't have one
      [[ ${x} != *" metric "* ]] && x="${x} metric ${!metric}"

      route add ${x} dev "${iface}"
      eend $?
   done
   eoutdent

   return 0
}

# bool ifconfig_add_address(char *iface, char *options ...)
#
# Adds the given address to the interface
ifconfig_add_address() {
   local iface="$1" i=0 r= e= real_iface=$(interface_device "$1")

   ifconfig_exists "${real_iface}" true || return 1
   
   # Extract the config
   local -a config=( "$@" )
   config=( ${config[@]:1} )

   if [[ ${config[0]} == *:* ]]; then
      # Support IPv6 - nice and simple
      config[0]="inet6 add ${config[0]}"
   else
      # IPv4 is tricky - ifconfig requires an aliased device
      # for multiple addresses
      if ifconfig "${iface}" | grep -Eq "\<inet addr:.*" ; then
         # Get the last alias made for the interface and add 1 to it
         i=$(ifconfig | tac | grep -m 1 -o "^${iface}:[0-9]*" \
            | sed -n -e 's/'"${iface}"'://p')
         i="${i:-0}"
         (( i++ ))
         iface="${iface}:${i}"
      fi

      # ifconfig doesn't like CIDR addresses
      local ip="${config[0]%%/*}" cidr="${config[0]##*/}" netmask=
      if [[ -n ${cidr} && ${cidr} != "${ip}" ]]; then
         netmask=$(cidr2netmask "${cidr}")
         config[0]="${ip} netmask ${netmask}"
      fi   

      # Support iproute2 style config where possible
      r="${config[@]}"
      config=( ${r//brd +/} )
      config=( "${config[@]//brd/broadcast}" )
      config=( "${config[@]//peer/pointopoint}" )
   fi

   # Ensure that the interface is up so we can add IPv6 addresses
   interface_up "${real_iface}"

   # Some kernels like to apply lo with an address when they are brought up
   if [[ ${config[@]} == "127.0.0.1 netmask 255.0.0.0 broadcast 127.255.255.255" ]]; then
      is_loopback "${iface}" && ifconfig "${iface}" 0.0.0.0
   fi

   ifconfig "${iface}" ${config[@]}
}

# vim: set ts=4 :


/BR
Back to top
View user's profile Send private message
blossa
Apprentice
Apprentice


Joined: 13 Jan 2005
Posts: 169

PostPosted: Thu Feb 01, 2007 9:39 am    Post subject: Reply with quote

:D Ok, that I would never had thought of. I will compare it with mine and if I can fix it I will post the changes here.
Thanks mate!

P.S. The /etc/conf.d/net.example is more into DHCP and wireless... Is it possible to include an complete example of static-settings in the future?

Regards / Anders
_________________
QX9650, P5E64WS Pro, 4x1GB
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