Skip to content

Commit d2611ac

Browse files
committed
add an in-band dead-hop bypass mechanism
1 parent d809ad1 commit d2611ac

4 files changed

Lines changed: 252 additions & 187 deletions

File tree

conf/tcpsplice.conf

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,31 @@ tcpsplice
44

55
monitor
66
{
7-
// listen = "*:8000,conf/cert.pem,conf/key.pem"
8-
// auth = [ "tcpsplice:monitor" ]
9-
// noauth = [ "127.0.0.1/32" ]
10-
// spliced = [ "1.2.3.0/24", "100.10.0.0/16" ]
7+
// listen = "[<host>]:<port>[,<certificate>,<key>]"
8+
// auth = [ "<login>:<passord>", ... ]
9+
// noauth = [ "<cidr>/<mask>", ... ]
10+
// spliced = [ "<network>/<mask>", ... ]
1111
}
1212

1313
service
1414
{
1515
example1
1616
{
17-
// listen = [ "*:1234", "*:4321,conf/cert.pem,conf/key.pem" ]
18-
// target = [ "server1:1234", "server2:4321" ]
19-
// scan = [ "[", "" ]
17+
// listen = [ "[<host>]:<port>[,<certificate>,<key>]", ... ]
18+
// target = [ "<host>:<port>", ... ]
19+
// scan = [ "[", ... ]
2020
// timeout
2121
// {
22-
// connect = 10s
23-
// write = 10s
24-
// idle = 20s
22+
// connect = 10s
23+
// write = 10s
24+
// idle = 7s
25+
// blacklist = 45s
2526
// }
2627
// size
2728
// {
2829
// source = 0
2930
// target = 0
31+
// buffer = 128k
3032
// session = 16k
3133
// log = 16k
3234
// opaque = 16k

main.go

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ import (
1212
"github.com/pyke369/golang-support/ulog"
1313
)
1414

15-
const progname = "tcpsplice"
16-
const version = "1.4.0"
15+
const PROGNAME = "tcpsplice"
16+
const VERSION = "1.4.0"
1717

1818
var (
19-
config *uconfig.UConfig
20-
logger *ulog.ULog
21-
started time.Time
22-
unbind bool
19+
Config *uconfig.UConfig
20+
Logger *ulog.ULog
21+
Started time.Time
22+
Unbind bool
2323
)
2424

2525
func main() {
@@ -29,18 +29,20 @@ func main() {
2929
fmt.Fprintf(os.Stderr, "usage: %s <configuration file>\n", filepath.Base(os.Args[0]))
3030
os.Exit(1)
3131
}
32-
if config, err = uconfig.New(os.Args[1]); err != nil {
32+
if Config, err = uconfig.New(os.Args[1]); err != nil {
3333
fmt.Fprintf(os.Stderr, "configuration file syntax error: %s - aborting\n", err)
3434
os.Exit(2)
3535
}
3636

37-
logger = ulog.New(config.GetString(progname+".log", "console(output=stdout)"))
38-
logger.Info(map[string]interface{}{"scope": "main", "event": "start", "version": version, "config": os.Args[1], "pid": os.Getpid(),
39-
"services": len(config.GetPaths(progname + ".service"))})
40-
started = time.Now()
37+
Logger = ulog.New(Config.GetString(PROGNAME+".log", "console(output=stdout)"))
38+
Logger.Info(map[string]any{
39+
"scope": "main", "event": "start", "version": VERSION, "config": os.Args[1],
40+
"pid": os.Getpid(), "services": len(Config.GetPaths(PROGNAME + ".service")),
41+
})
42+
Started = time.Now()
4143

42-
go service_run()
43-
go monitor_run()
44+
go ServiceRun()
45+
go MonitorRun()
4446

4547
signals := make(chan os.Signal, 1)
4648
signal.Notify(signals, syscall.SIGHUP, syscall.SIGUSR1)
@@ -49,20 +51,28 @@ func main() {
4951
switch {
5052
case signal == syscall.SIGHUP:
5153
if _, err = uconfig.New(os.Args[1]); err == nil {
52-
config.Load(os.Args[1])
53-
logger.Load(config.GetString(progname+".log", "console(output=stdout)"))
54-
logger.Info(map[string]interface{}{"scope": "main", "event": "reload", "version": version, "config": os.Args[1], "pid": os.Getpid(),
55-
"services": len(config.GetPaths(progname + ".service"))})
54+
Config.Load(os.Args[1])
55+
Logger.Load(Config.GetString(PROGNAME+".log", "console(output=stdout)"))
56+
Logger.Info(map[string]any{
57+
"scope": "main", "event": "reload", "version": VERSION, "config": os.Args[1],
58+
"pid": os.Getpid(), "services": len(Config.GetPaths(PROGNAME + ".service")),
59+
})
5660
} else {
57-
logger.Warn(map[string]interface{}{"scope": "main", "event": "reload", "config": os.Args[1], "error": fmt.Sprintf("%v", err)})
61+
Logger.Warn(map[string]any{
62+
"scope": "main", "event": "reload", "config": os.Args[1], "error": fmt.Sprintf("%v", err),
63+
})
5864
}
5965

6066
case signal == syscall.SIGUSR1:
61-
unbind = !unbind
62-
if unbind {
63-
logger.Info(map[string]interface{}{"scope": "main", "event": "unbind", "services": len(config.GetPaths(progname + ".service"))})
67+
Unbind = !Unbind
68+
if Unbind {
69+
Logger.Info(map[string]any{
70+
"scope": "main", "event": "unbind", "services": len(Config.GetPaths(PROGNAME + ".service")),
71+
})
6472
} else {
65-
logger.Info(map[string]interface{}{"scope": "main", "event": "rebind", "services": len(config.GetPaths(progname + ".service"))})
73+
Logger.Info(map[string]any{
74+
"scope": "main", "event": "rebind", "services": len(Config.GetPaths(PROGNAME + ".service")),
75+
})
6676
}
6777
}
6878
}

0 commit comments

Comments
 (0)