master
go 84 lines 2.26 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package l2topology
4
5 type deviceInterfaceCollector struct {
6 ifIndexes map[string]struct{}
7 ifNames map[string]struct{}
8 ifTypes map[string]int
9 adminCounts map[string]int
10 operCounts map[string]int
11 portStatuses []topologyDevicePortStatus
12 portEvidence map[int]*topologyDevicePortEvidence
13 }
14
15 type deviceInterfaceSummaryBuilder struct {
16 interfaces []Interface
17 attachments []Attachment
18 adjacencies []Adjacency
19 deviceByID map[string]Device
20 ifIndexByDeviceName map[string]int
21 bridgeLinks []bridgeBridgeLinkRecord
22 reporterAliases map[string][]string
23 collectors map[string]*deviceInterfaceCollector
24 managedAliasOwners map[string]map[string]struct{}
25 }
26
27 func buildTopologyDeviceInterfaceSummaries(
28 interfaces []Interface,
29 attachments []Attachment,
30 adjacencies []Adjacency,
31 deviceByID map[string]Device,
32 ifIndexByDeviceName map[string]int,
33 bridgeLinks []bridgeBridgeLinkRecord,
34 reporterAliases map[string][]string,
35 ) map[string]topologyDeviceInterfaceSummary {
36 return newDeviceInterfaceSummaryBuilder(
37 interfaces,
38 attachments,
39 adjacencies,
40 deviceByID,
41 ifIndexByDeviceName,
42 bridgeLinks,
43 reporterAliases,
44 ).build()
45 }
46
47 func newDeviceInterfaceSummaryBuilder(
48 interfaces []Interface,
49 attachments []Attachment,
50 adjacencies []Adjacency,
51 deviceByID map[string]Device,
52 ifIndexByDeviceName map[string]int,
53 bridgeLinks []bridgeBridgeLinkRecord,
54 reporterAliases map[string][]string,
55 ) *deviceInterfaceSummaryBuilder {
56 return &deviceInterfaceSummaryBuilder{
57 interfaces: interfaces,
58 attachments: attachments,
59 adjacencies: adjacencies,
60 deviceByID: deviceByID,
61 ifIndexByDeviceName: ifIndexByDeviceName,
62 bridgeLinks: bridgeLinks,
63 reporterAliases: reporterAliases,
64 collectors: make(map[string]*deviceInterfaceCollector),
65 }
66 }
67
68 func (b *deviceInterfaceSummaryBuilder) build() map[string]topologyDeviceInterfaceSummary {
69 if len(b.interfaces) == 0 {
70 return nil
71 }
72
73 b.collectInterfaces()
74 if len(b.collectors) == 0 {
75 return nil
76 }
77
78 b.managedAliasOwners = buildFDBAliasOwnerMap(b.reporterAliases)
79 b.collectFDBAttachments()
80 b.collectAdjacencyEvidence()
81 b.collectBridgeLinkEvidence()
82
83 return b.buildSummaries()
84 }