master
go 63 lines 1.35 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package l2topology
4
5 import "strings"
6
7 func canonicalARPProtocol(protocol string) string {
8 protocol = strings.TrimSpace(strings.ToLower(protocol))
9 switch protocol {
10 case "", "arp":
11 return "arp"
12 case "nd":
13 return "nd"
14 default:
15 return "arp"
16 }
17 }
18
19 func canonicalAddrType(addrType, ip string) string {
20 addrType = strings.TrimSpace(strings.ToLower(addrType))
21 if ipAddr := parseAddr(ip); ipAddr.IsValid() {
22 if ipAddr.Is4() {
23 return "ipv4"
24 }
25 return "ipv6"
26 }
27 if addrType == "" {
28 return ""
29 }
30 return addrType
31 }
32
33 func deriveRemoteDeviceID(hostname, chassisID, mgmtIP, fallback string) string {
34 if host := canonicalHost(hostname); host != "" {
35 return host
36 }
37 if ch := canonicalToken(chassisID); ch != "" {
38 return "chassis-" + ch
39 }
40 if ip := canonicalIP(mgmtIP); ip != "" {
41 return "ip-" + strings.ReplaceAll(ip, ":", "-")
42 }
43 if fb := canonicalHost(fallback); fb != "" {
44 return fb
45 }
46 return "discovered-unknown"
47 }
48
49 func canonicalHost(v string) string {
50 v = strings.TrimSpace(strings.ToLower(v))
51 v = strings.TrimSuffix(v, ".")
52 return v
53 }
54
55 func canonicalToken(v string) string {
56 v = strings.TrimSpace(strings.ToLower(v))
57 v = strings.TrimPrefix(v, "0x")
58 v = strings.ReplaceAll(v, ":", "")
59 v = strings.ReplaceAll(v, "-", "")
60 v = strings.ReplaceAll(v, ".", "")
61 v = strings.ReplaceAll(v, " ", "")
62 return v
63 }