Category Archives: Computers

Configuring the OBiHai OBi110 to replace a linksys spa-3102 as a google voice and pstn gateway using asterisk 1.4

If you were looking for how to configure the SPA-3102 with Asterisk 1.4 click here.

All the rage in the VOIP world is the Obihai obi110 voice gateway device, and while due largely to its native integration of google voice, I believe it’s because it does quite a bit for a very reasonable cost (Under $50 from here!). And while just good news for asterisk 1.8 users, this is great news for asterisk 1.4 and 1.6 users! The Obi110 is essentially a user friendly linksys spa-3102 with a slightly watered down interface, with the addition of native google voice support (and setup wizards!). It is somewhat less capable in functionality (no router feature, or independent trunking capabilities with asterisk, etc.) but for my purposes, I decided to give it a try to see if I could replace my spa-3102 and found out that it could quite easily.

The obi110

I have a simple asterisk 1.4 based setup with several extensions located around the world. The main goal is for my family to connect to my system using their iphones, computers, voip devices and make calls to the US and also to receive calls with local DID numbers to their extensions. My previous setup with the linksys spa-3102 allowed them to use my ooma device to call out as an outgoing trunk, however I wanted to see if I could add two trunks to my setup and give my users the flexibility of outgoing call redundancy if they so desired (choose to call out through GV or my Ooma).

Below is my guide for setting this up.

Pre-requisites:
-Network connectivity to the obi110 and ability to administer its local web admin page and setup through obitalk.com.
-Physically connected pstn service (ooma, telco) to the obi110 local Line port (Note: if line port is disconnected, the obi110 will report the lines as busy even if just calling out through GV when the SP2 local dialplan shown below is specified).
-Newest version of firmware on the obi110 (as of 03/21/11 version 1.1.0 (Build: 1892))

Configuration:
I found that it is much simpler to initially set up the obi110 through the obitalk.com portal and then to disable auto-provisioning and make customized changes to the web admin afterwards.

Google Voice Trunk setup – obitalk.com portal
1. Goto obi110 device portal after you have successfully registered your hardware to your user account on obitalk.com
2. Configure Voice services for Service Provider 1 and select Google voice
3. Enter in your google voice email and password.
4. Make sure to put a checkmark to make this provider the default Line to call out.
5. Click submit and wait for your ob110 to reboot

Asterisk Trunk setup – obitalk.com portal
1. While still logged into the Obitalk portal, configure the Voice service for Service Provider 2 as a generic service provider (this will essentially act as an extension to asterisk)
2. Enter in your asterisk server information
3. Click submit and wait for the obi110 to reboot.

Asterisk Service provider 2 Trunk

Configure Dialplan on Obi110 device and disable Auto Provisioning
Thats all there is to setting up obi110 trunks! Couldnt be easier right? Now for the small dialplan customizations to make the incoming and outgoing calls route properly.

1. Log into your obi110 device through its web admin (enter in the devices IP address in a web browser. default user/pass is admin/admin)
2. Disable Auto-Provisioning by expanding the System Management Tree on the left pane, then clicking on the Auto Provisioning link and set the Auto Provisioning Method to Disabled. Click submit and reboot (if not disabled, your changes will get overwritten).
3. Expand the Voice Services Tree to the left and click on the SP1 Service link
4. Under X_InboundCallRoute enter in SP2 and click on submit (this routes all calls coming in from GV to your asterisk extension).

Service Provider 1 Local Dialplan

5. Under the Voice Services Tree to the left, click on the SP2 Service link
6. Under X_InboundCallRoute enter in {>(xxx xxx xxxx):sp1},{>(1xxx xxx xxxx):li1}  and click on submit

Service Provider 2 Local Dialplan

