All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chuck Ebbert <cebbert@redhat.com>
To: Brian Braunstein <brian@bristyle.com>
Cc: Max Krasnyansky <maxk@qualcomm.com>,
	vtun@office.satix.net, akpm@osdl.org, jgarzik@pobox.com,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] net: tun/tap: fixed hw address handling
Date: Mon, 26 Mar 2007 17:22:11 -0400	[thread overview]
Message-ID: <46083983.4070202@redhat.com> (raw)
In-Reply-To: <460632E9.5030508@bristyle.com>

Brian Braunstein wrote:
> 
> From: Brian Braunstein <linuxkernel@bristyle.com>
> 
> Fixed tun/tap driver's handling of hw addresses. The hw address is
> stored in
> both the net_device.dev_addr and tun.dev_addr fields.  These fields were
> not
> kept synchronized, and in fact weren't even initialized to the same value.
> Now during both init and when performing SIOCSIFHWADDR on the tun device
> these values are both updated.  However, if SIOCSIFHWADDR is performed
> on the
> net device directly (for instance, setting the hw address using ifconfig),
> the tun device does not get updated.  Perhaps the tun.dev_addr field should
> be removed completely at some point, as it is redundant and
> net_device.dev_addr can be used anywhere it is used.
> Signed-off-by: Brian Braunstein <linuxkernel@bristyle.com>
> 

Patch is hopelessly corrupted:
  missing leading space in context lines
  <tab> converted to four spaces

> 
> --- linux-2.6.20.4-ORIG/drivers/net/tun.c    2007-03-23
> 12:52:51.000000000 -0700
> +++ linux-2.6.20.4/drivers/net/tun.c    2007-03-25 00:44:20.000000000 -0700
> @@ -18,6 +18,10 @@
> /*
>  *  Changes:
>  *
> + *  Brian Braunstein <linuxkernel@bristyle.com> 2007/03/23
> + *    Fixed hw address handling.  Now net_device.dev_addr is kept
> consistent
> + *    with tun.dev_addr when the address is set by this module.
> + *
>  *  Mike Kershaw <dragorn@kismetwireless.net> 2005/08/14
>  *    Add TUNSETLINK ioctl to set the link encapsulation
>  *
> @@ -196,7 +200,10 @@ static void tun_net_init(struct net_devi
>         dev->set_multicast_list = tun_net_mclist;
> 
>         ether_setup(dev);
> -        random_ether_addr(dev->dev_addr);
> +
> +        /* random address already created for us by tun_set_iff, use it */
> +        memcpy(dev->dev_addr, tun->dev_addr, min(sizeof(tun->dev_addr),
> sizeof(dev->dev_addr)) );
> +
>         dev->tx_queue_len = TUN_READQ_SIZE;  /* We prefer our own queue
> length */
>         break;
>     }
> @@ -636,6 +643,7 @@ static int tun_chr_ioctl(struct inode *i
>         return 0;
> 
>     case SIOCGIFHWADDR:
> +        /* Note: the actual net device's address may be different */
>         memcpy(ifr.ifr_hwaddr.sa_data, tun->dev_addr,
>                 min(sizeof ifr.ifr_hwaddr.sa_data, sizeof tun->dev_addr));
>         if (copy_to_user( argp, &ifr, sizeof ifr))
> @@ -643,16 +651,24 @@ static int tun_chr_ioctl(struct inode *i
>         return 0;
> 
>     case SIOCSIFHWADDR:
> -        /** Set the character device's hardware address. This is used when
> -         * filtering packets being sent from the network device to the
> character
> -         * device. */
> -        memcpy(tun->dev_addr, ifr.ifr_hwaddr.sa_data,
> -                min(sizeof ifr.ifr_hwaddr.sa_data, sizeof tun->dev_addr));
> -        DBG(KERN_DEBUG "%s: set hardware address: %x:%x:%x:%x:%x:%x\n",
> -                tun->dev->name,
> -                tun->dev_addr[0], tun->dev_addr[1], tun->dev_addr[2],
> -                tun->dev_addr[3], tun->dev_addr[4], tun->dev_addr[5]);
> -        return 0;
> +    {
> +        /* try to set the actual net device's hw address */
> +        int ret = dev_set_mac_address(tun->dev, &ifr.ifr_hwaddr);
> +
> +        if (ret == 0) {
> +            /** Set the character device's hardware address. This is
> used when
> +             * filtering packets being sent from the network device to
> the character
> +             * device. */
> +            memcpy(tun->dev_addr, ifr.ifr_hwaddr.sa_data,
> +                    min(sizeof ifr.ifr_hwaddr.sa_data, sizeof
> tun->dev_addr));
> +            DBG(KERN_DEBUG "%s: set hardware address:
> %x:%x:%x:%x:%x:%x\n",
> +                    tun->dev->name,
> +                    tun->dev_addr[0], tun->dev_addr[1], tun->dev_addr[2],
> +                    tun->dev_addr[3], tun->dev_addr[4], tun->dev_addr[5]);
> +        }
> +
> +        return  ret;
> +    }
> 
>     case SIOCADDMULTI:
>         /** Add the specified group to the character device's multicast
> filter
> 
 


  parent reply	other threads:[~2007-03-26 21:24 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-03-25  8:29 [PATCH] net: tun/tap: fixed hw address handling Brian Braunstein
2007-03-26 20:55 ` Ahmed S. Darwish
2007-03-26 21:05   ` Ahmed S. Darwish
2007-03-26 21:22 ` Chuck Ebbert [this message]
2007-03-29 18:07 ` Chuck Ebbert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=46083983.4070202@redhat.com \
    --to=cebbert@redhat.com \
    --cc=akpm@osdl.org \
    --cc=brian@bristyle.com \
    --cc=jgarzik@pobox.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maxk@qualcomm.com \
    --cc=netdev@vger.kernel.org \
    --cc=vtun@office.satix.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.