diff --git a/.gitignore b/.gitignore index 90c93439..d45e546e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,10 @@ minivpn +openvpn ./obfs4vpn ./vpnping ./geturl +.vscode + ndt7 *.swp *.swo diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 3ecebd6f..7fae7e72 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -103,3 +103,52 @@ stateDiagram nioDown --> internet: conn.Write() [!!!] internet --> nioUp: conn.Read() [!!!] ``` + +## New architecture, with boxes + +```mermaid +graph TB + + INTERNET -- conn.Read --> networkio.moveUpWorker + networkio.moveDownWorker -- conn.Write --> INTERNET + + subgraph tun + TUN.Write + TUN.Read + end + + subgraph packetmuxer + packetmuxer.moveUpWorker + packetmuxer.moveDownWorker + end + + subgraph reliable + packetmuxer.moveUpWorker -- chan *model.Packet --> reliable.moveUpWorker + reliable.moveDownWorker -- chan *model.Packet --> packetmuxer.moveDownWorker + reliable.moveUpWorker -- chan *model.Packet [ACK] --> packetmuxer.moveDownWorker + end + + subgraph controlChannel + reliable.moveUpWorker -- chan *model.Packet --> controlchannel.moveUpWorker + controlchannel.moveDownWorker -- chan *model.Packet --> reliable.moveDownWorker + end + + subgraph tlsstate + controlchannel.moveUpWorker -- chan *Notification --> tlsstate.Worker + controlchannel.moveUpWorker -- chan *TLSRecord --> tlsstate.Worker + packetmuxer.moveUpWorker -- chan *Notification --> tlsstate.Worker + tlsstate.Worker -- chan *TLSRecord --> controlchannel.moveDownWorker + end + + subgraph datachannel + datachannel.moveUpWorker --> TUN.Read + TUN.Write --> datachannel.moveDownWorker + packetmuxer.moveUpWorker -- chan *model.Packet --> datachannel.moveUpWorker + datachannel.moveDownWorker -- chan *model.Packet --> packetmuxer.moveDownWorker + end + + subgraph networkIO + networkio.moveUpWorker -- chan []byte--> packetmuxer.moveUpWorker + packetmuxer.moveDownWorker -- chan []byte --> networkio.moveDownWorker + end +``` \ No newline at end of file diff --git a/cmd/handshake/main.go b/cmd/handshake/main.go index a4e55b76..d34d0bae 100644 --- a/cmd/handshake/main.go +++ b/cmd/handshake/main.go @@ -7,21 +7,22 @@ import ( "time" "github.com/apex/log" - "github.com/ooni/minivpn/openvpn" + "github.com/minivpn/internal/model" + "github.com/minivpn/internal/networkio" ) func main() { log.Info("C_NOTHING") // read the configuation file - options, err := openvpn.ReadConfigFile(os.Args[1]) + options, err := model.ReadConfigFile(os.Args[1]) if err != nil { log.WithError(err).Fatal("NewOptionsFromFilePath") } log.Infof("parsed options: %s", options.ServerOptionsString()) // connect to the server - dialer := openvpn.NewDialer(log.Log, &net.Dialer{}) + dialer := networkio.NewDialer(log.Log, &net.Dialer{}) ctx := context.Background() endpoint := net.JoinHostPort(options.Remote, options.Port) conn, err := dialer.DialContext(ctx, options.Proto.String(), endpoint) diff --git a/go.mod b/go.mod index 47442a0d..72c181d4 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/ooni/minivpn -go 1.18 +go 1.20 // pinning for backwards-incompatible change // replace gitlab.com/yawning/obfs4.git v0.0.0-20220204003609-77af0cba934d => gitlab.com/yawning/obfs4.git v0.0.0-20210511220700-e330d1b7024b