NAME

Net::Brcd - Perl libraries to contact Brocade switch

SYNOPSIS

#use Net::<Proto>::Brcd;
use Net::Telnet::Brcd;

#my $sw = new Net::<Proto>::Brcd;
#Example :
my $sw = new Net::Telnet::Brcd;

$sw->connect($sw_name,$user,$pass) or die "\n";

%wwn_port = $sw->switchShow(-bywwn=>1);
my @lines = $sw->cmd("configShow");

DESCRIPTION

Perl libraries to contact Brocade switch. You could set this environment variable to simplify coding:

BRCD_USER

login name

BRCD_PASS

login password

BRCD_SWITCH

switch name or IP address

This module should not be call directly. You have to choose <Proto> for your communication.

FUNCTIONS

new

my $brcd = new Net::<Proto>::Brcd;
# For instance <Proto> = Telnet

Initialize Brocade object. No arguments needed.

connect

$brcd->connect($switch,$user,$pass);

Connect to a Brocade switch. The command exit if an error occured.

Do it before any switch command.

One object is required for each connection. If you want simultaneous connection you need several objects.

cmd

my @results = $brcd->cmd("configShow");
my $ok      = $brcd->cmd("cfgsave");

This function is used to send command to a brocade switch. And implement differents features:

  • The command tracks the continue question and answer 'yes'. The goal of this module is to be used in silent mode.

  • The Brocade command answer is returned without carriage return (no \r \n).

  • Two methods is used to give parameters.

    scalar: The string command is sent as is.

    array: The command thinks that the first element is a command, the second the principal arguments and other members. It is very useful for ali* command.

Examples :

my @results=$brcd->cmd("aliAdd","toto",":00:00:0:5:4:54:4:5");
aliAdd "toto", "00:00:0:5:4:54:4:5"

The command does not decide that the command answer is an error or not. It just store the stdout of the brocade command and return it in a array.

sendcmd

my $rc = $brcd->sendcmd("portperfshow");

This function execute command without trap standard output. It's useful for command that needs to be interrupted.

You have to use the readline function to read each line generated by the command.

sendeof

my $rc = $brcd->sendeof();

Send Ctrl-D command to interrupt command (useful for portperfshow).

readline

while (my ($str) = $brcd->readline()) {
    # Do what you want with $str
}

Read output as piped command. You have a to decided when to stop (If the line content a prompt, I return undef).

$brcd->readline({Timeout => 60});

You have to set argument with a hash ref.

aliShow

my %alias_to_wwn = $brcd->aliShow();

Send command aliShow "*" and return a hash. Some option, change the content of the returned hash :

default

Without option : return key = alias, value = WWN.

Be carefull !! If one alias contains multiple WWN, value is a ref array of all the WWN member.

-onlywwn

With option -onlywwn => 1 (default option) : does not return alias with port naming. Disable this option (-onlywwn => 0), if you want both.

-filter

By default, -filter is set to '*'. You could use an other filter to select specific alias. Recall of rbash regular expression, you could use in filter :

  • Any character.

  • ?

    One character.

  • [..]

    Character class. For instance a or b => [ab]

  • Examples

    -filter => '*sv*'
    -filter => 'w_??[ed]*'
-bywwn

With option -bywwwn => 1, return key = WWN, value = alias

my %wwn_to_alias = $brcd->aliShow(-bywwn => 1);
-byport

With option -byport => 1, return key = port, value = alias

zoneShow

my %zone = $brcd->zoneShow();

Return a hash with one key is a zone and value an array of alias member or WWN or ports.

my %zone = $brcd->zoneShow();

foreach my $zone (%zone) {
    print "$zone:\n\t";
    print join("; ", keys %{$zone{$zone}} ),"\n";
}
-bymember => 1

If you set option -bymember = 1>, you have a hash with key a member and value an array of zones where member exists.

-filter => '*'

By default, select all zone but you could set a POSIX filter for your zone.

It's important to run this command before using the followings functions.

zoneMember

my @member = $brcd->zoneMember("z_sctxp004_0");

Return an array of member of one zone. Need to execute $brcd-zoneShow> before.

memberZone

my @zones = $brcd->memberZone("w_sctxp004_0");

