Discussion:
[rancid] Re: show cdp neighbor
Christopher DeRemer
2010-01-13 18:06:29 UTC
Permalink
I am looking to do a similar setup as an old thread here: http://www.shrubbery.net/pipermail/rancid-discuss/2006-November/001861.html

I'm looking to add in "show cdp neighbors" as a part of our routine. Background on my reasoning: I have a bunch of Cisco AP's that are all joined to a controller, but the issue is that the Event Logging from the controller is a bit no descript and way to verbose. Instead I'd like to be notified if an AP "dies" by knowing that it's no longer seen in the particular switch's cdp neighbor list.

Anyway an Andrew suggested that I need to add a 'ShowCdpDetail' subroutine that will parse the output. Unlike the original thread I don't want show cdp neighbor detail, just show cdp neighbor, which ends up looking like a simple table.

Can someone help me make a parsing sub-routine? I have very very little experience in PHP/Shell scripting.

This would be greatly appreciated, as well as might be a great addition to RANCID for others!

Cheers,

Christopher DeRemer, CCENT
Network Administrator
Phoebe Services
484.619.2168 (Single # Reach)


________________________________
NOTICE: This confidential message/attachment contains information intended for a specific individual(s). Any inappropriate use, distribution or duplication is strictly prohibited. If received in error, notify the sender and immediately delete this transmission.
Christopher DeRemer
2010-01-13 18:57:57 UTC
Permalink
That would be great. I think the problem is going to be selecting the appropriate output. Here is an example:

Original Output:
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone

Device ID Local Intrfce Holdtme Capability Platform Port ID
2950_trexler1 Gig 0/48 129 S I WS-C2950G Gig 0/1
3550_switchroom.phoebe.local
Gig 0/52 156 R S I WS-C3550- Gig 0/1
TrexlerSquare05.cisco.com
Gig 0/3 150 AIR-LAP11 Fas 0
TrexlerSquare06.cisco.com
Gig 0/7 122 AIR-LAP11 Fas 0
TrexlerSquare01.cisco.com
Gig 0/10 162 AIR-LAP11 Fas 0
TrexlerSquare03.cisco.com
Gig 0/1 145 AIR-LAP11 Fas 0
TrexlerSquare02.cisco.com
Gig 0/11 157 AIR-LAP11 Fas 0
AllenSquare03.cisco.com
Gig 0/6 149 AIR-LAP11 Fas 0
AllenSquare01.cisco.com
Gig 0/4 135 AIR-LAP11 Fas 0
GroundReceiving.cisco.com
Gig 0/8 176 AIR-LAP11 Fas 0

============
Desired output:

Device ID Local Intrfce Capability Platform Port ID
2950_trexler1 Gig 0/48 S I WS-C2950G Gig 0/1
3550_switchroom.phoebe.local Gig 0/52 R S I WS-C3550- Gig 0/1
TrexlerSquare05.cisco.com Gig 0/3 AIR-LAP11 Fas 0
TrexlerSquare06.cisco.com Gig 0/7 AIR-LAP11 Fas 0
TrexlerSquare01.cisco.com Gig 0/10 AIR-LAP11 Fas 0
TrexlerSquare03.cisco.com Gig 0/1 AIR-LAP11 Fas 0
TrexlerSquare02.cisco.com Gig 0/11 AIR-LAP11 Fas 0
AllenSquare03.cisco.com Gig 0/6 AIR-LAP11 Fas 0
AllenSquare01.cisco.com Gig 0/4 AIR-LAP11 Fas 0
GroundReceiving.cisco.com Gig 0/8 AIR-LAP11 Fas 0
====================

Obviously a couple things have taken place:
*got rid of the header info
*got rid of the holdown-time column
*respace the columns and place info on one line for names that casue to to run over to the next line
*this causes a lot of column shifting that I once was able to fix by changing the size of the terminal size option in the switch/router, but I'm not sure if that's possible inside rancid...

So far I have this as my subroutine:
# This is a TEST routine to parse "show cdp neighbors"

sub ShowCDPNeighbors {
print STDERR " In ShowCDPNeighbors: $_" if ($debug);

while (<INPUT>) {
tr/\015//d;
last if (/^$prompt/);
next if (/^(\s*|\s*$cmd\s*)$/);
return(1) if /^\s*\^\s*$/;
return(1) if /Line has invalid autocommand /;
return(1) if /(Invalid input detected|Type help or )/;
#return(1) if ($type =~ /^(3550|4500)$/);
#return(1) if ($type !~ /^(2900XL|3500XL|6000)$/);
return(-1) if (/command authorization failed/i);
# the pager can not be disabled per-session on the PIX
if (/^(<-+ More -+>)/) {
my($len) = length($1);
s/^$1\s{$len}//;
}

ProcessHistory("COMMENTS","keysort","IO","!CDP: $_");
}
ProcessHistory("COMMENTS","keysort","IO","!\n");
return(0);
}


Thanks for your help! The hard part is yet to come! I'm willing to test a script that you make, I can just create a small test group in my rancid config :)

Cheers,

Christopher DeRemer, CCENT
Network Administrator
Phoebe Services
484.619.2168 (Single # Reach)

-----Original Message-----
From: Deny IP Any Any [mailto:***@gmail.com]
Sent: Wednesday, January 13, 2010 1:43 PM
To: Christopher DeRemer
Subject: Re: [rancid] Re: show cdp neighbor

I wouldn't mind having this as well; I'll try to hack in support to my
copy of rancid, and send a patch to you as well if you'd like.
Post by Christopher DeRemer
http://www.shrubbery.net/pipermail/rancid-discuss/2006-November/001861.html
I'm looking to add in "show cdp neighbors" as a part of our routine.
Background on my reasoning: I have a bunch of Cisco AP's that are all joined
to a controller, but the issue is that the Event Logging from the controller
is a bit no descript and way to verbose. Instead I'd like to be notified if
an AP "dies" by knowing that it's no longer seen in the particular switch's
cdp neighbor list.
Anyway an Andrew suggested that I need to add a 'ShowCdpDetail' subroutine
that will parse the output. Unlike the original thread I don't want show
cdp neighbor detail, just show cdp neighbor, which ends up looking like a
simple table.
Can someone help me make a parsing sub-routine? I have very very little
experience in PHP/Shell scripting.
This would be greatly appreciated, as well as might be a great addition to
RANCID for others!
Cheers,
Christopher DeRemer, CCENT
Network Administrator
Phoebe Services
484.619.2168 (Single # Reach)
________________________________
NOTICE: This confidential message/attachment contains information intended
for a specific individual(s). Any inappropriate use, distribution or
duplication is strictly prohibited. If received in error, notify the sender
and immediately delete this transmission.
_______________________________________________
Rancid-discuss mailing list
http://www.shrubbery.net/mailman/listinfo.cgi/rancid-discuss
--
deny ip any any (4393649193 matches)

NOTICE: This confidential message/attachment contains information intended for a specific individual(s). Any inappropriate use, distribution or duplication is strictly prohibited. If received in error, notify the sender and immediately delete this transmission.
Loading...