diff --git a/proxy/cmd/cmd.go b/proxy/cmd/cmd.go new file mode 100644 index 0000000..273f6e8 --- /dev/null +++ b/proxy/cmd/cmd.go @@ -0,0 +1,51 @@ +package cmd + +import ( + "bytes" + "io" + "log" + "os" + "os/exec" +) + +type cmd struct { + fullCommand string + *exec.Cmd + bufOut bytes.Buffer + bufErr bytes.Buffer +} + +func New(name string, args string) *cmd{ + var bO, bE bytes.Buffer + c := cmd { + name + " " + args, + exec.Command(name, args), + bO, + bE, + } + c.Stdout = io.MultiWriter(os.Stdout, &c.bufOut) + c.Stderr = io.MultiWriter(os.Stderr, &c.bufErr) + return &c +} + +func (c *cmd) Execute() { + err := c.Start() + if err != nil { + log.Printf("%s failed with %s\n", c.fullCommand, err) + } +} + +func (c *cmd) GetOut() string { + return string(c.bufOut.Bytes()) +} + +func (c *cmd) GetErr() string { + return string(c.bufErr.Bytes()) +} + +func (c *cmd) WaitH() { + err := c.Wait() + if err != nil { + log.Printf("%s failed with %s\n", c.fullCommand, err) + } +} \ No newline at end of file diff --git a/proxy/go.mod b/proxy/go.mod new file mode 100644 index 0000000..9f91603 --- /dev/null +++ b/proxy/go.mod @@ -0,0 +1,3 @@ +module proxy + +go 1.13 diff --git a/proxy/main.go b/proxy/main.go new file mode 100644 index 0000000..6a38d98 --- /dev/null +++ b/proxy/main.go @@ -0,0 +1,31 @@ +package main + +import ( + "proxy/cmd" +) + +func main() { + //c1 := cmd.New("sh", "-c \"vde_plug /run/vde/sw_main.sock\"") + c2 := cmd.New("vde_plug", "/run/vde/sw_proxy.sock") + //c1 := cmd.New("ping", "localhost", "-c 10") + //c2 := cmd.New("nc", "google.com", "80") + //stdin, err := c2.StdinPipe() + //if err != nil { + // log.Fatal(err) + //} + //c1.Execute() + c2.Execute() + //time.Sleep(time.Second) + //io.WriteString(stdin, "GET / HTTP/1.0\n\n") + //time.Sleep(time.Second) + //stdin.Close() + //c1.WaitH() + c2.WaitH() + + /* cmds := []*cmd.cmd{c1} + for _, x := range cmds { + go func(cmd *exec.Cmd) { + fmt.Printf(x.String()) + }(cmd) + }*/ +} \ No newline at end of file diff --git a/proxy/proxy.go b/proxy/proxy.go deleted file mode 100644 index a8e49e9..0000000 --- a/proxy/proxy.go +++ /dev/null @@ -1,25 +0,0 @@ -package main - -import ( - "bytes" - "fmt" - "io" - "log" - "os" - "os/exec" -) - -func main() { - cmd := exec.Command("ping", "127.0.0.1", "-c 10") - - var stdoutBuf, stderrBuf bytes.Buffer - cmd.Stdout = io.MultiWriter(os.Stdout, &stdoutBuf) - cmd.Stderr = io.MultiWriter(os.Stderr, &stderrBuf) - - err := cmd.Run() - if err != nil { - log.Fatalf("cmd.Run() failed with %s\n", err) - } - outStr, errStr := string(stdoutBuf.Bytes()), string(stderrBuf.Bytes()) - fmt.Printf("\nout:\n%s\nerr:\n%s\n", outStr, errStr) -} \ No newline at end of file diff --git a/test-env/qemu-environment.sh b/test-env/qemu-environment.sh index 7a59f41..8df5cb8 100755 --- a/test-env/qemu-environment.sh +++ b/test-env/qemu-environment.sh @@ -1,25 +1,34 @@ #!/bin/sh # QEMU/VDE network environment preparation script +RUN='/run/vde' +qemu=/opt/qemu/build/qemu-system-x86_64 case "$1" in start) echo "Starting VDE network for QEMU: " - vde_switch -daemon -mod 660 - slirpvde --dhcp --daemon - qemu -m 512 -nic vde,mac='52:54:00:12:34:56' -hda alpine1.qcow2 -daemonize -vnc :1 - qemu -m 512 -nic vde,mac='52:54:00:12:34:66' -hda alpine2.qcow2 -daemonize -vnc :1 - # -nographic statt -daemonize -vnc :1 für Terminalinterface + # Create run dir + sudo mkdir -p $RUN && sudo chown `id -un`:`id -gn` $RUN + # Main switch + vde_switch -daemon -s $RUN/sw_main.sock -p $RUN/sw_main.pid + # Proxy switch -.- + vde_switch -daemon -s $RUN/sw_proxy.sock -p $RUN/sw_proxy.pid + # Slirp NAT + slirpvde --dhcp --daemon -s $RUN/sw_main.sock -p $RUN/slirp.pid + echo "Run:\nqemu -m 512 -nic vde,mac='52:54:00:12:34:56',sock=$RUN/sw_proxy.sock -hda alpine1.qcow2 -nographic" + $qemu -m 512 -nic vde,mac='52:54:00:12:34:66',sock=$RUN/sw_main.sock -hda alpine2.qcow2 -daemonize -vnc :1 -pidfile $RUN/vm_2.pid ;; stop) echo "Stopping VDE network for QEMU: " - pkill vde_switch - pkill slirpvde + kill `cat $RUN/*.pid | xargs` ;; restart|reload) $0 stop sleep 1 $0 start ;; + status) + ps -fq `cat $RUN/*.pid | xargs | sed 's/ /,/g'` + ;; *) echo "Usage: $0 {start|stop|restart|reload}" exit 1