Neostrada na USB w OpenWrt

Wielu użytkowników Neostrady posiada modem dostarczany wraz z usługą, podłączany do portu USB. Można go również wykorzystać do połączenia z internetem przy pomocy routera wspieranego przez OpenWRT posiadającego porty USB.

Kamikaze 8.09 rc2

Konieczne jest zainstalowanie wersji 2.6

Instalacja

Należy pobrać z http://downloads.openwrt.org/kamikaze/8.09_RC2/brcm47xx/packages/ pakiety

  • kmod-ppp
  • ppp
  • linux-atm
  • kmod-atm
  • kmod-pppoa
  • ppp-mod-pppoa
  • kmod-usb-core
  • kmod-usb-atm
  • kmod-usb2
  • kmod-usb-uhci
  • kmod-usb-atm-speedtouch
  • speedtouch-usb-firmware

Następnie przy pomocy winscp (windows) lub scp (linux) przenieś te pakiety do katalogu /tmp na ruterze i zainstalować poleceniem

opkg install /tmp/nazwa_pakietu.ipk

Konfiguracja

Należy zmienić sekcję wan w /etc/config/network na następującą:

config interface wan
      option ifname "ppp0"
      option proto pppoa
      option encaps llc
      option vpi 0
      option vci 35
      option username "user"
      option password "hasło"

zamiast option encaps llc można dać option encaps vc

Restart rutera, ewentualnie należy uruchomić połączenie ifup wan i wszystko powinno działać.

Instalator modemu

Istnieje możliwość użycia „automatu”. Wystarczy pobrać skrypt do folderu /tmp i następnie:

  chmod +x install.sh
  ./install.sh

Whiterussian

Do stworzenia opisu wykorzystany został router ASUS WL-500gP z OpenWRT RC6 (kernel 2.4.30) oraz modem Alcatel/Thomson SpeedTouch330

UWAGA!!!! w opisany poniżej sposób NIE MOŻNA podłączy modemu USB Sagem

Co będzie nam potrzebne?

  1. router z portem USB
  2. modem USB SpeedTouch330
  3. pakiety do obsługi USB
  4. programy do obsługi modemu
  5. programy do zestawienia połączenia PPPoA

USB

W pierwszej kolejności należy skonfigurować USB na routerze. Wystarczy zainstalować kilka pakietów:

ipkg install kmod-usb-core
ipkg install kmod-usb-uhci  # dla innych routerów niż WL-500gP, może być potrzebne OHCI
ipkg install kmod-usb-usb2  # nie jest wymagane dla modemu SpeedTouch330 (USB v1.1)

Od razu należy zainstalować również pakiety do obsługi modemu i PPP:

ipkg install kmod-usb-acm
ipkg install libgcc
ipkg install kmod-ppp

Następnym krokiem jest podmontowanie systemu plików:

mount -t usbdevfs usbdevfs /proc/bus/usb

USB zainstalowane. Teraz możemy sprawdzić, czy modem jest rozpoznawany przez router. W tym celu maleć podłączyć modem do wolnego gniazda USB w routerze. Router powinien rozpoznać modem. Aby to sprawdzić, wystarczy wydać polecenie:

# cat /proc/bus/usb/devices

Jeśli wszystko jest OK, powinniśmy otrzymać w odpowiedzi coś takiego:

(...)
P:  Vendor=06b9 ProdID=4061 Rev= 2.00
S:  Manufacturer=ALCATEL
S:  Product=Speed Touch 330
(...)

Warto zapamiętać wersję modemu (Rev=X.XX). Przyda się przy wyborze rodzaju firmware (na rynku spotykane są modele 2.00 i 4.00)

Instalacja modułów i programów

Kolejnym krokiem będzie uzupełnienie zasobów o wymagane moduły i programy. Pliki modułów kernela (obsługa modemu): ppp_synctty.o, atm.o, n_hdlc.o; (obsługa ppp): ppp_mppe_mppc.o. katalog docelowy: /lib/modules/2.4.30

Pozostałe pliki (program modemu): modem_run; (firmware): KQD6_3.012 (dla wersji modemu Rev= 2.00), ZZZL_3.012 (dla wersji modemu Rev= 4.00); oraz plugin dla PPP: pppoa3, i umieścimy je w utworzonym przez nas katalogu /usr/local (lub inny wedle swego uznania).

