Message ID | 20110729231511.GA24006@rox.home.comstyle.com |
---|---|
State | New |
Headers | show |
On Sat, Jul 30, 2011 at 2:15 AM, Brad <brad@comstyle.com> wrote: > Fix forcing multicast msgs to loopback on OpenBSD. > > e.g. > $ sudo qemu -m 128 -no-fd-bootchk \ > -hda virtual.img -boot n -nographic \ > -net nic,vlan=0,model=rtl8139,macaddr=52:54:00:12:34:03 \ > -net user -tftp /usr/src/sys/arch/i386/compile/TEST -bootp pxeboot \ > -net nic,vlan=1,model=rtl8139,macaddr=52:54:00:23:03:01 \ > -net tap,vlan=1,script=no \ > -net nic,vlan=3,model=rtl8139,macaddr=52:54:00:23:03:03 \ > -net socket,vlan=3,mcast=230.0.0.1:10003 > setsockopt(SOL_IP, IP_MULTICAST_LOOP): Invalid argument > qemu: -net socket,vlan=3,mcast=230.0.0.1:10003: Device 'socket' could not be initialized > > > Signed-off-by: Brad Smith <brad@comstyle.com> > > --- > net/socket.c | 10 ++++++++-- > 1 files changed, 8 insertions(+), 2 deletions(-) > > diff --git a/net/socket.c b/net/socket.c > index 11fe5f3..4c27097 100644 > --- a/net/socket.c > +++ b/net/socket.c > @@ -154,6 +154,12 @@ static int net_socket_mcast_create(struct sockaddr_in *mcastaddr, struct in_addr > struct ip_mreq imr; > int fd; > int val, ret; > +#ifdef __OpenBSD__ > + u_char loop; Please use plain char, nonstandard types like u_char should not be used. > +#else > + int loop; > +#endif > + > if (!IN_MULTICAST(ntohl(mcastaddr->sin_addr.s_addr))) { > fprintf(stderr, "qemu: error: specified mcastaddr \"%s\" (0x%08x) does not contain a multicast address\n", > inet_ntoa(mcastaddr->sin_addr), > @@ -197,9 +203,9 @@ static int net_socket_mcast_create(struct sockaddr_in *mcastaddr, struct in_addr > } > > /* Force mcast msgs to loopback (eg. several QEMUs in same host */ > - val = 1; > + loop = 1; > ret=setsockopt(fd, IPPROTO_IP, IP_MULTICAST_LOOP, > - (const char *)&val, sizeof(val)); > + (const char *)&loop, sizeof(loop)); > if (ret < 0) { > perror("setsockopt(SOL_IP, IP_MULTICAST_LOOP)"); > goto fail; > -- > 1.7.6 > > > -- > This message has been scanned for viruses and > dangerous content by MailScanner, and is > believed to be clean. > > >
diff --git a/net/socket.c b/net/socket.c index 11fe5f3..4c27097 100644 --- a/net/socket.c +++ b/net/socket.c @@ -154,6 +154,12 @@ static int net_socket_mcast_create(struct sockaddr_in *mcastaddr, struct in_addr struct ip_mreq imr; int fd; int val, ret; +#ifdef __OpenBSD__ + u_char loop; +#else + int loop; +#endif + if (!IN_MULTICAST(ntohl(mcastaddr->sin_addr.s_addr))) { fprintf(stderr, "qemu: error: specified mcastaddr \"%s\" (0x%08x) does not contain a multicast address\n", inet_ntoa(mcastaddr->sin_addr), @@ -197,9 +203,9 @@ static int net_socket_mcast_create(struct sockaddr_in *mcastaddr, struct in_addr } /* Force mcast msgs to loopback (eg. several QEMUs in same host */ - val = 1; + loop = 1; ret=setsockopt(fd, IPPROTO_IP, IP_MULTICAST_LOOP, - (const char *)&val, sizeof(val)); + (const char *)&loop, sizeof(loop)); if (ret < 0) { perror("setsockopt(SOL_IP, IP_MULTICAST_LOOP)"); goto fail;
Fix forcing multicast msgs to loopback on OpenBSD. e.g. $ sudo qemu -m 128 -no-fd-bootchk \ -hda virtual.img -boot n -nographic \ -net nic,vlan=0,model=rtl8139,macaddr=52:54:00:12:34:03 \ -net user -tftp /usr/src/sys/arch/i386/compile/TEST -bootp pxeboot \ -net nic,vlan=1,model=rtl8139,macaddr=52:54:00:23:03:01 \ -net tap,vlan=1,script=no \ -net nic,vlan=3,model=rtl8139,macaddr=52:54:00:23:03:03 \ -net socket,vlan=3,mcast=230.0.0.1:10003 setsockopt(SOL_IP, IP_MULTICAST_LOOP): Invalid argument qemu: -net socket,vlan=3,mcast=230.0.0.1:10003: Device 'socket' could not be initialized Signed-off-by: Brad Smith <brad@comstyle.com> --- net/socket.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-)