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

NAME

SNMP::Map - Tool for drawing network map

SYNOPSIS

 my $map = new SNMP::Map;
 $map->get_data(username=> 'user',
               password =>'pass',
               ipv3 => ['10.8.255.238','10.8.255.239','10.8.255.244','10.8.255.248'],
               vlan=>'vlan-224'
 );
 $map->get_output(file => 'map.jpg');

DESCRIPTION

The SNMP::Map module is used for drawing network map of hosts which support SNMP. Spanning Tree root switch can be distinguished by its position and color. Module provides switches and ports on the picture linked by each other.You can get various information about switch and its link. Image map file is also available. So, it can be used to create javascript for popuping additional info.

METHODS

new

This is the constructor. It does not accept any attributes.

 my $map = new SNMP::Map;

get_data

get_data method gets data from switches using SNMP protocol. It starts from the spanning tree root switch, and makes recursive calls to all switches linked to root. By default, it uses SNMP v3, but for switches listed in ipv2 array reference,it uses SNMP v2. If a failure occurs, method returns underfined value, you can use 'error' method to get error. At least, one ip adress must be specified by ipv2 or ipv3 attribute. It is recommended to get more info, list all switches by ipv2 and ipv3 attributes. It was tested on 'WS-C2950','WS-C2960','WS-3750' platforms. 'WS-C2950' switches must be listed in ipv2.

Attributes:

username

username for SNMP v3.

password

password for SNMP v3.

community

community for SNMP v2.

timeout

timeout for SNMP.

ipv3

array reference consist of list of hosts which is supported SNMP v3.

ipv2

array reference consist of list of hosts which is supported SNMP v2.

debug

switch on/off debug.can be true or false. Debug information is printed to STDERR.

vlan

vlan to draw map.

 $map->get_data(username=>'user',
                community=>'comm',
                password=>'pass',
                ipv3=>['10.8.255.115','10.8.255.118','10.8.255.119','10.8.255.111'],
                ipv2=>['10.8.255.145','10.8.255.133','10.8.255.151','10.8.255.149'],
                vlan => 'vlan-192');

get_output

This method is used for saving image into file. Also you can get an image map file. A color value used in attributes of the method may be "h,s,v" (hue, saturation, brightness) floating point numbers between 0 and 1, or an X11 color name such as 'white', 'black', 'red', 'green', 'blue', 'yellow', 'magenta', 'cyan', or 'burlywood'.

Attributes:

root_color

sets the outline color for Spanning Tree root switch, and the default fill color if the 'style' is 'filled' and 'fillcolor' is not specified.

root_fillcolor

sets the fill color for Spanning Tree root switch when the style is 'filled'. If not specified, the 'fillcolor' when the 'style' is 'filled' defaults to be the same as the outline color.

root_fontcolor

sets the label text color for Spanning Tree root switch.

color

sets the outline color for hosts and the default fill color if the 'style' is 'filled' and 'fillcolor' is not specified.

fillcolor

sets the fill color for hosts when the style is 'filled'. If not specified, the 'fillcolor' when the 'style' is 'filled' defaults to be the same as the outline color.

fontcolor

sets the label text color for hosts.

shapes

sets hash reference for the host`s shape, the key - regexp for the device platform, value - shape. shape could be: 'record', 'plaintext', 'ellipse', 'circle', 'egg', 'triangle', 'box', 'diamond', 'trapezium', 'parallelogram', 'house', 'hexagon', 'octagon'. unknown key is for hosts for which platform is unknown.

edges_colors

sets array reference for colors of the links between hosts. First element of array reference is the color for the unknown state of link. Last element is the color for link in blocking state. 2-7 elements - colors for hosts depending of its cost. Formula to correspond link color and its cost - log(1/cost)*100 .

file

file to output image.

format

format of image file. Could be: 'ps','hpgl','pcl','mif','pic','gd','gd2','gif','jpg','png','wbmp', 'vrml','vtx,'mp','fig','svg','svgz','plain'.

layout

The layout attribute determines which layout algorithm GraphViz.pm will use. Possible values are: 'dot','neato','twopi','circo','fdp'. 'dot' and 'circo' are recommended.

bgcolor

background color of image.

height, width

minimal height/width of image in inches.

fontsize

host`s label font size.

style

host`s style. Could be: 'filled', 'solid', 'dashed', 'dotted', 'bold', 'invis'.

edge_style

style of link. Could be: 'filled', 'solid', 'dashed', 'dotted', 'bold', 'invis'.

cmap,imap

file to output client-side/server-side image file. href parameter in the html tags is the ip adress for hosts and number for links. You can change it to nohref and use 'nodes_info' and 'edge_info' methods to create javascript pop up.

 $map->get_output(file=>'../map.jpg',
                 root_fillcolor=>'blue',
                 root_fontcolor=>'cyan',
                 fontcolor=>'red',
                 color=>'green',
                 shapes => {unknown => 'record','IP Phone' =>'ellipse'},
                 edges_colors=>['blue','0,0,0.9','0,0,0.8','0,0,0.7','0,0.5,0.6','0,0,0.5','0,0,0.4','red'],
                 height=>5,
                 width=>9,
                 edge_style=>'dashed',
                 cmap=>'map'
);

error

return last error message.

nodes_info

returns hash reference with information about host.To use this method you must call 'get_data' method first. Keys of the hash reference are the ip address of the hosts.The following information could be obtained:

 $info = $map->nodes_info();
 print $info->{10.8.255.101}{deviceID};
 print $info->{10.8.255.101}{priority};
 print $info->{10.8.255.101}{mac};
 print $info->{10.8.255.101}{platform};
 print $info->{10.8.255.101}{interfaces}{Gi0/1}{cost}; #cost for Gi0/1 port
 print $info->{10.8.255.101}{interfaces}{Gi0/1}{cost}; #state for Gi0/1 port

edge_info

take the number of the link as first parameter. To use this method you must call 'get_data' method first.Number correspond to href parameter of the image map file of link. The following information could be obtained:

 $info = $map->edge_info(5);
 print $info->{from_ip};
 print $info->{from_interface}; #name of the port
 print $info->{from_virtual}; #name of the virtual port
 print $info->{to_ip};
 print $info->{to_interface}; #name of the port
 print $info->{to_virtual}; #name of the virtual port

NOTES

Module was tested on 'WS-C2950','WS-C2960','WS-3750' platforms. ipv2 option in 'get_data' method is used for WS-C2950.

AUTHOR

Krol Alexander <kasha@bigmir.net>

LICENSE

This module is free software; you can redistribute it or modify it under the same terms as Perl itself.