Brakujące moduły są dostępne TUTAJ oraz firmware do SpeedToucha TUTAJ. Należy rozpakować je w katalogu np.: /tmp i poprzenosić w właściwe miejsca. Najprościej można wykonać to wydając polecenia:

cd /tmp
wget http://eko.one.pl/openwrt/spdtch-pppoa_2.4.30-brcm_mipsel.tgz
tar -zxvf spdtch-pppoa_2.4.30-brcm_mipsel.tgz
mv *.o /lib/modules/2.4.30
mkdir -p /usr/local
mv modem_run /usr/local
mv pppoa3 /usr/local

Następnie ładujemy potrzebne moduły:

insmod slhc
insmod ppp_generic
insmod ppp_synctty
insmod ppp_async
insmod ppp_mppe_mppc
insmod atm
insmod n_hdlc

Firmware można pobrać z adresu http://www.speedtouchdsl.com/download/drivers/USB/SpeedTouch330_firmware_3012.zip, a następnie rozpakować na komputerze stacjonarnym i wyodrębnić dwa pliki: KQD6_3.012 oraz ZZL_3.012. Następnie należy je przesłać (np. instalując wcześniej demona ftp, n p vsftp) do katalogu /usr/local.

Instalacja firmware w modemie

Przejdziemy teraz do załadowania firmware do modemu. W tym celu należy podłączyć przewód linii telefonicznej do modemu (oczywiście musimy mieć na tej linii aktywną usługę neostrady) i wydać polecenie:

/usr/local/modem_run -v 1 -m -f /usr/local/KQD6_3.012

W trakcie ładowania pliku firmware, zaczną migać diody urządzenia. Będzie to oznaczać synchronizację linii. Po kilkunastu sekundach modem się ustabilizuje. Diody powrócą do zielonego koloru.

Prawidłowe załadowanie firmware w modemie możemy sprawdzić wydając komendę:

# logread
Jan  1 00:00:21 (none) user.info : Info  modem_run version 1.3.1 started by root uid 0
Jan  1 00:00:21 (none) user.info : Info  Found SpeedTouch USB modem
Jan  1 00:00:21 (none) user.info : Info  Modem revision: 0200
Jan  1 00:00:23 (none) user.info : Info  Best offset     36 with probability 100%
Jan  1 00:00:23 (none) user.info : Info  Best offset    983 with probability 100%
Jan  1 00:00:23 (none) user.info : Info  Firmware info (CRC:0xd80bf9f7, Size:991, Checked: Yes, Alcatel/Thomson Boot block (old))
Jan  1 00:00:23 (none) user.info : Info  Best offset   1027 with probability 100%
Jan  1 00:00:23 (none) user.info : Info  Best offset 762642 with probability 100%
Jan  1 00:00:23 (none) user.info : Info  Firmware info (CRC:0x78039fed, Size:762650, Checked: Yes, 3.0.6 - MacOSX - Win32)
Jan  1 00:00:25 (none) user.info : Info  BLOCK1 :    991 bytes   uploaded : OK
Jan  1 00:00:26 (none) user.info : Info  BLOCK2 :    511 bytes downloaded : OK
Jan  1 00:00:29 (none) user.info : Info  BLOCK3 : 762650 bytes   uploaded : OK
Jan  1 00:00:30 (none) user.info : Info  BLOCK4 :    511 bytes downloaded : OKInfo  Modem reference : 3566067A......
Jan  1 00:00:41 (none) user.info : Info  [monitoring report] ADSL link went up
Jan  1 00:01:00 (none) user.info : Info  ADSL synchronization has been obtained
Jan  1 00:01:00 (none) user.info : Info  ADSL line is up (2496 kbit/s down | 320 kbit/s up)

UWAGA!!! Jeśli Twoja wersja modemu jest Rev= 4.00, to należy zmienić w wywołaniu modem_run nazzwę pliku firmware na: ZZZL_3.012

Pozostało nam jeszcze zestawienie połączenia. Więc do dzieła…..

Konfiguracja PPP dla neostrady

W wersji kernela 2.4.30, do skonfigurowania pppd użyjemy pluginu pppoa3. Musimy stworzyć plik konfiguracyjny:

cd /etc/ppp/peers
touch neostrada-pppoa
nano neostrada-pppoa

