All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark McLoughlin <markmc@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: Mark McLoughlin <markmc@redhat.com>,
	Rusty Russell <rusty@rustcorp.com.au>,
	qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 1/4] Add 'set_link' monitor command
Date: Tue,  9 Dec 2008 10:55:40 +0000	[thread overview]
Message-ID: <1228820143-23580-2-git-send-email-markmc@redhat.com> (raw)
In-Reply-To: <1228820143-23580-1-git-send-email-markmc@redhat.com>

Add a monitor command to setting a given network device's link status
to 'up' or 'down'.

Allows simulation of network cable disconnect.

Signed-off-by: Mark McLoughlin <markmc@redhat.com>
---
 monitor.c |    1 +
 net.c     |   41 ++++++++++++++++++++++++++++++++++++++++-
 net.h     |    2 ++
 3 files changed, 43 insertions(+), 1 deletions(-)

diff --git a/monitor.c b/monitor.c
index f142a87..ac74711 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1497,6 +1497,7 @@ static const term_cmd_t term_cmds[] = {
       "value", "set maximum speed (in bytes) for migrations" },
     { "balloon", "i", do_balloon,
       "target", "request VM to change it's memory allocation (in MB)" },
+    { "set_link", "iis", do_set_link, "vlan_id dev_idx [up|down]" },
     { NULL, NULL, },
 };
 
diff --git a/net.c b/net.c
index cbf1cdf..250519c 100644
--- a/net.c
+++ b/net.c
@@ -358,12 +358,15 @@ void qemu_send_packet(VLANClientState *vc1, const uint8_t *buf, int size)
     VLANState *vlan = vc1->vlan;
     VLANClientState *vc;
 
+    if (vc1->link_down)
+        return;
+
 #ifdef DEBUG_NET
     printf("vlan %d send:\n", vlan->id);
     hex_dump(stdout, buf, size);
 #endif
     for(vc = vlan->first_client; vc != NULL; vc = vc->next) {
-        if (vc != vc1) {
+        if (vc != vc1 && !vc->link_down) {
             vc->fd_read(vc->opaque, buf, size);
         }
     }
@@ -1560,6 +1563,42 @@ void do_info_network(void)
     }
 }
 
