@@ -230,7 +230,7 @@ func (f *icmpForwarder) reply6(id stack.TransportEndpointID, pkt *stack.PacketBu
230230 Protocol : header .ICMPv6ProtocolNumber ,
231231 TTL : route .DefaultTTL (),
232232 TOS : replyclass ,
233- }, pkt )
233+ }, replyPkt )
234234 }
235235 loge (err )("icmp: v6: %s: wrote reply to tun; err? %v" , f .o , err )
236236 })
@@ -666,15 +666,29 @@ func l4l7(pkt *stack.PacketBuffer, sz uint32) ([]byte, error) {
666666 din .Merge (& l7 ) // l4 + l7
667667 return din .Flatten (), nil
668668}
669+ // Fix for IPv6 reply function
670+ func (f * icmpForwarder ) reply6 (id stack.TransportEndpointID , pkt * stack.PacketBuffer ) (handled bool ) {
671+ // ... existing code until line 173 ...
672+
673+ // Fixed: Use correct protocol number and packet
674+ err = route .WritePacket (stack.NetworkHeaderParams {
675+ Protocol : header .ICMPv6ProtocolNumber , // ✅ Fixed protocol
676+ TTL : route .DefaultTTL (),
677+ TOS : replyclass ,
678+ }, replyPkt ) // ✅ Use reply packet, not original
679+
680+ // ... rest of function
681+ }
669682
670683func l3l4 (pkt * stack.PacketBuffer , sz int64 ) (b buffer.Buffer , err error ) {
671- l3 := pkt .NetworkHeader ().View ()
672- l4 := pkt .TransportHeader ().View ()
673- v := buffer .MakeWithView (l3 )
674- if err = v .Append (l4 ); err == nil {
675- b = pkt .Data ().ToBuffer ()
676- b .Merge (& b )
677- b .Truncate (sz )
678- }
679- return
684+ l3 := pkt .NetworkHeader ().View ()
685+ l4 := pkt .TransportHeader ().View ()
686+ combined := buffer .MakeWithView (l3 )
687+ if err = combined .Append (l4 ); err == nil {
688+ payload := pkt .Data ().ToBuffer ()
689+ combined .Merge (& payload )
690+ combined .Truncate (sz )
691+ b = combined
692+ }
693+ return
680694}
0 commit comments