SNMP::Map - Tool for drawing network map

- NAME
- SYNOPSIS
- DESCRIPTION
- METHODS

- new
- get_data
- get_output
- error
- nodes_info
- edge_info

- NOTES
- AUTHOR
- LICENSE

# 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.