The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Cisco::Version - Cisco 'show version' parser

VERSION

version 0.02

SYNOPSIS

        use Cisco::Version;

        my $cv = new Cisco::Version($show_version);
        $cv->parse();
        
        print $cv->get_memory();
        print $cv->get_software_version();
        print $cv->get_chassis_type();
        print $cv->get_uptime();
        
        use Data::Dumper;
        print &Dumper($cv->get_summary());
        
        print $cv->get_not_found_value();
        $cv->set_not_found_value("<NOT FOUND>");
        etc.
        

DESCRIPTION

This module is a parser for Cisco 'show version'.

We try to parse as much useful information as possible from the 'show version' output : software version, chassis type, memory information, flash information, uptime etc.

The 'show version' output may differ for each chassis type or software version so the parsed information may look different as well.

PROCEDURES

new() - constructor

This is the constructor.

        my $cv = new Cisco::Version($show_version)
        

This creates a new Cisco::Version object. One parameter is required :

        $show_version = string that contains complete output of 'show version'
parse()

This function actually takes care of parsing the 'show version' information.

        $cv->parse();

The following parameters are currently being parsed, depending on the chassis or software it may actually find a value or not.

        - software version information
        - bootstrap information
        - bootloader information
        - uptime
        - reload reason
        - reload time
        - software image file
        - DRAM memory information
        - flash information
        - configuration registry
        - password recovery mechanism
get_bootstrap()

Get bootstrap information.

        $cv->get_bootstrap();

example output = '12.4(1r)'

get_bootldr_type()

Get bootloader type information.

        $cv->get_bootldr_type();
get_bootldr_version()

Get bootloader version information.

        $cv->get_bootldr_version();
get_bootldr_featureset()

Get bootloader featureset information.

        $cv->get_bootldr_featureset();
get_sw_type()

Get software type information.

        $cv->get_sw_type();

example output = '2800'

get_sw_version()

Get software version information.

        $cv->get_sw_version();

example output = '12.4(8)'

get_sw_featureset()

Get software featureset information.

        $cv->get_sw_featureset();

example output = 'C2800NM-ADVIPSERVICESK9-M'

get_hostname()

Get hostname information. This is only found if the 'uptime' info exists and only for certain chassis types.

        $cv->get_hostname();

example output = 'ROUTERA'

get_uptime()

Get uptime information.

        $cv->get_uptime();

example output = '26 weeks, 5 days, 22 hours, 25 minutes'

get_reload_reason()

Get the reason for last reload.

        $cv->get_reload_reason();

example output = 'power-on'

get_reload_time()

Get the time and date of last reload.

        $cv->get_reload_time();

example output = '11:40:19 GMT+2 Sat Jan 13 2007'

get_image_file()

Get software image file information.

        $cv->get_image_file();

example output = 'flash:c2800nm-advipservicesk9-mz.124-8.bin'

get_chassis_type()

Get additional chassis type information.

        $cv->get_chassis_type();

example output = '2821'

get_memory()

Get DRAM memory information. Depending on the chassis type and IOS version this may be correct or not. By default this is the sum of main memory and shared IO memory. But again, it depends a little bit on chassis type.

This value is in megabytes.

        $cv->get_memory();

example output = '256'

get_confreg()

Get the value of the config register.

        $cv->get_confreg();

example output = '0x2102'

get_pwdrecovery()

Get password recovery mechanism information if available.

        $cv->get_pwdrecovery();

example output = 'enabled'

get_flash_filesystems_sizes()

Get a list of the sizes of each filesystem found. Usually this is the flash filesystem, some chassis also have additional filesystems like PCMCIA or ATA disk. At this moment we're only interested in the size, maybe later also the type of filesystem.

This value is in megabytes.

        $cv->get_flash_filesystems_sizes();

example output = [ '32' , '64' ]

get_flash_largest_size()

This displays the value of the largest filesystem that can be used as flash.

This value is in megabytes.

        $cv->get_flash_largest_size();

example output = '64'

get_summary()

This returns a reference to the hash that contains all parsed elements. This can be useful to find out which parameters were found for a specific device.

        $ref = $cv->get_summary()
        print &Dumper($ref);
