qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PULL 4/4] net: disallow to specify multicast MAC addre


From: Amos Kong
Subject: Re: [Qemu-devel] [PULL 4/4] net: disallow to specify multicast MAC address
Date: Tue, 22 Oct 2013 17:21:08 +0800
User-agent: Mutt/1.5.21 (2010-09-15)

On Sat, Oct 19, 2013 at 12:08:14AM +0400, Dmitry Krivenok wrote:
> > Duplicate, we already have is_multicast_ether_addr() in include/net/eth.h
> 
> I tried to #include "net/eth.h" in net/net.c, but it didn't work:
> 
> diff --git a/net/net.c b/net/net.c
> index c330c9a..870d3bb 100644
> --- a/net/net.c
> +++ b/net/net.c
> @@ -27,6 +27,7 @@
>  #include "clients.h"
>  #include "hub.h"
>  #include "net/slirp.h"
> +#include "net/eth.h"
>  #include "util.h"
> 
>  #include "monitor/monitor.h"
> @@ -689,6 +690,11 @@ static int net_init_nic(const NetClientOptions
> *opts, const char *name,
>          error_report("invalid syntax for ethernet address");
>          return -1;
>      }
> +    if (nic->has_macaddr &&
> +        is_multicast_ether_addr(nd->macaddr.a)) {
> +        error_report("NIC cannot have multicast MAC address (odd 1st byte)");
> +        return -1;
> +    }
>      qemu_macaddr_default_if_unset(&nd->macaddr);
> 
>      if (nic->has_vectors) {
> 
> $ make
>   CC    net/net.o
> In file included from /home/krivenok/qemu/include/qemu/sockets.h:18,
>                  from net/net.c:35:
> /usr/include/netinet/in.h:199: error: redefinition of 'struct in6_addr'
> make: *** [net/net.o] Error 1
> $

Hi Dmitry,

"struct in6_addr" exists in <netinet/in.h>, you can remove the
definition in eth.h

diff --git a/include/net/eth.h b/include/net/eth.h
index 1d48e06..1cce570 100644
--- a/include/net/eth.h
+++ b/include/net/eth.h
@@ -28,6 +28,7 @@
 
 #include <sys/types.h>
 #include <string.h>
+#include <netinet/in.h>
 #include "qemu/bswap.h"
 #include "qemu/iov.h"
 
@@ -83,13 +84,6 @@ typedef struct ip_pseudo_header {
     uint16_t ip_payload;
 } ip_pseudo_header;
 
-/* IPv6 address */
-struct in6_addr {
-    union {
-        uint8_t __u6_addr8[16];
-    } __in6_u;
-};
-
 struct ip6_header {
     union {
         struct ip6_hdrctl {

> 
> eth.h seems to be used only in vmware specific code and likely needs
> to be fixed to be used in other places.
> Other option is to move is_*_ether_addr() functions to another header
> and include it in both places.

-- 
                        Amos.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]