mirror of
https://github.com/tailscale/tailscale.git
synced 2025-12-26 20:38:40 +00:00
vnet: WIP
Change-Id: Id26b5ea0a1ec21dcc18e01aa4937351cfa49cd7c Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
# ./qemu-wrapper /tmp/qemu.sock qemu-system-x86_64 [...] -netdev socket,id=vlan,fd=3 -device virtio-net-pci,netdev=vlan
|
||||
|
||||
help:
|
||||
echo "See Makefile"
|
||||
|
||||
@@ -6,3 +8,6 @@ image:
|
||||
|
||||
qemu: image
|
||||
qemu-system-x86_64 -m 1G -drive file=tsapp.img,format=raw -boot d -netdev user,id=user.0 -device virtio-net-pci,netdev=user.0 -serial mon:stdio -audio none
|
||||
|
||||
qemuwrap: image
|
||||
go run ./cmd/vnetwrap qemu-system-x86_64 -m 1G -drive file=tsapp.img,format=raw -boot d -netdev socket,fd=3,id=user.0 -device virtio-net-pci,netdev=user.0 -serial mon:stdio -audio none
|
||||
|
||||
59
gokrazy/cmd/vnetwrap/vnetwrap.go
Normal file
59
gokrazy/cmd/vnetwrap/vnetwrap.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net"
|
||||
"os"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
const path = "/tmp/vnet.sock"
|
||||
|
||||
func serve(ln net.Listener) {
|
||||
for {
|
||||
c, err := ln.Accept()
|
||||
if err != nil {
|
||||
log.Printf("Accept: %v", err)
|
||||
continue
|
||||
}
|
||||
go serveConn(c)
|
||||
}
|
||||
}
|
||||
|
||||
func serveConn(c net.Conn) {
|
||||
log.Printf("Got conn")
|
||||
defer c.Close()
|
||||
|
||||
buf := make([]byte, 4<<10)
|
||||
for {
|
||||
n, err := c.Read(buf)
|
||||
log.Printf("Read: (%v, %v): %02x", n, err, buf[:n])
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
srv, err := net.Listen("unix", path)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
go serve(srv)
|
||||
conn, err := net.Dial("unix", path)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
fd, err := conn.(*net.UnixConn).File()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
cmd := exec.Command(os.Args[1], os.Args[2:]...) // #nosec G204
|
||||
cmd.ExtraFiles = append(cmd.ExtraFiles, fd)
|
||||
cmd.Stdin = os.Stdin
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
if err := cmd.Run(); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user