Skip to content

Commit 938dbe8

Browse files
committed
Add --fd to pass existing FDs to read/write packets
This allows for ex qemu management layer to setup a socketpair and connect an interface with slirpnetstack thanks to -netdev socket,fd=. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
1 parent 3e20584 commit 938dbe8

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
)
1717

1818
var (
19+
fd int
1920
netNsPath string
2021
ifName string
2122
remoteFwd FwdAddrSlice
@@ -25,6 +26,7 @@ var (
2526
)
2627

2728
func init() {
29+
flag.IntVar(&fd, "fd", -1, "Unix datagram socket file descriptor")
2830
flag.StringVar(&netNsPath, "netns", "", "path to network namespace")
2931
flag.StringVar(&ifName, "interface", "tun0", "interface name within netns")
3032
flag.Var(&remoteFwd, "R", "Connections to remote side forwarded local")

qemu-run.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import subprocess
2+
import socket
3+
import os
4+
import sys
5+
from shlex import split, quote
6+
7+
a, b = socket.socketpair(socket.AF_UNIX, socket.SOCK_DGRAM)
8+
9+
slirp_cmd = 'bin/slirpnetstack --pcap /tmp/slirpnetstack-%d.pcap --fd %d' % (os.getpid(), a.fileno())
10+
11+
qemu_cmd = 'qemu-system-x86_64 -enable-kvm -smp 4 -m 4G -cpu host -device virtio-net-pci,netdev=net0 -netdev socket,fd=%d,id=net0 -snapshot %s' % (b.fileno(), quote(sys.argv[1]))
12+
13+
slirp = subprocess.Popen(split(slirp_cmd), pass_fds=[a.fileno()])
14+
qemu = subprocess.Popen(split(qemu_cmd), pass_fds=[b.fileno()])
15+
qemu.wait()

0 commit comments

Comments
 (0)