Cisco 7941, Asterisk and SIP

Edit: I heard that Cisco have now removed the SIP firmware from their site.  Someone seems to have hosted the files here:

Edit 2: Looks like the tinyupload file has gone missing too.  Try this one:

I got a Cisco 7941 off eBay.  This is a phone which was £400 when new (some time around 2004) but can now be picked up for about £10.  These phones went End Of Sale in January 2010, so even if mine was one of the last phones to roll off the production line it’s still about 7 years old but it’s still working perfectly.  A testament to the good build quality of these phones, and perhaps the previous owner’s careful handling.

Since these devices are no longer supported many companies will be getting rid of them (or probably already have) so there should be some bargains to be had for phone geeks.

Q: Does the Cisco 7941 work with Asterisk?
A: Yes.  You need to load the SIP firmware (the focus of this post) or chan-sccp (out of scope for this post but I’ll check it out at some point).

Q: Does the Cisco 7941 work with SIP?
A: Yes.  You need to flash the correct firmware though.

Q: Is it really hard to get working?
A: No.  If you’re comfortable with Linux and a few command line tools.  And assuming you already have Asterisk set up.

Q: Is a lot of the information on the web about how to set up the 7941 wrong?
A: Yes.  There is a lot of confusion about config files (the 7940 and 7941 use different ones).

Q: Will you tell us how you got your phone to work?
A: Yes!  However – this is what works for me.  You will need to tweak the config in places.

The steps to getting this phone working as a SIP extension on Asterisk on Ubuntu / Raspberry Pi:

  1. Set up a TFTP server
  2. Download the SIP firmware from Cisco
  3. Flash the phone with the firmware via the TFTP server
  4. Configure the SIP extension in Asterisk
  5. Write the config files for the phone and upload them via the TFTP server
  6. Make a call!
  7. Optional Extras
    1. Dial plan
    2. Ring tones
    3. Dial tones
    4. Wallpaper
    5. Telephone Directory
  8. Final Tip

Set up a TFTP Server

The phone will download it’s firmware and config via TFTP.  It needs to download it’s config on every boot, so you will always need a TFTP server running.  I think that if the TFTP server is unavailable it will just use the previous config, so it’s possible that you can get away without it, but I haven’t tried.  My recommendation is that you install dnsmasq.  It’s a small and full featured DNS server which also includes a DHCP & TFTP server which are easy to configure and it’s almost certainly packaged for your distro.  You should also (temporarily) disable any other DHCP servers on your local network so that dnsmasq is the only thing offering DHCP addresses.  This will simplify the process of getting the phone to find the TFTP server, since with dnsmasq it will all be automatic.  If you later re-enable your original DHCP server, say on your router, then you will need to configure it to give out the address of the dnsmasq TFTP server and disable DHCP on dnsmasq.  In my opinion, if you’re going to be running a Cisco IP phone on your network you’d be better off moving all DHCP to dnsmasq.

The full configuration of dnsmasq it’s out of scope for this doc, but in a nutshell you need these in your dnsmasq config:

  • Set up a DHCP range
  • Enable the TFTP server
  • Set the TFTP path
tftp-root=/home/<your user>/tftp  (or whatever works for you)

Download the SIP Firmware from Cisco

Usually Cisco require a valid support contract before you can download anything useful from their website, but it seems that since these phones are now out of support they have offered up the firmware free of charge.  You do still need to register an account to download the files.  At the time of writing the latest version is 9.4.2 SR 3 dated 14th February 2017 – so bang up to date, even though these phones are end-of-life.  Bizarre, but good for us.  Thanks Cisco!

Go here:

Follow the link to the SIP software.

You want to download the “SIP firmware files only”

Unzip that file into the root of your TFTP server (the location you set in the previous step).  You should have 8 files in there:


This is everything you need to reflash your phone to the latest SIP firmware.  Now you need to get the phone to reboot in to firmware download mode.

Flash the phone with the firmware via the TFTP server

  1. Unplug the phone from the power.  Make sure that the network cable is still connected (unless you’re using using PoE).
  2. Plug the power back in and hold down the # key
  3. Eventually you will see the “line” lights start to flash orange.  It might take a couple of minutes to get to this stage, don’t give up, just keep holding down #
  4. When the line lights are flashing type 123456789*0#  This will start firmware download mode.
  5. The screen will go black for a moment and then go through the process of getting an IP address and connecting to the TFTP server
  6. Once connected to the TFTP server the software download will start
  7. The phone will reboot once download is complete and present you with an “Unprovisioned” message on the screen.  This is good news!  The phone firmware has now been updated.

