X-Git-Url: http://git.ipfire.org/?p=people%2Fteissler%2Fipfire-2.x.git;a=blobdiff_plain;f=src%2Finitscripts%2Finit.d%2Fnetworking%2Fred;h=b33c03f136f67168490f6001c42f82256338dca0;hp=b1b4341c416b37f3e4896eb9d5e90b49d05b77e3;hb=89baf6d537a92d2a4f640dba97ef387ee5511daf;hpb=367a7770117c27507bea4fe085bdce52739f82bf diff --git a/src/initscripts/init.d/networking/red b/src/initscripts/init.d/networking/red index b1b4341c4..b33c03f13 100644 --- a/src/initscripts/init.d/networking/red +++ b/src/initscripts/init.d/networking/red @@ -17,11 +17,11 @@ . /etc/sysconfig/rc . ${rc_functions} +. /etc/init.d/networking/functions.network #Define some defaults -RED_VDSL_INET_VLAN=7 -RED_VDSL_IPTV_VLAN=8 -RED_VDSL_IPTV_DISABLE=0 +INET_VLAN=7 +IPTV_VLAN=8 eval $(/usr/local/bin/readhash /var/ipfire/main/settings) if [ "$RRDLOG" == "" ]; then @@ -33,6 +33,7 @@ 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}" @@ -77,11 +78,6 @@ if [ "${TYPE}" == "STATIC" ]; then fi fi -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 " - case "${1}" in start) if [ "${DEVICE}" != "${GREEN_DEV}" ] && [ "${DEVICE}" != "" ]; then @@ -120,8 +116,8 @@ 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 + grep -v -E "\" /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 @@ -137,106 +133,26 @@ case "${1}" in /usr/local/bin/setaliases elif [ "${TYPE}" == "DHCP" ]; then + # Add firewall rules to allow comunication with the dhcp server on red. + iptables -A REDINPUT -p tcp --source-port 67 --destination-port 68 -i ${DEVICE} -j ACCEPT + iptables -A REDINPUT -p udp --source-port 67 --destination-port 68 -i ${DEVICE} -j ACCEPT - if [ -e $LEASEINFO ]; then - boot_mesg -n "Stopping dhcpcd on the ${DEVICE} interface..." - . $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 - 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 + # Check if the wlan-client is used on red. + # To determine this we check if a wpa_supplicant is running. + pid="$(pidof wpa_supplicant)" - # 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 - else - boot_mesg "dhcpcd already running!" ${WARNING} - echo_warning - exit 2 - fi + if [ -z "${pid}" ]; then + # No wpa_supplicant is running. So it's save to start dhcpcd. + dhcpcd_start "${DEVICE}" fi - - iptables -A REDINPUT -p tcp --source-port 67 --destination-port 68 -i ${DEVICE} -j ACCEPT - iptables -A REDINPUT -p udp --source-port 67 --destination-port 68 -i ${DEVICE} -j ACCEPT - - if [ -n "${RED_DHCP_HOSTNAME}" ]; then - DHCP_START+="-h ${RED_DHCP_HOSTNAME} " - fi - - /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: $IPADDR" - 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_flush - boot_mesg " Default Gateway: $GATEWAY" - boot_mesg_flush - boot_mesg " DNS Server: $DNS" - boot_mesg_flush - if [ -n "$DNS0" ] && [ -n "$DNS1" ]; then - boot_mesg "Overwritting DNS-Server addresses with ${DNS0},${DNS1}" - echo -n ${DNS0} > /var/ipfire/red/dns1 - echo -n ${DNS1} > /var/ipfire/red/dns2 - evaluate_retval - else - 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 - fi - . /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 - touch /var/ipfire/red/active - else - echo "" - $(exit "$RET") - evaluate_retval - fi - + ## Create & Enable vnstat + /usr/bin/vnstat -u -i ${DEVICE} -r --enable --force > /dev/null 2>&1 + elif [ "$TYPE" == "PPPOE" ]; then - + if ( ps ax | grep -q [p]ppd ); then boot_mesg "pppd is still running." ${FAILURE} echo_failure @@ -246,70 +162,16 @@ case "${1}" in eval $(/usr/local/bin/readhash /var/ipfire/ppp/settings) [ -c "/dev/ppp" ] || mknod /dev/ppp c 108 0 - - PPP_NIC=${DEVICE} - if [ "$TYPE" == "vdsl" ]; then - boot_mesg "Createing VLAN Interface ${DEVICE}.${RED_VDSL_INET_VLAN} ..." - modprobe 8021q - vconfig add ${DEVICE} ${RED_VDSL_INET_VLAN} - 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" - DHCP_START="-N -R -L /var/ipfire/dhcpc " - 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 + # We force the plugin method, anyway. + METHOD="PPPOE_PLUGIN" + + PPP_NIC=${DEVICE} - 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: $IPADDR" - boot_mesg_flush - boot_mesg " Hostname: $RED_DHCP_HOSTNAME" - boot_mesg_flush - boot_mesg " Subnet Mask: $NETMASK" - boot_mesg_flush - boot_mesg " Default Gateway: $GATEWAY" - boot_mesg_flush - boot_mesg " DNS Server: $DNS" - boot_mesg_flush - - else - echo "" - $(exit "$RET") - evaluate_retval - fi - fi - fi - fi if [ "$TYPE" == "pppoeatm" ] || [ "$TYPE" == "pptpatm" ]; then PPP_NIC=nas0 + DEVICE=nas0 boot_mesg "Createing ATM-Bridge as $PPP_NIC ..." br2684ctl -c0 -e${ENCAP} -a0.${VPI}.${VCI} >/dev/null 2>&1 & sleep 1 @@ -320,6 +182,69 @@ case "${1}" in TYPE="pptp" fi fi + + if [ "$TYPE" == "vdsl" ]; then + boot_mesg "Createing VLAN Interface ${DEVICE}.${INET_VLAN} ..." + modprobe 8021q + vconfig add ${DEVICE} ${INET_VLAN} + if [ -n "$MAC1" ]; then + boot_mesg "Setting mac address on ${DEVICE}.${INET_VLAN} to ${MAC1}" + ip link set dev ${DEVICE}.${INET_VLAN} address ${MAC1} + evaluate_retval + fi + PPP_NIC=${DEVICE}.${INET_VLAN} + sleep 0.2 + ip link set ${PPP_NIC} up + TYPE="pppoe" + fi + if [ "${IPTV}" == "enable" ]; then + PIDFILE="/var/run/dhcpcd-${DEVICE}.${IPTV_VLAN}.pid" + LEASEINFO="/var/ipfire/dhcpc/dhcpcd-${DEVICE}.${IPTV_VLAN}.info" + # 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}.${IPTV_VLAN}.pid > /dev/null + fi + fi + + if [ ! -f "$PIDFILE" ]; then + boot_mesg "Createing VLAN Interface ${DEVICE}.${IPTV_VLAN} ..." + modprobe 8021q + vconfig add ${DEVICE} ${IPTV_VLAN} + if [ -n "$MAC2" ]; then + boot_mesg "Setting mac address on ${DEVICE}.${IPTV_VLAN} to ${MAC2}" + ip link set dev ${DEVICE}.${IPTV_VLAN} address ${MAC2} + evaluate_retval + fi + boot_mesg -n "Starting dhcpcd on the ${DEVICE}.${IPTV_VLAN} interface..." + /sbin/dhcpcd ${DEVICE}.${IPTV_VLAN} ${DHCP_START} >/dev/null 2>&1 + RET="$?" + + if [ "$RET" = "0" ]; then + . /var/ipfire/dhcpc/dhcpcd-${DEVICE}.${IPTV_VLAN}.info + echo "" + echo_ok + boot_mesg " DHCP Assigned Settings for ${DEVICE}.${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 if [ "$TYPE" == "pppoe" ] || [ "$TYPE" == "pptp" ]; then if [ "$PPP_NIC" == "" ]; then boot_mesg "No device for red interface given. Check netsetup or dialprofile!" ${FAILURE} @@ -330,9 +255,6 @@ case "${1}" in ip addr flush dev $PPP_NIC >/dev/null 2>&1 if [ "$TYPE" == "pptp" ]; then if [ "$PPTP_NICCFG" == "dhcp" ]; then - DHCP_START="-N -R -L /var/ipfire/dhcpc " - DHCP_STOP="-k " - # Test to see if there is a stale pid file if [ -f "$PIDFILE" ]; then ps `cat "$PIDFILE"` | grep dhcpcd > /dev/null @@ -352,17 +274,17 @@ 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 boot_mesg " Hostname: $RED_DHCP_HOSTNAME" boot_mesg_flush - 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 - + /sbin/route add $PPTP_PEER gw $routers $PPP_NIC else echo "" $(exit "$RET") @@ -374,6 +296,10 @@ case "${1}" in fi fi ip link set ${PPP_NIC} up + if [ -n "${PPTP_ROUTE}" ]; then + boot_mesg "Set route ${PPTP_ROUTE} to pptp server..." + route add ${PPTP_ROUTE} + fi else boot_mesg "Bringing up the PPP via ${TYPE} on ${COMPORT}..." fi @@ -386,7 +312,7 @@ case "${1}" in # if [ "$TYPE" == "pppoe" ]; then [ "${METHOD}" == "PPPOE_PLUGIN" ] && \ - PLUGOPTS="plugin /usr/lib/pppd/2.4.4/rp-pppoe.so" + PLUGOPTS="plugin rp-pppoe.so" fi ### Synchronous Mode @@ -462,10 +388,18 @@ case "${1}" in ### Standard PPP options we always use # PPP_STD_OPTIONS="$PLUGOPTS $DNS defaultroute noipdefault noauth" - PPP_STD_OPTIONS+=" default-asyncmap hide-password nodetach mtu ${MTU}" - PPP_STD_OPTIONS+=" mru ${MTU} noaccomp nodeflate nopcomp novj novjccomp" + PPP_STD_OPTIONS+=" default-asyncmap hide-password nodetach" + PPP_STD_OPTIONS+=" mru ${MRU} noaccomp nodeflate nopcomp novj novjccomp" PPP_STD_OPTIONS+=" nobsdcomp user ${USERNAME} lcp-echo-interval 20" - PPP_STD_OPTIONS+=" lcp-echo-failure 3 ${AUTH}" + PPP_STD_OPTIONS+=" lcp-echo-failure 5 ${AUTH}" + + if [ -n "${MTU}" ]; then + PPP_STD_OPTIONS="${PPP_STD_OPTIONS} mtu ${MTU}" + fi + + if [ -n "${MRU}" ]; then + PPP_STD_OPTIONS="${PPP_STD_OPTIONS} mru ${MRU}" + fi ### Debugging # @@ -532,43 +466,29 @@ case "${1}" in # 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 [ "$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 + elif [ "$TYPE" == "DHCP" ]; then + # Check if the wlan-client is used on red. + # To determine this we check if a wpa_supplicant is running. + pid="$(pidof wpa_supplicant)" + + if [ -z "${pid}" ]; then + # Stop dhcpcd. + dhcpcd_stop "${DEVICE}" fi fi + if [ -n "${PPTP_ROUTE}" ]; then + route del ${PPTP_ROUTE} + fi + if [ "$DEVICE" != "${GREEN_DEV}" ] && [ "$DEVICE" != "" ]; then - link_status=`ip link show $DEVICE.${RED_VDSL_INET_VLAN} 2> /dev/null` + link_status=`ip link show $DEVICE.${INET_VLAN} 2> /dev/null` if [ -n "${link_status}" ]; then if echo "${link_status}" | grep -q UP; then - boot_mesg "Bringing down the ${DEVICE}.${RED_VDSL_INET_VLAN} interface..." - ip link set ${DEVICE}.${RED_VDSL_INET_VLAN} down - vconfig del ${DEVICE} ${RED_VDSL_INET_VLAN} + boot_mesg "Bringing down the ${DEVICE}.${INET_VLAN} interface..." + ip link set ${DEVICE}.${INET_VLAN} down + vconfig rem ${DEVICE}.${INET_VLAN} evaluate_retval fi else