Switching from wired to wireless getting "network down"

Kevin Oberman oberman at es.net
Sat Mar 28 09:53:06 PDT 2009


> Date: Sat, 28 Mar 2009 11:08:58 -0500
> From: "J. Porter Clark" <jpc at porterclark.com>
> Sender: owner-freebsd-mobile at freebsd.org
> 
> >> Date: Fri, 27 Mar 2009 10:04:29 -0700
> >> From: Jason Nordwick <jnordwick at gmail.com>
> >> Sender: owner-freebsd-mobile at freebsd.org
> >> 
> >> This appears to be the case. "route get 192.168.1.1" (my netgear wireless)
> >> shows that it still wants to use bfe0 instead of the wpi0 interface. How do
> >> I get it so that when I unplug my cable and my wireless is up, it changes
> >> the routing table?
> >> 
> >> -j
> >> 
> >> 
> >> On Fri, Mar 27, 2009 at 9:31 AM, Jason Nordwick <jnordwick at gmail.com> wrote:
> >> 
> >> > I just updated to the current -STABLE (7.2-PRERELEASE is the same thing?
> >> > hopefully).
> >> >
> >> > When I boot with the network cable plugged in, but then try to unplug it
> >> > and up my wireless, it doesn't seem to work although the ifconfig shows I am
> >> > joined to my wireless network. Is there some magic I need to do to reset the
> >> > routing tables or something?
> 
> >Depends on your configuration. Do you use DHCP or static network
> >configurations? If it is DHCP, I suspect /etc/rc.d/dhclient restart
> >would do the trick. If it is status:
> >route add default abc.def.gh.ij
> >should do the trick. 
> 
> >Going the other way can be a tiny bit more involved. 'ifconfig wlan0
> >down' first or 'route delete default' to get rid of the current
> >static. (Note: wlan0 on stable needs to be replaced with the name of
> >your wireless interface.)
> 
> I've been playing around with this sort of setup, too, where I
> want a command line to change from wired to wireless (at the
> same IP address, even) and back again.  I haven't found the
> magic solution, particularly one that doesn't have a lot of
> hardcoded network config in it.  I'm also somewhat ticked that
> "route flush" doesn't really flush all routes like the man page
> says.  8-) Eventually, I usually arrive at a point where I can't
> find my way back and have to reboot to get some work done.
> 
> Some things I've been using are "route delete <my ip address>"
> and "route add -ifp <interface> default".  Might be a good idea
> to "arp -a -d", too.

OK. Here is the script I use to switch between the wired and wireless at
work. I use it often, so I know it works with 7.1-Stable of early
February. It switches between wired (bge0) and wireless (ath0). All
addressing is static on bge0 and DHCP on ath0, though this really does
not matter if your rc.conf is correct for both interfaces.

By using the rc.d scripts, I take care of a lot of annoying details
because they already DTRT.

#!/usr/bin/perl

use strict;

my ($data);

# Get the current default route interface
($data) = `netstat -rnf inet | grep default`;
if (grep /bge0/, $data) {
  # Move to wireless (ath0)
  # make sure that the wireless driver is loaded!
  $data = `kldstat | grep if_ath.ko`;
  if ($?) {`kldload if_ath`;}
  # Move to wireless (ath0)
  ($data) = `/etc/rc.d/routing stop`;
  print $data;
  ($data) = `/etc/rc.d/netif stop bge0`;
  print $data;
  ($data) = `/etc/rc.d/netif start ath0`;
  print $data;
  print "Connected via wireless\n";
} else {
  # Move to .1 wire (bge0)
  ($data) = `/etc/rc.d/netif stop ath0`;
  print $data;
  ($data) = `route delete default`;
  print $data;
  ($data) = `/etc/rc.d/netif start bge0`;
  print $data;
  ($data) = `/etc/rc.d/routing start`;
  print $data;
  print STDERR "Connected via ESnet on bge0\n";
}
-- 
R. Kevin Oberman, Network Engineer
Energy Sciences Network (ESnet)
Ernest O. Lawrence Berkeley National Laboratory (Berkeley Lab)
E-mail: oberman at es.net			Phone: +1 510 486-8634
Key fingerprint:059B 2DDF 031C 9BA3 14A4  EADA 927D EBB3 987B 3751


More information about the freebsd-mobile mailing list