I put together a video showing this process.  It’s not very interesting but it will give you an idea of what to expect.  The actual downloading of the firmware section has been sped up 3X.

Configure the SIP extension in Asterisk

Now you need to configure the SIP extension in Asterisk.  Do this as per any other SIP extension, but bear this important piece of information in mind:  The Cisco 7941 can only deal with 8 character passwords, so keep your SIP authentication secret to 8 characters.

While you’re in Asterisk configuration mode, take a moment to note down these bits of information as well (in Advanced SIP settings in FreePBX):

  • RTP Port range, start and end.
  • Bind Port (probably 5060)

Write the config files for the phone and upload them via the TFTP server

Please take the time to read this section fully,  this is the part that is most troublesome.  The Cisco 7941 is very picky about it’s config file and even a small mistake will stop the phone from working.  These settings are specific to the 79×1 series of phones running at least version 8.x of the firmware.  If your phone is not a 79×1 and/or is not running v9.x.x of the firmware then these settings are not for you.

Once the phone has loaded it’s firmware and booted, it will go looking for a file called SEP<PHONE MAC ADDRESS>.cnf.xml.  So if the MAC address of your phone is 11:22:33:44:55:66 then the config file needs to be named SEP112233445566.cnf.xml.  This file needs to be in the root of your TFTP server.

You will see mention of a file called XMLDefault.cnf.xml.  If you’ve only got a few phones, don’t worry about this, you don’t need it.

So here is a config file which is about as minimal as I can make it:


            <timeZone>GMT Standard/Daylight Time</timeZone>
                    <name>#IP ADDRESS OF AN NTP SERVER#</name>

                <member priority="0">
                            <sipPort>#SIP PORT NUMBER FROM YOUR ASTERISK SERVER#</sipPort>
                        <processNodeName>#IP ADDRESS OF YOUR ASTERISK SERVER#</processNodeName>



        <phoneLabel>#PHONE NAME#</phoneLabel>
        <startMediaPort>#RTP START PORT#</startMediaPort>
        <stopMediaPort>#RTP END PORT#</stopMediaPort>

            <line button="1">
                <featureLabel>#EXT NUM#</featureLabel>
                <port>#SIP PORT#</port>
                <name>#EXT NUM#</name>
                <displayName>#EXT NAME#</displayName>
                <authName>#SIP AUTH NAME#</authName>
                <authPassword>#8 CHAR PASSWORD#</authPassword>
                <messagesNumber>#VM NUM#</messagesNumber>
                <contact>#EXT NUM#</contact>

            <line button="2">
                <featureLabel>#EXT NUM#</featureLabel>
                <port>#SIP PORT#</port>
                <name>#EXT NUM#</name>
                <displayName>#EXT NUM#</displayName>
                <authName>#SIP AUTH NAME#</authName>
                <authPassword>#8 CHAR PASSWORD#</authPassword>
                <messagesNumber>#VM NUM#</messagesNumber>
                <contact>#EXT NUM#</contact>

        <voipControlPort>#SIP PORT#</voipControlPort>





Copy and paste this into a text editor and search and replace the following:

  • #IP ADDRESS OF AN NTP SERVER#  –  with  –  the IP address of an NTP server
  • #SIP PORT FROM YOUR ASTERISK SERVER#  –  with  –  the SIP port of your asterisk server is listening on.  Probably 5060
  • #IP ADDRESS OF YOUR ASTERISK SERVER#  –  with  –  the IP address of your Asterisk server
  • #PHONE NAME#  –  with  –  the text you want to appear at the top right of the phone screen
  • #RTP START PORT#  –  with  –  the RTP port range start from the previous stage
  • #RTP END PORT#’  –  with  –  the RTP port range end from the the previous stage
  • #EXT NUM#  –  with  –  the Asterisk extension number as configured in the previous stage
  • #SIP PORT#  –  with  –  the SIP port of your Asterisk server.  Probably 5060
  • #EXT NAME#  –  with  –  the name you want to give this extension
  • #SIP AUTH NAME#  –  with  –  the username for the SIP extension as configured in Asterisk
  • #8 CHAR PASSWORD#  –  with  –  the password for the SIP extension as configured in Asterisk
  • #VM NUM#  –  with  –  the number you dial for Voicemail.  Probably *98

Note that this config file has two lines configured.  If you just blindly search and replace you’ll end up with two extensions configured the same.

