[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] net: Add interface to bridge when SIOCBRADDIF i
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH] net: Add interface to bridge when SIOCBRADDIF isn't available |
Date: |
Tue, 24 Jul 2012 13:20:05 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120615 Thunderbird/13.0.1 |
Il 12/07/2012 15:24, Corey Bryant ha scritto:
> The bridge helper uses the SIOCBRADDIF ioctl to add an inteface to
> a bridge. SIOCBRADDIF is not available on old Linux versions. This
> patch adds support to use the SIOCDEVPRIVATE ioctl with BRCTL_ADD_IF
> if SIOCBRADDIF is not available.
>
> Reported-by: Fabien Chouteau <address@hidden>
> Signed-off-by: Corey Bryant <address@hidden>
> ---
> qemu-bridge-helper.c | 24 +++++++++++++++++++++---
> 1 file changed, 21 insertions(+), 3 deletions(-)
>
> diff --git a/qemu-bridge-helper.c b/qemu-bridge-helper.c
> index aec5008..652eec9 100644
> --- a/qemu-bridge-helper.c
> +++ b/qemu-bridge-helper.c
> @@ -35,6 +35,10 @@
>
> #include <linux/sockios.h>
>
> +#ifndef SIOCBRADDIF
> +#include <linux/if_bridge.h>
> +#endif
> +
> #include "qemu-queue.h"
>
> #include "net/tap-linux.h"
> @@ -221,6 +225,10 @@ static int drop_privileges(void)
> int main(int argc, char **argv)
> {
> struct ifreq ifr;
> +#ifndef SIOCBRADDIF
> + unsigned long ifargs[4];
> +#endif
> + int ifindex;
> int fd, ctlfd, unixfd = -1;
> int use_vnet = 0;
> int mtu;
> @@ -361,9 +369,19 @@ int main(int argc, char **argv)
>
> /* add the interface to the bridge */
> prep_ifreq(&ifr, bridge);
> - ifr.ifr_ifindex = if_nametoindex(iface);
> -
> - if (ioctl(ctlfd, SIOCBRADDIF, &ifr) == -1) {
> + ifindex = if_nametoindex(iface);
> +#ifndef SIOCBRADDIF
> + ifargs[0] = BRCTL_ADD_IF;
> + ifargs[1] = ifindex;
> + ifargs[2] = 0;
> + ifargs[3] = 0;
> + ifr.ifr_data = (void *)ifargs;
> + ret = ioctl(ctlfd, SIOCDEVPRIVATE, &ifr);
> +#else
> + ifr.ifr_ifindex = ifindex;
> + ret = ioctl(ctlfd, SIOCBRADDIF, &ifr);
> +#endif
> + if (ret == -1) {
> fprintf(stderr, "failed to add interface `%s' to bridge `%s': %s\n",
> iface, bridge, strerror(errno));
> ret = EXIT_FAILURE;
>
Ping? (Adding Stefan to the list).
Paolo