@@ -23,12 +23,10 @@ type Upstream interface {
2323
2424// Router routes packets between Upstream and ICMPRouter. Currently it rejects all other type of ICMP packets
2525type Router struct {
26- upstream Upstream
27- returnPipe FunnelUniPipe
28- icmpRouter ICMPRouter
29- ipv4Src netip.Addr
30- ipv6Src netip.Addr
31- logger * zerolog.Logger
26+ upstream Upstream
27+ returnPipe FunnelUniPipe
28+ globalConfig * GlobalRouterConfig
29+ logger * zerolog.Logger
3230}
3331
3432// GlobalRouterConfig is the configuration shared by all instance of Router.
@@ -41,12 +39,10 @@ type GlobalRouterConfig struct {
4139
4240func NewRouter (globalConfig * GlobalRouterConfig , upstream Upstream , returnPipe FunnelUniPipe , logger * zerolog.Logger ) * Router {
4341 return & Router {
44- upstream : upstream ,
45- returnPipe : returnPipe ,
46- icmpRouter : globalConfig .ICMPRouter ,
47- ipv4Src : globalConfig .IPv4Src ,
48- ipv6Src : globalConfig .IPv6Src ,
49- logger : logger ,
42+ upstream : upstream ,
43+ returnPipe : returnPipe ,
44+ globalConfig : globalConfig ,
45+ logger : logger ,
5046 }
5147}
5248
@@ -58,6 +54,10 @@ func (r *Router) Serve(ctx context.Context) error {
5854 if err != nil {
5955 return err
6056 }
57+ // Drop packets if ICMPRouter wasn't created
58+ if r .globalConfig == nil {
59+ continue
60+ }
6161 icmpPacket , err := icmpDecoder .Decode (rawPacket )
6262 if err != nil {
6363 r .logger .Err (err ).Msg ("Failed to decode ICMP packet from quic datagram" )
@@ -72,7 +72,7 @@ func (r *Router) Serve(ctx context.Context) error {
7272 }
7373 icmpPacket .TTL --
7474
75- if err := r .icmpRouter .Request (icmpPacket , r .returnPipe ); err != nil {
75+ if err := r .globalConfig . ICMPRouter .Request (icmpPacket , r .returnPipe ); err != nil {
7676 r .logger .Err (err ).
7777 Str ("src" , icmpPacket .Src .String ()).
7878 Str ("dst" , icmpPacket .Dst .String ()).
@@ -86,9 +86,9 @@ func (r *Router) Serve(ctx context.Context) error {
8686func (r * Router ) sendTTLExceedMsg (pk * ICMP , rawPacket RawPacket , encoder * Encoder ) error {
8787 var srcIP netip.Addr
8888 if pk .Dst .Is4 () {
89- srcIP = r .ipv4Src
89+ srcIP = r .globalConfig . IPv4Src
9090 } else {
91- srcIP = r .ipv6Src
91+ srcIP = r .globalConfig . IPv6Src
9292 }
9393 ttlExceedPacket := NewICMPTTLExceedPacket (pk .IP , rawPacket , srcIP )
9494
0 commit comments