Some comments on what some of the XML tags do:

  • ipAddressMode – 0 is IP v4 only. But this seems to have little effect.
  • registerWithProxy – true – Registers the device with Asterisk, this allows incoming calls to be sent to the phone.  If you’re getting “Unregistered” message on the screen, check you have this set.
  • featureId – 9 is SIP
  • autoAnswerEnabled – 2 – 2 seems to be “off”
  • webAccess – 0 – 0 is on (?!)
  • sshAccess -0 – ditto
  • versionStamp – bump this up every time you make a change.  Something like YYYMMDD001..2..3 etc
  • networkLocale – United_Kingdom – sets the tones to UK, see the optional extras section for more info.
  • transportLayerProtocol – 2 is UDP, 1 is TCP
  • dialToneSettings – 2 is “always use internal dialtone”.  See option extras for more info.

Edit this file as necessary and then save it to the root of your TFTP server with the filename: SEP<MAC>.cnf.xml.  If your phone MAC address was aa:bb:33:44:55:66 then the filename would be: SEPAABB33445566.cnf.xml  Note that it’s case sensitive, letters in the MAC address should be in upper case the extensions should be in lowercase.  You can get the MAC address for the phone from the syslog on your dnsmasq server.

If your phone is still in “Unprovisioned” mode it will have been asking for this config file repeatedly.  Once you save the file you should see the phone reboot shortly afterwards.  It may download the firmware again for some reason, just leave it to get on with it.

Make a call!

If everything has worked you should see your extension listed on the right hand side of the screen near the buttons, and the name of the phone should appear at the top of the screen.  If the icon next to the line buttons is that of a phone without an x through it, then you’re probably good to go!  Press the line button and see if you get a dial tone.  If not, then check the phone logs:

  • Press Settings
  • Press 6
  • Press 1

From these logs you should be able to tell if the phone has loaded your config correctly.  Errors about “updating locale” or “no trust list installed” can be ignored.  If there is a problem with the config file itself a generic error will be listed here.  If the phone won’t load the config file the most likely reason is that there is a typo in your XML file.  Good luck finding it.  You can SSH in to the phone to get more detailed logs and debugging information, but I haven’t tried this yet.  Google is your friend.

Optional Extras

Dial plan

The dial plan tells the phone how to process the digits you type and when to start sending the call.  Without a dial plan the phone simply waits a period of time for you to stop typing numbers before it decides you’re done and starts the call.  By using a dial plan you can reduce the amount of time spent waiting after you’ve finished keying in the number.  Here’s an example plan I’ve edited based on this post on Phil Lavin’s blog (Thanks Phil!)

    <TEMPLATE MATCH="999" Timeout="0"/> <!-- Emergency -->
    <TEMPLATE MATCH="112" Timeout="0"/> <!-- Emergency -->
    <TEMPLATE MATCH="0500......" Timeout="0"/> <!-- Apparently 0500 is always 10 digits -->
    <TEMPLATE MATCH="0800......" Timeout="0"/> <!-- Apparently 0800 is always 10 digits -->
    <TEMPLATE MATCH="00*" Timeout="5"/> <!-- International, 00 prefixed. No fixed length -->
    <TEMPLATE MATCH="0.........." Timeout="0"/> <!-- UK 11 digit, 0 prefixed -->
    <TEMPLATE MATCH="26...." Timeout="0"/> <!-- My local STD numbers start 26 -->
    <TEMPLATE MATCH="\*.." Timeout="0"/> <!-- Asterisk *.. codes -->
    <TEMPLATE MATCH="\*98...." Timeout="0"/> <!-- Asterisk direct VM access *981234-->
    <TEMPLATE MATCH="1..." Timeout="0"/> <!-- Internal numbers -->
    <TEMPLATE MATCH="2..." Timeout="0"/>  <!-- Internal numbers -->
    <TEMPLATE MATCH="*" Timeout="5"/> <!-- Anything else -->

Save this to the root of your TFTP server, named “dialplan.xml” (lowercase).

Ring tones

Everyone likes novelty ringtones.  You can find plenty of ringtones in a format which is compatible with your phone (raw format, 8000 Hz sample rate, 8 bit, ulaw, max 2 seconds).  These files need to be placed in to the root of your TFTP server.  I tried putting them in a sub-directory but it didn’t work.  Then you need to create a file called “ringlist.xml” also in the root of the server.  The format of this file is:

        <DisplayName>#DISPLAY TEXT#</DisplayName>
        <DisplayName>#DISPLAY TEXT#</DisplayName>

