@@ -67,9 +67,15 @@ func (s *Replicast) AfterReceiveInterest(
6767 return
6868 }
6969
70+ // interest with ER tag should only be unicast as dest router is known
71+ if len (packet .EgressRouter ) > 0 {
72+ core .Log .Debug (s , "Interest with ER tag passed to replicast - DROP" , "name" , packet .Name )
73+ return
74+ }
75+
7076 // sort nexthops by cost and send to best-possible nexthop for each unique ER
7177 sort .Slice (nexthops , func (i , j int ) bool {
72- return nexthops [i ].HopEntry .Cost < nexthops [i ].HopEntry .Cost
78+ return nexthops [i ].HopEntry .Cost < nexthops [j ].HopEntry .Cost
7379 })
7480
7581 sentER := make (map [uint64 ]bool )
@@ -80,13 +86,12 @@ func (s *Replicast) AfterReceiveInterest(
8086 continue
8187 }
8288
83- oldEgress := packet . EgressRouter
84- packet .EgressRouter = nh .EgressRouter
85- if sent := s .SendInterest (packet , pitEntry , nh .HopEntry .Nexthop , inFace ); sent {
86- core .Log .Trace (s , "Forwarded Interest" , "name" , packet .Name , "faceid" , nh .HopEntry .Nexthop , "er" , nh .EgressRouter , "inFace" , inFace )
89+ outgoingPkt := * packet
90+ outgoingPkt .EgressRouter = nh .EgressRouter
91+ if sent := s .SendInterest (& outgoingPkt , pitEntry , nh .HopEntry .Nexthop , inFace ); sent {
92+ core .Log .Trace (s , "Forwarded Interest" , "name" , outgoingPkt .Name , "faceid" , nh .HopEntry .Nexthop , "er" , nh .EgressRouter , "inFace" , inFace )
8793 sentER [nh .EgressRouter .Hash ()] = true
8894 }
89- packet .EgressRouter = oldEgress
9095 }
9196
9297 for _ , nh := range nexthops {
0 commit comments