diff mbox

[PULL,4/4] net: disallow to specify multicast MAC address

Message ID 20131022092108.GA3085@amosk.info
State New
Headers show

Commit Message

Amos Kong Oct. 22, 2013, 9:21 a.m. UTC
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


> 
> 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.

Comments

Dmitry Krivenok Oct. 22, 2013, 9:51 a.m. UTC | #1
This was my original intention, but I noticed that structs defined
differently and standard one may be bigger depending on some #defines. So I
renamed in6_addr to in6_address in include/net/eth.h (see v2 patch I sent
yesterday). In case qemu version is not supposed to be a different struct,
then your change is definitely right.
diff mbox

Patch

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 {