|
@ -1,6 +1,6 @@ |
|
|
#!/bin/sh - |
|
|
#!/bin/sh - |
|
|
# |
|
|
# |
|
|
# $OpenBSD: netstart,v 1.49 1999/08/09 21:49:04 angelos Exp $ |
|
|
|
|
|
|
|
|
# $OpenBSD: netstart,v 1.50 1999/09/01 05:07:50 deraadt Exp $ |
|
|
|
|
|
|
|
|
# Returns true if $1 contains only alphanumerics |
|
|
# Returns true if $1 contains only alphanumerics |
|
|
isalphanumeric() { |
|
|
isalphanumeric() { |
|
@ -43,45 +43,7 @@ route -n add -host $hostname localhost |
|
|
route -n add -net 127 127.0.0.1 -reject |
|
|
route -n add -net 127 127.0.0.1 -reject |
|
|
|
|
|
|
|
|
# configure all of the non-loopback interfaces which we know about. |
|
|
# configure all of the non-loopback interfaces which we know about. |
|
|
# do this by reading /etc/hostname.* files, where * is the name |
|
|
|
|
|
# of a given interface. |
|
|
|
|
|
# |
|
|
|
|
|
# these files are formatted like the following, but with no # at the |
|
|
|
|
|
# beginning of the line |
|
|
|
|
|
# |
|
|
|
|
|
# addr_family hostname netmask broadcast_addr options |
|
|
|
|
|
# dest dest_addr |
|
|
|
|
|
# |
|
|
|
|
|
# OR |
|
|
|
|
|
# |
|
|
|
|
|
# dhcp |
|
|
|
|
|
# |
|
|
|
|
|
# OR |
|
|
|
|
|
# |
|
|
|
|
|
# bridge |
|
|
|
|
|
# brconfig-arguments [ several lines if needed ] |
|
|
|
|
|
# |
|
|
|
|
|
# addr_family is the address family of the interface, generally inet |
|
|
|
|
|
# hostname is the host name that belongs to the interface, in /etc/hosts. |
|
|
|
|
|
# netmask is the network mask for the interface. |
|
|
|
|
|
# broadcast_addr is the broadcast address for the interface |
|
|
|
|
|
# options are misc. options to ifconfig for the interface. |
|
|
|
|
|
# |
|
|
|
|
|
# dest is simply the string "dest" (no quotes, though) if the interface |
|
|
|
|
|
# has a "destination" (i.e. it's a point-to-point link, like SLIP). |
|
|
|
|
|
# dest_addr is the hostname of the other end of the link, in /etc/hosts |
|
|
|
|
|
# |
|
|
|
|
|
# the only required contents of the file in this mode are the addr_family field |
|
|
|
|
|
# and the hostname. |
|
|
|
|
|
# |
|
|
|
|
|
# dhcp is simply the string "dhcp" (no quotes, though) if the interface |
|
|
|
|
|
# is to be configured using DHCP. See dhclient(8) and dhclient.conf(5) |
|
|
|
|
|
# for details. |
|
|
|
|
|
# |
|
|
|
|
|
# bridge is the string "bridge" (still no quotes). Bridge interfaces |
|
|
|
|
|
# are just configured "up" and then brconfig(8) is called for each |
|
|
|
|
|
# line of arguments following this first line. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# refer to hostname.if(5) and bridgename.if(5) |
|
|
for hn in /etc/hostname.*; do |
|
|
for hn in /etc/hostname.*; do |
|
|
# Strip off /etc/hostname. prefix |
|
|
# Strip off /etc/hostname. prefix |
|
|
if=${hn#/etc/hostname.} |
|
|
if=${hn#/etc/hostname.} |
|
@ -91,9 +53,7 @@ for hn in /etc/hostname.*; do |
|
|
if ! isalphanumeric "$if"; then |
|
|
if ! isalphanumeric "$if"; then |
|
|
continue |
|
|
continue |
|
|
fi |
|
|
fi |
|
|
|
|
|
|
|
|
# If the interface does not exist, just skip processing the file |
|
|
|
|
|
/sbin/ifconfig $if > /dev/null 2>&1 |
|
|
|
|
|
|
|
|
ifconfig $if > /dev/null 2>&1 |
|
|
if [ "$?" != "0" ]; then |
|
|
if [ "$?" != "0" ]; then |
|
|
continue |
|
|
continue |
|
|
fi |
|
|
fi |
|
@ -102,25 +62,25 @@ for hn in /etc/hostname.*; do |
|
|
{ |
|
|
{ |
|
|
read af name mask bcaddr extras |
|
|
read af name mask bcaddr extras |
|
|
|
|
|
|
|
|
# $af can be either "bridge", "dhcp", "up" or an address family. |
|
|
|
|
|
|
|
|
# $af can be either "dhcp", "up" or an address family. |
|
|
case "$af" in |
|
|
case "$af" in |
|
|
"bridge") |
|
|
"bridge") |
|
|
ifconfig $if up |
|
|
|
|
|
cmd=`sed "s/\(.*\)/brconfig $if \1;/"` |
|
|
|
|
|
;; |
|
|
|
|
|
|
|
|
cmd="echo ${hn}: bridges now supported via bridgename.* files" |
|
|
|
|
|
;; |
|
|
"dhcp") |
|
|
"dhcp") |
|
|
ifconfig $if $extras down |
|
|
|
|
|
cmd="/sbin/dhclient $if" |
|
|
|
|
|
|
|
|
ifconfig $if $name $mask $bcaddr $extras down |
|
|
|
|
|
cmd="dhclient $if" |
|
|
;; |
|
|
;; |
|
|
"up") |
|
|
"up") |
|
|
# The only one of these guaranteed to be set is $if |
|
|
# The only one of these guaranteed to be set is $if |
|
|
|
|
|
# the remaining ones exist so that media controls work |
|
|
cmd="ifconfig $if $name $mask $bcaddr $extras up" |
|
|
cmd="ifconfig $if $name $mask $bcaddr $extras up" |
|
|
;; |
|
|
;; |
|
|
*) |
|
|
*) |
|
|
read dt dtaddr |
|
|
read dt dtaddr |
|
|
if [ ! -n "$name" ]; then |
|
|
if [ ! -n "$name" ]; then |
|
|
echo "/etc/hostname.$if: invalid network configuration file" |
|
|
echo "/etc/hostname.$if: invalid network configuration file" |
|
|
exit |
|
|
|
|
|
|
|
|
continue |
|
|
fi |
|
|
fi |
|
|
|
|
|
|
|
|
cmd="ifconfig $if $af $name " |
|
|
cmd="ifconfig $if $af $name " |
|
@ -136,6 +96,29 @@ for hn in /etc/hostname.*; do |
|
|
eval "$cmd" |
|
|
eval "$cmd" |
|
|
} < /etc/hostname.$if |
|
|
} < /etc/hostname.$if |
|
|
done |
|
|
done |
|
|
|
|
|
for bn in /etc/bridgename.*; do |
|
|
|
|
|
# Strip off /etc/bridgename. prefix |
|
|
|
|
|
if=${bn#/etc/bridgename.} |
|
|
|
|
|
|
|
|
|
|
|
# Interface names must be alphanumeric only. We check to avoid |
|
|
|
|
|
# configuring backup or temp files, and to catch the "*" case. |
|
|
|
|
|
if ! isalphanumeric "$if"; then |
|
|
|
|
|
continue |
|
|
|
|
|
fi |
|
|
|
|
|
brconfig $if > /dev/null 2>&1 |
|
|
|
|
|
if [ "$?" != "0" ]; then |
|
|
|
|
|
continue |
|
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
# Now parse the bridgename.* file |
|
|
|
|
|
{ |
|
|
|
|
|
# All lines are run as brconfig(8) commands. |
|
|
|
|
|
while read line ; do |
|
|
|
|
|
# XXX should support # comments and skip blank lines |
|
|
|
|
|
brconfig $if $line |
|
|
|
|
|
done |
|
|
|
|
|
} < /etc/bridgename.$if |
|
|
|
|
|
done |
|
|
|
|
|
|
|
|
# /etc/mygate, if it exists, contains the name of my gateway host |
|
|
# /etc/mygate, if it exists, contains the name of my gateway host |
|
|
# that name must be in /etc/hosts. |
|
|
# that name must be in /etc/hosts. |
|
|