get_not_found_value()

It may be useful to know if a certain parameter was not found in the show version. Instead of returning an empty value a special "not found value" is used.

By default this value = <NOT FOUND>

        print $cv->get_not_found_value()
set_not_found_value()

The special "not found value" can be changed to anything you want.

        $cv->set_not_found_value("__not_found__");

SUPPORTED DEVICES

Cisco::Version has been verified on the combination of following chassis types and OS versions. For these combinations the output is what was expected.

But hey, my expectations may be different than yours :-)

        chassis software        type
        1711    12.3(11)T2      C1700
        1720    12.3(6c)        C1700
        1721    12.2(15)T12     C1700
        1721    12.2(15)T14     C1700
        1721    12.2(15)T17     C1700
        1721    12.2(15)T5      C1700
        1721    12.3(12e)       C1700
        1721    12.3(1a)        C1700
        1721    12.3(2)XE       C1700
        1812    12.4(6)T5       C181X
        1841    12.4(12a)       1841
        1841    12.4(3f)        1841
        1841    12.4(8) 1841
        1841    12.4(8a)        1841
        1841    12.4(8b)        1841
        1841    12.4(8c)        1841
        2500    12.0(22)        2500
        2610    12.0(21a)       C2600
        2610    12.1(13)        C2600
        2610    12.2(24a)       C2600
        2610    12.2(27)        C2600
        2610    12.2(29)        C2600
        2610    12.2(37)        C2600
        2610    12.3(12b)       C2600
        2610    12.3(12e)       C2600
        2611    12.2(27)        C2600
        2612    12.1(13)        C2600
        2612    12.2(29a)       C2600
        2612    12.3(12e)       C2600
        2613    12.2(24a)       C2600
        2613    12.3(12e)       C2600
        2620    12.1(13)        C2600
        2620    12.1(5)T10      C2600
        2620    12.1(5)T12      C2600
        2620    12.3(12e)       C2600
        2651    12.1(5)T12      C2600
        2651    12.2(15)T17     C2600
        2651    12.3(12e)       C2600
        2691    12.3(10)        2600
        2691    12.3(10a)       2600
        2691    12.3(10c)       2600
        2691    12.3(12d)       2600
        2691    12.3(12e)       2600
        2691    12.4(8) 2600
        2801    12.4(3f)        2801
        2811    12.4(3d)        2800
        2811    12.4(3d)        2800
        2821    12.4(12)        2800
        2821    12.4(8) 2800
        2821    12.4(8a)        2800
        2821    12.4(8c)        2800
        2821    12.4(9)T1       2800
        3620    12.1(5)T12      3600
        3620    12.2(21a)       3600
        3620    12.2(24a)       3600
        3620    12.2(27)        3600
        3620    12.2(29a)       3600
        3620    12.2(37)        3600
        3640    11.2(15a)P      3600
        3640    12.1(21)        3600
        3640    12.1(5)T12      3600
        3640    12.2(13)        3600
        3640    12.2(17a)       3600
        3640    12.2(24a)       3600
        3640    12.2(27)        3600
        3640    12.3(12e)       3600
        3725    12.2(15)T12     3700
        3725    12.3(10a)       3700
        3725    12.3(10c)       3700
        3725    12.3(12b)       3700
        3745    12.3(12b)       3700
        3825    12.4(8a)        3800
        3825    12.4(8b)        3800
        7206    12.1(20020531:181751)   7200
        2610XM  12.2(12a)       C2600
        2610XM  12.3(10d)       C2600
        2610XM  12.3(12e)       C2600
        2611XM  12.3(12e)       C2600
        2620XM  12.3(12e)       C2600
        2621XM  12.2(24a)       C2600
        2621XM  12.3(12e)       C2600
        2621XM  12.3(12e)       C2600
        2651XM  12.2(29a)       C2600
        2651XM  12.2(37)        C2600
        2651XM  12.3(10)        C2600
        2651XM  12.3(10d)       C2600
        2651XM  12.3(10e)       C2600
        2651XM  12.3(12)        C2600
        2651XM  12.3(12b)       C2600
        2651XM  12.3(13)        C2600
        2651XM  12.3(16)        C2600
        2651XM  12.3(4)T3       C2600
        2651XM  12.4(8c)        C2600
        3640-A  12.2(11)T6      3600
        3660-telco      12.2(29)        3600
        7204VXR 12.2(29a)       7200
        7204VXR 12.3(12e)       7200
        7206VXR 12.2(17a)       7200
        7206VXR 12.2(29)        7200
        7206VXR 12.3(12e)       7200
        c3660   12.1(5)T12      3600
        c3660   12.1(5)T12      3600
        C803    12.2(13)        C800
        Cat2948G        12.0(14)W5(20)  L3 Switch/Router
        Cat4232L3       12.0(18)W5(22b) L3 Switch/Router
        Cat4232L3       12.0(25)W5(27)  L3 Switch/Router
        Cat6k-MSFC      12.1(8b)E9      MSFC
        Cat6k-MSFC2     12.1(11b)E      MSFC2
        Cat6k-MSFC2     12.1(12c)E2     MSFC2
        Cat6k-MSFC2     12.1(13)E2      MSFC2
        Cat6k-MSFC2     12.1(8b)E9      MSFC2
        MSFC2   12.1(20)E       MSFC2
        MSFC2   12.1(23)E3      MSFC2
        MSFC2   12.1(26)E5      MSFC2
        MSFC2A  12.2(17d)SXB7   MSFC2A
        MSFC3   12.2(17d)SXB10  MSFC3
        MSFC3   12.2(17d)SXB3   MSFC3
        MSFC3   12.2(17d)SXB9   MSFC3
        RSP8    12.2(29)        RSP
        WS-C3550-12G    12.1(13)EA1a    C3550
        WS-C3550-12G    12.1(20)EA2     C3550
        WS-C3550-12G    12.1(22)EA1     C3550
        WS-C3550-12G    12.1(22)EA1a    C3550
        WS-C3550-12G    12.1(22)EA2     C3550
        WS-C3550-12G    12.1(9)EA1c     C3550
        WS-C3550-24     12.1(13)EA1a    C3550
        WS-C3550-24     12.1(14)EA1a    C3550
        WS-C3550-48     12.1(11)EA1a    C3550
        WS-C3550-48     12.1(13)EA1a    C3550
        WS-C3550-48     12.1(22)EA4a    C3550
        WS-C3750-24TS   12.2(25)SEB2    C3750
        WS-C3750-24TS   12.2(25)SEB4    C3750
        WS-C3750-48TS   12.2(25)SEB4    C3750
        WS-C3750G-12S   12.2(20)SE4     C3750
        WS-C3750G-12S   12.2(25)SEB1    C3750
        WS-C3750G-12S   12.2(25)SEB2    C3750
        WS-C3750G-12S   12.2(25)SEE2    C3750
        WS-C3750G-24PS  12.2(25)SEB4    C3750
        WS-C3750G-24TS-1U       12.2(25)SEB4    C3750
        WS-C3750G-48PS  12.2(25)SEE2    C3750
        WS-C4006        12.2(20)EWA     Catalyst 4000 L3 Switch
        WS-C4006        12.2(25)EWA4    Catalyst 4000 L3 Switch
        WS-C4503        12.2(25)EWA6    Catalyst 4000 L3 Switch
        WS-C4506        12.1(23)E       Catalyst 4000 L3 Switch
        WS-C4506        12.2(20)EWA     Catalyst 4000 L3 Switch
        WS-C4506        12.2(25)EWA4    Catalyst 4000 L3 Switch
        WS-C4506        12.2(25)EWA6    Catalyst 4000 L3 Switch
        WS-C4507R       12.2(25)EWA5    Catalyst 4000 L3 Switch
        WS-C6506        12.2(17d)SXB    s72033_rp
        WS-C6506-E      12.2(18)SXF4    s72033_rp
        WS-C6506-E      12.2(18)SXF7    s3223_rp
        WS-C6509        12.2(18)SXF6    s72033_rp
        WS-C6509-E      12.2(18)SXF4    s72033_rp
        WS-C6509-E      12.2(18)SXF6    s72033_rp