Filenames are case sensitive.  Once you’ve save this file, copy it to “distinctiveringlist.xml” as well.  This will allow you to set ring tones for the default ringer and different rings for each line.

Dial tones

By default the 7941 will have a psuedo North American dial tone.  This is annoyingly shrill (yes, it is).  By specifying a NetworkLocale in the phone config we can get it to load a different set of informational tones from a file stored in (per the example XML above) United_Kingdom.  In the root of the TFTP server create a directory called United_Kingdom.  In this directory you need to create a file called g3-tones.xml.  Bizarrely Cisco require you to have a support contract in order to download the correct tones settings for your country, despite giving the phone firmware away for free.  Go figure.  So this means I’m not going to paste the XML here.  If you search hard enough you’ll find an example g3-tones.xml file you can use as a base.  In our phone configuration above we told the phone to always use the internal dialing tone, so this means we only need to change the idial section of the tones file.  The magic numbers are:

  • 31538
  • -780
  • 30831
  • -973


The phone comes with a single default wallpaper with horizontal lines on it.  This is easily replaced by your own designs with a simple PNG.   Create a directory in the root of the TFTP server called Desktops.  In here create another directory called 320x196x4.

In to this directory you need to place a “List.xml” file:

    <ImageItem Image="TFTP:Desktops/320x196x4/ubuntu-tn.png"

The “-tn” in the file is a smaller thumbnail version of the larger image.  The PNGs need to be sized exactly 320×196 for the large and 80×49 for the thumbnail.  Here’s something to get you started:

Telephone Directory

You will have noticed that the phone has a “Directories” button and a “Services” button.  I haven’t managed to add an extra phone book to the Directories button yet although I think it’s certainly possible, just that the XML file refuses to do anything.  However, I have got a phone directory working on the Services button.

In the main phone config file there is a tag for “servicesURL”.  Point this to a web server on your local network which will serve up an XML file.  For example:


Assuming you are using Apache 2 to serve that XML file (or it could equally be a CGI script which generates the XML dynamically from a database such as the FreePBX phone book) the format looks like this:

   <Title>Whizzy Towers</Title>
       <Name>Speaking Clock</Name>

Important note:  You must tell Apache to serve those files as type “text/xml“.  “application/xml” will not work.

You can do this via your CGI script, or if you want to serve a static file add something like this to your Apache config:

 <Location /phone/>
     ForceType text/xml

Inside your VirtualHost section.

Final Tip

Watch /var/log/syslog on the machine running the TFTP server.  You’ll be able to see exactly what files the phone is asking for.  Bear in mind that it does ask for files it doesn’t strictly need, so don’t worry too much about file not found errors unless it’s one of the above.

Here’s a final video showing the boot up for a fully configured phone

