Ethring
JavaScripting Network Topology
Me
- Started as a router jock
- Got bored with routine operations
- Learned to code the routine
- bash
- LAMP
- Coded myself out of the router jock position
Why I'm Talking
- I love JavaScript
- It's not just client-side!
- Ethring is my baby and I'm proud of it
- Jesse said I could
What is Ethring
- Company-internal, web-based network topology application
- Built on JavaScript from start to finish
- NodeJS
- Express
- net-snmp
- Backbone
- Bootstrap
- D3.js
- MongoDB
Why "ETHRING"?
- Because "That network-mapping-tool-thing-that-that-guy-made" was a mouthful.
- Because it was the first thing that came to mind when my boss asked me what we should call it.
- It's an "ethernet" "ring" mapping tool.
- *shrug*
The Problem
- Company network is BIG
- >2000 Cisco devices
- >9000 total devices
- 11 states
- Network grows/changes constantly
- +2 or 3 Cisco switches per night
- Documentation sucks
- Static & local
- Unique to the individual (mental maps)
- Non-existent
- Human-based configuration management
- Security concerns prevent running topology protocols
THE SOLUTION
- Single-point of reference
- Derived from the device
- Extensible
- Provide mechanism for evaluating configurations
- Able to produce reports on connectivity
- Able to interact with third-party systems
The how
- Data collected from devices via SNMP (net-snmp.js)
- Clever interpretation of data
- Interface description (human-maintained in router)
AS01.BLAH_Gi0/1.ifAlias = 'AS01.BLAHBLAH-AS02.BLAHBLAH';
AS02.BLAH_Gi0/2.ifAlias = 'AS02.BLAHBLAH-AS01.BLAHBLAH';
- MAC Table (device-maintained)
AS01.BLAH_Gi0/1.macTable = [ 'abcdef1234' ];
AS02.BLAH_Gi0/2.mac = 'abcdef1234'
- LLDP (hopefully! no cleverness required)
AS01.BLAH_Gi0/1.lldpNeighbor = 'AS02.BLAH_Gi0/2';
AS02.BLAH_Gi0/2.lldpNeighbor = 'AS01.BLAH_Gi0/1';
- GUI presentation of interpreted information (Express)
The Architecture (v1)
The Architecture (v2)
The Architecture (v3)
- Same as V2, but with abstraction
- Polling done by modules
- Collecting arbitrary data possible by dropping a new module in the directory
-
Company-specific logic removed
- Abstracted the business logic from the applications to a config file so that it can be customized to suit concepts in other networks
- GitHub?
Pointy-Talky Demo
V1 UI
V2 UI (Bootstrap & D3)
Ethring
By ben-bradley
Ethring
- 2,065