Skip to content

Commit 799fcca

Browse files
committed
fw: do not send to same faceid twice in broadcast
1 parent df243eb commit 799fcca

1 file changed

Lines changed: 27 additions & 8 deletions

File tree

fw/fw/broadcast.go

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,25 +69,44 @@ func (s *BroadcastStrategy) AfterReceiveMulticastInterest(
6969
core.Log.Trace(s, "Broadcast multicast dispatch",
7070
"name", packet.Name,
7171
"deliveredToLocal", deliveredToLocal,
72+
"petEgress", len(petEntry.EgressRouters),
73+
"petNextHops", len(petEntry.NextHops),
7274
)
73-
seen := make(map[uint64]struct{})
74-
for _, entry := range table.FibStrategyTable.GetAllFIBEntries() {
75-
for _, nextHop := range entry.GetNextHops() {
76-
if _, ok := seen[nextHop.Nexthop]; ok {
75+
76+
seen := make(map[uint64]bool)
77+
sent := 0
78+
79+
for _, egress := range petEntry.EgressRouters {
80+
nextHops := table.FibStrategyTable.FindNextHopsEnc(egress)
81+
82+
for _, nextHop := range nextHops {
83+
faceID := nextHop.Nexthop
84+
if _, ok := seen[faceID]; ok {
7785
continue
7886
}
79-
seen[nextHop.Nexthop] = struct{}{}
87+
seen[faceID] = true
8088

81-
if nextHop.Nexthop == packet.IncomingFaceID {
89+
if faceID == packet.IncomingFaceID {
8290
continue
8391
}
8492

85-
if pitEntry.InRecords()[nextHop.Nexthop] != nil {
93+
if pitEntry.InRecords()[faceID] != nil {
8694
continue
8795
}
88-
s.SendInterest(packet, pitEntry, nextHop.Nexthop, inFace)
96+
97+
if s.SendInterest(packet, pitEntry, faceID, inFace) {
98+
sent++
99+
}
89100
}
90101
}
102+
103+
if sent == 0 {
104+
core.Log.Warn(s, "Broadcast multicast had no eligible PET-scoped nexthops",
105+
"name", packet.Name,
106+
"deliveredToLocal", deliveredToLocal,
107+
"petEgress", len(petEntry.EgressRouters),
108+
)
109+
}
91110
}
92111

93112
func (s *BroadcastStrategy) BeforeSatisfyInterest(pitEntry table.PitEntry, inFace uint64) {}

0 commit comments

Comments
 (0)