diff mbox

virtio-spec: set mac address by a new vq command

Message ID 1358321604-11712-1-git-send-email-akong@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Amos Kong Jan. 16, 2013, 7:33 a.m. UTC
From: Amos Kong <akong@redhat.com>

Virtio-net driver currently programs MAC address byte by byte,
this means that we have an intermediate step where mac is wrong.
This patch introduced a new control command to set MAC address
in one time, and added a new feature flag VIRTIO_NET_F_MAC_ADDR
for this feature.

Signed-off-by: Amos Kong <akong@redhat.com>
---
 virtio-spec.lyx | 45 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 44 insertions(+), 1 deletion(-)

Comments

Stefan Hajnoczi Jan. 16, 2013, 9:13 a.m. UTC | #1
On Wed, Jan 16, 2013 at 03:33:24PM +0800, akong@redhat.com wrote:
> +\change_inserted -1930653948 1358320004
> +The command VIRTIO_NET_CTRL_MAC_ADDR_SET is used to set 
> +\begin_inset Quotes eld
> +\end_inset
> +
> +physical
> +\begin_inset Quotes erd
> +\end_inset
> +
> + address of the network card.

The "physical" address of the network card?  That term is not defined
anywhere in the specification.

Perhaps it's best to explain that the config space "mac" field and
VIRTIO_NET_CTRL_MAC_ADDR_SET both set the default MAC address which rx
filtering accepts.  (The MAC table is an additional set of MAC addresses
which rx filtering accepts.)

It would also be worth explaining that VIRTIO_NET_CTRL_MAC_ADDR_SET is
atomic whereas the config space "mac" field is not.  Therefore,
VIRTIO_NET_CTRL_MAC_ADDR_SET is preferred, especially while the NIC is
up.

Stefan
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Michael S. Tsirkin Jan. 16, 2013, 9:22 a.m. UTC | #2
On Wed, Jan 16, 2013 at 10:13:28AM +0100, Stefan Hajnoczi wrote:
> On Wed, Jan 16, 2013 at 03:33:24PM +0800, akong@redhat.com wrote:
> > +\change_inserted -1930653948 1358320004
> > +The command VIRTIO_NET_CTRL_MAC_ADDR_SET is used to set 
> > +\begin_inset Quotes eld
> > +\end_inset
> > +
> > +physical
> > +\begin_inset Quotes erd
> > +\end_inset
> > +
> > + address of the network card.
> 
> The "physical" address of the network card?  That term is not defined
> anywhere in the specification.
> 
> Perhaps it's best to explain that the config space "mac" field and
> VIRTIO_NET_CTRL_MAC_ADDR_SET both set the default MAC address which rx
> filtering accepts.  (The MAC table is an additional set of MAC addresses
> which rx filtering accepts.)
> 
> It would also be worth explaining that VIRTIO_NET_CTRL_MAC_ADDR_SET is
> atomic whereas the config space "mac" field is not.  Therefore,
> VIRTIO_NET_CTRL_MAC_ADDR_SET is preferred, especially while the NIC is
> up.
> 
> Stefan

It's probably best to simply make the config space field
read-only if the feature bit is acked.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/virtio-spec.lyx b/virtio-spec.lyx
index 1ba9992..03f5a49 100644
--- a/virtio-spec.lyx
+++ b/virtio-spec.lyx
@@ -56,6 +56,7 @@ 
 \html_math_output 0
 \html_css_as_file 0
 \html_be_strict false
+\author -1930653948 "Amos Kong" akong@redhat.com
 \author -608949062 "Rusty Russell,,," 
 \author -385801441 "Cornelia Huck" cornelia.huck@de.ibm.com
 \author 1112500848 "Rusty Russell" rusty@rustcorp.com.au
@@ -4391,6 +4392,14 @@  VIRTIO_NET_F_GUEST_ANNOUNCE(21) Guest can send gratuitous packets.
 
 \change_inserted 1986246365 1352742808
 VIRTIO_NET_F_MQ(22) Device supports multiqueue with automatic receive steering.
+\change_inserted -1930653948 1358319033
+
+\end_layout
+
+\begin_layout Description
+
+\change_inserted -1930653948 1358319080
+VIRTIO_NET_F_CTRL_MAC_ADDR(23) Set MAC address.
 \change_unchanged
 
 \end_layout
@@ -5284,7 +5293,11 @@  The class VIRTIO_NET_CTRL_RX has two commands: VIRTIO_NET_CTRL_RX_PROMISC
 \end_layout
 
 \begin_layout Subsubsection*
-Setting MAC Address Filtering
+Setting MAC Address
+\change_deleted -1930653948 1358318470
+ Filtering
+\change_unchanged
+
 \end_layout
 
 \begin_layout Standard
@@ -5324,6 +5337,17 @@  struct virtio_net_ctrl_mac {
 \begin_layout Plain Layout
 
  #define VIRTIO_NET_CTRL_MAC_TABLE_SET        0 
+\change_inserted -1930653948 1358318313
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\change_inserted -1930653948 1358318331
+
+ #define VIRTIO_NET_CTRL_MAC_ADDR_SET         1
+\change_unchanged
+
 \end_layout
 
 \end_inset
@@ -5349,6 +5373,25 @@  T_CTRL_MAC_TABLE_SET.
  The command-specific-data is two variable length tables of 6-byte MAC addresses.
  The first table contains unicast addresses, and the second contains multicast
  addresses.
+\change_inserted -1930653948 1358318545
+
+\end_layout
+
+\begin_layout Standard
+
+\change_inserted -1930653948 1358320004
+The command VIRTIO_NET_CTRL_MAC_ADDR_SET is used to set 
+\begin_inset Quotes eld
+\end_inset
+
+physical
+\begin_inset Quotes erd
+\end_inset
+
+ address of the network card.
+ The command-specific-data is a 6-byte MAC address.
+\change_unchanged
+
 \end_layout
 
 \begin_layout Subsection*