Commit Graph

307 Commits

Author SHA1 Message Date
xishang0128
57725078e0 chore: Adjust the error log for the search process 2024-10-11 07:35:51 +08:00
wwqgtxx
990de84391 chore: better atomic using 2024-10-02 14:45:06 +08:00
wwqgtxx
43cb48231a cache: add dns cache in udp packet sender
reduce the cost of re-resolving DNS for each packet received and prevent the target IP from jumping between multiple resolution results
2024-09-26 22:21:59 +08:00
wwqgtxx
4fa15c6334 chore: ensures packets can be sent without blocking the tunnel 2024-09-26 11:21:07 +08:00
wwqgtxx
5812a7bdeb chore: simplify the code 2024-09-25 21:37:15 +08:00
HamsterReserved
3922b17067
chore: deliver UDP packets from same connection in receiving order (#1540)
All UDP packets are queued into a single channel, and multiple
workers are launched to poll the channel in current design.

This introduces a problem where UDP packets from a single connection
are delivered to different workers, thus forwarded in a random order
if workers are on different CPU cores. Though UDP peers normally
have their own logic to handle out-of-order packets, this behavior will
inevitably cause significant variance in delay and harm connection quality.
Furthermore, this out-of-order behavior is noticeable even if the underlying
transport could provide guaranteed orderly delivery -  this is unacceptable.

This commit takes the idea of RSS in terms of NICs: it creates a distinct
queue for each worker, hashes incoming packets, and distribute the packet
to a worker by hash result. The tuple (SrcIP, SrcPort, DstIP, DstPort, Proto)
is used for hashing (Proto is always UDP so it's dropped from final
implementation), thus packets from the same connection can be sent to
the same worker, keeping the receiving order. Different connections can be
hashed to different workers to maintain performance.

Performance for single UDP connection is not affected, as there is already
a lock in natTable that prevents multiple packets being processed in different
workers, limiting single connection forwarding performance to 1 worker.
The only performance penalty is the hashing code, which should be neglectable
given the footprint of en/decryption work.

Co-authored-by: Hamster Tian <haotia@gmail.com>
2024-09-25 21:28:30 +08:00
wwqgtxx
a08aa10630 chore: some internal types support encoding.TextUnmarshaler 2024-09-19 18:36:24 +08:00
wwqgtxx
8483178524 feat: sniff add skip-src-address and skip-dst-address 2024-08-27 20:33:43 +08:00
wwqgtxx
27bcb26ecd chore: better config internal structure 2024-08-24 20:49:12 +08:00
wwqgtxx
313493cc94 chore: add fswatch 2024-07-24 14:37:10 +08:00
wwqgtxx
09be5cbc99 feat: tun support auto-redirect, route-address-set and route-exclude-address-set 2024-06-17 22:04:51 +08:00
wwqgtxx
40f40f6d24 fix: dns dial to wrong target 2024-06-15 13:32:57 +08:00
wwqgtxx
d96d7651ca chore: add inner dns proxied connection log 2024-06-13 09:07:05 +08:00
wwqgtxx
f317baa8de feat: add respect-rules for dns 2024-06-12 15:25:34 +08:00
wwqgtxx
40f5c5b987 chore: don't retry when rejected loopback connection 2024-04-03 08:42:15 +08:00
wwqgtxx
367a287153 chore: don't lookup process when Type==INNER 2024-03-28 21:49:44 +08:00
wwqgtxx
e6011301b2 chore: rebuild slowdown code 2024-01-30 19:41:50 +08:00
wwqgtxx
2e12ceeaed chore: stop retry when couldn't find ip 2024-01-02 21:49:27 +08:00
wwqgtxx
33bc7914e9 chore: read waiter for pipe 2024-01-02 18:34:34 +08:00
PuerNya
4cea3125e6 Revert 8cf14bb6 and 9d8c3b0a 2023-12-24 22:26:18 +08:00
Larvan2
59ab4fe745 chore: better Reject-Drop for UDP 2023-12-22 21:28:54 +08:00
PuerNya
9d8c3b0a3b fix: udp nat handle 2023-12-19 00:19:40 +08:00
PuerNya
8cf14bb67e chore: reslove udp host after rule matching 2023-12-18 17:13:53 +08:00
wwqgtxx
cbec564af9 chore: adapt new ReadWait interfaces 2023-12-07 23:32:37 +08:00
wwqgtxx
37791acb59 chore: upgrade xsync to v3 2023-11-23 10:24:01 +08:00
H1JK
1479b449df chore: Cleanup code 2023-11-17 23:12:10 +08:00
Steve Johnson
aa3c1ac623 fix: fix package name rules match 2023-11-17 19:39:57 +08:00
Steve Johnson
b73382f60a fix: fix android-arm64 build 2023-11-17 10:53:57 +08:00
Steve Johnson
9e96d70840 feat: share more code from android branch 2023-11-17 01:21:02 +08:00
wwqgtxx
17c9d507be chore: hello mihomo 2023-11-03 21:58:21 +08:00
5aaee9
de90c276af feat(sniffer): add quic sniffer 2023-10-19 18:30:20 +08:00
wwqgtxx
270a080b55 fix: sing listener panic 2023-10-11 10:55:12 +08:00
wwqgtxx
7ed25ddc74 chore: better atomic using 2023-10-10 21:28:46 +08:00
wwqgtxx
e0458a8fde chore: decrease goroutine used in core tunnel 2023-09-28 18:59:31 +08:00
Kiva
67d7e53f7a
feat: recovering preHandleMetadata failure from sniffing (#769) 2023-09-24 19:27:55 +08:00
PuerNya
0d300a3540 chore: handle provider proxies in proxies api 2023-09-24 15:39:14 +08:00
wwqgtxx
1cad615b25 chore: using xsync.MapOf replace sync.Map 2023-09-02 16:54:48 +08:00
wwqgtxx
e2e0fd4eba chore: using uint16 for ports in Metadata 2023-08-09 13:51:02 +08:00
wwqgtxx
9b50f56e7c fix: tunnel's handleUDPToLocal panic 2023-07-16 10:35:10 +08:00
wwqgtxx
614cc93cac chore: better close single connection in restful api 2023-06-26 18:25:36 +08:00
wwqgtxx
1cb75350e2 chore: statistic's Snapshot only contains TrackerInfo 2023-06-26 18:13:17 +08:00
wwqgtxx
42ef4fedfa chore: avoid unneeded map copy when close connection in restful api 2023-06-26 17:46:14 +08:00
Skyxim
c57f17d094 chore: reduce process lookup attempts when process not exist #613 2023-06-08 18:07:56 +08:00
wwqgtxx
63b5387164 chore: update proxy's udpConn when received a new packet 2023-06-03 21:40:09 +08:00
wwqgtxx
73140ab826 fix: udp panic when server return a domain name 2023-05-27 13:43:41 +08:00
wwqgtxx
1a9104c003 fix: UDP packet should not return io.EOF 2023-05-15 19:06:58 +08:00
wwqgtxx
a22b1cd69e fix: sing-based listener panic 2023-05-12 09:14:27 +08:00
wwqgtxx
f1be9b3f4a fix: tuic server return error udp address 2023-05-11 22:45:27 +08:00
wwqgtxx
75cd72385a chore: decrease direct udp read memory used for no-windows platform 2023-05-11 13:47:51 +08:00
Skyxim
928dcf9af9 chore: better memory fetching time 2023-04-27 06:55:53 +00:00