The above line in Step 6 routes any 10 digit calls out through GV (configured as SP1), and any 11 digit calls starting with 1 out through the local line port…In my case, through my ooma device). The reason you will need to do this is because unlike the spa-3102, there is no seperate interfacing for asterisk to trunk to the different Service providers which the obi110 can be configured. Instead, asterisk needs to send the dialed number in a way where the obi110 can then determine to which interface it will send its calls. In this case, I will have asterisk format the numbers to be only 10 digits if a user wants to call out through GV, and append a 1 to the 10 digit number if the user wants to call out through my ooma. Once asterisk does this and sends the number to the obi110, the obi110 will then direct the call accordingly depending on if there is a 1 in front of the number – a little hurdle, but easy enough to work around.

Double checking your Asterisk configuration settings
1. Under the Service Providers Tree to the left, click on the ITSP Profile B link
2. Make sure the settings are correct for the SIP and RTP sections. Most likely you will have to modify your RTP LocalPortMin and LocalPortMax settings to match your current asterisk RTP port range.

Thats all there is to configuring your local OBi110 device. The next steps are just to configure asterisk with the user you specified in the obitalk.com service provider 2 settings, and to create a dialplan which handles the numbers so that obi110 can route the calls appropriately.

Below is my user configuration for asterisk 1.4 so that the Obi110 can register to it. ‘gvtrunk’ is my username and ‘password’ is the password which I specified in my Service Provider 2 setup on the obitalk.com portal. Place this in your sip.conf or users.conf file.

[gvtrunk]
username = gvtrunk
fromuser = gvtrunk
secret = password
type = friend
disallow = all
allow = ulaw
allow = alaw
allow = gsm
context = gv-in
host = dynamic

Next we have to edit our extensions.conf file and to tell asterisk what to do with our calls. Below, any call the user makes whether be it 1XXX-XXX-XXXX or XXX-XXX-XXXX will be routed out to the obi110 and then through google voice. This is because I have asterisk removing the 1 digit the user has dialed so that the obi110 dialplan will route the 10 digit number to GV.

In this dialplan I also have any number with a 9 dialed before it sent out to the obi110 as a 1XXX-XXX-XXXX number. If the user has dialed a 9XXX-XXX-XXXX number without the 1, asterisk will append the 1 in front of the number to make it an 11 digit number so that the obi110 can route the call through the local line port (and out through my ooma).

_XXXX is needed because my internal extension numbers are 4 digits long. I need this so that any numbers longer than 4 digits go out appropriately and are not seen as internal extensions.

[ob110-out]
;make outgoing calls to gvtrunk with 10 digit dialing
exten => _XXXX.,1,Dial(SIP/${EXTEN}@gvtrunk,20)
exten => _XXXX.,n,Hangup()
exten => _XXXX.,n,Congestion
;make outgoing calls to gvtrunk with 11 digit dialing
exten => _1XXXX.,1,Dial(SIP/${EXTEN:1}@gvtrunk,20)
exten => _1XXXX.,n,Hangup()
exten => _1XXXX.,n,Congestion
;make outgoing calls to gvtrunk through ooma with 10 digit dialing
exten => _9XXXX.,1,Set(CHEXTEN=${EXTEN:1})
exten => _9XXXX.,n,Dial(SIP/1${CHEXTEN}@gvtrunk,20)
exten => _9XXXX.,n,Hangup()
exten => _9XXXX.,n,Congestion
;make outgoing calls to gvtrunk through ooma with 11 digit dialing
exten => _91XXXX.,1,Dial(SIP/${EXTEN:1}@gvtrunk,20)
exten => _91XXXX.,n,Hangup()
exten => _91XXXX.,n,Congestion

How to handle inbound calls from GV with Asterisk
The last thing we need to do is tell asterisk how to handle inbound calls from Google Voice. In my user setup above, I specified gv-in as the user context. This just tells asterisk where to go and how to handle the incoming calls from the obi110 device. Place this in your extensions.conf file and modify it accordingly.

[gv-in]
exten = s,1,answer
exten = s,n,wait(1)
exten = s,n,Dial(SIP/4000,20)
exten = s,n,wait(1)
exten = s,n,Voicemail(4000,u)
exten = s,n,Hangup

Above, I have all calls from GV calling my extension 4000. Just change it to your desired extension.

Thats all there is to it. It may look complicated, but the dirty work is done for you…Enjoy!

