freebsd-dev/release/picobsd/floppy.tree/etc/rc.conf
Luigi Rizzo b8be92123e Implement a more efficient way to assign addresses: read /etc/hosts
only once into an array of shell variables, and then scan the array
to find entries matching the MAC address.
Associative arrays would really be handy here...
2001-11-29 03:16:23 +00:00

155 lines
4.1 KiB
Bash

#!/bin/sh
# $FreeBSD$
#
# rc.conf for picobsd.
# $main_ether and $main_if are set from rc to the ethernet address and
# name of the first ethernet interface, if available, so a simple
# here-document below can be used for autoconfiguration.
# Remaining parameters are set using a switch.
rc_conf_set_defaults() {
syslogd_enable="NO"
pccard_enable="NO"
swapfile="NO" # Set to name of swapfile if aux swapfile desired.
firewall_enable="NO" # firewall type (see /etc/rc.firewall) or NO
tcp_extensions="NO" # Allow RFC1323 & RFC1644 extensions (or NO).
ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration.
#ifconfig_lo0_alias0="inet 127.0.0.254 netmask 0xffffffff" # Sample alias entry.
### Network daemons options: ###
sshd_enable="YES" # if present...
inetd_enable="YES" # Run the network daemon dispatcher (or NO)
inetd_flags="" # Optional flags to inetd
snmpd_enable="NO" # Run the SNMP daemon (or NO)
snmpd_flags="-C -c /etc/snmpd.conf" # Optional flags to snmpd
### Network routing options: ###
defaultrouter="NO" # Set to default gateway (or NO).
static_routes="" # Set to static route list (or leave empty).
gateway_enable="NO" # Set to YES if this host will be a gateway.
arpproxy_all="" # replaces obsolete kernel option ARP_PROXYALL.
default_mask="0xffffff00"
}
# the following lets the user specify a name and ip for his system
read_address() {
echo "Please enter a hostname and IP address for your system $main_ether"
read hostname the_ip
if [ "X$hostname" != "X" ] ; then
echo "# $main_ether $hostname" >> /etc/hosts
echo "$the_ip $hostname" >> /etc/hosts
else
hostname=default
fi
}
# set "ether" using $1 (interface name) as search key
get_ether() {
local key
key=$1
ether=""
set `ifconfig ${key}`
while [ "$1" != "" ] ; do
if [ "$1" = "ether" ] ; then
ether=$2
break
else
shift
fi
done
}
# read content from /etc/hosts into an array (needed later in fetch_hostname)
read_hosts() {
local i a b c key junk
i=""
while read a b c junk ; do
if [ "$a" = "#ethertable" ] ; then
i=0
elif [ "$i" != "" -a "X$a" = "X#" -a "$b" != "" ] ; then
eval eth_${i}=$b
eval eth_host_${i}=$c
i=$(($i+1))
fi
done < /etc/hosts
}
# set "hostname" using $1 (ethernet address) as search key in /etc/hosts
fetch_hostname() {
local i b key
key=$1
i=0
b="x"
if [ "${eth_0}" = "" ] ; then
read_hosts
fi
hostname=""
while [ "$b" != "" -a "${hostname}" = "" ] ; do
eval b=\${eth_${i}}
case X${key} in
X${b} ) # so we can use wildcards
eval hostname=\${eth_host_${i}}
break
;;
esac
i=$(($i+1))
done
echo "fetch_hostname for <${key}> returns <${hostname}>"
}
# sets "mask" using $1 (netmask name) as the search key in /etc/networks
fetch_mask() {
local a b key junk
key=$1 # search key, typically hostname-netmask
mask=""
while read a b junk; do # key mask otherstuff
case X${key} in
X${a} ) # we can use wildcards
mask=$b
break
;;
esac
done < /etc/networks
if [ "${mask}" = "" ] ; then
mask=${default_mask}
fi
echo "fetch_mask for <${key}> returns <${mask}>"
}
set_main_interface() {
fetch_hostname ${main_ether}
if [ "X$hostname" = "X" -o "X$hostname" = "X." ] ; then
if [ "X$main_ether" = "X" ] ; then
echo "No ethernets found, using localhost"
hostname=localhost
else
read_address
fi
fi
fetch_mask ${hostname}-netmask
eval ifconfig_${main_if}=\" \${hostname} netmask \${mask}\"
network_interfaces=`ifconfig -l`
}
set_all_interfaces() {
local i ether hostname mask
for i in `ifconfig -l` ; do
get_ether $i
fetch_hostname ${ether}
fetch_mask ${hostname}-netmask
if [ "${ether}" != "" -a "${hostname}" != "" ] ; then
eval ifconfig_${i}=\" \${hostname} netmask \${mask}\"
fi
done
}
rc_conf_set_defaults
### Allow local configuration override at the very end here ##
### can make use of a case statement to set per-host things.
if [ -f /etc/rc.conf.local ]; then
. /etc/rc.conf.local
fi