diff --git a/UML/UML.d2 b/UML/UML.d2 new file mode 100644 index 0000000..f457c56 --- /dev/null +++ b/UML/UML.d2 @@ -0,0 +1,110 @@ +direction: down + +Topology: { + shape: class + devices: "Dict[str, Device]" + networks: "Dict[str, Network]" + __init__(self) + "add_device(self, device: Device)" + "rm_device(self, device: Device)" + "add_network(self, network: Network)" + "rm_network(self, network: Network)" + __repr__(self): str +} + +Network: { + shape:class + name: str + interfaces: "List[Interface]" + vlan: "Optional[str]" + network_ip: "Optional[str]" + subnet_mask: "Optional[str]" + "__init__(self, ...)" + "add_interface(self, interface: Interface)" + "rm_interface(self, interface: Interface)" + __repr__(self): str +} + +Host: { + shape: class +} +Router: { + shape: class +} +Switch: { + shape: class +} + +Device: { + shape: class + + name: str + role: str + interfaces: "Dict[str, Interface]" + "__init__(self, name: str)" + "add_interface(self, interface: Interface)" + "rm_interface(self, interface: Interface)" + __repr__(self): str +} + +VirtualInterface: { + shape: class +} + +Interface: { + shape: class + + name: str + ip_address: "Optional[str]" + network: "Optional[str]" + default_gateway: "Optional[str]" + device: Device + + "__init__(self, ...)" + __repr__(self): str +} + +Host -> Device: { + target-arrowhead.shape: triangle + target-arrowhead.style.filled: false +} + +Router -> Device: { + target-arrowhead.shape: triangle + target-arrowhead.style.filled: false +} + +Switch -> Device: { + target-arrowhead.shape: triangle + target-arrowhead.style.filled: false +} + +VirtualInterface -> Interface: { + target-arrowhead.shape: triangle + target-arrowhead.style.filled: false +} + +Device -- Interface: has { + source-arrowhead: 1..* + target-arrowhead: 1 +} + +Device -- VirtualInterface: has { + source-arrowhead: 1..* + target-arrowhead: 1 +} + +Topology -- Network: has { + source-arrowhead: 1..* + target-arrowhead: 1 +} + +Topology -- Device: has { + source-arrowhead: 1..* + target-arrowhead: 1 +} + +Network -- Interface: has { + source-arrowhead: 1..* + target-arrowhead: 1 +} diff --git a/UML/UML.txt b/UML/UML.txt deleted file mode 100644 index 6fd6825..0000000 --- a/UML/UML.txt +++ /dev/null @@ -1,79 +0,0 @@ -@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