How to load SIP or SCCP on a Cisco 7940 7960 7941 7961 Ip Phone or fix a protocol application invalid message

Getting Cisco phones working with asterisk may seem like a daunting procedure; getting SIP firmware installed on the phone, loading up the the firmware files in the tftp server, fearing that you will somehow brick the phone by an incomplete firmware upload…But I am here to reassure you that once you understand how Cisco phones update themselves, the fear and trepidation will subside.

Cisco 79xx IP Phone

In fact, Cisco phones are simple. They just need a tftp server to update its firmware and it doesnt even have to be located on the asterisk/phone system itself. 7940/60 Cisco phones update in two stages. The bootloader, then the application. Once the bootloader is upgraded, all passwords and networking information on the phone will be wiped out. But what is essential in upgrading these phones is a DHCP server with option 150 enabled – an option to auto-provision the tftp server ip address when the DHCP server hands out the regular ip address to the phone.
Without an auto-provisioned tftp server address, the phone will only complete half the upgrade and come up with an error message of “protocol application invalid.” This just means that the phone could not complete the second half of the upgrade and needs the tftp ip address to be specified. Only problem is since there is no application running, there is no place to specify the address! Thank goodness for DHCP option 150 which does this for us when the phone grabs an IP address after loading the bootloader.

Below are instructions to upgrade/convert any Cisco 7940, 7941, 7960, 7961, 7970, 7971, 7942, 7962, 7945, 7965 IP phone to any firmware you want from the Cisco web site (SIP/SCCP), and to recover any cisco phone which may have screwed up somehow while upgrading firmware (like if you get the protocol application invalid message).

Step 1: Download Cisco phone firmware
Cisco may require you to have a smartnet contract before you download the firmware, but if you do not have one, there are firmware files available on the internet. Ive provided two sources below.

a. Goto http://www.cisco.com/ and create a login if you do not already have one. Download the firmware for the specific phone you are using. (if cisco doesnt allow you to download the firmware, check here: ftp://ftp.itl.ua/pub/cisco/ip-7900ser/ or http://radiotwenterand.nl/~graver/cisco/SIP-7960/ for phone firmware).

b. Download the .zip file and extract it to a directory. If you are downloading an older version of the SIP/SCCP firmware and it only comes in a .cop file extension. Just rename the extension to .tar.gz and extract it to a directory using winzip or winrar.

Extracted files in a folder

You will have several files in this directory. If you just have one, you must remember to extract all the files.

Step 2: Download and configure the DHCP/TFTP server
We are going to use a windows based machine and load tftp/dhcp software on it which will make our windows machine a server for our phones.

a. Go here to download the tftp/dhcp server – http://tftpd32.jounin.net/
Download and install version 3.23 (<–YOU MUST DOWNLOAD AND INSTALL THIS VERSION. I have had many people complaining about their phones not obtaining a correct ip address and also the files not being sent correctly. Every one of these problems was due to using the incorrect version and/or having their firewall on).

b. You will also have to configure your windows machine to use ip address of 192.168.1.1 and subnet mask of 255.255.255.0.
Youll configure this tftp server to host the upgrade files via tftp server (theres an option to configure the working directory in the program to use for the stored firmware files on the windows machine – this must be set correctly!).

c. Under DHCP server within the tftp32 program, enter the following and click SAVE:

-IP pool starting address as 192.168.1.2
-Size of pool as 250 (if doing multiple phones, this just makes sure your phones are able to receive an ip address)
-Default router as 192.168.1.1
-Mask as 255.255.255.0
-Additional option, enter 150 in the first box, then 0x0101A8C0  in the second box (this number is 192.168.1.1  in Hexadecimal).

TFTP example

3. Putting it all together

a. Now, there are a few things to consider when upgrading 7940/7960 cisco phones (these steps below dont apply to the 79×1/79×2/79×5 java based phones, if you have one of these, just do steps d. and e.). But the rule of thumb, is that if you have SCCP on your phone youll need to use a XMLDefault.cnf.xml file to specify the firmware load information tag by which the phone can know what load it should install. For the rest of this guide I will just assume you want to convert SCCP to SIP.