(lub wykorzystując inny edytor) uzupełnić plik neostrada-pppoa następującymi wpisami:

debug
kdebug 1
lock
noipdefault
defaultroute
pty "/usr/local/pppoa3 -v 1 -e 1 -c -m 1 -vpi 0 -vci 35"
asyncmap 0
lcp-echo-interval  2
lcp-echo-failure   7
sync
user TWOJ_LOGIN@neostrada.pl
noauth
holdoff 3
persist
maxfail 5
mru 1500
mtu 1500

Oczywiście należy zmienić TWOJ_LOGIN@neostrada.pl na login przydzielony podczas rejestracji usługi Neostrada.

Kolejnym krokiem jest wprowadzenie wpisów loginu i hasła do plików chap-secrets i pap-secrets w katalogu /etc/ppp. Login i hasło zostały ci nadane przy rejestracji neostrady. Modyfikacji należy dokonać dowolnym edytorem, np:

nano /etc/ppp/chap-secrets

Wyglądać powinno to tak:

# Secrets for authentication using CHAP
# client        server         secret         IP addresses
TWOJ_LOGIN@neostrada.pl * TWOJE_HASLO *

TWOJ_LOGIN@neostrada.pl i TWOJE_HASLO należy zastąpić loginem i hasłem z rejestracji neostrady. Taki sam wpis należy wykonać w pliku /etc/ppp/pap-secrets.

Zestawienie połączenia PPP

Pozostał nam już tylko zestawienie połączenia i kilka spraw porządkowych. W pierwszej kolejności ustawiamy zmienne nvram, żeby skonfigurować prawidłowo firewall, DNS i route.

nvram set wan_device=ppp0
nvram set wan_ifname=ppp0
nvram set lan_dns="194.204.152.34 217.98.63.164"    # jeśli jest już ustawione, to można nie zmieniać
nvram commit

/etc/init.d/S35firewall               # restart firewall
route del default gw 192.168.2.1      # restart route (192.168.2.1 - IP Twojego routera)

Teraz możemy już odpalić połączenie PPP. Należy wydać polecenie:

pppd call neostrada-pppoa

W efekcie w syslog powinny pojawić się wpisy dotyczące nawiązania połączenia. W celu sprawdzenia wykonujemy logread:

