2002-07-18 05:00:17 +00:00
|
|
|
#!/bin/sh -x
|
2000-10-08 19:20:36 +00:00
|
|
|
#
|
1999-08-27 23:37:10 +00:00
|
|
|
# $FreeBSD$
|
2000-10-08 19:20:36 +00:00
|
|
|
#
|
1997-04-27 03:59:19 +00:00
|
|
|
|
2002-07-18 05:00:17 +00:00
|
|
|
# PROVIDE: network1
|
|
|
|
# REQUIRE: atm1 ipfilter mountcritlocal pccard serial sppp sysctl tty
|
|
|
|
# KEYWORD: FreeBSD
|
1997-04-27 03:59:19 +00:00
|
|
|
|
2002-07-18 05:00:17 +00:00
|
|
|
. /etc/rc.subr
|
|
|
|
|
|
|
|
name="network1"
|
|
|
|
start_cmd="network_start"
|
|
|
|
stop_cmd="network_stop"
|
|
|
|
|
|
|
|
convert_host_conf()
|
|
|
|
{
|
2002-10-12 10:31:31 +00:00
|
|
|
host_conf=$1; shift;
|
|
|
|
nsswitch_conf=$1; shift;
|
|
|
|
awk ' \
|
|
|
|
/^[:blank:]*#/ { next } \
|
|
|
|
/(hosts|local|file)/ { nsswitch[c] = "files"; c++; next } \
|
|
|
|
/(dns|bind)/ { nsswitch[c] = "dns"; c++; next } \
|
|
|
|
/nis/ { nsswitch[c] = "nis"; c++; next } \
|
|
|
|
{ printf "Warning: unrecognized line [%s]", $0 > "/dev/stderr" } \
|
|
|
|
END { \
|
|
|
|
printf "hosts: "; \
|
|
|
|
for (i in nsswitch) printf "%s ", nsswitch[i]; \
|
|
|
|
printf "\n"; \
|
|
|
|
}' < $host_conf > $nsswitch_conf
|
2002-07-18 05:00:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
generate_host_conf()
|
|
|
|
{
|
2002-10-12 10:31:31 +00:00
|
|
|
nsswitch_conf=$1; shift;
|
|
|
|
host_conf=$1; shift;
|
2002-07-18 05:00:17 +00:00
|
|
|
|
2002-10-12 10:31:31 +00:00
|
|
|
awk '
|
|
|
|
BEGIN {
|
|
|
|
xlat["files"] = "hosts";
|
|
|
|
xlat["dns"] = "bind";
|
|
|
|
xlat["nis"] = "nis";
|
|
|
|
cont = 0;
|
|
|
|
}
|
|
|
|
sub(/^[\t ]*hosts:/, "") || cont {
|
|
|
|
if (!cont)
|
|
|
|
srcs = ""
|
|
|
|
sub(/#.*/, "")
|
|
|
|
gsub(/[][]/, " & ")
|
|
|
|
cont = sub(/\\$/, "")
|
|
|
|
srcs = srcs " " $0
|
|
|
|
}
|
|
|
|
END {
|
|
|
|
print "# Auto-generated from nsswitch.conf, do not edit"
|
|
|
|
ns = split(srcs, s)
|
|
|
|
for (n = 1; n <= ns; ++n) {
|
|
|
|
if (s[n] in xlat)
|
|
|
|
print xlat[s[n]]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
' <$nsswitch_conf >$host_conf
|
2002-07-18 05:00:17 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 05:00:19 +00:00
|
|
|
network_gif_setup() {
|
|
|
|
case ${gif_interfaces} in
|
|
|
|
[Nn][Oo] | '')
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
for i in ${gif_interfaces}; do
|
|
|
|
eval peers=\$gifconfig_$i
|
|
|
|
case ${peers} in
|
|
|
|
'')
|
|
|
|
continue
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
ifconfig $i create >/dev/null 2>&1
|
|
|
|
ifconfig $i tunnel ${peers}
|
2002-09-20 18:31:55 +00:00
|
|
|
ifconfig $i up
|
2002-07-18 05:00:19 +00:00
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
2002-07-18 05:00:17 +00:00
|
|
|
network_start()
|
|
|
|
{
|
|
|
|
# set hostname, turn on network
|
|
|
|
#
|
|
|
|
echo -n "Doing initial network setup:"
|
1997-09-11 10:59:02 +00:00
|
|
|
|
2001-11-01 12:39:01 +00:00
|
|
|
# Generate host.conf for compatibility
|
|
|
|
#
|
|
|
|
if [ -f "/etc/nsswitch.conf" ]; then
|
2001-11-07 00:33:56 +00:00
|
|
|
echo -n ' host.conf'
|
2001-11-01 12:39:01 +00:00
|
|
|
generate_host_conf /etc/nsswitch.conf /etc/host.conf
|
|
|
|
fi
|
|
|
|
|
Add nsswitch support. By creating an /etc/nsswitch.conf file, you can
configure FreeBSD so that various databases such as passwd and group can be
looked up using flat files, NIS, or Hesiod.
= Hesiod has been added to libc (see hesiod(3)).
= A library routine for parsing nsswitch.conf and invoking callback
functions as specified has been added to libc (see nsdispatch(3)).
= The following C library functions have been modified to use nsdispatch:
. getgrent, getgrnam, getgrgid
. getpwent, getpwnam, getpwuid
. getusershell
. getaddrinfo
. gethostbyname, gethostbyname2, gethostbyaddr
. getnetbyname, getnetbyaddr
. getipnodebyname, getipnodebyaddr, getnodebyname, getnodebyaddr
= host.conf has been removed from src/etc. rc.network has been modified
to warn that host.conf is no longer used at boot time. In addition, if
there is a host.conf but no nsswitch.conf, the latter is created at boot
time from the former.
Obtained from: NetBSD
2000-09-06 18:16:48 +00:00
|
|
|
# Convert host.conf to nsswitch.conf if necessary
|
2001-11-01 12:39:01 +00:00
|
|
|
#
|
|
|
|
if [ -f "/etc/host.conf" -a ! -f "/etc/nsswitch.conf" ]; then
|
2000-12-17 08:16:06 +00:00
|
|
|
echo ''
|
|
|
|
echo 'Warning: /etc/host.conf is no longer used'
|
2001-11-01 12:39:01 +00:00
|
|
|
echo ' /etc/nsswitch.conf will be created for you'
|
|
|
|
convert_host_conf /etc/host.conf /etc/nsswitch.conf
|
Add nsswitch support. By creating an /etc/nsswitch.conf file, you can
configure FreeBSD so that various databases such as passwd and group can be
looked up using flat files, NIS, or Hesiod.
= Hesiod has been added to libc (see hesiod(3)).
= A library routine for parsing nsswitch.conf and invoking callback
functions as specified has been added to libc (see nsdispatch(3)).
= The following C library functions have been modified to use nsdispatch:
. getgrent, getgrnam, getgrgid
. getpwent, getpwnam, getpwuid
. getusershell
. getaddrinfo
. gethostbyname, gethostbyname2, gethostbyaddr
. getnetbyname, getnetbyaddr
. getipnodebyname, getipnodebyaddr, getnodebyname, getnodebyaddr
= host.conf has been removed from src/etc. rc.network has been modified
to warn that host.conf is no longer used at boot time. In addition, if
there is a host.conf but no nsswitch.conf, the latter is created at boot
time from the former.
Obtained from: NetBSD
2000-09-06 18:16:48 +00:00
|
|
|
fi
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
# Set the host name if it is not already set
|
|
|
|
#
|
|
|
|
if [ -z "`hostname -s`" ]; then
|
|
|
|
hostname ${hostname}
|
|
|
|
echo -n ' hostname'
|
1999-04-10 10:56:58 +00:00
|
|
|
fi
|
1999-09-13 15:44:20 +00:00
|
|
|
|
|
|
|
# Set the domainname if we're using NIS
|
|
|
|
#
|
2002-07-18 05:00:20 +00:00
|
|
|
case ${nisdomainname} in
|
|
|
|
[Nn][Oo]|'')
|
|
|
|
;;
|
|
|
|
*)
|
1999-09-13 15:44:20 +00:00
|
|
|
domainname ${nisdomainname}
|
|
|
|
echo -n ' domain'
|
2002-07-18 05:00:20 +00:00
|
|
|
;;
|
|
|
|
esac
|
1999-09-13 15:44:20 +00:00
|
|
|
|
2002-07-18 05:00:19 +00:00
|
|
|
echo '.'
|
|
|
|
|
2001-09-19 21:27:27 +00:00
|
|
|
# Attempt to create cloned interfaces.
|
|
|
|
for ifn in ${cloned_interfaces}; do
|
|
|
|
ifconfig ${ifn} create
|
|
|
|
done
|
|
|
|
|
2002-07-18 05:00:19 +00:00
|
|
|
# gifconfig
|
|
|
|
network_gif_setup
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
# Set up all the network interfaces, calling startup scripts if needed
|
|
|
|
#
|
|
|
|
case ${network_interfaces} in
|
|
|
|
[Aa][Uu][Tt][Oo])
|
|
|
|
network_interfaces="`ifconfig -l`"
|
|
|
|
;;
|
2001-09-19 21:27:27 +00:00
|
|
|
*)
|
|
|
|
network_interfaces="${network_interfaces} ${cloned_interfaces}"
|
|
|
|
;;
|
1999-09-13 15:44:20 +00:00
|
|
|
esac
|
|
|
|
|
1999-12-12 01:58:30 +00:00
|
|
|
dhcp_interfaces=""
|
1999-09-13 15:44:20 +00:00
|
|
|
for ifn in ${network_interfaces}; do
|
2002-12-13 23:36:31 +00:00
|
|
|
_up=`ifconfig ${ifn} | head -1 | grep -v LOOPBACK | grep UP,`
|
|
|
|
if [ "$_up" != "" ]; then
|
2002-12-12 09:31:10 +00:00
|
|
|
# Interface is already up, so ignore it.
|
|
|
|
continue;
|
|
|
|
fi
|
|
|
|
|
1999-09-13 15:44:20 +00:00
|
|
|
if [ -r /etc/start_if.${ifn} ]; then
|
|
|
|
. /etc/start_if.${ifn}
|
1999-12-12 01:58:30 +00:00
|
|
|
eval showstat_$ifn=1
|
1999-03-24 10:28:49 +00:00
|
|
|
fi
|
1999-09-13 15:44:20 +00:00
|
|
|
|
|
|
|
# Do the primary ifconfig if specified
|
|
|
|
#
|
|
|
|
eval ifconfig_args=\$ifconfig_${ifn}
|
|
|
|
|
|
|
|
case ${ifconfig_args} in
|
|
|
|
'')
|
|
|
|
;;
|
|
|
|
[Dd][Hh][Cc][Pp])
|
1999-12-12 01:58:30 +00:00
|
|
|
# DHCP inits are done all in one go below
|
|
|
|
dhcp_interfaces="$dhcp_interfaces $ifn"
|
|
|
|
eval showstat_$ifn=1
|
1999-09-13 15:44:20 +00:00
|
|
|
;;
|
|
|
|
*)
|
|
|
|
ifconfig ${ifn} ${ifconfig_args}
|
1999-12-12 01:58:30 +00:00
|
|
|
eval showstat_$ifn=1
|
1999-09-13 15:44:20 +00:00
|
|
|
;;
|
|
|
|
esac
|
1999-12-12 01:58:30 +00:00
|
|
|
done
|
|
|
|
|
|
|
|
if [ ! -z "${dhcp_interfaces}" ]; then
|
2002-07-18 05:00:18 +00:00
|
|
|
${dhcp_program:-/sbin/dhclient} ${dhcp_flags} ${dhcp_interfaces}
|
|
|
|
fi
|
1999-09-13 15:44:20 +00:00
|
|
|
|
1999-12-12 01:58:30 +00:00
|
|
|
for ifn in ${network_interfaces}; do
|
1999-09-13 15:44:20 +00:00
|
|
|
# Check to see if aliases need to be added
|
|
|
|
#
|
|
|
|
alias=0
|
|
|
|
while : ; do
|
|
|
|
eval ifconfig_args=\$ifconfig_${ifn}_alias${alias}
|
|
|
|
if [ -n "${ifconfig_args}" ]; then
|
|
|
|
ifconfig ${ifn} ${ifconfig_args} alias
|
1999-12-12 01:58:30 +00:00
|
|
|
eval showstat_$ifn=1
|
2001-11-14 06:35:43 +00:00
|
|
|
alias=$((${alias} + 1))
|
1999-09-13 15:44:20 +00:00
|
|
|
else
|
|
|
|
break;
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
# Do ipx address if specified
|
|
|
|
#
|
|
|
|
eval ifconfig_args=\$ifconfig_${ifn}_ipx
|
|
|
|
if [ -n "${ifconfig_args}" ]; then
|
|
|
|
ifconfig ${ifn} ${ifconfig_args}
|
1999-12-12 01:58:30 +00:00
|
|
|
eval showstat_$ifn=1
|
1999-09-13 15:44:20 +00:00
|
|
|
fi
|
1999-12-12 01:58:30 +00:00
|
|
|
done
|
1999-09-13 15:44:20 +00:00
|
|
|
|
2002-08-09 17:33:07 +00:00
|
|
|
# Display ifconfiged interfaces
|
1999-12-12 01:58:30 +00:00
|
|
|
for ifn in ${network_interfaces}; do
|
|
|
|
eval showstat=\$showstat_${ifn}
|
|
|
|
if [ ! -z ${showstat} ]; then
|
1999-09-13 15:44:20 +00:00
|
|
|
ifconfig ${ifn}
|
1999-12-12 01:58:30 +00:00
|
|
|
fi
|
1999-09-13 15:44:20 +00:00
|
|
|
done
|
|
|
|
|
2002-07-18 05:00:17 +00:00
|
|
|
# Resync ipfilter
|
|
|
|
/etc/rc.d/ipfilter resync
|
1997-04-27 03:59:19 +00:00
|
|
|
}
|
|
|
|
|
2002-07-18 05:00:17 +00:00
|
|
|
network_stop()
|
|
|
|
{
|
2002-07-18 05:00:19 +00:00
|
|
|
echo -n "Stopping network:"
|
2001-06-03 12:26:56 +00:00
|
|
|
|
2002-07-18 05:00:17 +00:00
|
|
|
# flush routes
|
|
|
|
#
|
2002-07-18 05:00:19 +00:00
|
|
|
echo -n " flush routes"
|
2002-07-18 05:00:17 +00:00
|
|
|
route -n flush
|
Add nsswitch support. By creating an /etc/nsswitch.conf file, you can
configure FreeBSD so that various databases such as passwd and group can be
looked up using flat files, NIS, or Hesiod.
= Hesiod has been added to libc (see hesiod(3)).
= A library routine for parsing nsswitch.conf and invoking callback
functions as specified has been added to libc (see nsdispatch(3)).
= The following C library functions have been modified to use nsdispatch:
. getgrent, getgrnam, getgrgid
. getpwent, getpwnam, getpwuid
. getusershell
. getaddrinfo
. gethostbyname, gethostbyname2, gethostbyaddr
. getnetbyname, getnetbyaddr
. getipnodebyname, getipnodebyaddr, getnodebyname, getnodebyaddr
= host.conf has been removed from src/etc. rc.network has been modified
to warn that host.conf is no longer used at boot time. In addition, if
there is a host.conf but no nsswitch.conf, the latter is created at boot
time from the former.
Obtained from: NetBSD
2000-09-06 18:16:48 +00:00
|
|
|
|
2002-07-18 05:00:19 +00:00
|
|
|
echo '.'
|
2001-11-01 12:39:01 +00:00
|
|
|
}
|
2002-07-18 05:00:17 +00:00
|
|
|
|
|
|
|
load_rc_config $name
|
|
|
|
run_rc_command "$1"
|