1
0
mirror of https://github.com/fumiama/WireGold.git synced 2026-06-27 22:30:26 +08:00

5 Commits

Author SHA1 Message Date
源文雨
762c5a3692 fix(ttl): map concurrent write 2026-04-12 13:01:39 +08:00
源文雨
3da0369a5f fix: release version tag 2026-04-11 16:05:14 +08:00
源文雨
f0a3440dfb feat(icmp): use fifo instead of pool 2026-04-11 15:35:31 +08:00
源文雨
25c5a5d658 feat: add version tag 2026-04-11 15:24:57 +08:00
源文雨
a85b102426 chore: make lint happy 2026-04-11 15:13:24 +08:00
6 changed files with 107 additions and 39 deletions

View File

@@ -6,52 +6,69 @@ on:
env: env:
GITHUB_TOKEN: ${{ github.token }} GITHUB_TOKEN: ${{ github.token }}
CGO_ENABLED: 0
LDFLAGS: -s -w -checklinkname=0
VERSION_PKG: github.com/fumiama/WireGold/config
jobs: jobs:
my-job: build:
name: Build WireGold on Push Tag 🚀 name: Build ${{ matrix.name }}
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy:
matrix:
include:
- { name: linux-x64, goos: linux, goarch: amd64 }
- { name: linux-x86, goos: linux, goarch: "386" }
- { name: windows-x64, goos: windows, goarch: amd64, ext: .exe }
- { name: windows-x86, goos: windows, goarch: "386", ext: .exe }
- { name: linux-arm64, goos: linux, goarch: arm64, goarm: "7" }
- { name: linux-armv6, goos: linux, goarch: arm, goarm: "6" }
- { name: linux-mips, goos: linux, goarch: mips }
- { name: linux-mips-softfloat, goos: linux, goarch: mips, gomips: softfloat }
- { name: linux-mipsel, goos: linux, goarch: mipsle }
- { name: linux-mipsel-softfloat, goos: linux, goarch: mipsle, gomips: softfloat }
env:
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
GOARM: ${{ matrix.goarm }}
GOMIPS: ${{ matrix.gomips }}
steps: steps:
- name: Set up Go - name: Set up Go
uses: actions/setup-go@master uses: actions/setup-go@master
with: with:
go-version: ^1.25 go-version: ^1.25
- name: Check out code into the Go module directory - name: Check out code
uses: actions/checkout@master uses: actions/checkout@master
- name: Cache Go - name: Cache Go
id: cache
uses: actions/cache@v4 uses: actions/cache@v4
with: with:
# A list of files, directories, and wildcard patterns to cache and restore
path: ~/go/pkg/mod path: ~/go/pkg/mod
key: ${{ runner.os }}-build-${{ hashFiles('**/go.sum') }} key: ${{ runner.os }}-build-${{ hashFiles('**/go.sum') }}
- name: Tidy Go modules - name: Tidy Go modules
run: go mod tidy run: go mod tidy
- name: Build linux-x64 - name: Build
run: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w -checklinkname=0" -o artifacts/wg-linux-x64 -trimpath run: go build -ldflags="${LDFLAGS} -X ${VERSION_PKG}.Version=${GITHUB_REF_NAME#v}" -o wg-${{ matrix.name }}${{ matrix.ext }} -trimpath
- name: Build linux-x86
run: CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -ldflags="-s -w -checklinkname=0" -o artifacts/wg-linux-x86 -trimpath - name: Upload artifact
- name: Build windows-x64 uses: actions/upload-artifact@v4
run: CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags="-s -w -checklinkname=0" -o artifacts/wg-windows-x64.exe -trimpath with:
- name: Build windows-x86 name: wg-${{ matrix.name }}
run: CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -ldflags="-s -w -checklinkname=0" -o artifacts/wg-windows-x86.exe -trimpath path: wg-${{ matrix.name }}${{ matrix.ext }}
- name: Build arm64
run: CGO_ENABLED=0 GOOS=linux GOARCH=arm64 GOARM=7 go build -ldflags="-s -w -checklinkname=0" -o artifacts/wg-linux-arm64 -trimpath release:
- name: Build armv6 name: Upload Release 🚀
run: CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 go build -ldflags="-s -w -checklinkname=0" -o artifacts/wg-linux-armv6 -trimpath needs: build
- name: Build mips runs-on: ubuntu-latest
run: CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -ldflags="-s -w -checklinkname=0" -o artifacts/wg-linux-mips -trimpath steps:
- name: Build mips-softfloat - name: Download artifacts
run: CGO_ENABLED=0 GOOS=linux GOARCH=mips GOMIPS=softfloat go build -ldflags="-s -w -checklinkname=0" -o artifacts/wg-linux-mips-softfloat -trimpath uses: actions/download-artifact@v4
- name: Build mipsel with:
run: CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -ldflags="-s -w -checklinkname=0" -o artifacts/wg-linux-mipsel -trimpath path: artifacts
- name: Build mipsel-softfloat merge-multiple: true
run: CGO_ENABLED=0 GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -ldflags="-s -w -checklinkname=0" -o artifacts/wg-linux-mipsel-softfloat -trimpath
- name: Upload binaries to release - name: Upload binaries to release
uses: svenstaro/upload-release-action@v2 uses: svenstaro/upload-release-action@v2

View File

@@ -1,3 +1,16 @@
package config package config
import "time"
// ShowDebugLog turn on to print verbose logs.
const ShowDebugLog = false const ShowDebugLog = false
// Version will show in help message to distinguish different builds.
// Use -ldflags="-X github.com/fumiama/WireGold/config.Version=x.y.z" to override.
var Version = "dev"
func init() {
if Version == "dev" {
Version = "dev-" + time.Now().Format(time.DateOnly)
}
}

2
go.mod
View File

@@ -3,7 +3,7 @@ module github.com/fumiama/WireGold
go 1.25.0 go 1.25.0
require ( require (
github.com/FloatTech/ttl v0.0.0-20260408173819-76cac20073ab github.com/FloatTech/ttl v0.0.0-20260412050038-bd89b9d66fcd
github.com/RomiChan/syncx v0.0.0-20240418144900-b7402ffdebc7 github.com/RomiChan/syncx v0.0.0-20240418144900-b7402ffdebc7
github.com/fumiama/blake2b-simd v0.0.0-20250228045919-a5dcaba5419a github.com/fumiama/blake2b-simd v0.0.0-20250228045919-a5dcaba5419a
github.com/fumiama/go-base16384 v1.7.1 github.com/fumiama/go-base16384 v1.7.1

4
go.sum
View File

@@ -1,5 +1,5 @@
github.com/FloatTech/ttl v0.0.0-20260408173819-76cac20073ab h1:V1izfoG5S2Q6LivnKvCVl4xMZYnmf+dGGxK3rCxeGuI= github.com/FloatTech/ttl v0.0.0-20260412050038-bd89b9d66fcd h1:Dt86dtJ5hPFvDIA8cAFYfO+Vc8ikoGf32ndEhbwjYXM=
github.com/FloatTech/ttl v0.0.0-20260408173819-76cac20073ab/go.mod h1:fHZFWGquNXuHttu9dUYoKuNbm3dzLETnIOnm1muSfDs= github.com/FloatTech/ttl v0.0.0-20260412050038-bd89b9d66fcd/go.mod h1:fHZFWGquNXuHttu9dUYoKuNbm3dzLETnIOnm1muSfDs=
github.com/RomiChan/syncx v0.0.0-20240418144900-b7402ffdebc7 h1:S/ferNiehVjNaBMNNBxUjLtVmP/YWD6Yh79RfPv4ehU= github.com/RomiChan/syncx v0.0.0-20240418144900-b7402ffdebc7 h1:S/ferNiehVjNaBMNNBxUjLtVmP/YWD6Yh79RfPv4ehU=
github.com/RomiChan/syncx v0.0.0-20240418144900-b7402ffdebc7/go.mod h1:vD7Ra3Q9onRtojoY5sMCLQ7JBgjUsrXDnDKyFxqpf9w= github.com/RomiChan/syncx v0.0.0-20240418144900-b7402ffdebc7/go.mod h1:vD7Ra3Q9onRtojoY5sMCLQ7JBgjUsrXDnDKyFxqpf9w=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

View File

@@ -27,20 +27,51 @@ var (
echoid = os.Getpid() echoid = os.Getpid()
) )
// seqFIFO is a FIFO queue that generates new sequence numbers when empty.
type seqFIFO struct {
mu sync.Mutex
q []uintptr
next *atomic.Uintptr
}
func (f *seqFIFO) Get() uintptr {
f.mu.Lock()
defer f.mu.Unlock()
if len(f.q) > 0 {
v := f.q[0]
copy(f.q, f.q[1:])
f.q = f.q[:len(f.q)-1]
return v
}
return f.next.Add(1)
}
func (f *seqFIFO) Put(v uintptr) {
f.mu.Lock()
defer f.mu.Unlock()
if len(f.q) == 0 {
f.q = make([]uintptr, 1, 128)
f.q[0] = v
return
}
if len(f.q) < cap(f.q) {
f.q = append(f.q, v)
return
}
copy(f.q, f.q[1:])
f.q[len(f.q)-1] = v
}
// peerState holds per-peer ICMP echo state within a Conn. // peerState holds per-peer ICMP echo state within a Conn.
type peerState struct { type peerState struct {
id int id int
seq atomic.Uintptr seq atomic.Uintptr
seqpool *sync.Pool seqfifo seqFIFO
} }
func newPeerState() *peerState { func newPeerState() *peerState {
ps := &peerState{} ps := &peerState{}
ps.seqpool = &sync.Pool{ ps.seqfifo.next = &ps.seq
New: func() any {
return int(ps.seq.Add(1))
},
}
return ps return ps
} }
@@ -180,7 +211,7 @@ func (conn *Conn) ReadFromPeer(b []byte) (n int, ep p2p.EndPoint, err error) {
ps := conn.getOrCreatePeerState(ipaddr) ps := conn.getOrCreatePeerState(ipaddr)
ps.id = body.ID ps.id = body.ID
ps.seq.Store(uintptr(body.Seq)) ps.seq.Store(uintptr(body.Seq))
ps.seqpool.Put(body.Seq) ps.seqfifo.Put(uintptr(body.Seq))
} }
n = copy(b, body.Data) n = copy(b, body.Data)
if config.ShowDebugLog { if config.ShowDebugLog {
@@ -197,7 +228,7 @@ func (conn *Conn) WriteToPeer(b []byte, ep p2p.EndPoint) (int, error) {
} }
addr := (*netip.Addr)(icmpep) addr := (*netip.Addr)(icmpep)
ps := conn.getOrCreatePeerState(*addr) ps := conn.getOrCreatePeerState(*addr)
seq := ps.seqpool.Get().(int) seq := int(ps.seqfifo.Get())
id := ps.id id := ps.id
isrequest := id == 0 isrequest := id == 0
if isrequest { if isrequest {

View File

@@ -168,7 +168,14 @@ func main() {
} }
func displayHelp(hint string) { func displayHelp(hint string) {
fmt.Println(hint) if hint != "" {
fmt.Println(hint)
fmt.Println("")
}
fmt.Println("WireGold Version:", config.Version)
fmt.Println("Author: Fumiama Minamoto")
fmt.Println("Released with GPL-3.0 license")
fmt.Println("")
flag.Usage() flag.Usage()
os.Exit(0) os.Exit(0)
} }