Files
telephony-inspector/internal/config/network_map.go

63 lines
1.6 KiB
Go

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
}