EXAMPLE

Here is a short example that can be found in the test directory as well.

        use strict;
        use Cisco::Version;
        use Data::Dumper;

        ## load the output of 'show version' in a string
        my $show_version = &sample_show_version();

        ## crate a new Cisco::Version object 
        my $sv = Cisco::Version->new($show_version);

        ## parse the output
        $sv->parse();

        ## and get some results
        # print the amount of RAM found
        print "total DRAM memory = ", $sv->get_memory(), "\n";
        # pwdrecovery was not found in this 'show version', what now ?
        print "pwdrecovery = ", $sv->get_pwdrecovery(), "\n";
        # print the current 'not found value'
        print "'not found value' = ", $sv->get_not_found_value(), "\n";
        # let's change this value
        $sv->set_not_found_value("-----");
        # and see what happens
        print "pwdrecovery = ", $sv->get_pwdrecovery(), "\n";
        # and print it out once more
        print "'not found value' = ", $sv->get_not_found_value(), "\n";

        ## let's print a dump of all the parameters we found
        print &Dumper($sv->get_summary());


        ##
        ## this is an example output of a Cisco router 'show version'
        ## put your own version to test
        ##
        sub sample_show_version()  {
        return <<END

        Cisco IOS Software, 2800 Software (C2800NM-ADVIPSERVICESK9-M), Version 12.4(8), RELEASE SOFTWARE (fc1)
        Technical Support: http://www.cisco.com/techsupport
        Copyright (c) 1986-2006 by Cisco Systems, Inc.
        Compiled Mon 15-May-06 14:54 by prod_rel_team

        ROM: System Bootstrap, Version 12.4(1r) [hqluong 1r], RELEASE SOFTWARE (fc1)

        ROUTERA uptime is 26 weeks, 5 days, 22 hours, 25 minutes
        System returned to ROM by power-on
        System restarted at 11:40:19 GMT+2 Sat Jan 13 2007
        System image file is "flash:c2800nm-advipservicesk9-mz.124-8.bin"


        This product contains cryptographic features and is subject to United
        States and local country laws governing import, export, transfer and
        use. Delivery of Cisco cryptographic products does not imply
        third-party authority to import, export, distribute or use encryption.
        Importers, exporters, distributors and users are responsible for
        compliance with U.S. and local country laws. By using this product you
        agree to comply with applicable laws and regulations. If you are unable
        to comply with U.S. and local laws, return this product immediately.

        A summary of U.S. laws governing Cisco cryptographic products may be found at:
        http://www.cisco.com/wwl/export/crypto/tool/stqrg.html

        If you require further assistance please contact us by sending email to
        export\@cisco.com.

        Cisco 2821 (revision 53.51) with 249856K/12288K bytes of memory.
        Processor board ID FCZ102772EM
        2 Gigabit Ethernet interfaces
        1 Serial interface
        1 Channelized E1/PRI port
        1 Virtual Private Network (VPN) Module
        DRAM configuration is 64 bits wide with parity enabled.
        239K bytes of non-volatile configuration memory.
        62720K bytes of ATA CompactFlash (Read/Write)

        Configuration register is 0x2102

        END
        ;
        }

DEBUGGING

If you're having problems parsing show version or you don't understand why you get wrong data - or no data at all - then try to set $DEBUG to a higher value on top of Version.pm.

$DEBUG = 0 (off), 1 (ERROR), 2 (WARN), 3 (INFO), 4 (DEBUG)

TODO

Probably add more chassis types like firewalls, loadbalancers etc.

Let me know what else.

CAVEATS

The output of 'show version' is very much dependant of software versions and chassis types. Don't be surprised if the output is not the same for each chassis !

Calculations like memory or flash sizes may be incorrect as well. Again, don't be surprised if the figures are not what you would expect.

Make sure the show version output is used exactly as the Cisco devices returns it to the screen. Don't add leading blanks or tabs.

AUTHOR

Maarten Wallraf <perl@2nms.com>