Jan  1 00:01:02 (none) kern.notice pppd[732]: pppd 2.4.3 started by root, uid 0
Jan  1 00:01:02 (none) kern.debug pppd[732]: using channel 2
Jan  1 00:01:02 (none) kern.info pppd[732]: Using interface ppp0
Jan  1 00:01:02 (none) kern.notice pppd[732]: Connect: ppp0 <--> /dev/pts/1
Jan  1 00:01:02 (none) kern.debug pppd[732]: rcvd [LCP ConfReq id=0xc <auth chap MD5> <magic 0x4c90d0ea>]
Jan  1 00:01:02 (none) kern.debug pppd[732]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x21d52310> <pcomp> <accomp>]
Jan  1 00:01:02 (none) kern.debug pppd[732]: sent [LCP ConfAck id=0xc <auth chap MD5> <magic 0x4c90d0ea>]
Jan  1 00:01:05 (none) kern.debug pppd[732]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x21d52310> <pcomp> <accomp>]
Jan  1 00:01:05 (none) kern.debug pppd[732]: rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x21d52310> <pcomp> <accomp>]
Jan  1 00:01:05 (none) kern.debug pppd[732]: sent [LCP EchoReq id=0x0 magic=0x21d52310]
Jan  1 00:01:05 (none) kern.debug pppd[732]: rcvd [CHAP Challenge id=0x31 <046c0e6e53845b7b64b083a22b2e73449ff738636c>, name = "wawa_pl"]
Jan  1 00:01:05 (none) kern.debug pppd[732]: sent [CHAP Response id=0x31 <80327be01735cd4488e7c0a8f25f0921>, name = "XxXxXx@neostrada.pl"]
Jan  1 00:01:05 (none) kern.debug pppd[732]: rcvd [LCP EchoRep id=0x0 magic=0x4c90d0ea]
Jan  1 00:01:06 (none) kern.debug pppd[732]: rcvd [CHAP Success id=0x31 ""]
Jan  1 00:01:06 (none) kern.info pppd[732]: CHAP authentication succeeded
Jan  1 00:01:06 (none) kern.notice pppd[732]: CHAP authentication succeeded
Jan  1 00:01:06 (none) kern.debug pppd[732]: sent [CCP ConfReq id=0x1 <mppe -H -M -S -L -D +C>]
Jan  1 00:01:06 (none) kern.debug pppd[732]: sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0>]
Jan  1 00:01:06 (none) kern.debug pppd[732]: rcvd [LCP ProtRej id=0xd 80 fd 01 01 00 0a 12 06 00 00 00 01]
Jan  1 00:01:06 (none) kern.debug pppd[732]: rcvd [IPCP ConfRej id=0x1 <compress VJ 0f 01>]
Jan  1 00:01:06 (none) kern.debug pppd[732]: sent [IPCP ConfReq id=0x2 <addr 0.0.0.0>]
Jan  1 00:01:06 (none) kern.debug pppd[732]: rcvd [IPCP ConfNak id=0x2 <addr 83.11.170.191>]
Jan  1 00:01:06 (none) kern.debug pppd[732]: sent [IPCP ConfReq id=0x3 <addr 83.11.170.191>]
Jan  1 00:01:06 (none) kern.debug pppd[732]: rcvd [IPCP ConfReq id=0xf0 <addr 213.20.2.228>]
Jan  1 00:01:06 (none) kern.debug pppd[732]: sent [IPCP ConfAck id=0xf0 <addr 213.20.2.228>]
Jan  1 00:01:06 (none) kern.debug pppd[732]: rcvd [IPCP ConfAck id=0x3 <addr 83.11.170.191>]
Jan  1 00:01:06 (none) kern.notice pppd[732]: local  IP address 83.11.170.191
Jan  1 00:01:06 (none) kern.notice pppd[732]: remote IP address 213.20.2.228
Jan  1 00:01:06 (none) kern.debug pppd[732]: Script /etc/ppp/ip-up started (pid 755)
Jan  1 00:01:06 (none) kern.debug pppd[732]: Script /etc/ppp/ip-up finished (pid 755), status = 0x1

Jeśli otrzymaliśmy podobny wynik, to znaczy że połączenie został nawiązane prawidłowo. Możemy to dodatkowo sprawdzić wydając polecenie: ifconfig ppp0

ppp0      Link encap:Point-to-Point Protocol
        inet addr:83.11.170.191  P-t-P:213.20.2.228  Mask:255.255.255.255
        UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
        RX packets:8 errors:0 dropped:0 overruns:0 frame:0
        TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:3
        RX bytes:383 (5.0 MiB)  TX bytes:81 (2.0 MiB)

Wykonamy jeszcze restart dnsmasq:

killall dnsmasq
/etc/init.d/S50dnsmasq start

……. i wszystko mamy gotowe.

Sprawdź jeszcze tabelę routingu i czy DNS pracuje prawidłowo. Wydaj kolejno polecenia:

route -n
ping google.com           # ping można przerwać przy pomych Ctrl+C

Jeśli wszystko ustawione jest prawidłowo otrzymasz:

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
213.25.2.228    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 br0
0.0.0.0         213.20.2.228    0.0.0.0         UG    0      0        0 ppp0

oraz

PING google.com (64.233.167.99): 56 data bytes
64 bytes from 64.233.167.99: icmp_seq=0 ttl=245 time=158.4 ms
64 bytes from 64.233.167.99: icmp_seq=1 ttl=245 time=145.6 ms
64 bytes from 64.233.167.99: icmp_seq=2 ttl=245 time=148.3 ms
64 bytes from 64.233.167.99: icmp_seq=3 ttl=244 time=155.7 ms
64 bytes from 64.233.167.99: icmp_seq=4 ttl=244 time=306.6 ms

--- google.com ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 145.6/182.9/306.6 ms

Automatyzacja - skrypty

Do pełnego szczęścia potrzene są jeszcze skrypty pozwalające na zautomatyzowanie procesów uruchamiania wszystkich wymaganych programów.

(UWAGA!!! Poniższe skrypty nie są jeszcze całkowicie przetestowane, ale z powodzeniem działają na moim routerze.)

Całość składa się z 3 skryptów.