Return an array of zones where member exist. Need to execute $brcd-zoneShow> before.

switchShow

my %port = $brcd->switchShow();

This function send the switchShow command on the connected switch (see only one switch not all the fabric). It returns the following structure:

$port{port number}->{SPEED}  = <2G|1G|...>
                  ->{STATUS} = <OnLine|NoLight|...>
                  ->{SLOT}   = blade number
                  ->{NUMBER} = port number on blade
                  ->{TYPE}   = <E-Port|F-Port|...>
                  ->{WWN}    if connected

If you set -bywwn=1, it's return only a hash of WWN as key and port number as value.

my %wwn_to_port = $brcd->switchShow(-bywwn => 1);

If you set -withportname=1, the portName command is execute on each port of the switch to get the portname.

If you set -byslot=1, it's return only a hash of slot/number as key and portname and port number as value.

toSlot

my ($slot,$slot_number) = $brcd->toSlot(36);
my $slot_address        = $brcd->toSlot(36);

The function need to have an exectution of $brcd-switchShow>. It's usefull for a Director Switch to have the translation between absolute port number and slot/port number value.

If you use it in scalar context, the command return the string slot/slot_number (portShow format).

portShow

my %port     = $brcd->portShow($port_number);
my $portname = $brcd->portShow($port_number);

Need to have running the $brcd-switchShow> command. The function use the toSlot function before sending the portShow command.

In array context, function return a hash with key as the portName. In scalar context returns the portname.

output

print $brcd->output();

Return the last function output.

wwn_re

my $wwn_re = $brcd->wwn_re();

if (m/($wwn_re)/) {
    ...
}

Return the WWN re.

fabricShow

my %fabric = $brcd->fabricShow();

Return a hash with all the switch in the fabric. Return the result byswitch name -byswitch or -bydomain=1.

currentFabric

my $dns_fabric = $brcd->currentFabric();

Return the current fabric NAME.

isWwn

if ($brcd->isWwn($str)) {
    ...
}

Test a string to check if it is a WWN.

portAlias

my ($domain, $port_number) = $brcd->portAlias("199,6");

Split a string whith zoning format in domain and port number in the switch.

cfgSave

my $boolean = $brcd->cfgSave();

The function execute cfgSave command an return true if ok or exit. You can trap this exception whith eval {}; block. Error message always begin with Error - .

zone

my @rc = $brcd->zone(
    -add     => 1,
    -name    => 'z_toto1',
    -members => '10:00:00:00:C9:3D:F3:04',
);

my @rc = $brcd->zone(
    -add     => 1,
    -name    => 'z_toto2',
    -members => [
        '10:00:00:00:C9:3D:F3:04',
        '10:00:00:00:C9:48:08:E2',
    ],
);

Supported sub commmand are -add, -create, -delete, -remove.

ali

my @rc = $brcd->ali(
    -create  => 1,
    -name    => 'w_toto1',
    -members => '10:00:00:00:C9:51:FB:29',
);

my @rc = $brcd->ali(
    -add     => 1,
    -name    => 'w_toto2',
    -members => [
        '10:00:00:00:C9:46:D8:FD',
        '10:00:00:00:C9:46:DA:A7',
    ],
);

my @rc = $brcd->ali(
    -add     => 1,
    -name    => 'w_toto3',
    -members => [
        '10:00:00:00:C9:46:D5:B7',
    ],
);

Supported sub commmand are -add, -create, -delete, -remove.

SEE ALSO

Brocade Documentation, BrcdAPI, Net::Telnet::Brcd(3).

BUGS

...

AUTHOR

Laurent Bendavid, <lbendavid@cpan.org>

COPYRIGHT AND LICENSE

Copyright (C) 2005 by Laurent Bendavid

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.3 or, at your option, any later version of Perl 5 you may have available.

Version

1.3

History

Created 6/27/2005, Modified 8/17/07 11:46:09

4 POD Errors

The following errors were encountered while parsing the POD:

Around line 729:

Expected '=item *'

Around line 733:

Expected '=item *'

Around line 737:

Expected '=item *'

Around line 769:

=over should be: '=over' or '=over positive_number'