@startuml ' =========================== ' Abstract base class ' =========================== abstract class Device { - name : String - mgmtIP : String - interfaces : Interface[*] } Device "1" o-- "0..*" Interface : has > ' =========================== ' Device Types ' =========================== class Host { - operatingSystem : String } class Router { - routingTable : Map - routingProtocols : List } class Switch { - macTable : Map - vlanDatabase : Map } Device <|-- Host Device <|-- Router Device <|-- Switch ' =========================== ' Interfaces ' =========================== class Interface { - name : String - ipAddress : String - macAddress : String - speed : String - duplex : String } class VirtualInterface { - vlanId : Integer - parentPhysical : Interface } Interface <|-- VirtualInterface ' =========================== ' Physical Links ' =========================== class Wire { - type : String - endpoints : Interface[2] - bandwidth : String } Wire "1" -- "2" Interface : connects > ' =========================== ' Optional: Networks / Subnets ' =========================== class Network { - cidr : String - gateway : String } Network "1" o-- "0..*" Interface : membership > @enduml