From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39340) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wnrya-0002zp-1c for qemu-devel@nongnu.org; Fri, 23 May 2014 12:05:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WnryT-0006gl-0a for qemu-devel@nongnu.org; Fri, 23 May 2014 12:05:43 -0400 Received: from smtp.citrix.com ([66.165.176.89]:50207) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WnryS-0006gS-T4 for qemu-devel@nongnu.org; Fri, 23 May 2014 12:05:36 -0400 From: Roger Pau Monne Date: Fri, 23 May 2014 17:57:48 +0200 Message-ID: <1400860669-21593-3-git-send-email-roger.pau@citrix.com> In-Reply-To: <1400860669-21593-1-git-send-email-roger.pau@citrix.com> References: <1400860669-21593-1-git-send-email-roger.pau@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Subject: [Qemu-devel] [PATCH v2 2/3] tap-bsd: implement a FreeBSD only version of tap_open List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, xen-devel@lists.xenproject.org Cc: Anthony Liguori , Stefano Stabellini , Stefan Hajnoczi , Roger Pau Monne The current behaviour of tap_open for BSD systems differ greatly from it's Linux counterpart. Since FreeBSD supports interface renaming and tap device cloning by opening /dev/tap, implement a FreeBSD specific version of tap_open that behaves like it's Linux counterpart. This is specially important for toolstacks that use Qemu (like Xen libxl), in order to have a unified behaviour across suported platforms. Signed-off-by: Roger Pau Monné Cc: xen-devel@lists.xenproject.org Cc: Stefano Stabellini Cc: Anthony Liguori Cc: Stefan Hajnoczi --- net/tap-bsd.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 69 insertions(+), 1 deletions(-) diff --git a/net/tap-bsd.c b/net/tap-bsd.c index 90f8a02..bf91bd0 100644 --- a/net/tap-bsd.c +++ b/net/tap-bsd.c @@ -27,12 +27,13 @@ #include "sysemu/sysemu.h" #include "qemu/error-report.h" -#ifdef __NetBSD__ +#if defined(__NetBSD__) || defined(__FreeBSD__) #include #include #include #endif +#ifndef __FreeBSD__ int tap_open(char *ifname, int ifname_size, int *vnet_hdr, int vnet_hdr_required, int mq_required) { @@ -108,6 +109,73 @@ int tap_open(char *ifname, int ifname_size, int *vnet_hdr, return fd; } +#else /* __FreeBSD__ */ + +#define PATH_NET_TAP "/dev/tap" + +int tap_open(char *ifname, int ifname_size, int *vnet_hdr, + int vnet_hdr_required, int mq_required) +{ + int fd, s, ret; + struct ifreq ifr; + + TFR(fd = open(PATH_NET_TAP, O_RDWR)); + if (fd < 0) { + error_report("could not open %s: %s", PATH_NET_TAP, strerror(errno)); + return -1; + } + + memset(&ifr, 0, sizeof(ifr)); + + ret = ioctl(fd, TAPGIFNAME, (void *)&ifr); + if (ret < 0) { + error_report("could not get tap interface name"); + goto error; + } + + if (ifname[0] != '\0') { + /* User requested the interface to have a specific name */ + s = socket(AF_LOCAL, SOCK_DGRAM, 0); + if (s < 0) { + error_report("could not open socket to set interface name"); + goto error; + } + ifr.ifr_data = ifname; + ret = ioctl(s, SIOCSIFNAME, (void *)&ifr); + close(s); + if (ret < 0) { + error_report("could not set tap interface name"); + goto error; + } + } else { + pstrcpy(ifname, ifname_size, ifr.ifr_name); + } + + if (*vnet_hdr) { + /* BSD doesn't have IFF_VNET_HDR */ + *vnet_hdr = 0; + + if (vnet_hdr_required && !*vnet_hdr) { + error_report("vnet_hdr=1 requested, but no kernel " + "support for IFF_VNET_HDR available"); + goto error; + } + } + if (mq_required) { + error_report("mq_required requested, but not kernel support" + "for IFF_MULTI_QUEUE available"); + goto error; + } + + fcntl(fd, F_SETFL, O_NONBLOCK); + return fd; + +error: + close(fd); + return -1; +} +#endif /* __FreeBSD__ */ + int tap_set_sndbuf(int fd, const NetdevTapOptions *tap) { return 0; -- 1.7.7.5 (Apple Git-26) From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v2 2/3] tap-bsd: implement a FreeBSD only version of tap_open Date: Fri, 23 May 2014 17:57:48 +0200 Message-ID: <1400860669-21593-3-git-send-email-roger.pau@citrix.com> References: <1400860669-21593-1-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1WnryW-0005KT-7m for xen-devel@lists.xenproject.org; Fri, 23 May 2014 16:05:40 +0000 In-Reply-To: <1400860669-21593-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: qemu-devel@nongnu.org, xen-devel@lists.xenproject.org Cc: Anthony Liguori , Stefano Stabellini , Stefan Hajnoczi , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org VGhlIGN1cnJlbnQgYmVoYXZpb3VyIG9mIHRhcF9vcGVuIGZvciBCU0Qgc3lzdGVtcyBkaWZmZXIg Z3JlYXRseSBmcm9tCml0J3MgTGludXggY291bnRlcnBhcnQuIFNpbmNlIEZyZWVCU0Qgc3VwcG9y dHMgaW50ZXJmYWNlIHJlbmFtaW5nIGFuZAp0YXAgZGV2aWNlIGNsb25pbmcgYnkgb3BlbmluZyAv ZGV2L3RhcCwgaW1wbGVtZW50IGEgRnJlZUJTRCBzcGVjaWZpYwp2ZXJzaW9uIG9mIHRhcF9vcGVu IHRoYXQgYmVoYXZlcyBsaWtlIGl0J3MgTGludXggY291bnRlcnBhcnQuCgpUaGlzIGlzIHNwZWNp YWxseSBpbXBvcnRhbnQgZm9yIHRvb2xzdGFja3MgdGhhdCB1c2UgUWVtdSAobGlrZSBYZW4KbGli eGwpLCBpbiBvcmRlciB0byBoYXZlIGEgdW5pZmllZCBiZWhhdmlvdXIgYWNyb3NzIHN1cG9ydGVk CnBsYXRmb3Jtcy4KClNpZ25lZC1vZmYtYnk6IFJvZ2VyIFBhdSBNb25uw6kgPHJvZ2VyLnBhdUBj aXRyaXguY29tPgpDYzogeGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCkNjOiBTdGVmYW5v IFN0YWJlbGxpbmkgPHN0ZWZhbm8uc3RhYmVsbGluaUBldS5jaXRyaXguY29tPgpDYzogQW50aG9u eSBMaWd1b3JpIDxhbGlndW9yaUB1cy5pYm0uY29tPgpDYzogU3RlZmFuIEhham5vY3ppIDxzdGVm YW5oYUByZWRoYXQuY29tPgotLS0KIG5ldC90YXAtYnNkLmMgfCAgIDcwICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxlcyBjaGFu Z2VkLCA2OSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL25ldC90 YXAtYnNkLmMgYi9uZXQvdGFwLWJzZC5jCmluZGV4IDkwZjhhMDIuLmJmOTFiZDAgMTAwNjQ0Ci0t LSBhL25ldC90YXAtYnNkLmMKKysrIGIvbmV0L3RhcC1ic2QuYwpAQCAtMjcsMTIgKzI3LDEzIEBA CiAjaW5jbHVkZSAic3lzZW11L3N5c2VtdS5oIgogI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0 LmgiCiAKLSNpZmRlZiBfX05ldEJTRF9fCisjaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZp bmVkKF9fRnJlZUJTRF9fKQogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2luY2x1ZGUgPG5ldC9p Zi5oPgogI2luY2x1ZGUgPG5ldC9pZl90YXAuaD4KICNlbmRpZgogCisjaWZuZGVmIF9fRnJlZUJT RF9fCiBpbnQgdGFwX29wZW4oY2hhciAqaWZuYW1lLCBpbnQgaWZuYW1lX3NpemUsIGludCAqdm5l dF9oZHIsCiAgICAgICAgICAgICAgaW50IHZuZXRfaGRyX3JlcXVpcmVkLCBpbnQgbXFfcmVxdWly ZWQpCiB7CkBAIC0xMDgsNiArMTA5LDczIEBAIGludCB0YXBfb3BlbihjaGFyICppZm5hbWUsIGlu dCBpZm5hbWVfc2l6ZSwgaW50ICp2bmV0X2hkciwKICAgICByZXR1cm4gZmQ7CiB9CiAKKyNlbHNl IC8qIF9fRnJlZUJTRF9fICovCisKKyNkZWZpbmUgUEFUSF9ORVRfVEFQICIvZGV2L3RhcCIKKwor aW50IHRhcF9vcGVuKGNoYXIgKmlmbmFtZSwgaW50IGlmbmFtZV9zaXplLCBpbnQgKnZuZXRfaGRy LAorICAgICAgICAgICAgIGludCB2bmV0X2hkcl9yZXF1aXJlZCwgaW50IG1xX3JlcXVpcmVkKQor eworICAgIGludCBmZCwgcywgcmV0OworICAgIHN0cnVjdCBpZnJlcSBpZnI7CisKKyAgICBURlIo ZmQgPSBvcGVuKFBBVEhfTkVUX1RBUCwgT19SRFdSKSk7CisgICAgaWYgKGZkIDwgMCkgeworICAg ICAgICBlcnJvcl9yZXBvcnQoImNvdWxkIG5vdCBvcGVuICVzOiAlcyIsIFBBVEhfTkVUX1RBUCwg c3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIG1lbXNl dCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7CisKKyAgICByZXQgPSBpb2N0bChmZCwgVEFQR0lGTkFN RSwgKHZvaWQgKikmaWZyKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAgICBlcnJvcl9yZXBv cnQoImNvdWxkIG5vdCBnZXQgdGFwIGludGVyZmFjZSBuYW1lIik7CisgICAgICAgIGdvdG8gZXJy b3I7CisgICAgfQorCisgICAgaWYgKGlmbmFtZVswXSAhPSAnXDAnKSB7CisgICAgICAgIC8qIFVz ZXIgcmVxdWVzdGVkIHRoZSBpbnRlcmZhY2UgdG8gaGF2ZSBhIHNwZWNpZmljIG5hbWUgKi8KKyAg ICAgICAgcyA9IHNvY2tldChBRl9MT0NBTCwgU09DS19ER1JBTSwgMCk7CisgICAgICAgIGlmIChz IDwgMCkgeworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJjb3VsZCBub3Qgb3BlbiBzb2NrZXQg dG8gc2V0IGludGVyZmFjZSBuYW1lIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAg ICB9CisgICAgICAgIGlmci5pZnJfZGF0YSA9IGlmbmFtZTsKKyAgICAgICAgcmV0ID0gaW9jdGwo cywgU0lPQ1NJRk5BTUUsICh2b2lkICopJmlmcik7CisgICAgICAgIGNsb3NlKHMpOworICAgICAg ICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJjb3VsZCBub3Qgc2V0 IHRhcCBpbnRlcmZhY2UgbmFtZSIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAg fQorICAgIH0gZWxzZSB7CisgICAgICAgIHBzdHJjcHkoaWZuYW1lLCBpZm5hbWVfc2l6ZSwgaWZy Lmlmcl9uYW1lKTsKKyAgICB9CisKKyAgICBpZiAoKnZuZXRfaGRyKSB7CisgICAgICAgIC8qIEJT RCBkb2Vzbid0IGhhdmUgSUZGX1ZORVRfSERSICovCisgICAgICAgICp2bmV0X2hkciA9IDA7CisK KyAgICAgICAgaWYgKHZuZXRfaGRyX3JlcXVpcmVkICYmICEqdm5ldF9oZHIpIHsKKyAgICAgICAg ICAgIGVycm9yX3JlcG9ydCgidm5ldF9oZHI9MSByZXF1ZXN0ZWQsIGJ1dCBubyBrZXJuZWwgIgor ICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0IGZvciBJRkZfVk5FVF9IRFIgYXZhaWxh YmxlIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgfQorICAgIGlm IChtcV9yZXF1aXJlZCkgeworICAgICAgICBlcnJvcl9yZXBvcnQoIm1xX3JlcXVpcmVkIHJlcXVl c3RlZCwgYnV0IG5vdCBrZXJuZWwgc3VwcG9ydCIKKyAgICAgICAgICAgICAgICAgICAgICJmb3Ig SUZGX01VTFRJX1FVRVVFIGF2YWlsYWJsZSIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0K KworICAgIGZjbnRsKGZkLCBGX1NFVEZMLCBPX05PTkJMT0NLKTsKKyAgICByZXR1cm4gZmQ7CisK K2Vycm9yOgorICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gLTE7Cit9CisjZW5kaWYgLyogX19G cmVlQlNEX18gKi8KKwogaW50IHRhcF9zZXRfc25kYnVmKGludCBmZCwgY29uc3QgTmV0ZGV2VGFw T3B0aW9ucyAqdGFwKQogewogICAgIHJldHVybiAwOwotLSAKMS43LjcuNSAoQXBwbGUgR2l0LTI2 KQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhl bi5vcmcveGVuLWRldmVsCg==