1. Główny skrypt modem.sh należy umieścić w katalogu /usr/local. Skrypt sprawdza co 1min czy połączenie z neostradą jest nawiązane. Jeśli stwierdzi że nastąpiło rozłączenie podejmuje próbę zestawienia połączenia (aż do skutku). Dodatkowo istnieje możliwość zrobienia restartu połączenia co jakiś określony czas (w przykładzie codziennie o godz. 2:30 - neostrada zmienia IP co 24 godz.) Dodatkowo skryp pozwala na ręczne (lub z innego programu) sterowanie pracą modemu. Możliwe są start dla modemu oraz start, zatrzymanie i restart dla połączenia (ppp0). Aby sprawdzić składnie wywołania skrypu, uruchom go bez wpisywania jakichkolwiek opcji.

#!/bin/sh
## /usr/local/modem.sh
### JKD - modem speedtouch330 - v0.3.5 - 2007-03-03
#  skrypt wymaga poprawionego skryptu S60cron

## zmienna plikowa - jest jesli ppp0 jest UP
f_ppp0_pid="/var/run/ppp0.pid"
f_ppp0_up="/var/run/ppp0.up"

## zmienna plikowa - jest kiedy dziala proc. cron_1m_run
f_cron_1m_run="/var/run/cron_ppp0_1m.run"

## uruchomienie co 1 min
cron_1m_file="/var/spool/cron/root/modem_1m"
cron_1m_cmd="* * * * * /usr/local/modem.sh cron_1m_run"

## uruchomienie codziennie o godz. 2:30
cron_24h_file="/var/spool/cron/root/modem_24h"
cron_24h_cmd="30 2 * * * /usr/local/modem.sh cron_24h_run"


## Restart wszystkich programow wymagajacych aktualnego IP
restart_usr_progs() {
	touch $f_ppp0_up	# nie usuwac tej linii
	## .....ponizej MOZNA DOPISYWAC wlasne programy......

	## tymczasowo - blad w skrypcie synchronizacji czasu
	#/etc/init.d/S??ntp
	/usr/sbin/ntpclient -c 1 -s -h pool.ntp.org

	## aktualizacja DynDNS
	/etc/init.d/S??ez-ipupdate restart
}
## NIE MODYFIKOWAC ponizszego kodu


ppp0_up() {
	## sprawdzenie czy jest uruchomiony modem_run
	pid=`pidof modem_run`
	if [ ! -z "$pid" ]; then
		killall pppd >/dev/null 2>&1
		## modem bug: w buforze modemu zostaja smieci - nieprawidlowo odpala pppd
		## modem hacks: czyszczenie bufora modemu
		pppd call neostrada-pppoa >/dev/null 2>&1
		sleep 2
		killall pppd >/dev/null 2>&1
		## modem hacks - end
		pppd call neostrada-pppoa
		rm ${f_ppp0_up}
	fi
}

ppp0_start() {
	ppp0_up
	rm ${f_cron_1m_run}
	echo "$cron_1m_cmd" > $cron_1m_file	# wpis 1m do crontabs
	echo "$cron_24h_cmd" > $cron_24h_file	# wpis 24h do crontabs
	cron_restart
}

ppp0_stop() {
	rm ${cron_1m_file}		# usuniecie wpisu 1m z crontabs
	rm ${cron_24h_file}		# usuniecie wpisu 24h z crontabs
	cron_restart
	killall pppd >/dev/null 2>&1
	rm ${f_cron_1m_run}
}

cron_1m_run() {
	if [ ! -f $f_cron_1m_run ]; then
		touch $f_cron_1m_run
		if [ ! -f $f_ppp0_pid ]; then
			rm ${f_ppp0_up}
			## podniesienie ppp0
			ppp0_up
		else
			if [ ! -f $f_ppp0_up ]; then
				## restart usr_progs
				restart_usr_progs
				touch $f_ppp0_up
			fi
		fi
	fi
	rm ${f_cron_1m_run}
}

cron_restart() {
	/etc/init.d/S??cron restart
}

