1 From 3f78422f81f3abc2668fc3938b31d213bfe4dfff Mon Sep 17 00:00:00 2001
2 From: mzz2017 <mzz@tuta.io>
3 Date: Sun, 28 Aug 2022 17:54:36 +0800
4 Subject: [PATCH] fix: a problem that supervisor cannot exit normally
7 service/core/specialMode/infra/handle.go | 11 ++++++----
8 service/core/specialMode/infra/supervisor.go | 22 ++++++++------------
9 2 files changed, 16 insertions(+), 17 deletions(-)
11 --- a/core/specialMode/infra/handle.go
12 +++ b/core/specialMode/infra/handle.go
13 @@ -127,10 +127,13 @@ func (interfaceHandle *handle) handleRec
17 -func packetFilter(portCache *portCache, pPacket *gopacket.Packet, whitelistDnsServers *v2router.GeoIPMatcher) (m *dnsmessage.Message, pSAddr, pSPort, pDAddr, pDPort *gopacket.Endpoint) {
19 - trans := packet.TransportLayer()
20 +func packetFilter(portCache *portCache, packet gopacket.Packet, whitelistDnsServers *v2router.GeoIPMatcher) (m *dnsmessage.Message, pSAddr, pSPort, pDAddr, pDPort *gopacket.Endpoint) {
22 + if packet.NetworkLayer() == nil {
26 + trans := packet.TransportLayer()
30 @@ -180,7 +183,7 @@ func packetFilter(portCache *portCache,
33 func (interfaceHandle *handle) handlePacket(packet gopacket.Packet, ifname string, whitelistDnsServers *v2router.GeoIPMatcher, whitelistDomains *strmatcher.MatcherGroup) {
34 - m, sAddr, sPort, dAddr, dPort := packetFilter(interfaceHandle.portCache, &packet, whitelistDnsServers)
35 + m, sAddr, sPort, dAddr, dPort := packetFilter(interfaceHandle.portCache, packet, whitelistDnsServers)
39 --- a/core/specialMode/infra/supervisor.go
40 +++ b/core/specialMode/infra/supervisor.go
41 @@ -9,7 +9,6 @@ import (
42 v2router "github.com/v2rayA/v2ray-lib/router"
43 "github.com/v2rayA/v2rayA/pkg/util/log"
48 type DnsSupervisor struct {
49 @@ -70,7 +69,7 @@ func (d *DnsSupervisor) DeleteHandles(if
51 close(d.handles[ifname].done)
52 delete(d.handles, ifname)
53 - log.Trace("DnsSupervisor:%v closed", ifname)
54 + log.Trace("DnsSupervisor:%v deleted", ifname)
58 @@ -81,28 +80,24 @@ func (d *DnsSupervisor) Run(ifname strin
60 handle, ok := d.handles[ifname]
63 return fmt.Errorf("Run: %v not exsits", ifname)
67 return fmt.Errorf("Run: %v is running", ifname)
70 log.Trace("[DnsSupervisor] " + ifname + ": running")
71 - pkgsrc := gopacket.NewPacketSource(handle, layers.LayerTypeEthernet)
72 + // we only decode UDP packets
73 + pkgsrc := gopacket.NewPacketSource(handle, layers.LayerTypeDNS)
75 + //pkgsrc.Lazy = true
77 packets := pkgsrc.Packets()
81 - packets <- gopacket.NewPacket(nil, layers.LinkTypeEthernet, gopacket.DecodeOptions{})
86 - time.Sleep(2 * time.Second)
90 + packets <- gopacket.NewPacket(nil, layers.LinkTypeEthernet, pkgsrc.DecodeOptions)
93 for packet := range packets {
94 @@ -113,5 +108,6 @@ out:
96 go handle.handlePacket(packet, ifname, whitelistDnsServers, whitelistDomains)
98 + log.Trace("DnsSupervisor:%v closed", ifname)