Teste do OpenBTS
a. Configuração do telefone:
As configurações do telefone são cruciais para o teste do OpenBTS. Primeiramente precisamos ter certeza que a configuração de rede esta de acordo com a banda selecionada no arquivo OpenBTS.config.
Um SIM Card de operadora normalmente vêm com uma lista de operadoras preferenciais. Essa lista também é conhecida como PLMN (Public Land Mobile Network) que é composta pelo código do país e código da operadora (MCC-MNC).
Para garantir que o telefone começará procurando pela nossa rede, precisamos colocar o PLMN (MCC-MNC), configurado anteriormente no OpenBTS.config, como a primeira rede preferencial.
Quando um terminal é registrado na rede ele recebe o TMSI (Temporary Mobile Subscriber Identity). O TMSI é gerado aleatoriamente pelo VLR para cada terminal registrado na rede. É bom limpar o TMSI para fazer o primeiro registro no OpenBTS. Uma maneira de fazer isso é desligar o telefone e tirar a bateria.
b. Execute o OpenBTS:
cd ~/openbts-2.3/apps
$ ./OpenBTS
OpenBTS, Copyright 2008, 2009 Free Software Foundation, Inc.
Contributors:
Kestrel Signal Processing, Inc.:
David Burgess, Harvind Samra, Raffi Sevlian, Roshan Baliga
GNU Radio:
Johnathan Corgan
Incorporated GPL libraries and components:
libosip2, liportp2
This program comes with ABSOLUTELY NO WARRANTY.
This is free software;
you are welcome to redistribute it under the terms of GPLv3.
Use of this software may be subject to other legal restrictions,
including patent licsensing and radio spectrum licensing.
All users of this software are expected to comply with
applicable regulations.
1242936099.801724 3082733248:
Starting the system...
1242936100.8228 WARNING 3082733248 TRXManager.cpp:269: retrying transceiver command after response timeout
1242936101.0380 INFO 3052067728 RadioResource.cpp:366: Pager::pageAll paging 0 mobile(s)
1242936101.0382 INFO 3082733248 OpenBTS.cpp:199: system ready
1242936101.038262 3082733248:
Welcome to OpenBTS. Type "help" to see available commands.
OpenBTS>
c. Ligue o telefone
Deve ser mostrada uma saída como a abaixo na CLI (Command Line Interface) do OpenBTS no momento do registro do telefone:
1242936116.4806 INFO 3073633168 RadioResource.cpp:150: AccessGrantResponder RA=0x18 when=0:1778916 age=24
1242936116.4809 INFO 3073633168 RadioResource.cpp:191: AccessGrantResponder sending PageMode=(0) DedicatedModeOrTBF=(TMA=0 Downlink=0 DMOrTBF=0) ChannelDescription=(typeAndOffset=SDCCH/4-1 TN=0 TSC=0 ARFCN=10) RequestReference=(RA=24 T1'=29 T2=22 T3=36) TimingAdvance=0
1242936116.9887 INFO 3069905808 MobilityManagement.cpp:117: LocationUpdatingController MM Location Updating Request LAI=(MCC=724 MNC=31 LAC=0x3eee) MobileIdentity=(IMSI=724311320422052)
1242936116.9911 INFO 3069905808 MobilityManagement.cpp:170: LocationUpdatingController registration SUCCESS: IMSI=724311320422052
1242936133.4187 INFO 3073633168 RadioResource.cpp:150: AccessGrantResponder RA=0xe7 when=0:1782585 age=24
1242936133.4189 INFO 3073633168 RadioResource.cpp:191: AccessGrantResponder sending PageMode=(0) DedicatedModeOrTBF=(TMA=0 Downlink=0 DMOrTBF=0) ChannelDescription=(typeAndOffset=SDCCH/4-3 TN=0 TSC=0 ARFCN=10) RequestReference=(RA=231 T1'=0 T2=25 T3=33) TimingAdvance=0
1242936133.7486 INFO 3066710928 MobilityManagement.cpp:59: CMServiceResponder MM CM Service Request serviceType=MOC mobileIdentity=(TMSI=0x4a15b323)
d. Teste de chamada para o telefone celular (MT - Mobile Terminate):
Podemos usar um softphone SIP para fazer esse teste. Recomendo o Twinkle:
sudo apt-get install twinkle
Configure o Twinkle para se registrar no Asterisk e faça uma chamada para o telefone celular (número 2102 - que foi definido na configuração do Asterisk).
O telefone deve começar tocar. As mensagens na CLI do OpenBTS devem ser parecidas com essas:
1242936133.7487 INFO 3066710928 CallControl.cpp:556: MOC: MM CM Service Request serviceType=MOC mobileIdentity=(TMSI=0x4a15b323)
1242936134.2190 INFO 3066710928 CallControl.cpp:615: MOC: CC Setup TI=(0,0) CalledPartyBCDNumber=(type=unknown plan=E.164/ISDN digits=2101)
1242936134.2193 INFO 3066710928 CallControl.cpp:179: assignTCHF sending AssignmentCommand for 0xbff5e798 on 0xbff5e9b4
1242936134.9155 INFO 3057658768 RadioResource.cpp:276: AssignmentCompleteHandler service=MOC
1242936134.9156 INFO 3057658768 CallControl.cpp:697: MOC: transaction: ID=1804289383 TI=(0,0) IMSI=724311320422052 to=2101 Q.931State=MOC initiated SIPState=Starting
1242936134.9498 INFO 3057658768 CallControl.cpp:715: MOC A: wait for Ringing or OK
1242936135.1865 INFO 3057658768 CallControl.cpp:715: MOC A: wait for Ringing or OK
1242936135.1866 INFO 3057658768 CallControl.cpp:726: MOC A: SIP:Ringing, send Alerting and move on
1242936135.4046 INFO 3057658768 CallControl.cpp:756: MOC: wait for SIP OKAY
1242936136.7268 INFO 3057658768 CallControl.cpp:793: MOC: sending Connect to handset
1242936136.9539 INFO 3057658768 CallControl.cpp:538: MOC MTC connected, entering callManagementLoop
Atenda a chamada no telefone celular e inicie a conversação.
e. Teste de chamada do telefone celular (MO - Mobile Originate):
Chame o softphone (número 2101 - definido nas configurações do Asterisk) a partir do telefone celular.
O softphone deve começar a tocar:
1242936158.0970 INFO 3063249808 RadioResource.cpp:330: Pager::removeID IMSI=724311320422052
1242936158.0970 INFO 3063249808 RadioResource.cpp:237: PagingResponseHandler service=MTC
1242936158.0970 INFO 3063249808 CallControl.cpp:823: MTC on FACCH transaction: ID=1804289386 TI=(1,0) IMSI=724311320422052 from=2101 Q.931State=MTC paging SIPState=Null
1242936158.0970 INFO 3063249808 CallControl.cpp:845: MTC: sending GSM Setup to call type=national plan=E.164/ISDN digits=2101
1242936158.2269 INFO 3052067728 RadioResource.cpp:366: Pager::pageAll paging 0 mobile(s)
1242936158.7152 INFO 3063249808 CallControl.cpp:906: MTC:: waiting for GSM Alerting and Connect
1242936165.5375 INFO 3063249808 CallControl.cpp:921: MTC:: allocating port and sending SIP OKAY
1242936165.5728 INFO 3063249808 CallControl.cpp:538: MOC MTC connected, entering callManagementLoop
Atenda a chamada e inicie a conversação;
Você pode verificar as opções de comandos da CLI do OpenBTS digitando "help" no prompt:
OpenBTS>
help
assignment [type] -- get/set assignment type (early, veryearly)
calls -- print the transaction table
exit -- exit the application.
help -- list available commands or gets help on a specific command.
lai [MCC] [MNC] [hex-LAC] -- get/set location area identity (MCC, MNC, LAC)
load -- print the current activity loads.
loglevel [level] -- get/set the logging level, one of {ERROR, ALARM, WARN, NOICE, INFO, DEBUG, DEEPDEBUG}.
sendsms <IMSI> -- send SMS to <IMSI>, addressed from , after prompting.
setlogfile <path> -- set the logging file to <path>.
tmsis ["clear"] -- print/clear the TMSI table.
uptime -- show BTS uptime and BTS frame number.
Segue abaixo um screenshot mostrando o OpenBTS, Asterisk e Twinkle numa chamada MO:
Conclusão
Trazer o stack (pilha) do GSM para um hardware de baixo custo não é uma tarefa fácil. O OpenBTS está dando esse poder para nós, e como um projeto de código aberto, pode ser usado como um excelente ponto de partida para aprender como o sistema GSM funciona.
Referências: