| from pydantic import BaseModel, Field |
| from typing import List, Optional, Dict, Any |
|
|
| class Interface(BaseModel): |
| name: str |
| ip: Optional[str] = None |
| subnet: Optional[str] = None |
| ipv6: Optional[str] = None |
| vlan: Optional[str] = None |
|
|
| class WirelessInfo(BaseModel): |
| role: str |
| ssid: Optional[str] = None |
| encryption: Optional[str] = None |
| key: Optional[str] = None |
|
|
| class OSPFNetwork(BaseModel): |
| network: str |
|
|
| class OSPFProcess(BaseModel): |
| process_id: str |
| networks: List[str] |
|
|
| class Routing(BaseModel): |
| static_routes: List[str] = [] |
| ospf: List[OSPFProcess] = [] |
| nat: List[str] = [] |
| dhcp_pools: List[Dict[str, Any]] = [] |
|
|
| class Security(BaseModel): |
| acls: List[Dict[str, Any]] = [] |
| vulnerabilities: List[str] = [] |
| decrypted_passwords: List[Dict[str, Any]] = [] |
|
|
| class Device(BaseModel): |
| name: str |
| type: str |
| model: Optional[str] = "" |
| interfaces: List[Interface] = [] |
| wireless_info: Optional[WirelessInfo] = None |
| vlans: List[Dict[str, str]] = [] |
| routing: Optional[Routing] = None |
| security: Optional[Security] = None |
| services: List[Dict[str, Any]] = [] |
|
|
| class PhysicalLink(BaseModel): |
| type: str |
| from_device: str |
| to_device: str |
| from_port: Optional[str] = None |
| to_port: Optional[str] = None |
|
|
| class WirelessConnection(BaseModel): |
| from_device: str |
| to_device: str |
| ssid: str |
| type: str = "wireless" |
|
|
| class NetworkTopology(BaseModel): |
| version: Optional[str] = "1.0" |
| devices: List[Device] = [] |
| physical_links: List[PhysicalLink] = [] |
| wireless_connections: List[WirelessConnection] = [] |
| vlans: Dict[str, str] = {} |
| instructions: str = "" |
|
|
| model_config = { |
| "json_schema_extra": { |
| "example": { |
| "version": "1.0", |
| "devices": [ |
| { |
| "name": "Router-ISP", |
| "type": "Router", |
| "model": "2911", |
| "interfaces": [ |
| {"name": "GigabitEthernet0/0", "ip": "10.0.0.1", "subnet": "255.255.255.0"} |
| ] |
| } |
| ], |
| "physical_links": [], |
| "instructions": "This is an example topology." |
| } |
| } |
| } |
|
|