modem_start() {
	## sprawdzenie czy modem jest podlaczony do USB
	if grep "Vendor=06b9 ProdID=4061" /proc/bus/usb/devices; then
		## sprawdzenie czy jest uruchomiony modem_run
		pid=`pidof modem_run`
		if [ -z "$pid" ]; then
			## uruchomienie wymaganych modulow
			for module in slhc ppp_generic ppp_synctty ppp_async ppp_mppe_mppc atm n_hdlc; do
				/sbin/insmod $module >/dev/null 2>&1
			done
			mount -t usbdevfs usbdevfs /proc/bus/usb
			#/usr/local/modem_run -v 1 -m -f /usr/local/KQD6_3.012 2>/var/log/modem_run.log
			/usr/local/modem_run -v 1 -m -f /usr/local/KQD6_3.012
			route del default gw 192.168.2.1
			## odpalenie ppp0 i restart programów użytkownika
			ppp0_start
		else
			echo "Modem_run is already started"
		fi
	else
		echo "USB modem not found: $usb_dev"
	fi
}

case "$1" in
	modem_start)
		modem_start
	;;

	ppp0_start|ppp0_restart)
		ppp0_start
	;;
	ppp0_stop)
		ppp0_stop
	;;

	cron_1m_run)
		cron_1m_run
	;;
	cron_24h_run)
		ppp0_start
	;;

	*)
		echo "Usage: modem.sh {modem_start|ppp0_start|ppp0_stop|ppp0_restart}"
	;;
esac

2. Skrypt S65neostrada należy umieścić w katalogu /etc/init.d. Skrypt zapewnia automatyczne zestawienie połączenia przy restarcie routera.

#!/bin/sh
## /etc/init.d/S65neostrada
## JKD
/usr/local/modem.sh modem_start

3. Skrypt S60cron należy umieścić w katalogu /etc/init.d. Jest to poprawiony oryginalny skrypt z OpenWRT. Niestety oryginał ma błąd (objawia się m.in. nie wyświetlaniem w webif zawartości crontabs). Zmiany nie zakłucają standardowej pracy crona (z innymi programami), jednak wprowadzają modyfikacje używane przez skrypt modem.sh.

UWAGA!!!!!! Poprawka w S60cron jest wymagana do prawidłowej pracy skryptu modem.sh.

#!/bin/sh
#
# crond           Starts crond
# 
# jkd modify: (v0.1.3 - 2007-03-03)
#   - crond <- /var/spool/cron/crontabs/root
#        /var/spool/cron/crontabs/root <- /etc/crontabs/root + /var/spool/cron/root/*
#

crondir_base="/var/spool/cron"
crondir="$crondir_base/crontabs"
crondir_add="$crondir_base/root"

cron_root_realfile="/etc/crontabs/root"
cron_root_file="$crondir/root"

mkdir -p $crondir
mkdir -p $crondir_add

start() {
	if [ "$(nvram get cron_enable)" -eq "1" ]; then
		pid=`pidof crond`
		if [ -z "$pid" ]; then 
			#regenerate root crontab file
			cat $cron_root_realfile > $cron_root_file
			for root_cron_entry in $crondir_add/*; do
				cat $root_cron_entry >> $cron_root_file
			done

			echo -n "Starting crond: "
			( /usr/sbin/crond -c $crondir && echo "OK" ) || echo "ERROR"
		else
			echo -n "crond is already started"
		fi
	else
		echo -n "crond is disabled"
	fi
}

stop() { 
	pid=`pidof crond`
	if [ -n "$pid" ]; then
		echo -n "Stopping crond: "
		( { 
			kill $pid >/dev/null 2>&1
		} && echo "OK" ) || echo "ERROR"
	else
		echo "crond is not running"
	fi
}

restart() {
	stop
	sleep 1
	start
}

case "$1" in
	start)
		start
	;;
	stop)
		stop
	;;
	restart|reload)
		restart
	;;
	*)
		echo $"Usage: $0 {start|stop|restart|reload}"
		exit 1
esac

exit $?

Po umieszczeniu skryptów na swoim miejscu trzeba pamiętać o nadaniu im atrybutów wykonalości:

chmod +x /usr/local/modem.sh
chmod +x /etc/init.d/S65neostrada
chmod +x /etc/init.d/S60cron

Teraz już wystarczy tylko wykonać restart routera wydając polecenie:

reboot

I to już wszystko. Możesz cieszyć się neostradą prze modem USB. :)

usb/neostrada.txt · ostatnio zmienione: 2010/03/14 09:59 (edycja zewnętrzna)
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki Recent changes RSS feed Valid XHTML 1.0
Profesjonalny Hosting