#!/bin/bash PATH=/sbin:/usr/sbin:/bin:/usr/bin TEXTDOMAIN=initscripts cd /etc/sysconfig/network-scripts . network-functions . /etc/rc.d/init.d/functions need_hostname CONFIG=${1} [ -z "${CONFIG}" ] && { echo $"usage: ifup " >&2 exit 1 } [ -f "${CONFIG}" ] || CONFIG=ifcfg-${CONFIG} [ -f "${CONFIG}" ] || { echo $"usage: ifup " >&2 exit 1 } if [ ${UID} != 0 ]; then if [ -x /usr/sbin/usernetctl ]; then if /usr/sbin/usernetctl ${CONFIG} report ; then exec /usr/sbin/usernetctl ${CONFIG} up fi fi echo $"Users cannot control this device." >&2 exit 1 fi source_config if [ "foo$2" = "fooboot" -a "${ONBOOT}" = "no" -o "${ONBOOT}" = "NO" ] then exit fi IPSETUP=no DEVICETYPE=`echo ${DEVICE} | sed "s/[0-9]*$//"` REALDEVICE=`echo ${DEVICE} | sed 's/:.*//g'` if echo ${DEVICE} | grep -q ':' ; then ISALIAS=yes else ISALIAS=no fi # Old BOOTP variable if [ "${BOOTP}" = "yes" ]; then BOOTPROTO=bootp fi if [ "${BOOTPROTO}" = bootp -o "${BOOTPROTO}" = dhcp ]; then DYNCONFIG=true fi if [ -x /sbin/ifup-pre-local ]; then /sbin/ifup-pre-local ${DEVICE} fi OTHERSCRIPT="/etc/sysconfig/network-scripts/ifup-${DEVICETYPE}" if [ -x ${OTHERSCRIPT} ]; then exec ${OTHERSCRIPT} ${CONFIG} $2 fi # is this device available? (this catches PCMCIA devices for us) LC_ALL= LANG= /sbin/ifconfig ${REALDEVICE} 2>&1 | grep -s "not found" > /dev/null if [ "$?" = "0" ]; then echo $"Delaying ${DEVICE} initialization." exit 1 fi if [ "${SLAVE}" = yes -a "${ISALIAS}" = no -a "${MASTER}" != "" -a \ -x /sbin/ifenslave ]; then RFLAG="" ; [ "${RECEIVEONLY}" = yes ] && RFLAG="-r" ifconfig ${DEVICE} down echo $"Enslaving ${DEVICE} to ${MASTER}" ifenslave ${RFLAG} "${MASTER}" "${DEVICE}" exit 0 fi if [ -n "${MACADDR}" ]; then ifconfig ${DEVICE} hw ether ${MACADDR} fi # Is there a firewall running, and does it look like one we configured? FWACTIVE= if [ -f /etc/sysconfig/ipchains -a "`ipchains -L input -n 2>&1 | awk 'END { print NR }'`" -gt 1 ]; then FWACTIVE=1 export FWACTIVE fi if [ -n "${DYNCONFIG}" ]; then PUMPARGS= DHCPCDARGS= if [ -n "${DHCP_HOSTNAME}" ]; then PUMPARGS="-h ${DHCP_HOSTNAME}" DHCPCDARGS="-h ${DHCP_HOSTNAME}" fi if [ -n "${NEEDHOSTNAME}" ]; then PUMPARGS="${PUMPARGS} --lookup-hostname" DHCPCDARGS="${DHCPCDARGS} -H" fi if [ "${PEERDNS}" = "no" ]; then PUMPARGS="${PUMPARGS} -d" DHCPCDARGS="${DHCPCDARGS} -R" fi echo -n $"Determining IP information for ${DEVICE}..." # DHCP clients need DNS to be available, and we don't know # what DNS server they're using until they are done. FWHACK= if [ -n "$FWACTIVE" -a "$FIREWALL_MODS" != "no" ]; then ipchains -I input -s 0/0 53 -p udp -j ACCEPT FWHACK=1 fi if [ -x /sbin/pump ] && /sbin/pump ${PUMPARGS} -i ${DEVICE} ; then echo $" done." elif [ -x /sbin/dhcpcd ] && /sbin/dhcpcd ${DHCPCDARGS} ${DEVICE} ; then echo $" done." else echo $" failed." [ -n "$FWHACK" ] && ipchains -D input -s 0/0 53 -p udp -j ACCEPT exit 1 fi [ -n "$FWHACK" ] && ipchains -D input -s 0/0 53 -p udp -j ACCEPT else if [ -z "${IPADDR}" ]; then # enable device without IP, useful for e.g. PPPoE ifconfig ${DEVICE} up ${MTU:+mtu $MTU} exec /etc/sysconfig/network-scripts/ifup-post ${CONFIG} ${2} fi if [ -z "${NETMASK}" ]; then eval `/bin/ipcalc --netmask ${IPADDR}` fi if [ -z "${BROADCAST}" ]; then eval `/bin/ipcalc --broadcast ${IPADDR} ${NETMASK}` fi if [ -z "${NETWORK}" ]; then eval `/bin/ipcalc --network ${IPADDR} ${NETMASK}` fi ifconfig ${DEVICE} ${IPADDR} netmask ${NETMASK} broadcast ${BROADCAST} \ $(toggle_value arp $ARP) \ $(toggle_value promisc $PROMISC) \ $(toggle_value allmulti $ALLMULTI) # don't re-add subnet route on 2.2 kernels, but add a route # to a non-local subnet. # stupid hack, but it should work if [ "$ISALIAS" = no ] && [ -z "`route -n | sed "s/ .*//" | grep ${NETWORK}`" ]; then route add -net ${NETWORK} netmask ${NETMASK} dev ${DEVICE} fi . /etc/sysconfig/network if [ -z "${GATEWAYDEV}" -o "${GATEWAYDEV}" = "${DEVICE}" ]; then # set up default gateway if [ -n "${GATEWAY}" -a "`ipcalc --network ${GATEWAY} ${NETMASK}`" = "NETWORK=${NETWORK}" ]; then route add default gw ${GATEWAY} ${DEVICE} DEFGW=${GATEWAY} elif [ "${GATEWAYDEV}" = "${DEVICE}" ]; then route add default ${DEVICE} fi fi fi . /etc/sysconfig/network # IPv6 initialisation? if [ "${NETWORKING_IPV6}" = "yes" ]; then /etc/sysconfig/network-scripts/ifup-ipv6 $DEVICE fi if [ "${IPX}" = yes ]; then /etc/sysconfig/network-scripts/ifup-ipx ${DEVICE} fi exec /etc/sysconfig/network-scripts/ifup-post ${CONFIG} ${2}