+int do_set_link(int vlan_id, int device_idx, const char *up_or_down)
+{
+    VLANState *vlan;
+    VLANClientState *vc;
+    int i = 0;
+
+    for(vlan = first_vlan; vlan != NULL; vlan = vlan->next)
+        if (vlan->id == vlan_id)
+            break;
+
+    if (!vlan) {
+        term_printf("could not find vlan '%d'\n", vlan_id);
+        return 0;
+    }
+
+    for(vc = vlan->first_client; vc != NULL; vc = vc->next)
+        if (i++ == device_idx)
+            break;
+
+    if (!vc) {
+        term_printf("could not find device '%d' on vlan '%d'\n",
+                    device_idx, vlan_id);
+        return 0;
+    }
+
+    if (strcmp(up_or_down, "up") == 0)
+        vc->link_down = 0;
+    else if (strcmp(up_or_down, "down") == 0)
+        vc->link_down = 1;
+    else
+        term_printf("invalid link status '%s'; only 'up' or 'down' valid\n",
+                    up_or_down);
+
+    return 1;
+}
+
 void net_cleanup(void)
 {
     VLANState *vlan;
diff --git a/net.h b/net.h
index a2b01ae..e7cd062 100644
--- a/net.h
+++ b/net.h
@@ -10,6 +10,7 @@ struct VLANClientState {
     /* Packets may still be sent if this returns zero.  It's used to
        rate-limit the slirp code.  */
     IOCanRWHandler *fd_can_read;
+    int link_down;
     void *opaque;
     struct VLANClientState *next;
     struct VLANState *vlan;
@@ -34,6 +35,7 @@ void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size);
 void qemu_handler_true(void *opaque);
 
 void do_info_network(void);
+int do_set_link(int vlan_id, int device_idx, const char *up_or_down);
 
 /* NIC info */
 
-- 
1.5.4.3

  reply	other threads:[~2008-12-09 10:57 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-09 10:55 [Qemu-devel] [PATCH 0/4] Add nic link up/down emulation to e1000 Mark McLoughlin
2008-12-09 10:55 ` Mark McLoughlin [this message]
2008-12-09 10:55   ` [Qemu-devel] [PATCH 2/4] Add device index to 'info network' output Mark McLoughlin
2008-12-09 10:55     ` [Qemu-devel] [PATCH 3/4] Allow devices be notified of link status change Mark McLoughlin
2008-12-09 10:55       ` [Qemu-devel] [PATCH 4/4] Implement e1000 link status Mark McLoughlin
2008-12-09 15:04     ` [Qemu-devel] Re: [PATCH 2/4] Add device index to 'info network' output Anthony Liguori
2008-12-09 15:01   ` [Qemu-devel] Re: [PATCH 1/4] Add 'set_link' monitor command Anthony Liguori
2008-12-12 14:45     ` Mark McLoughlin
2008-12-12 14:46       ` [Qemu-devel] [PATCH 1/5] Add a model string to VLANClientState Mark McLoughlin
2008-12-12 14:46         ` [Qemu-devel] [PATCH 2/5] Assign a name to each VLAN client Mark McLoughlin
2008-12-12 14:46           ` [Qemu-devel] [PATCH 3/5] Fixup info_str formatting Mark McLoughlin
2008-12-12 14:46             ` [Qemu-devel] [PATCH 4/5] Add qemu_format_nic_info_str() Mark McLoughlin
2008-12-12 14:46               ` [Qemu-devel] [PATCH 5/5] Add a -net name=foo parameter Mark McLoughlin
2008-12-14 23:48                 ` Aurelien Jarno
2009-01-06 14:59       ` [Qemu-devel] Re: [PATCH 1/4] Add 'set_link' monitor command Mark McLoughlin
2009-01-06 15:00         ` [Qemu-devel] [PATCH 1/6] Add a model string to VLANClientState Mark McLoughlin
2009-01-06 15:00           ` [Qemu-devel] [PATCH 2/6] Assign a name to each VLAN client Mark McLoughlin
2009-01-06 15:00             ` [Qemu-devel] [PATCH 3/6] Fixup info_str formatting Mark McLoughlin
2009-01-06 15:00               ` [Qemu-devel] [PATCH 4/6] Add qemu_format_nic_info_str() Mark McLoughlin
2009-01-06 15:00                 ` [Qemu-devel] [PATCH 5/6] add missing MAC address to info_str for some NICs Mark McLoughlin
2009-01-06 15:00                   ` [Qemu-devel] [PATCH 6/6] Add a -net name=foo parameter Mark McLoughlin
2009-01-07 17:49           ` [Qemu-devel] Re: [PATCH 1/6] Add a model string to VLANClientState Anthony Liguori
2008-12-09 11:23 ` [Qemu-devel] [PATCH 0/4] Add nic link up/down emulation to e1000 Daniel P. Berrange
2008-12-09 13:57   ` Dor Laor
2008-12-09 15:06 ` [Qemu-devel] " Anthony Liguori
2008-12-10  8:53   ` Avi Kivity
  -- strict thread matches above, loose matches on Subject: below --
2009-01-08 18:37 [PATCH 2/3] kvm: qemu: handle link status in qemu_sendv_packet() Mark McLoughlin
2009-01-08 18:37 ` [Qemu-devel] [PATCH 1/4] Add 'set_link' monitor command Mark McLoughlin

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=1228820143-23580-2-git-send-email-markmc@redhat.com \
    --to=markmc@redhat.com \
    --cc=anthony@codemonkey.ws \
    --cc=qemu-devel@nongnu.org \
    --cc=rusty@rustcorp.com.au \
    /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.