.:: UnderWay ::.

How-To’s

Scris de Daniel Voicu pe mai 25th, 2007

Primul How-To:

Configurarea unei conexiuni la internet folosind un modem wireless
Modemul folosit a fost OPTION GLOBESURFER I’CON

Acest How-To poate fi folosit IN SPECIAL PE VECTOR LINUX(sau o alta distributie bazata pe Slackware). Nu stiu cat de folositor poate fi in alte distributii, dar e un inceput bun, cred eu… si sper asta!
TOT CE VETI FACE AICI VA TREBUI FACUT CA UTILIZATOR ROOT!!!
Ok, primul lucru pe care il veti face va fi sa creati urmatorul fiser C:

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details:

http://www.gnu.org/licenses/gpl.txt

*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <signal.h>
#include <ctype.h>
#include <usb.h>

struct usb_dev_handle *devh;

void release_usb_device(int dummy) {
int ret;
printf(”Program cancelled by system. Bye\n\n”);
ret = usb_release_interface(devh, 0);
if (!ret)
printf(” Oops, failed to release interface: %d\n”, ret);
usb_close(devh);
if (!ret)
printf(” Oops, failed to close interface: %d\n”, ret);
printf(”\n”);
exit(1);
}

struct usb_device *find_device(int vendor, int product) {
struct usb_bus *bus;
struct usb_device *right_dev;
right_dev = NULL;

printf(”Looking for Option Icon USB 3G+ box …\n”);
for (bus = usb_get_busses(); bus; bus = bus->next) {
struct usb_device *dev;

for (dev = bus->devices; dev; dev = dev->next) {
if (dev->descriptor.idVendor == vendor && dev->descriptor.idProduct == product) {
right_dev = dev;
}
if (dev->descriptor.idVendor == 0×0af0 && dev->descriptor.idProduct == 0×6600) {
printf(”Found box in modem mode. Switching not necessary. Bye\n\n”);
exit(0);
}
}
}
if (right_dev != NULL)
printf(”Found box in storage mode. Preparing for switching …\n”);
else {
printf(”No Option Icon box found. Is it connected? Bye\n\n”);
exit(0);
}
return right_dev;
}

int main(int argc, char **argv) {
int ret;
int vendor = 0×05c6;
int product = 0×1000;

struct usb_device *dev;
char buf[65535];

printf(”\n * icon_switch: tool for changing USB mode of Option Icon 3G+ box\n”);
printf(” * (C) Josua Dietze 2006\n”);
printf(” * Works with libusb 0.1.12 and probably other versions\n\n”);

usb_init();
usb_find_busses();
usb_find_devices();

dev = find_device(vendor, product);
assert(dev);

devh = usb_open(dev);
assert(devh);

signal(SIGTERM, release_usb_device);

printf(”Looking for active storage driver …\n”);
ret = usb_get_driver_np(devh, 0, buf, sizeof(buf));
if (ret == 0) {
printf(” OK, driver found (\”%s\”), attempting to detach it …\n”, buf);
ret = usb_detach_kernel_driver_np(devh, 0);
if (ret == 0)
printf(” OK, driver \”%s\” successfully detached\n”, buf);
else
printf(” Oops, driver \”%s\” detach failed with error %d. Trying to continue …\n”, buf, ret);
} else {
printf(”No driver found. Box was not initialized. Can’t communicate. Bye\n\n”);
exit(1);
}
ret = usb_claim_interface(devh, 0);
if (ret != 0) {
printf(”Could not claim interface (error %d). Can’t communicate. Bye\n\n”, ret);
exit(1);
}

ret = usb_set_altinterface(devh, 0);
assert(ret >= 0);

memcpy(buf, “\x55\x53\x42\x43\x70\x6e\xde\x86\x00\x00\x00\x00\x00\x00\x06\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00″, 0×000001f);
ret = usb_bulk_write(devh, 0×00000005, buf, 0×000001f, 1000);
if (ret >= 0 )
printf(”Device change command successfully sent. Box probably switched.\nLook at /var/log/syslog for result … Bye\n\n”);
else
printf(”Device change command returned error %d”, ret);

ret = usb_release_interface(devh, 0);
assert(ret == 0);

ret = usb_close(devh);
assert(ret == 0);

return 0;
}

(multumiti-i autorului acestui fisier, chiar daca e un pic cam inutil fisierul…dar… cel putin mie nu mi-a folosit la nimic, pt ca a mea “cutie” era deja in modul de modem, nu in cel de stocare.)

