]> Cypherpunks.ru repositories - govpn.git/commitdiff
Server can listen on all network protocols at once
authorSergey Matveev <stargrave@stargrave.org>
Sun, 23 Aug 2015 09:31:33 +0000 (12:31 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sun, 23 Aug 2015 09:31:33 +0000 (12:31 +0300)
Signed-off-by: Sergey Matveev <stargrave@stargrave.org>
doc/client.texi
src/govpn/cmd/govpn-server/main.go
src/govpn/cmd/govpn-server/tcp.go
src/govpn/cmd/govpn-server/udp.go

index e2c26fd727b83089a079e0d1afb14b899ce2d18f..d224fff281e69cc7eebc88b6e2eb7d1d5accc143 100644 (file)
@@ -1,8 +1,8 @@
 @node Client part
 @section Client part
 
-Except for common @code{-mtu}, @code{-stats}, @code{-egd} options client
-has the following ones:
+Except for common @code{-proto}, @code{-mtu}, @code{-stats}, @code{-egd}
+options client has the following ones:
 
 @table @code
 
index 669a3ab611e55a6cd34c670278a6de98449f1445..664e04d1b72a509721dd8c6bed52add868538876 100644 (file)
@@ -35,7 +35,7 @@ import (
 
 var (
        bindAddr  = flag.String("bind", "[::]:1194", "Bind to address")
-       proto     = flag.String("proto", "udp", "Protocol to use: udp or tcp")
+       proto     = flag.String("proto", "udp", "Protocol to use: udp, tcp or all")
        peersPath = flag.String("peers", "peers", "Path to peers keys directory")
        stats     = flag.String("stats", "", "Enable stats retrieving on host:port")
        mtu       = flag.Int("mtu", 1452, "MTU for outgoing packets")
@@ -88,6 +88,7 @@ func main() {
        flag.Parse()
        timeout := time.Second * time.Duration(govpn.TimeoutDefault)
        log.SetFlags(log.Ldate | log.Lmicroseconds | log.Lshortfile)
+       log.Println(govpn.VersionGet())
 
        govpn.MTU = *mtu
        govpn.PeersInit(*peersPath)
@@ -97,12 +98,15 @@ func main() {
                govpn.EGDInit(*egdPath)
        }
 
-       var sink chan Pkt
+       sink := make(chan Pkt)
        switch *proto {
        case "udp":
-               sink = startUDP()
+               startUDP(&sink)
        case "tcp":
-               sink = startTCP()
+               startTCP(&sink)
+       case "all":
+               startUDP(&sink)
+               startTCP(&sink)
        default:
                log.Fatalln("Unknown protocol specified")
        }
@@ -129,8 +133,6 @@ func main() {
        var handshakeProcessForce bool
        ethSink := make(chan EthEvent)
 
-       log.Println(govpn.VersionGet())
-       log.Println("Listening on", *proto, *bindAddr)
        log.Println("Max MTU on TAP interface:", govpn.TAPMaxMTU())
        if *stats != "" {
                log.Println("Stats are going to listen on", *stats)
index 85081a6278d836afdec2db3c3659af01d5594313..c7b1788e9e405170ab51dfed58ea0dc5a28bd5b3 100644 (file)
@@ -36,7 +36,7 @@ func (c TCPSender) Write(data []byte) (int, error) {
        return c.conn.Write(append(size, data...))
 }
 
-func startTCP() chan Pkt {
+func startTCP(sink *chan Pkt) {
        bind, err := net.ResolveTCPAddr("tcp", *bindAddr)
        if err != nil {
                log.Fatalln("Can not resolve bind address:", err)
@@ -45,7 +45,7 @@ func startTCP() chan Pkt {
        if err != nil {
                log.Fatalln("Can not listen on TCP:", err)
        }
-       sink := make(chan Pkt)
+       log.Println("Listening on TCP", *bindAddr)
        go func() {
                for {
                        conn, _ := listener.AcceptTCP()
@@ -72,7 +72,7 @@ func startTCP() chan Pkt {
                                                        if sizeNeed > uint16(govpn.MTU)-2 {
                                                                log.Println("Invalid TCP size, skipping")
                                                                sizeNbuf = 0
-                                                               sink <- Pkt{ready: ready}
+                                                               *sink <- Pkt{ready: ready}
                                                                continue
                                                        }
                                                        bufN = 0
@@ -88,7 +88,7 @@ func startTCP() chan Pkt {
                                                goto ReadMore
                                        }
                                        sizeNbuf = 0
-                                       sink <- Pkt{
+                                       *sink <- Pkt{
                                                addr,
                                                TCPSender{conn},
                                                buf[:sizeNeed],
@@ -99,5 +99,4 @@ func startTCP() chan Pkt {
                        ready <- struct{}{}
                }
        }()
-       return sink
 }
index d5e12968a8b4191b109ae9f13d7ed2e268f40ec5..26b28a835e70c56b48487871475879ea260f70b1 100644 (file)
@@ -35,7 +35,7 @@ func (c UDPSender) Write(data []byte) (int, error) {
        return c.conn.WriteToUDP(data, c.addr)
 }
 
-func startUDP() chan Pkt {
+func startUDP(sink *chan Pkt) {
        bind, err := net.ResolveUDPAddr("udp", *bindAddr)
        ready := make(chan struct{})
        if err != nil {
@@ -45,7 +45,7 @@ func startUDP() chan Pkt {
        if err != nil {
                log.Fatalln("Can not listen on UDP:", err)
        }
-       sink := make(chan Pkt)
+       log.Println("Listening on UDP", *bindAddr)
        go func() {
                buf := make([]byte, govpn.MTU)
                var n int
@@ -56,10 +56,10 @@ func startUDP() chan Pkt {
                        lconn.SetReadDeadline(time.Now().Add(time.Second))
                        n, raddr, err = lconn.ReadFromUDP(buf)
                        if err != nil {
-                               sink <- Pkt{ready: ready}
+                               *sink <- Pkt{ready: ready}
                                continue
                        }
-                       sink <- Pkt{
+                       *sink <- Pkt{
                                raddr.String(),
                                UDPSender{lconn, raddr},
                                buf[:n],
@@ -68,5 +68,4 @@ func startUDP() chan Pkt {
                }
        }()
        ready <- struct{}{}
-       return sink
 }