If you have an Avaya telephone system, you probably have a web server to manage firmware. If not, it’s pretty easy to set up so let me know if I should post the procedures. What is not easy is testing firmware before deploying it to the whole network. What if you just want to update one particular phone? What if someone is complaining about something (e.g. continuous reboots) and you want to update their firmware to see if it fixes it? You could set up a development web server and statically assign the file server address to the phone. But then you have to statically assign all addresses on the phone or the DHCP server will overwrite the file server address. And this isn’t a permanent fix because the phone will forever have a statically assigned address. You could do tricky things in Apache using the IP address of the phone in the http.conf file or .htaccess, but there’s another way.
The trick is in the 96xxupgrade.txt file on your web server. As with most of these posts, we need to assume you have a web server and have access to the root html folder. Find the 96xxupgrade.txt, open it in any text editor and you should see something similar to this (if you’re using the sample file from Avaya):
############################################################ ## Check backup application version ## ############################################################ IF $MODEL4 SEQ 9610 goto BACKUPAPP96XX IF $MODEL4 SEQ 9620 goto BACKUPAPP9640 IF $MODEL4 SEQ 9630 goto BACKUPAPP96XX IF $MODEL4 SEQ 9640 goto BACKUPAPP9640 IF $MODEL4 SEQ 9650 goto BACKUPAPP96XX IF $MODEL4 SEQ 9670 goto BACKUPAPP9670 goto END
This is the stuff Avaya put in the sample file so individual types of phones can download different versions of firmware. Note how there’s a check against a “$MODEL4” variable? This allows the phone to jump to a new section after a very basic check. Unfortunately, there are only a few variables available. I’ve never been able to find a definitive list of all available variables, but we can make this work with the GROUP variable.
So let’s say you want to test version ha96xxua3_2_0_S.bin of the 9600 firmware on your 9630 phone at your own desk before deploying to the entire network. In the 96xxupgrade.txt file, go to the section for the 9630s (probably BACKUPAPP96XX if you have the default Avaya file)
Your file will probably have a section like this:
# BACKUPAPP96XX IF $BOOTNAME SEQ hb96xxua3_1_03_S.bin goto PHONEAPP96XX SET APPNAME hb96xxua3_1_03_S.bin goto GETSET
This just tells the phone to check its firmware version and if it’s already 3_1_03_S, then go to PHONEAPP96XX. If not, set its version to 3_1_03_S, which will cause the phone to download the new file, reboot, write it to flash, and reload the 96xxupgrade.txt file. Then when it gets to this line, it will have the version 3_1_03_S and jump to PHONEAPP96XX. Why is there a goto GETSET? Well, that’s there in case the phone cannot find the file. It will just jump to GETSET.
Within the PHONEAPP96XX section, my file says
# PHONEAPP96XX SET APPNAME ha96xxua1_1_03_S.bin goto GETSET
Maybe yours does too. This just sets the application file to the right name. Again, causing the phone to load the file, reboot, write to flash, and reboot again. Then when it gets to this section, it jumps to GETSET. When you download new firmware, the phone reboots four times as it works through all these files.
In GETSET, my file says
GET 46xxsettings.txt goto END
And this again is an Avaya default. I don’t have any 4600 series phones. I guess I should rename mine to 96xxsettings.txt. But it doesn’t matter. The settings file contains tons of options. Tons.
So back to my point. How do you load different firmware for a single phone? What you can do is perform a check against the phone’s GROUP variable. My 96xxupgrade file now has this line in the BACKUPAPP96XX section:
# BACKUPAPP96XX
IF $GROUP SEQ 30 goto BACKUPAPP30
IF $BOOTNAME SEQ hb96xxua3_1_03_S.bin goto PHONEAPP96XX
SET APPNAME hb96xxua3_1_03_S.bin
goto GETSET
When the phone gets to that line in red, it will check against its own internal GROUP variable and jump to BACKUPAPP30 if it matches. Now you can add the firmware version you want in that section by adding the following lines to the file:
# BACKUPAPP30 IF $BOOTNAME SEQ hb96xxua3_2_0_S.bin goto PHONEAPP30 SET APPNAME hb96xxua3_2_0_S.bin goto GETSET # PHONEAPP30 SET APPNAME ha96xxua3_2_0_S.bin goto GETSET
So the phone will jump to a new section of the file and load specific firmware based upon its GROUP variable. Note that you can also “goto GETSET30” for example if you wanted to load a different settings file for this phone. In my case, I just want to test version ha96xxua3_2_0_S of firmware.
So how to you set the phone’s GROUP variable? Two ways:
Method 1 – Page 3 of the station form within SAT of your Communication Manager:
display station 4799 Page 3 of 7
STATION
Conf/Trans on Primary Appearance? n
Bridged Appearance Origination Restriction? n
Call Appearance Display Format: disp-param-default
IP Phone Group ID: 30
Enhanced Callr-Info Display for 1-Line Phones? n
ENHANCED CALL FORWARDING
Forwarded Destination Active
Unconditional For Internal Calls To: n
External Calls To: n
Busy For Internal Calls To: n
External Calls To: n
No Reply For Internal Calls To: n
External Calls To: n
SAC/CF Override: n
This method will “follow the station” so if you log a new extension into the phone, the GROUP will follow the new extension and will likely change. Then when the phone reboots, it will load new firmware. If you log your extension into another phone and then reboot that phone, it will load new firmware.
Method 2 – The “GROUP” menu item on the config screen of the 9630 telephone (Usually accessed by pressing Mute-CRAFT-# on the 9630, or pressing *-CRAFT-# at boot-up).
This method will “follow the phone” so if you log a new extension into the phone, it will retain the phone’s setting. However, it gets over-ridden by the station’s group if there is one. Interaction gets complicated. I always use the station form.
And lastly, this is how we load SIP firmware in the 9630 using the same network and DHCP server we already have. We can check the value of the SIG variable, which is set in the CRAFT menu. But that’s a different post. For now, I hope this helps and I look forward to hearing from you.