b. The easiest way to get SIP on your phone is to install a universal application bootloader. Ive found that SCCP version 8.0.9 (P00308000900) has the most compatible loader which easily allows swapping between current SIP and SCCP loads without a hitch. So the best thing to do is to upgrade your SCCP phone with a newer SCCP load before switching over to SIP. If you have a very old version of SCCP, you will find that you cannot immediately upgrade to this version. If that is the case, just load version 3 (P00303010102), then load to version 5 (P00305000500), then jump to version 8.0.9 (P00308000900). To do this you have to download those firmware versions and just extract them all into one directory.

c. Now download and place this file into your firmware directory. XMLDefault.cnf.xml (right click on link…’save target as’ – this file contains the text below)

<Default>
<callManagerGroup>
<members>
<member priority=”0″>
<callManager>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
<mgcpPorts>
<listen>2427</listen>
<keepAlive>2428</keepAlive>
</mgcpPorts>
</ports>
<processNodeName></processNodeName>
</callManager>
</member>
</members>
</callManagerGroup>
<loadInformation>SCCP40.8-3-1S</loadInformation>
<authenticationURL></authenticationURL>
<directoryURL></directoryURL>
<idleURL></idleURL>
<informationURL></informationURL>
<messagesURL></messagesURL>
<servicesURL></servicesURL>
</Default>

After you have downloaded the file, edit the loadInformation tag within the XMLDefault.cnf.xml file with the firmware you want to install on your phone. Do not add the file name extension, just the name of the file (ig. <loadInformation>P00308000500</loadInformation>). Save and proceed to the next step.

d. Next plug in the phone by crossover cable or ethernet switch to the computer you are running this server from (make sure you disconnect any device attached to the network which resolves an ip through dhcp, as this will conflict with any other dhcp server on the network).

e. Power Cycle the phone and clear the configuration by holding down the # key and then plugging in the phone. After all the lights cycle on the phone, release the # key and press 123456789*0# followed with the 2 key (if you are using a 79×1, 79×2, 79×5, 7970 phone, plug the phone in and hold the # key till the extension lights blink amber…then press 3491672850*#. The lights will turn red, but if they dont, repeat this step. The phone will then wipe the flash and load whatever firmware is specified in the tftpd32 directory – if the phone just keeps downloading the term.defaults file constantly, just do an incremental upgrade to the firmware version that you want).

This will clear all settings on the phone and set it to defaults. Upon reboot, the phone will grab an ip address from the dhcp server on the windows machine running the dhcp server. Tftpd32 will also assign an ip address for the tftp server to the phone using option 150, and the phone should start pulling down files from the server after it obtains an ip address.

f. If you are doing an incremental upgrade to get to version 8.0.9, just keep editing the XMLDefault.cnf.xml file with the next version of firmware and save, then reboot the phone (after it has completed loading both the bootloader and application). The phone should find that it needs to upgrade itself until you stop editing the file with new firmware information.

g. After the phone gets to SCCP version 8.0.9, all you have to do is just download the version of SIP firmware you want, and then extract it into a seperate directory. Point the tftpd32 program to use that directory, copy the XMLDefault.cnf.xml file to that directory and edit the loadInformation tag with the POS-xxx filename which is located in that directory and  reboot the phone. The phone will automatically switch over to loading the SIP firmware.

You can check the events viewer within tftpd32 to ensure that the phone is grabbing the necessary files and getting an ip address. The 79×1/79×2/79×5/7970 phones take a bit longer to fully complete the flashing process since they use more numerous and larger files than the 7940/60 series phones. If the phones just sit like they arent doing anything, wait a bit longer and they should come back up. Its not uncommon for one phone to take up to 4-5 minutes to complete the entire process.

Thats all there is to it, and now that the phone has a good universal application bootloader, you will have no trouble switching between SCCP and SIP by just pointing the phone to the appropriate directory.

If you have any questions, feel free to send me a message on my contact page, if you get really stuck I can also provide these services remotely.