@@ -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
93112func (s * BroadcastStrategy ) BeforeSatisfyInterest (pitEntry table.PitEntry , inFace uint64 ) {}
0 commit comments