For anyone working in Cisco IOS world knows the pain when an IOS gets deleted from flash by mistake or the IOS image on the flash gets corrupt. The device keeps on booting to a state known as ROMMON. The usual XMODEM procedure is painfully long. The IOS image copy process can take more than 9 hours - if the file is around 25 MB. To put the IOS back into the switch using USB can be pretty quick. I have done this in under an hour. Here is how to do it. I am using Catalyst 2960X in my example below. First make sure your IOS device has a USB port. If it does, we need a format a USB flash drive in a way IOS recognizes it. The file format has to be FAT16 (or FAT). Note: FAT32 and FAT-EX are not supported by the Cisco IOS devices. The USB drive has to be smaller or equal to 2 GB. If you don't have a USB drive smaller than 2 GB, follow this. Here are the options I checked on when I formatted my USB drive to FAT on my Windows PC. Don't do Quick Format. After formatting, put the IOS image on the USB drive. Now power on the switch or router. It would come to the ROMMON state. Insert the USB flash drive in the USB port. Make sure that switch is able to see the IOS image on the USB. Issue the command dir usbflash0: Now enter boot usbflash0:c2960x-universalk9-mz.152-7.E2.bin so the the switch boots using the image on the USB. For some reason, my switch came back to ROMMON after this above step as well - which it shouldn't have. So I had to repeat the above step once again. After the next time it came up fine. Now the flash doesn't have a valid IOS image. We need to copy the image on the switch's flash. I copied it by making the laptop as the FTP server. I use Filezilla. I gave my PC IP address of 10.10.10.2/24 On Switch en conf t int vlan 1 ip address 10.10.10.1 255.255.255.0 no shut ip ftp username cisco ip ftp password cisco exit On PC Control Panel >> Network and Internet >> Network Connections >> Ethernet >> Properties >> Internet Protocol Version 4 (TCP/IPv4) Make sure you are able to ping each other (from switch ping 10.10.10.2 and from laptop ping 10.10.10.1) Once both PC and switch have IP connectivity, issue the command: copy ftp: flash: Provide the IP Address of FTP server (10.10.10.2 - in my example) and file name (c2960x-universalk9-mz.152-7.E2.bin - in my example) Make sure you get the exclamations (!), and not the dots (.). If you get dots, that means either there isn't IP connectivity or (T)FTP server is not properly setup. Issue dir to make sure that you see the IOS bin file in the switch's flash. Make sure the config register is the right value before reloading by issuing sh ver Reload the switch by reload command. Enter no to saving the config - this is so that on the boot, you get a fresh install of IOS. Hopefully this will save you time just like it did to me and you can avoid xmodem IOS transfer.
0 Comments
![]() Cisco Integrated Management Controller is Cisco proprietary out-of-band management for servers. This is HP's iLO equivalent on Cisco UCS (Unified Computing System) servers. Note: UCS are servers which are capable of running virtual machines (VMWare ESXi or other hypervisors). Recently, I did an upgrade on the UCS server's CIMC (which include all the components mentioned in the title). I will go through the steps here. You can also upgrade individual components if needed. My server was running ESXi but that is irrelevant. Note: Go through the Release Notes of the firmware at Cisco.com and make sure you can go from the source version to the destination version. You have to be logged in to be able to download the software. Here are the steps: Gracefully shut down all the VMs running on the UCS server (this isn’t required but recommended) Open the CIMC interface by going into the CIMC IP Address (ignore any certificate errors) Note: This is not the same as ESXi IP. Note: I prefer using Internet Explorer than using Chrome for this upgrade (even though my choice of browser is Chrome). Click on Launch KVM Console (most times than never, Launch KVM will pop up a Java security error. Even after accepting the security error, Java would fail to launch. To fix the Java error, go to your PC’s Start button --> Control Panel --> Java --> Security --> Edit Site List --> Add the CIMC IP Address like this: https://10.10.10.1 Note: I am running Java 8 Build 71 If the hypervisor you are running is ESXi, you will see a similar screen to the one below: Click on Virtual Media --> ‘Activate Virtual Devices’ Click on Virtual Media --> ‘Map CD/DVD Drive’ and browse to where you have downloaded the firmware from cisco.com Restart the server so it can boot from Firmware file this time. (F12 and F11 if its an ESXi) Press F6 on the boot screen to get in the Boot Menu. (you might have to press F6 multiple times just to make sure you hit it at the right moment) Select vKVM mapped CD/DVD UCS Host Upgrade Utility will start It can a while to load the firmware files (I guess this depends on network connectivity - mine was pretty good but still it took around 10 minutes). When you get the license agreement, click 'I Agree'. Now the following screen is where you need to select the components you are planning to upgrade. Select the components (Now click on 'Update' or 'Update All' (I selected All). At that time the upgrade process on each component would start. You would get the option to select Secure Boot Option. I selected 'No' as I wasn't using this feature. You can see the progress throughout the process (almost) Depending on the source and target version, you might lose connection to this window while some components are being updated. Don't panic. Give it time. Note: Some versions where you won't lose access to the KVM Console, you would lose connection when you exit the installer when the firmware is finally applied (Adapter or BIOS firmware). Server would go through a power cycle and would load up the hypervisor. You can go the CIMC webpage to make sure that version is actually upgraded.
Hope this helps! Happy new year to everyone. It's been a while since I wrote a new blog entry - it's new year, so here is the brand new blog entry for 2018. There are couple of UCCX Script editing steps which can be used when creating menus on UCCX Scripts - they can be used interchangeably. Two of these steps are 'Switch' and 'Menu' Switch Step Switch step is found under the General category on UCCX Script editor. Switch step is like 'if, then, else' in software programming. It would be easier to explain using an example: Lets assume we need to create an auto attendant script where the call in user is asked to enter: 1 for Sales (redirects to extension 2001) 2 for Marketing (redirects to extension 2002) 0 for Operator (redirects to extension 2003) or press the extension of the person you need to dial. To start off (after the other basic steps of accepting the call, etc) I would use a Play Prompt step (under Media) to play the recording : "Press 1 for sales, press 2 for marketing, 0 to speak to an operator, or if you know the extension of the person, just dial that extension" Once the recording has been played, the user would enter the digits on the phone. I have to capture those digits. I would use a string to capture the the digits entered by the user. I would create a parameter on script editor, where I would store the value which was entered by the user (1, 2, 3, extension). I have named this Parameter s_DigitString (s is the name distinguishes its a string, DigitString in the name distinguishes the purpose). The default value is empty. To capture the digits, we need to create a 'Get Digit String' step to capture the digits in the s_DigitString. Get Digit String is available under the 'Media' steps on UCCX editor. Once the digits have been captured, now comes the Switch step. Switch step will look at the digits that are entered in the s_DigitsString and will perform the action based on the captured digit. Here are the properties of the Switch step. Under Press 1, Press 2, Press 0, you can define where to redirect the call to (using the Call Redirect step). 'Dial by Extension' would rely on 'Default' on the above right picture (overlapping extension can be dealt with by modifying timers on the Get Digit String, so dialing extension 2112 won't be a problem). This is in nutshell is how a Switch step works. Now lets move to Menu step. Menu Step Menu step is found under Media category on the UCCX Editor. Menu step combines the functionality of these three steps in one:
The second tab, Prompt on the Menu properties is where you define the Prompt that will be played. The third tab, Filter on the Menu properties is where you define the key inputs and the action that will be taken. Filter in Menu creates the same options as Cases in Switch. However, one big difference is that it allows only one digit entry. Moreover, in Menu, we don't save the user input in a variable (s_DigitString above). Hence, only one digit can be entered. This becomes an issue when the users is trying to dial an extension of a user.
To close off, I would invariably use Menu always unless I have to register more than one digit. Menu makes things lot more easier, but then the problem with Menu is that you cannot enter an extension 2112 for example. It would just register that as Option 2 with Menu. Hope this helps. Two commands: 'e164-pattern-map' (added from IOS 15.2) and 'server-group' (added from IOS 15.4) makes Voice Gateway/CUBE config dial-peers config very clean.
With e164-pattern-map, the digits to be matched can be groped together. So no need for multiple dial-peers (with just the changing destination-pattern). With server-group, all the session target (session target ipv4:x.x.x.x) can be grouped together. So no need for multiple dial-peers with just the changing session target ipv4: is required. Here is an example which will make things more clear: voice class e164-pattern-map 10 e164 911 e164 9[2-9]..[2-9]...... e164 91[2-9]..[2-9]...... e164 9[^1]T description OUTBOUND_CALLS voice class e164-pattern-map 20 e164 +1416555[12]... description INBOUND_CALLS voice class server-group 10 ipv4 140.1.4.5 preference 1 ipv4 140.1.5.5 preference 2 description to PSTN_SIP_PROVIDER ! voice class server-group 20 ipv4 10.1.100.1 preference 1 ipv4 10.1.101.1 preference 2 description to CUCM dial-peer voice 10 description OUTBOUND_PSTN_CALLS destination e164-pattern-map 10 translate-called PSTN_FORMAT session protocol sipv2 dtmf-relay rtp-nte session server-group 10 dial-peer voice 11 description INBOUND_FROM_PSTN incoming called e164-pattern-map 20 session protocol sipv2 dtmf-relay rtp-nte session server-group 10 dial-peer voice 20 dial-peer voice 20 description TOWARDS_CUCM destination e164-pattern-map 20 session protocol sipv2 dtmf-relay rtp-nte session server-group 20 dial-peer voice 11 description INBOUND_FROM_CUCM incoming called e164-pattern-map 10 session protocol sipv2 dtmf-relay rtp-nte session server-group 10 dial-peer voice 20 voice translation-rule 10 rule 1 /^911$/ /911/ rule 2 /^9/ /+/ voice translation-profile PSTN_FORMAT translate called 10 I have used a translation-profile to convert the dialed-numbers to +E164 numbers (except for 911 calls). This config is not required - it depends what format the PSTN is expecting the call. I have assumed that this telco here is expecing +E164 numbering format except for 911 calls. By the way, under the e164-pattern-map command, other than actual e164 numbers (like in example above), url could be used. which can point towards a file on the flash or ftp somewhere which can have the numbers. With digit manipulation on IOS, keep a few things in mind:
1. / -- / - It always starts with / and ends with / 2. Anything within parenthesis would be kept. characters are keep are like (a\) characters to ignore are like b\ \1 copy the first set into the replacement number, \2 copy the second set into the replacement number, etc 3. The following represents the digits/characters: . : Any single digit 0 to 9,*,# : Any specific character [0-9] : Any range or sequence of characters * : Modifier—match none or more occurrences + : Modifier—match one or more occurrences ? : Modifier—match none or one occurrence Look at the following examples. This should clarify: Examples: Example 1: voice translation-rule 1 rule 1 /123/ /456/ Will match and modify 123 anywhere in the pattern: router#test voice translation-rule 1 123 Matched with rule 1 Original number: 123 Translated number: 456 router#test voice translation-rule 1 1234 Matched with rule 1 Original number: 1234 Translated number: 4564 router#test voice translation-rule 1 6123 Matched with rule 1 Original number: 6123 Translated number: 6456 router#test voice translation-rule 1 6123123 Matched with rule 1 Original number: 6123123 Translated number: 6456123 Example 2: voice translation-rule 1 rule 1 /^123/ /456/ Will match only if the pattern start with 123 because carrot '^' is the starting character router#test voice translation-rule 1 123 Matched with rule 1 Original number: 123 Translated number: 456 router#test voice translation-rule 1 1234 Matched with rule 1 Original number: 1234 Translated number: 4564 router#test voice translation-rule 1 6123 6123 Didn't match with any of rules Example 3: voice translation-rule 1 rule 1 /^123$/ /456/ Will only match if the pattern starts if its 123 exacly. Nothing after, nothing before. router#test voice translation-rule 1 123 Matched with rule 1 Original number: 123 Translated number: 456 router#test voice translation-rule 1 1234 1234 Didn't match with any of rules router#test voice translation-rule 1 6123 6123 Didn't match with any of rules Example 4: voice translation-rule 1 rule 1 /^40.../ /6666000/ Will match pattern starting with 40 and any 3 digits afterwards router#test voice translation-rule 1 40123 Matched with rule 1 Original number: 40123 Translated number: 6666000 Example 5: voice translation-rule 2 rule 1 /.*/ /5554000/ Will replace any pattern with 555400 router#test voice translation-rule 2 123 Matched with rule 1 Original number: 123 Translated number: 5554000 router#test voice translation-rule 2 86573 Matched with rule 1 Original number: 86573 Translated number: 5554000 router#test voice translation-rule 2 "" Matched with rule 1 Original number: Translated number: 5554000 Example 6: voice translation-rule 1 rule 1 /^\(12\)3\(45\)$/ /6\1\2/ Set 1: 12 Set 2: 45 Ignore: 3 router#test voice translation-rule 1 12345 Matched with rule 1 Original number: 12345 Translated number: 61245 Example 7: voice translation-rule 10 rule 1 /\(32..\)$/ /416555\1/ Will replace 32xx to 41655532xx (used for outbound caller ID) router#test voice translation-rule 10 3200 Matched with rule 10 Original number: 3200 Translated number: 4165553200 Example 8: voice translation-rule 10 rule 1 /^416555\(32..\)$/ /\1/ Will replace 4165553211 to 3211 (used for inbound caller ID) router#test voice translation-rule 10 4165553211 Matched with rule 10 Original number: 4165553211 Translated number: 3211 Example 9: voice translation-rule 7 rule 1 /^4/ /904/ type national national rule 2 /^4/ /9004/ type international international If number starts with 4 and type is National, it would be prefixed 90 and type will remain National If number starts with 4 and type is International, it would be prefixed 900 and type remain International router#test voice translation-rule 7 493456567 type national Matched with rule 1 Original number: 493456567 Translated number: 90493456567 Original number type: national Translated number type: national Original number plan: none Translated number plan: none router#test voice translation-rule 7 493456567 type international Matched with rule 2 Original number: 493456567 Translated number: 900493456567 Original number type: international Translated number type: international Original number plan: none Translated number plan: none Example 10: voice translation-rule 8 rule 1 /^2\(...$\)/ /01779345\1/ type unknown national plan unknown isdn This rule matches any four-digit number that starts with "2". The rule removes the "2", adds the number "01779345" as a prefix, and sets the plan to "isdn" and the type to "national". router#test voice translation-rule 8 2001 type unknown plan unknown Matched with rule 1 Original number: 2001 Translated number: 01779345001 Original number type: unknown Translated number type: national Original number plan: unknown Translated number plan: isdn POTS Dial-Peers --------------- dial-peer 911 pots destination-pattern 911$ !Anything that is explicitly matched on POTS dial-peer is removed. This isn't true for VOIP. VOIP Dial-peer doesn't remove anything thats explicity matched. no digit strip <OR> prefix 911 <OR> forward-digits 3 port 0/0/0:23 dial-peer 9 pots destination-pattern 9[2-9]XX[2-9]XXXXXX$ port 0/0/0:23 ! no need for any prefix or any forward digits as only number explicitly matched is 9 which we want removed as its our PSTN code. dial-peer 91 pots destination-pattern 91[2-9]XX[2-9]XXXXXX$ prefix 1 <OR> forward-digits 11 ! 1 is being explicitly matched and we want it to go out as its our long distance code used by the PSTN. port 0/0/0:23 dial-peer 9011 pots destination-pattern 9011T ! no need for #. It would be automatically matched because of the next dial-peer. prefix 011 ! can't use forward-digits as we don't know the extension length that would be dialed. port 0/0/0:23 dial-peer terminator # ! Its a default command and any call with # is already a terminator for interdigit timeout, unless its changed by someone. Note: On CUCM, in Service Parameters "Strip # Sign from Called Party Number" is "True" by Default - Meaning it would remove # as the trailing number. dial-peer 1 pots incoming called-number . ! will match incoming calls dial-peer 2 voip destination-pattern 2...$ session target ipv4:10.1.1.2 ! CUCM IP dtmf-relay h245-signal dial-peer 3 voip incoming called-number . Overlap Sending <-- SCCP works this way - one digit at a time. En-Bloc <-- CUCM works this way. A good document which I consulted when working on this post: http://www.cisco.com/c/en/us/support/docs/voice/call-routing-dial-plans/61083-voice-transla-rules.html 1. ENABLING THE SERVICE
GO to Cisco Unified Serviceability, Tools --> Service Activation. Make sure Cisco Extension Mobility service is enabled. If not enabled, enable it. 2. CREATING THE SERVICE a. GO to CUCM Administration, Device --> Device Settings --> Phone Services. b. Add new. Enter the name such as EM or Extension Mobilty c. Enter the URL: URL: http://<CUCM IP>:8080/emapp/EMAppServlet?device=#DEVICENAME# d. Choose XML Service and Standard IP Phone Service as the Service Category and Service Type respectively. e. Click Save. 3. CONFIGURING PHONES a. Go to Device --> Phone, open the phone where you want to enable the service. b. Related links on top of the page, select Subscribe/Unsubscribe Services and click GO. c. Select the service created on CREATING THE SERVICE above. d. Subscribe and Save. e. Make sure 'Enable Extension Mobility' is checked on the Phone. NOW PHONES HAVE SERVICE ENABLED, BUT USERS ARE STILL NOT ENABLED FOR EM. NOW LETS ENABLE USERS 4. CONFIGURING USER DEVICE PROFILE (UDP) a. GO to Device --> Device Settings --> Device Profile b. Add New c. Select Phone type (according to the phone type where the user will log into) d. Select Device Protocol <-- You will only be presented with the Protocl option if the Phone is question supports both SIP and SCCP. e. Select a name: such as "User1" and fill in all required fields <-- Most of these options are similar to creating a phone - only difference is there is no MAC Address option here. f. Related links on top of the page, select Subscribe/Unsubscribe Services and click GO. g. Select the service created on CREATING THE SERVICE above. h. Click on 'Line [1] - Add a new DN' and enter line information (just like you would do on an IP Phone) i. Click Save. 5. CONFIGURING USERS a. Go to User Management --> End Users b. Open an existing user or create a new one. c. Make sure userid, password, pin, and phone number are configured. d. Also under 'Extension Mobility' select "User1" (or whichever user was created on CONFIGURING USER DEVICE PROFILE) and move it down to the controlled profiles section. JTAPI stands for Java Telephony API. It was developed by Java for Computer Telephony Applications or CTIs. It provides a set of packages which provides basic guidelines for placing, answering and dropping a call. JTAPI is similar to TAPI (Telephony API) which was developed by Microsoft and Intel.
AXL stands for Administrative XML. AXL is used for pushing config on another system. When integrating another system with CUCM (for example UCCX), JTAPI is used for CTI (placing call, ending call), and AXL is used to push the config onto CUCM. a. Create a Gateway (MGCP/H323) or SIP Trunk (SIP Gateway)
b. Create Route Group (RG), add the above created Gateway/SIP Trunk c. Create Route List (RL) --> Select "Standard Local Route Group" for Route Group c. Create Route Pattern (RP) - for example 911 --> Select the RL (as created in step c) d. Device Pool --> Select Local Route Group (as created in step b) In CUCM CTI Route Points and CTI Ports are often used interchangeably.
However there is a difference.
Most IVR based applications on CUCM however use CTI Ports to enable Post Routing capabilities. Directory Integration with a Multi-Forest Environment is supported in CUCM through Active Directory Light Weight Directory Service (AD LDS).
Once AD LDS is configured, the configuration on Cisco side is very similar to doing a regular LDAP integration on CUCM. AD LDS runs as a service on one of the Domain Controllers. In the picture below, the AD LDS could be installed on any of the DCs as long as that DC can speak to the other DCs. A good configuration guide can be found here: https://supportforums.cisco.com/document/63136/how-configure-unified-communication-manager-directory-integration-multi-forest |
AuthorSaad is a Senior Consultant for Jalson International. He is CCIE x 3 (Collaboration, R&S and Data Center) Categories
All
Archives
June 2020
|