Comments have moved to Github Discussions. Feel free to add your thoughts there.



    Hey, wondering if you can help me, also have a 7941 and am trying to hook it up to asterisk which I have done in the past but has been in storage for a while due to server issues and now I find that latest asterisk (PIAF) seems to be well, crap for using with the 7941

    Are you using SIP or PJSIP, not sure what difference is but my LG SIP phone wont work on SIP as port is different (5061) PJSIP uses 5060 and works… somewhat on the LG, by that I mean incoming is great outgoing is silent for a random amount of time then it works great.

    so hence digging up the cisco (looks nicer imo too) but my current problem is no matter if I make an extension PJSIP or SIP it still gets stuck at registering on the phone.

    not sure if the ports are taking affect in config as in the menus on the deivce the proxy port is blank so I bet its trying to use 5060 when it should be using 5061

    would you mind sharing you asterisk extension configs as I swear down that my XML files are right tried so many even the one I had working on a test server with this very phone about 5 months ago and I belive I used SIP on 5061 with that server so pretty sure a recent PIAF update has changed some asterisk extension thing

    also if I have sip debug on I see no attempt by mr cisco to connect, not even an auth fail, its like the phone just dont care, both server and phone on same subnet on same switch port as the working LG phone so cant be network related

      Will Cooke

      Hi Adan!

      I read somewhere that the 7941 always tries to connect to the highest numbered SIP port regardless of what you tell it. So my guess (and it is only a guess) is that it’s trying to connect using encryption when there is none. Hence why you’re not seeing any attempts to connect, because the encryption handshake is failing.

      I’m using the plain SIP module. Here’s some config extracts which might give you a clue:

      From sip_additional.conf for the 7941 extension:

      callerid=Study <1005>

      Let me know if that helps.

        Ashok kumar

        Hi Will

        Good day

        I followed the same process like above and i am success in updating the firmware and now i am able to make calls to national and international numbers but i am facing an issue when i am trying to reach operator toll free numbers i am getting an error as reorder i guess the issue is with codec and i even tried below codec but nothing didnt work out can you please suggest me the solution for this



    Hey Will, thank you so much for this article. I am working now for almost one year (time to time) to get my CIsco 7961 working. I tried almost all configurations you can find on the internet. I got to a point where I could receive calls but not place them. Thanks to you it is now working. So I can confirm that it works for Cisco 7961, too.
    Kind regards,

      Will Cooke

      Excellent! Glad to hear you got it working.


    Hey Will,
    What version of Asterisk or FreePBX is recommended?
    Kind regards, IVG

      Will Cooke

      I dont think you need a specific version. I’d say use whatever is packaged for your distro, or the latest upstream version.


    Do you know of any major differences between the 79×1 models and 79×2 models? I am trying to get a 7942 and 7962 working with Switchvox, and having problems at the SIP OPTIONS stage.


        Hi All,
        We bought CISCO7941 phones from ebay and I migrated couple of phones to our network with factory reset. Phones are migrated to our network.
        Phone is loading SEPMAC.cnf.xml and shows the configured users and phone show registering or “Enregistration” . Phone is sending SIP registration request to our server frequenetly though SIP server respondes with 200 OK. Phone also sending Reason header in SIP register request. Below are the traces. Can you please review and suggest how to solve the issue from phone?

        REGISTER sip:SIP_PROXY SIP/2.0.
        Via: SIP/2.0/UDP;branch=z9hG4bK145170f7.
        From: ;tag=002155043e14000c6e300d74-f82d1759.
        To: .
        Call-ID: 00215504-3e14000a-88ce24a2-232a3b6b@
        Max-Forwards: 70.
        Date: Mon, 16 Jan 2017 09:07:00 GMT.
        CSeq: 105 REGISTER.
        User-Agent: Cisco-CP7941G/9.4.2.
        Contact: ;+sip.instance=””;+u.sip!”SEP002155043E14″;+u.sip!”115″.
        Supported: replaces,join,sdp-anat,norefersub,resource-priority,extended-refer,X-cisco-callinfo,X-cisco-serviceuri,X-cisco-escapecodes,X-cisco-service-control,X-cisco-srtp-fallback,X-cisco-monrec,X-cisco-config,X-cisco-sis-6.0.0,X-cisco-xsi-8.5.1.
        Content-Length: 0.
        Reason: SIP;cause=200;text=”cisco-alarm:14 Name=SEP002155043E14 Load=SIP41.9-4-2SR3-1S Last=cm-closed-tcp”.
        Expires: 3600.

        SIP/2.0 200 OK.
        Via: SIP/2.0/UDP;branch=z9hG4bK145170f7;rport=50509;received=
        From: ;tag=002155043e14000c6e300d74-f82d1759.
        To: ;tag=9b61c4013306e65e16fef2a53c4669e3.6550.
        Call-ID: 00215504-3e14000a-88ce24a2-232a3b6b@
        CSeq: 105 REGISTER.
        Contact: ;expires=300;received=”sip:″;+sip.instance=””.
        Server: kamailio (4.3.4 (x86_64/linux)).
        Content-Length: 0.


    Hi guys,

    Just got one from ebay about 12 pounds.
    Updated to latest firware from Cisco and tried every configuration found here or other blogs and site.

    I have installed asterisk local and TFTP server success.
    All the time i got unprocisioned 🙁

    I am one step to give it away for recycling.
    Is there anyone who can help me to configure it to my Asterisk local server?
    I can give you some Teamviewer access to work directly.

    Ricardo Díaz

    Hello will

    I am trying to register a cisco IP 7941G phone with an asterisk server and then upload the firmware version .8-5-4 phone work. Now I can take calls but I can not route incoming calls to the IP phone because the attachment is not registered on the plant.

    Do you have to modify any additional parameters in the SEP .cnf.xml file to make the IP phone register with the plant to be able to assign calls?


    Hi Will,

    i’ve Cisco 7960 IP Phone setup, I managed to get phone registered and got a dial tone but whenever I try to place an outgoing call it just wouldn’t call out. In addition to that, I’ve that little X next to the extension on line 1, could this be cause of my issue?

    “If everything has worked you should see your extension listed on the right hand side of the screen near the buttons, and the name of the phone should appear at the top of the screen. If the icon next to the line buttons is that of a phone without an x through it, then you’re probably good to go! Press the line button and see if you get a dial tone. If not, then check the”

      Will Cooke

      Hi, thanks for the comment.

      The little X indicates (I think) that the phone hasn’t correctly registered with Asterisk. The dial tone is being generated from the phone itself, not Asterisk, so that could well be a red herring. I’d suggest turning up the logging on Asterisk to the max and switching on SIP debugging. This could be something as simple as a port number or password.


    Hello will,
    Thank you for great the guide. Following I managed to get a 7961g working with freepbx. I am in Toronto,Canada. I can make and receive local (10 digits) only remaining issue is that I can’t make any international calls (I am able to make the same international calls from other extentions connected to my freepbx) . I suspect that it’s an issue with the dialplan.xml.
    Any suggestions would be greatly appreciated. Thanks .


    Hey, whenever I add a second sip line, the phone keeps restarting.

    This is what I’m seeing in my log

    NOT 15:03:16.252056 JVM: Startup Module Loader|cip.sipcc.SipCcAdapter: – cmname= cmIp= port=5063 isValid=true
    NOT 15:03:16.253352 JVM: Startup Module Loader|cip.sipcc.d: – initializeLinePlane(): Mgmt Interface is in Service now..
    ERR 15:03:16.254597 JVM: Startup Module Loader|cip.sipcc.d: – regAllFailed(): mgmtState=5
    WRN 15:03:16.255820 JVM: Startup Module Loader|JPlatUi: – platformResetReq: resetRequest type=2

    One key thing is that each sip account is different and they both use different ports 5063 and 5062 but the server is the same, matching the settings on the server for each line. I did try and put them both on the same port, but that didn’t work either.

    Everything works if I just use one or the other. Any ideas?


    Mr. WILL COOKE please i need your help i have Cisco Phone and its firmware SIP and i want to change it to SCCP can you help me please ?

    Bladimir Sampayo

    Hi good day
    I thank you very much for your contribution to make this tutorial I followed it at the foot
    and the firmware went up without problems but when making the configuration of the sip file
    As you mention, I have these errors that I post when sending the files to the phone and I do not know what it could be, could you please help me by giving me some indication that I should correct

    Connection received from on port 52076 [27/04 14:40:40.172]
    Read request for file . Mode octet [27/04 14:40:40.172]
    File : error 2 in system call CreateFile El sistema no puede encontrar el archivo especificado. [27/04 14:40:40.172]
    Connection received from on port 51644 [27/04 14:41:11.072]
    Read request for file . Mode octet [27/04 14:41:11.072]
    Using local port 57768 [27/04 14:41:11.072]
    : sent 15 blks, 7604 bytes in 0 s. 0 blk resent [27/04 14:41:11.103]
    Connection received from on port 51366 [27/04 14:42:14.778]
    Read request for file . Mode octet [27/04 14:42:14.778]
    File : error 2 in system call CreateFile El sistema no puede encontrar el archivo especificado. [27/04 14:42:14.778]
    Connection received from on port 49532 [27/04 14:42:45.468]
    Read request for file . Mode octet [27/04 14:42:45.468]
    File : error 2 in system call CreateFile El sistema no puede encontrar el archivo especificado. [27/04 14:42:45.468]
    Connection received from on port 51186 [27/04 14:43:16.168]
    Read request for file . Mode octet [27/04 14:43:16.168]
    File : error 2 in system call CreateFile El sistema no puede encontrar el archivo especificado. [27/04 14:43:16.168]
    Connection received from on port 52421 [27/04 14:43:46.984]
    Read request for file . Mode octet [27/04 14:43:46.984]
    Using local port 62389 [27/04 14:43:46.984]
    : sent 15 blks, 7604 bytes in 0 s. 0 blk resent [27/04 14:43:46.999]
    Connection received from on port 52761 [27/04 14:44:49.282]
    Read request for file . Mode octet [27/04 14:44:49.282]
    File : error 2 in system call CreateFile El sistema no puede encontrar el archivo especificado. [27/04 14:44:49.282]
    Connection received from on port 51344 [27/04 14:45:19.984]
    Read request for file . Mode octet [27/04 14:45:19.984]
    File : error 2 in system call CreateFile El sistema no puede encontrar el archivo especificado. [27/04 14:45:19.984]


    Thanks for this post, it helped me after countless hours of trying to get 7961G running.

    Weird thing though, the phone registered to a VoIP provider only when I set the transport protocol to TCP. UDP just didn’t work. I spoke with the provider and they told me I’m rejecting the UDP packets coming back from them.

    So I’ve tried to forward ports, even putting the phone to DMZ, no luck. Maybe there are more settings related to using UDP?

      Nick D

      I had this exact same problem using FreePBX and pjSIP. Tried for hours to get the phone to work with the default FreePBX setting of UDP only but then finally tried to enable TCP on the FreePBX side and it starting working instantly.

    Steve Manley


    Post up a LTC or BTC address so I can buy you a beer. You saved me hours.

    Some things that tripped me up:

    I needed to use CHAN_SIP, not PJSIP.

    If you are making a Cisco 7961G work, if you don’t include a dialplan.xml, all of your outgoing calls will fail, as the inter-digit delay will become 0 or something close to it; it tries to dial the first digit you hit. Incoming calls will work fine. Adding the dialplan.xml file (I used a basically empty one) will prevent this from happening. Not sure if tags will post, but below:

    Thanks so much!


    Thank you for this!!

    Finally got my Cisco 7941G working with my freePBX.

    I was wondering if it supports a login feature like example.

    User can go to any phone and login to their ext?

    Thank you again!!!

    Michele Giambra

    Hi everyone,
    It’s since July that I try to register my Cisco 7961G on Asterisk, but I can not.
    I’ve read the post so many times, but I can not.
    I have the sip firmware 9.4.2sr3.1s and asterisk 15.4.0 FreePBX
    I’m using sepmac.cnf.xml of the copied from this post.

    Who managed to run the cisco 7961g, can send me the configuration.
    Thank you!


    I have set up a phone server with FreePBX and Asterisk on a Raspberry PI3+ (i’m using raspbx distro, a complete system) and I have my phones to work with SCCP. I have also set up a phone directory made with PHP. It fetches all phone numbers from the systems MySQL-database, so I don’t need to add entries manually. So, if I create a new extension, then it will show up in the phonedirectory.


    Hi Guys,
    Great article am getting there however my 7961 sets most things up but gets to local then fails with the following and gets stuck in a restarting loop –

    4:50:44p SEP00070E576A29.cnf.xml(TFTP)
    4:51:28p Error Updating Locale

    TFTP shows mk-sip.jat error where do I get this file from, I presume its missing this which is the main cause of the locale issue???
    Connection received from on port 50544 [24/03 16:50:44.621]
    Read request for file . Mode octet [24/03 16:50:44.621]
    Using local port 49705 [24/03 16:50:44.621]
    : sent 15 blks, 7534 bytes in 0 s. 0 blk resent [24/03 16:50:44.822]
    Connection received from on port 50769 [24/03 16:51:27.410]
    Read request for file . Mode octet [24/03 16:51:27.410]
    File : error 2 in system call CreateFile The system cannot find the file specified. [24/03 16:51:27.410]
    Connection received from on port 52626 [24/03 16:52:00.026]
    Read request for file . Mode octet [24/03 16:52:00.026]
    Using local port 55186 [24/03 16:52:00.026]
    : sent 2 blks, 953 bytes in 0 s. 0 blk resent [24/03 16:52:00.048]

    Any help appreciated!



    This piece of work is awesome!!
    I managed to migrate the all the phones in one single day!!
    You, sir, make my day!!!
    Just a note: there is a chance the the “Wallpaper” section is missing some infos?
    I followed the instructions, but I was not able to set my custom wallpaper 🙁
    In any case, great work!


    I just purchased 25 x 7941 PLUS other Cisco stuff for 99p from eBay and made a local pick up – bargain?

    The phones are/were set up for SCCP.

    I managed to upgrade the firmware of one of the phones to SIP, SIP41.9-2-1S.

    The cnf.xml file appears to upload, : sent 14 blks, 7057 bytes in 0 s. 0 blk resent [13/06 22:42:10.980], from the TFTP server but the phone still displays “Unprovisioned”

    The editor used was the Micosoft XML notepad that seems to be do the job.

    This is my first attempt at this and my first impression was that it looked straight forward but this does not appear to be the case!!

    Any tips and samples of working files would be most welcome.

    Cheers – John

    A fuller sample of the log from the TFTP server is listed below –

    Connection received from on port 50869 [13/06 22:42:10.439]
    Read request for file . Mode octet [13/06 22:42:10.439]
    File : error 2 in system call CreateFile The system cannot find the file specified. [13/06 22:42:10.439]
    Connection received from on port 52770 [13/06 22:42:10.533]
    Read request for file . Mode octet [13/06 22:42:10.533]
    File : error 2 in system call CreateFile The system cannot find the file specified. [13/06 22:42:10.533]
    Connection received from on port 49583 [13/06 22:42:10.658]
    Read request for file . Mode octet [13/06 22:42:10.658]
    File : error 2 in system call CreateFile The system cannot find the file specified. [13/06 22:42:10.658]
    Connection received from on port 52363 [13/06 22:42:10.956]
    Read request for file . Mode octet [13/06 22:42:10.956]
    Using local port 60547 [13/06 22:42:10.957]
    : sent 14 blks, 7057 bytes in 0 s. 0 blk resent [13/06 22:42:10.980]

    Angus Mackenzie

    Thank you so much for this comprehensive how-to. I’ve got things working between the Cyber Attic and the kitchen after a couple of days wrestling with dhcpd, tftpd etc.

    Current freePBX on raspberry pi uses port 5160 for CHAN_SIP and 5060 for CHAN_PJSP, which I spotted for the SEP[MAC].cnf.xml files. For a while I got error tones when trying to dial, but changing that port number in the FreePBX gui -> Settings -> Asterisk SIP settings seemed to help, or maybe it was the reboot.


    I can confirm Asterisk newest version (as of March 2020) andCisco 7941G with newest SIP Cisco FW (as of March 2020) only works via TCP. The problem is that the phone is NOT answering UDP “ChallengeSent” packets sent from Asterisk to Cisco Phone. See the FreePBX fail2ban log for details.

    Solution is very easy:
    Enable TCP in FreePBX at Settings => Asterisk SIP Settings => SIP Leacy Settings tab => Activate TCP => Yes

    Change the config file from above from
    for TCP.

    Done the phone works instantly.

      Will Cooke

      Thanks Dominikk, that’s good to know


    Thank you for your SEPxxx.cnf.xml work for my 7945G SIP45.9-3-1SR4-1S after stuck at registering.

    Rich Pavlovsky

    Worked like a champ for me. Asterisk 16 running on FreeNAS (in a jail). Got several Cisco IP 7941’s from Goodwill for a few bucks. Flashed firmware to the SIP firmware you mentioned (it is still the latest on this old model). Carefully crafted the SEPMAC.cnf.xml file and spent several nights troubleshooting (and being very frustrated). I relied a lot on the Cisco web interface to carefully review the logs. I think if any addition to your very well done post would be to walk people thru that cause it does give line numbers etc on the XML file parsing errors. Anyways, thank you again for creating this. A fun little technical project to keep me occupied in these troubling times.

    Graham Galea

    Hi. The Mitel PBX I am connecting the 7941 phones to has System Speed Calls. Example 829 is a speed dial for 430829. The Mitel phone recognise the speed dial but the cisco 7941 doesn’t. Is there a way to configure the phone to recognise system speed calls?

    Taha Siddiqi


    i need help i am using 7941 and 7942 SIP phone but i am unable to load Telephone Directory and Wallpaper as per the above given procedure through TFTP32 application, please be so kind to let me know how can i upload.

    i am using below mention firmware :

    7941 | 7941-7961-sip.8-4-2S
    7942 | 7942-7962-sip.8-4-2S


    Cisco seem to have removed the 7941/7961 firmware from their support section.

    Any chance I could get a copy of the version you are using since it is later than mine?

      Will Cooke

      Someone seems to have uploaded the files here:

    Dan Keizer

    Just found this post/thread. Looks like excellent work. I note that the link to the firmware update files is not responding ( site) – if someone has a different link (or can make one to offer) that would be appreciated. we have a number of these phones to integrate into our asterisk server.


    Hi there,

    I downloaded the provided firmware here at the current date, but it wouldn’t upgrade. I searched in the web, found several firmwares, I upgraded to 8.4.2 first, then 8.5.4, then 9.2.1, but whenever I would try to upgrade to the provided 9.4.2RS3 it would fail.
    In the meanwhile I found this link:
    Which has 9.4.2-1 which worked as well. In the meanwhile I believe that this firmware 9.4.2RS3 here is for another phone model and someone just changed the name of the files, as all other firmwares worked fine on my 7941 phone.

    Thank you for the tutorial, its super and was super helpful nonetheless.

Comments are closed.