feat: Initial project structure with TUI, SSH, SIP parser, and capture modules
This commit is contained in:
62
internal/config/network_map.go
Normal file
62
internal/config/network_map.go
Normal file
@@ -0,0 +1,62 @@
|
||||
package config
|
||||
|
||||
// NodeType represents the type of network node
|
||||
type NodeType string
|
||||
|
||||
const (
|
||||
NodeTypePBX NodeType = "PBX"
|
||||
NodeTypeProxy NodeType = "Proxy"
|
||||
NodeTypeMediaServer NodeType = "MediaServer"
|
||||
NodeTypeGateway NodeType = "Gateway"
|
||||
NodeTypeEndpoint NodeType = "Endpoint"
|
||||
NodeTypeUnknown NodeType = "Unknown"
|
||||
)
|
||||
|
||||
// NetworkNode represents a network entity in the SIP infrastructure
|
||||
type NetworkNode struct {
|
||||
Name string `json:"name"`
|
||||
IP string `json:"ip"`
|
||||
Type NodeType `json:"type"`
|
||||
Aliases []string `json:"aliases,omitempty"` // Alternative IPs or hostnames
|
||||
Description string `json:"description,omitempty"`
|
||||
}
|
||||
|
||||
// NetworkMap holds the configured network topology
|
||||
type NetworkMap struct {
|
||||
Nodes []NetworkNode `json:"nodes"`
|
||||
}
|
||||
|
||||
// NewNetworkMap creates an empty network map
|
||||
func NewNetworkMap() *NetworkMap {
|
||||
return &NetworkMap{
|
||||
Nodes: make([]NetworkNode, 0),
|
||||
}
|
||||
}
|
||||
|
||||
// AddNode adds a new node to the network map
|
||||
func (nm *NetworkMap) AddNode(node NetworkNode) {
|
||||
nm.Nodes = append(nm.Nodes, node)
|
||||
}
|
||||
|
||||
// FindByIP looks up a node by IP address
|
||||
func (nm *NetworkMap) FindByIP(ip string) *NetworkNode {
|
||||
for i := range nm.Nodes {
|
||||
if nm.Nodes[i].IP == ip {
|
||||
return &nm.Nodes[i]
|
||||
}
|
||||
for _, alias := range nm.Nodes[i].Aliases {
|
||||
if alias == ip {
|
||||
return &nm.Nodes[i]
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// LabelForIP returns a human-readable label for an IP, or the IP itself if unknown
|
||||
func (nm *NetworkMap) LabelForIP(ip string) string {
|
||||
if node := nm.FindByIP(ip); node != nil {
|
||||
return node.Name + " (" + string(node.Type) + ")"
|
||||
}
|
||||
return ip
|
||||
}
|
||||
Reference in New Issue
Block a user