Ok, dupa ce ati creat fisierul, salvati-l ca icon_switch.c
Dupa ce l-ati salvat, deschideti consola, treceti in directorul unde ati facut fisierul, si executati urmatoarea comanda:
cc -lusb -o icon_switch icon_switch.c
Instalati-l in /usr/sbin/icon_switch si executati-l cu drepturi de root.
(pentru a il instala, folositi comanda install, banuiesc ca stiti cum, daca tot cititi asta, e pt utilizatorul un pic peste incepator…dar daca sunteti “hackeri” :) )

Pasul nr.2
Creati un script udev cu urmatoarea cale: /etc/udev/rules.d/50-globesurfer-icon.rules
Va contine urmatoarele:
UBSYSTEM==”usb”, SYSFS{idProduct}==”1000″, SYSFS{idVendor}==”05c6″, RUN+=”/usr/sbin/globesurfer-icon-switch.sh”
UBSYSTEM==”usb”, SYSFS{idProduct}==”6600″, SYSFS{idVendor}==”0af0″, RUN+=”/sbin/modprobe usbserial vendor=0×0af0 product=0×6600″

si scripturile switch /usr/sbin/globesurfer-icon-switch.sh:
#!/bin/sh
modprobe sd_mod
echo “scsi add-single-device 0 1 2 3″ > /proc/scsi/scsi
/usr/sbin/globesurfer-icon-switch-child.sh &

exit 0

Si acum /usr/sbin/globesurfer-icon-switch-child.sh
#!/bin/sh
#comanda sleep ii va lasa mai mult timp de gandit modemului :))
sleep 10
#asta va rula comanda adevarata de schimbare, si va tine si un log, pentru verificari ulterioare
/usr/sbin/icon_switch >>/tmp/globe.log 2>&1 &

sleep 1
exit 0

Pasul 3. Configurarea PPP
Creati un fisier avand calea /etc/ppp/peers/umts
Va contine urmatoarele date:
/dev/ttyUSB0
460800
idle 7200
lock
crtscts
modem
noauth
# dns, routing, chestia cu replacedefaultroute o puteti scoate, mie imi merge fara ea, cu ea nu are de gand sa #mearga
usepeerdns
replacedefaultroute
defaultroute
noipdefault
# evita compresia:
noccp
nobsdcomp
novj
#Asta e valabil pentru Orange…
user “internet”
password “orange”
# connect script
connect “/usr/sbin/umts-chat.sh”
# Se zice ca ar fi specific t-mobile
ipcp-restart 8
ipcp-max-configure 50
ipcp-accept-local
ipcp-accept-remote

Si acum veti creea /usr/sbin/umts-chat.sh
Iata:
#!/bin/sh

# invoca scriptul de pregatire, cu PIN sau fara PIN. Prima data va merge cu PIN, apoi nu va mai fi necesar, va #aparea o eroare la PIN, dar va functiona
/usr/sbin/chat -V -f /etc/chatscripts/umts-prep || /usr/sbin/chat -V -f /etc/chatscripts/umts-prep-nopin
# asteapta sa se faca schimbarea UTMS/GPRS
sleep 20
# ultimul script:
/usr/sbin/chat -V -f /etc/chatscripts/umts

Acum veti scrie /etc/chatscripts/umts-prep:
ABORT BUSY
ABORT ERROR
ABORT ‘NO CARRIER’
REPORT CONNECT
TIMEOUT 10
“” “ATZ”
OK “ATE1V1&D2&C1S0=0+IFC=2,2″
OK “AT+IPR=115200″
# inlocuiti XXXX cu codul vostru PIN, la Orange e 0000 de obicei:
OK “AT+CPIN=XXXX”
OK “ATE1″
# moduri de operare diferite, va rog lasati-le in comentarii, IN CAZ DE URGENTA doar scoateti-le
# GPRS
#OK “AT_OPSYS=0,2″
# UMTS
#OK “AT_OPSYS=1,2″
# GPRS, UMTS
#OK “AT_OPSYS=2,2″
# UMTS,GPRS
OK “AT_OPSYS=3,2″
OK “AT+CGDCONT=1,42IP42,42internet42,4242,0,0″
SAY “\nAsteapta 20 de secunde pentru a se face schimbarea intre UMTS/GPRS …\n”

