X-Git-Url: http://git.ipfire.org/?p=people%2Fpmueller%2Fipfire-2.x.git;a=blobdiff_plain;f=src%2Finitscripts%2Finit.d%2Fnetworking%2Fred;h=ac6cec04033cd39ee8ef870dbabb75feaad81ee6;hp=f56cb21843cff2e152c364afae6559db7843f684;hb=7f8e589bf06deee51e70a9b7d287ebaba1a239b3;hpb=a332b303e428b5fa8f15e234b84d687c33b9f14a diff --git a/src/initscripts/init.d/networking/red b/src/initscripts/init.d/networking/red index f56cb21843..ac6cec0403 100644 --- a/src/initscripts/init.d/networking/red +++ b/src/initscripts/init.d/networking/red @@ -17,7 +17,24 @@ . /etc/sysconfig/rc . ${rc_functions} + +#Define some defaults +RED_VDSL_INET_VLAN=7 +RED_VDSL_IPTV_VLAN=8 +RED_VDSL_IPTV_DISABLE=0 + +eval $(/usr/local/bin/readhash /var/ipfire/main/settings) +if [ "$RRDLOG" == "" ]; then + RRDLOG=/var/log/rrd +fi + eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings) +eval $(/usr/local/bin/readhash /var/ipfire/dns/settings) +eval $(/usr/local/bin/readhash /var/ipfire/mac/settings) + +MAC=$(tr - : <<<$MAC) +MAC1=$(tr - : <<<$MAC1) +MAC2=$(tr - : <<<$MAC2) TYPE="${RED_TYPE}" DEVICE="${RED_DEV}" @@ -59,16 +76,13 @@ if [ "${TYPE}" == "STATIC" ]; then echo_failure exit 1 fi - -elif [ "${TYPE}" == "DHCP" ]; then - - PIDFILE="/var/run/dhcpcd-${DEVICE}.pid" - LEASEINFO="/var/ipfire/dhcpc/dhcpcd-${DEVICE}.info" - DHCP_START="-N -R -L /var/ipfire/dhcpc -c /var/ipfire/dhcpc/dhcpcd.exe " - DHCP_STOP="-k -c /var/ipfire/dhcpc/dhcpcd.exe " - fi +PIDFILE="/var/run/dhcpcd-${DEVICE}.pid" +LEASEINFO="/var/ipfire/dhcpc/dhcpcd-${DEVICE}.info" +DHCP_START=" " +DHCP_STOP="-k " + case "${1}" in start) if [ "${DEVICE}" != "${GREEN_DEV}" ] && [ "${DEVICE}" != "" ]; then @@ -79,6 +93,11 @@ case "${1}" in link_status=`ip link show ${DEVICE} 2> /dev/null` if [ -n "${link_status}" ]; then if ! echo "${link_status}" | grep -q UP; then + if [ -n "$MAC" ]; then + boot_mesg "Setting mac address on ${DEVICE} to ${MAC}" + ip link set dev ${DEVICE} address ${MAC} + evaluate_retval + fi ip link set ${DEVICE} up fi fi @@ -88,6 +107,9 @@ case "${1}" in exit 1 fi fi + + ## Create & Enable vnstat + /usr/bin/vnstat -u -i ${DEVICE} -r --enable --force > /dev/null 2>&1 if [ "${TYPE}" == "STATIC" ]; then @@ -99,6 +121,9 @@ case "${1}" in echo -n "${DEVICE}" > /var/ipfire/red/iface echo -n "${ADDRESS}" > /var/ipfire/red/local-ipaddress echo -n "${GATEWAY}" > /var/ipfire/red/remote-ipaddress + grep -v "gateway" /etc/hosts > /tmp/hosts + echo "$GATEWAY gateway" >> /tmp/hosts + mv /tmp/hosts /etc/hosts echo -n "${DNS1}" > /var/ipfire/red/dns1 echo -n "${DNS2}" > /var/ipfire/red/dns2 touch /var/ipfire/red/active @@ -108,11 +133,46 @@ case "${1}" in evaluate_retval run_subdir ${rc_base}/init.d/networking/red.up/ - + + # Configure aliases only if red static + /usr/local/bin/setaliases + elif [ "${TYPE}" == "DHCP" ]; then - boot_mesg -n "Starting dhcpcd on the ${DEVICE} interface..." + + if [ -e $LEASEINFO ]; then + boot_mesg -n "Stopping dhcpcd on the ${DEVICE} interface..." + . $LEASEINFO + if [ "$dhcp_lease_time" = "4294967295" ]; then + # do nothing, just echo ok + echo "" + echo_ok + else + if [ -n "$DHCP_STOP" ]; then + /sbin/dhcpcd ${DEVICE} $DHCP_STOP &> /dev/null + RET="$?" + if [ "$RET" -eq 0 ]; then + echo "" + echo_ok + elif [ "$RET" -eq 1 ]; then + boot_mesg "dhcpcd not running!" ${WARNING} + echo_warning + else + echo "" + echo_failure + fi + else + echo "" + killproc dhcpcd + fi + fi + fi + + boot_mesg -n "Starting dhcpcd on the ${DEVICE} interface..." echo -n "${DEVICE}" > /var/ipfire/red/iface + ## Create & Enable vnstat + /usr/bin/vnstat -u -i ${DEVICE} -r --enable --force > /dev/null 2>&1 + # Test to see if there is a stale pid file if [ -f "$PIDFILE" ]; then ps `cat "$PIDFILE"` | grep dhcpcd > /dev/null @@ -141,28 +201,18 @@ case "${1}" in echo_ok boot_mesg " DHCP Assigned Settings for ${DEVICE}:" boot_mesg_flush - boot_mesg " IP Address: $IPADDR" + boot_mesg " IP Address: $ip_address" boot_mesg_flush if [ -n "${RED_DHCP_HOSTNAME}" ]; then boot_mesg " Hostname: $RED_DHCP_HOSTNAME" boot_mesg_flush fi - boot_mesg " Subnet Mask: $NETMASK" + boot_mesg " Subnet Mask: $subnet_mask" boot_mesg_flush - boot_mesg " Default Gateway: $GATEWAY" + boot_mesg " Default Gateway: $routers" boot_mesg_flush - boot_mesg " DNS Server: $DNS" + boot_mesg " DNS Server: $domain_name_servers" boot_mesg_flush - - echo -n `/etc/rc.d/helper/getdnsfromdhcpc.pl 1` > /var/ipfire/red/dns1 - echo -n `/etc/rc.d/helper/getdnsfromdhcpc.pl 2` > /var/ipfire/red/dns2 - - . /var/ipfire/dhcpc/dhcpcd-${DEVICE}.info - echo "$IPADDR" > /var/ipfire/red/local-ipaddress - grep -v "gateway" /etc/hosts > /tmp/hosts - echo "$GATEWAY gateway" >> /tmp/hosts - mv /tmp/hosts /etc/hosts - echo "$GATEWAY" > /var/ipfire/red/remote-ipaddress else echo "" $(exit "$RET") @@ -182,23 +232,139 @@ case "${1}" in [ -c "/dev/ppp" ] || mknod /dev/ppp c 108 0 PPP_NIC=${DEVICE} - - if [ "$TYPE" == "pppoeatm" ]; then + + if [ "$TYPE" == "vdsl" ]; then + boot_mesg "Createing VLAN Interface ${DEVICE}.${RED_VDSL_INET_VLAN} ..." + modprobe 8021q + vconfig add ${DEVICE} ${RED_VDSL_INET_VLAN} + if [ -n "$MAC1" ]; then + boot_mesg "Setting mac address on ${DEVICE}.${RED_VDSL_INET_VLAN} to ${MAC1}" + ip link set dev ${DEVICE}.${RED_VDSL_INET_VLAN} address ${MAC1} + evaluate_retval + fi + PPP_NIC=${DEVICE}.${RED_VDSL_INET_VLAN} + sleep 0.2 + ip link set ${PPP_NIC} up + TYPE="pppoe" + if [ "${RED_VDSL_IPTV_DISABLE}" == "0" ]; then + PIDFILE="/var/run/dhcpcd-${DEVICE}.${RED_VDSL_IPTV_VLAN}.pid" + LEASEINFO="/var/ipfire/dhcpc/dhcpcd-${DEVICE}.${RED_VDSL_IPTV_VLAN}.info" + # Don't startup services ... + DHCP_START="-C 70 " + DHCP_STOP="-k " + # Test to see if there is a stale pid file + if [ -f "$PIDFILE" ]; then + ps `cat "$PIDFILE"` | grep dhcpcd > /dev/null + if [ $? != 0 ]; then + rm -f /var/run/dhcpcd-${DEVICE}.${RED_VDSL_IPTV_VLAN}.pid > /dev/null + fi + fi + + if [ ! -f "$PIDFILE" ]; then + boot_mesg "Createing VLAN Interface ${DEVICE}.${RED_VDSL_IPTV_VLAN} ..." + vconfig add ${DEVICE} ${RED_VDSL_IPTV_VLAN} + if [ -n "$MAC2" ]; then + boot_mesg "Setting mac address on ${DEVICE}.${RED_VDSL_IPTV_VLAN} to ${MAC2}" + ip link set dev ${DEVICE}.${RED_VDSL_IPTV_VLAN} address ${MAC2} + evaluate_retval + fi + boot_mesg -n "Starting dhcpcd on the ${DEVICE}.${RED_VDSL_IPTV_VLAN} interface..." + /sbin/dhcpcd ${DEVICE}.${RED_VDSL_IPTV_VLAN} ${DHCP_START} >/dev/null 2>&1 + RET="$?" + + if [ "$RET" = "0" ]; then + . /var/ipfire/dhcpc/dhcpcd-${DEVICE}.${RED_VDSL_IPTV_VLAN}.info + echo "" + echo_ok + boot_mesg " DHCP Assigned Settings for ${DEVICE}.${RED_VDSL_IPTV_VLAN}:" + boot_mesg_flush + boot_mesg " IP Address: $ip_address" + boot_mesg_flush + boot_mesg " Hostname: $RED_DHCP_HOSTNAME" + boot_mesg_flush + boot_mesg " Subnet Mask: $subnet_mask" + boot_mesg_flush + boot_mesg " Default Gateway: $routers" + boot_mesg_flush + boot_mesg " DNS Server: $domain_name_servers" + boot_mesg_flush + + else + echo "" + $(exit "$RET") + evaluate_retval + fi + fi + fi + fi + + if [ "$TYPE" == "pppoeatm" ] || [ "$TYPE" == "pptpatm" ]; then PPP_NIC=nas0 boot_mesg "Createing ATM-Bridge as $PPP_NIC ..." br2684ctl -c0 -e${ENCAP} -a0.${VPI}.${VCI} >/dev/null 2>&1 & sleep 1 - ifconfig $PPP_NIC up - TYPE="pppoe" + if [ "$TYPE" == "pppoeatm" ]; then + TYPE="pppoe" + fi + if [ "$TYPE" == "pptpatm" ]; then + TYPE="pptp" + fi fi - if [ "$TYPE" == "pppoe" ]; then + if [ "$TYPE" == "pppoe" ] || [ "$TYPE" == "pptp" ]; then if [ "$PPP_NIC" == "" ]; then boot_mesg "No device for red interface given. Check netsetup or dialprofile!" ${FAILURE} echo_failure exit 0 fi - boot_mesg "Bringing up the PPPoE interface on $PPP_NIC ..." - ip addr add 1.1.1.1/24 broadcast 1.1.1.255 dev $PPP_NIC + boot_mesg "Bringing up the $TYPE interface on $PPP_NIC ..." + ip addr flush dev $PPP_NIC >/dev/null 2>&1 + if [ "$TYPE" == "pptp" ]; then + if [ "$PPTP_NICCFG" == "dhcp" ]; then + # Don't startup services ... + DHCP_START="-C 70 " + DHCP_STOP="-k " + + # Test to see if there is a stale pid file + if [ -f "$PIDFILE" ]; then + ps `cat "$PIDFILE"` | grep dhcpcd > /dev/null + if [ $? != 0 ]; then + rm -f /var/run/dhcpcd-${DEVICE}.pid > /dev/null + fi + fi + + if [ ! -f "$PIDFILE" ]; then + boot_mesg -n "Starting dhcpcd on the ${DEVICE} interface..." + /sbin/dhcpcd ${DEVICE} ${DHCP_START} >/dev/null 2>&1 + RET="$?" + + if [ "$RET" = "0" ]; then + . /var/ipfire/dhcpc/dhcpcd-${DEVICE}.info + echo "" + echo_ok + boot_mesg " DHCP Assigned Settings for ${DEVICE}:" + boot_mesg_flush + boot_mesg " IP Address: $ip_address" + boot_mesg_flush + boot_mesg " Hostname: $RED_DHCP_HOSTNAME" + boot_mesg_flush + boot_mesg " Subnet Mask: $subnet_mask" + boot_mesg_flush + boot_mesg " Default Gateway: $routers" + boot_mesg_flush + boot_mesg " DNS Server: $domain_name_servers" + boot_mesg_flush + /sbin/route add $PPTP_PEER gw $routers $PPP_NIC + else + echo "" + $(exit "$RET") + evaluate_retval + fi + fi + else + ip addr add $PPTP_NICCFG dev $PPP_NIC + fi + fi + ip link set ${PPP_NIC} up else boot_mesg "Bringing up the PPP via ${TYPE} on ${COMPORT}..." fi @@ -209,10 +375,10 @@ case "${1}" in ### Plugin Options # - [ "${METHOD}" == "PPPOE_PLUGIN" ] && \ - PLUGOPTS="plugin /usr/lib/pppd/2.4.4/rp-pppoe.so" - - # PLUGOPTS="plugin /usr/lib/pppd/2.4.4/rp-pppoe.so nic-$PPP_NIC" + if [ "$TYPE" == "pppoe" ]; then + [ "${METHOD}" == "PPPOE_PLUGIN" ] && \ + PLUGOPTS="plugin /usr/lib/pppd/2.4.4/rp-pppoe.so" + fi ### Synchronous Mode # @@ -253,7 +419,6 @@ case "${1}" in DNS="" echo nameserver=$DNS1 > /etc/ppp/resolv.conf echo nameserver=$DNS2 >> /etc/ppp/resolv.conf - fi ### Dial On Demand @@ -271,14 +436,18 @@ case "${1}" in fi fi - ### When using pppoe-plugin the device has to be the last option - # - [ "${METHOD}" == "PPPOE_PLUGIN" ] && PLUGOPTS+=" $PPP_NIC" + if [ "$TYPE" == "pppoe" ]; then + ### When using pppoe-plugin the device has to be the last option + # + [ "${METHOD}" == "PPPOE_PLUGIN" ] && PLUGOPTS+=" $PPP_NIC" + fi if [ "$TYPE" == "modem" ]; then PLUGOPTS=" /dev/${COMPORT} ${DTERATE} connect /etc/ppp/dialer lock modem crtscts" + METHOD="PPPOE_PLUGIN" elif [ "$TYPE" == "serial" ]; then PLUGOPTS=" /dev/${COMPORT} ${DTERATE} connect /bin/true lock modem crtscts" + METHOD="PPPOE_PLUGIN" fi ### Standard PPP options we always use @@ -303,10 +472,17 @@ case "${1}" in PPPOE_CMD="/usr/sbin/pppoe -p /var/run/ppp-ipfire.pid.pppoe -I $PPP_NIC" PPPOE_CMD+=" -T 80 -U $PPPOE_SYNC $ACNAME $SERVICENAMEOPT" fi + + ### PPTP ### + # + if [ "$TYPE" == "pptp" ]; then + PPPOE_CMD="pptp $PPTP_PEER --nolaunchpppd" + METHOD="" + fi ### Run everything # - if [ "${METHOD}" == "PPPOE_PLUGIN" ]; then + if [ "$METHOD" == "PPPOE_PLUGIN" ]; then /usr/sbin/pppd $PPP_STD_OPTIONS $DEBUG $DEMAND >/dev/null 2>&1 & evaluate_retval # echo PLUGIN: /usr/sbin/pppd $PPP_STD_OPTIONS $DEBUG $DEMAND @@ -315,9 +491,13 @@ case "${1}" in evaluate_retval # echo PPP: /usr/sbin/pppd pty "$PPPOE_CMD" $PPP_STD_OPTIONS $DEBUG $DEMAND $PPPD_SYNC fi - + ## Create & Enable vnstat + /usr/bin/vnstat -u -i ppp0 -r --enable --force > /dev/null 2>&1 /etc/rc.d/init.d/connectd start - + # Add a NaN value to ppp0 rrd to supress spikes at reconnect + rrdtool update $RRDLOG/collectd/localhost/interface/if_octets-ppp0.rrd \ + $(date +%s):: > /dev/null 2>&1 + exit 0 fi ;; @@ -327,69 +507,82 @@ case "${1}" in ip route del default via ${GATEWAY} >/dev/null 2>&1 echo_ok if [ "$DEVICE" != "${GREEN_DEV}" ]; then - boot_mesg "Removing IPv4 address ${ADDRESS} from the ${DEVICE} interface..." - ip addr del ${args} dev ${DEVICE} + boot_mesg "Removing IPv4 addresses from the ${DEVICE} interface..." + ip addr flush dev ${DEVICE} evaluate_retval fi run_subdir ${rc_base}/init.d/networking/red.down/ - - elif [ "$TYPE" == "DHCP" ]; then - boot_mesg -n "Stopping dhcpcd on the ${DEVICE} interface..." - if [ -e $LEASEINFO ]; then - . $LEASEINFO - if [ "$LEASETIME" = "4294967295" ]; then - # do nothing, just echo ok - echo "" - echo_ok - else - if [ -n "$DHCP_STOP" ]; then - /sbin/dhcpcd ${DEVICE} $DHCP_STOP &> /dev/null - RET="$?" - if [ "$RET" -eq 0 ]; then - echo "" - echo_ok - elif [ "$RET" -eq 1 ]; then - boot_mesg "dhcpcd not running!" ${WARNING} - echo_warning - else - echo "" - echo_failure - fi - else - echo "" - killproc dhcpcd - fi - fi - else - boot_mesg -n "LEASEINFO Test failed! - " ${WARNING} - boot_mesg "dhcpcd is not running!" ${WARNING} - echo_warning - exit 1 - fi - + elif [ "$TYPE" == "PPPOE" ]; then boot_mesg "Bringing down the PPP interface ..." + ## Disable vnstat collection + /usr/bin/vnstat -u -i ppp0 -r --disable > /dev/null 2>&1 rm -f /var/ipfire/red/keepconnected killall -w -s TERM /usr/sbin/pppd 2>/dev/null evaluate_retval - ip addr del 1.1.1.1/24 broadcast 1.1.1.255 dev ${DEVICE} >/dev/null 2>&1 + # Add a NaN value to ppp0 rrd to supress spikes at reconnect + rrdtool update $RRDLOG/collectd/localhost/interface/if_octets-ppp0.rrd \ + $(date +%s):: > /dev/null 2>&1 + fi + + if [ -e $LEASEINFO ]; then + boot_mesg -n "Stopping dhcpcd on the ${DEVICE} interface..." + . $LEASEINFO + if [ "$dchp_lease_time" = "4294967295" ]; then + # do nothing, just echo ok + echo "" + echo_ok + else + if [ -n "$DHCP_STOP" ]; then + /sbin/dhcpcd ${DEVICE} $DHCP_STOP &> /dev/null + RET="$?" + if [ "$RET" -eq 0 ]; then + echo "" + echo_ok + elif [ "$RET" -eq 1 ]; then + boot_mesg "dhcpcd not running!" ${WARNING} + echo_warning + else + echo "" + echo_failure + fi + else + echo "" + killproc dhcpcd + fi + fi fi if [ "$DEVICE" != "${GREEN_DEV}" ] && [ "$DEVICE" != "" ]; then - link_status=`ip link show $DEVICE 2> /dev/null` + link_status=`ip link show $DEVICE.${RED_VDSL_INET_VLAN} 2> /dev/null` if [ -n "${link_status}" ]; then if echo "${link_status}" | grep -q UP; then - boot_mesg "Bringing down the ${DEVICE} interface..." - ip link set ${DEVICE} down + boot_mesg "Bringing down the ${DEVICE}.${RED_VDSL_INET_VLAN} interface..." + ip link set ${DEVICE}.${RED_VDSL_INET_VLAN} down + vconfig rem ${DEVICE}.${RED_VDSL_INET_VLAN} evaluate_retval fi + else + link_status=`ip link show $DEVICE 2> /dev/null` + if [ -n "${link_status}" ]; then + if echo "${link_status}" | grep -q UP; then + boot_mesg "Bringing down the ${DEVICE} interface..." + ip link set ${DEVICE} down + evaluate_retval + fi + fi fi fi killall -w -s KILL /usr/sbin/pppd >/dev/null 2>&1 + killall -w -s KILL pptp >/dev/null 2>&1 killall -w -s KILL br2684ctl >/dev/null 2>&1 + + ## Disable vnstat collection + /usr/bin/vnstat -u -i ${DEVICE} -r --disable > /dev/null 2>&1 + rm -f /var/ipfire/red/{active,device,dial-on-demand,dns1,dns2,local-ipaddress,remote-ipaddress,resolv.conf} + exit 0; ;; - esac # End