Starting to think about learning how to add Cisco REP (Resilient Ethernet Protocol) support to LibreNMS - so asking if anyone uses it and has a start on it, or wants to assist?
Simplest explanation is probably:
The Resilient Ethernet Protocol (REP ) is a Cisco proprietary protocol that provides an alternative to the Spanning Tree Protocol (STP). REP provides a way to control network loops, handle link failures, and improve convergence time.
Here’s a pretty picture to break up my ramblings:
It is used in Metro Ethernet deployments (ME switching) and industrial applications (IE switching), but also has good support on Catalyst 35xx and 9xxx ranges.
In terms of what it does and the data it provides:
It provides (optionally)-deterministic loop avoidance topology control with fast convergence at scale (~ 50us). It is defined in rings, not meshes - so the topology and failure points can be fixed and reportable by the protocol. It can also translate topology change notifications to other STP protocols.
The MIBs for it are already in the code base, and I will have an increasing number of devices available soon to work on in anger and will need to detect and hopefully somehow visualise link failures via LibreNMS.
Some examples for later reference:
SNMP table: CISCO-RESILIENT-ETHERNET-PROTOCOL-MIB::crepSegmentTable
crepSegmentInterface1 crepSegmentInterface2 crepSegmentComplete crepSegmentPreempt crepSegmentPreemptStatus
54 56 false false none
55 0 false false none
SNMP table: CISCO-RESILIENT-ETHERNET-PROTOCOL-MIB::crepInterfaceConfigTable
crepIfSegmentId crepIfOperStatus crepIfPortRole crepIfPortID crepIfAdminEdgePortType crepIfOperEdgePortType crepIfPreferredConfig crepifBlockedVlans1k crepifBlockedVlans2k crepifBlockedVlans3k crepifBlockedVlans4k crepLoadBalanceBlockPortType crepBlockPortNumInfo crepBlockPortIdInfo crepIfPreemptDelayTimer crepIfStcnPropagateToSTP crepIfStcnPropagateToOtherSegs crepIfStcnPropagateToIf crepIfConfigRowStatus
1 twoWay openPort "XX XX XX XX XX XX 83 00 " notEdge notEdge false "" "" "" "" none 0 "00 00 00 00 00 00 00 00 " -1 delay in seconds false "FF FF FF FF FF FF FF FF FF FF FF FF F0 " 0 active
2 initDown failedPort "XX XX XX XX XX XX 83 00 " edge edge false "" "" "" "" none 0 "00 00 00 00 00 00 00 00 " -1 delay in seconds false "FF FF FF FF FF FF FF FF FF FF FF FF F0 " 0 active
1 initDown failedPort "XX XX XX XX XX XX 83 00 " notEdge notEdge false "" "" "" "" none 0 "00 00 00 00 00 00 00 00 " -1 delay in seconds false "FF FF FF FF FF FF FF FF FF FF FF FF F0 " 0 active
SNMP table: CISCO-RESILIENT-ETHERNET-PROTOCOL-MIB::crepInterfaceStatsTable
crepCounterDiscontinuityTime crepLslRxPdus crepLslTxPdus crepHflRxPdus crepHflTxPdus crepBpaTlvRxPackets crepBpaTlvTxPackets crepBpaStcnLslRxPackets crepBpaStcnLslTxPackets crepBpaStcnHflRxPackets crepBpaStcnHflTxPackets crepEpaElectionTlvRxPackets crepEpaElectionTlvTxPackets crepEpaCommandTlvRxPackets crepEpaCommandTlvTxPackets crepEpaInfoTlvRxPackets crepEpaInfoTlvTxPackets
1324 299756 240138 0 0 3 4 0 0 0 0 59945 0 0 0 59945 59946
1325 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1326 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The console output commands on a Cisco 9300 of the above data are vaguely:
#show rep topology
REP Segment 1
Warning: REP detects a segment failure, topology may be incomplete
BridgeName PortName Edge Role
-------------------------------- ---------- ---- ----
xx-SW01 Po3 Fail
xx-SW01 Po1 Open
yy-SW01 Po1 Sec Open
REP Segment 2
Warning: REP detects a segment failure, topology may be incomplete
BridgeName PortName Edge Role
-------------------------------- ---------- ---- ----
xx-SW01 Po2 Sec Fail
#show rep topology detail
REP Segment 1
Warning: REP detects a segment failure, topology may be incomplete
xxx-SW01, Po3 (Intermediate)
Failed Port, Reason: Physical link down
Bridge MAC: xxxx.xxxx.8300
Port Number: 0BEB
Port Priority: 800
Effective Port Priority: XXXXXXXXXXXXXX8300
Neighbor Number: Not available
xxx-SW01, Po1 (Intermediate)
Open Port, all vlans forwarding
Bridge MAC: xxxx.xxxx.8300
Port Number: 0BE9
Port Priority: 000
Effective Port Priority: XXXXXXXXXXXXXX8300
Neighbor Number: Not available
yyy-SW01, Po1 (Secondary Edge)
Open Port, all vlans forwarding
Bridge MAC: xxxx.xxxx.7600
Port Number: 0BE9
Port Priority: 000
Effective Port Priority: XXXXXXXXXXXXXX7600
Neighbor Number: Not available
My initial usage cases will be simple full blocking without VLAN load balancing, and maybe STNC, but I envisage it would probably go on the STP tab (to avoid making more tabs), under a REP heading much like the STP ports currently are. REP divulges the full ring topology, so a table with the data in a fixed order to preserve the topology would probably be enough initially:
Thoughts, tips or other?