Acum alt script :) V-ati plictisit? :)
Asta se va salva ca /etc/chatscripts/umts-prep-nopin
ABORT BUSY
ABORT ERROR
ABORT ‘NO CARRIER’
REPORT CONNECT
TIMEOUT 10
“” “ATZ”
OK “ATE1V1&D2&C1S0=0+IFC=2,2″
OK “AT+IPR=115200″
OK “ATE1″
# Moduri de operare diferite, va rog lasati-le in comentarii, IN CAZ DE URGENTA le puteti scoate, doar atunci!
# GPRS
#OK “AT_OPSYS=0,2″
# UMTS
#OK “AT_OPSYS=1,2″
# GPRS, UMTS
#OK “AT_OPSYS=2,2″
# UMTS,GPRS
OK “AT_OPSYS=3,2″
OK “AT+CGDCONT=1,42IP42,42internet42,4242,0,0″
SAY “\nAsteapta 20 de secunde pentru a se face schimbarea intre UMTS/GPRS …\n”

Ultimul script. Cel mai important :)
Creati /etc/chatscripts/umts cu urmatorul continut:
ABORT BUSY
ABORT ‘NO CARRIER’
ABORT ERROR
REPORT CONNECT
TIMEOUT 10
SAY “Suna la Orange\n”
TIMEOUT 60
“” “ATD*99***1#”
CONNECT \c

Asta a fost tot, momentan… dupa ce ati facut toate scripturile, recomand sa oferiti drepturi de citire/scriere/executie, cel putin, unuia din utilizatorii normali la TOATE scripturile bash(cele cu extensia .sh). Cred ca tot voi veti folosi calculatorul… deci va fi in binele vostru. Dupa ce ati facut asta, puteti lansa din consola conexiunea voastra cu urmatoarele comenzi:
pppd call umts
Si pentru a si vedea ce se intampla:
pppd call umts nodetach
Comanda aceasta va va ajuta mai mult, veti vedea in continuare de ce.
Urmariti ce va va afisa consola. La sfarsit va va arata 2 servere DNS. Deschideti VASM si deschideti meniul Network. Nu prea conteaza numele calculatorul, puteti pune vector…gheorghe… cum vreti voi. Ce este important  este sa adaugati serverul DNS afisat de consola voastra. Altfel degeaba aveti o conexiune activa, browserele si alte programe nu se vor putea folosi de ea. Dupa ce ati facut acest pas, aveti o conexiune care va functiona perfect…sper :D
Un ultim lucru, care mi s-a parut un mic inconvenient… pe care trebuie intotdeauna sa il faceti… eu am facut un script sh pentru a-mi usura munca:). De fiecare data cand vreti sa porniti conexiunea, trebuie intai sa dati urmatoarea comanda intr-un terminal(sau consola, cum vreti voi sa ii spuneti):
modprobe -usbserial vendor=0×0af0 product=0×6600
Daca nu o executati, modemul nu va fi detectat… si va veti uita pe pereti :)
Cel mai simplu ar fi sa faceti un script, sa ii spunem conexiune.sh, care va contine comanda aceasta si cea de conectare:

#!/bin/sh

modprobe usbserial vendor=0×0af0 product=0×6600
pppd call umts nodetach

Foarte simplu, nu-i asa?Il puteti modifica voi a.i. sa va salveze un log.
Intrebari, nelamuriri… le astept. Chiar si recomandari!

2 Responses to 'How-To’s'

Subscribe to comments with RSS or TrackBack to 'How-To’s'.

  1. potropopu vasile said, on ianuarie 15th, 2008 at 10:23 pm

    Am si eu un astfel de modem: OPTION GLOBESURFER I’CON, aici unde il folosesc pe un PC DESKTOP, nu am semnalul foarte bun. cei de la orange mi-au dat o antena exterioara cu cablu foarte scurt.
    Am nevoie de o antena exterioara mai inalta, sau de un conector de antena, la acest modem.
    printr-un cablu coaxial vreau sa conectez o antena exterioara mai inalta.
    Va rog sa ma ajutati sa gasesc un astfel de conector.
    Eu sunt o persoana cu handicap grav (nedeplasabil) locuiesc undeva la tara, si posibilitatile mele sunt foarte limitate, deaceea va rog sa ma ajutati cumva.
    Va multumesc anticipat.

  2. Daniel Voicu said, on ianuarie 15th, 2008 at 10:31 pm

    O sa ma interesez de un asemenea conector. Si eu am avut un modem de genul asta, il tot mutam. Am mai citit pe unele forumuri ca nu prea conteaza unde il pui, semnalul tot aiurea e. In orice caz, o sa ma interesez daca exista asa ceva, si cum poate fi obtinut. Tinem legatura! :)

Leave a Reply