[ovs-dev] [wait for connection v2 1/3] netdev-dummy: add appctl netdev-dummy/conn-state command
Jarno Rajahalme
jrajahalme at nicira.com
Tue Jun 10 18:48:59 UTC 2014
Two small nits below, otherwise looks good to me:
Acked-by: Jarno Rajahalme <jrajahalme at nicira.com>
On Jun 9, 2014, at 9:33 AM, Andy Zhou <azhou at nicira.com> wrote:
> Using without any parameter, this command list the connection
> state of all netdev-dummy devices that are configured to make
> active connections.
>
> Optionally, the name of the netdev-dummy device can be supplied
> as a parameter.
>
> The states will be displayed as:
>
> "connected": The socket has been connected to the listener.
> "disconnected": The socket is not connected.
> "unknown": It is not a dummy device or a listening dummy device.
Should be “or an active dummy device."
>
> CC: Jarno Rajahalme <jrajahalme at nicira.com>
> Signed-off-by: Andy Zhou <azhou at nicira.com>
> ---
> lib/netdev-dummy.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 92 insertions(+)
>
> diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c
> index 501fb82..9483603 100644
> --- a/lib/netdev-dummy.c
> +++ b/lib/netdev-dummy.c
> @@ -21,6 +21,7 @@
> #include <errno.h>
>
> #include "dpif-netdev.h"
> +#include "dynamic-string.h"
> #include "flow.h"
> #include "list.h"
> #include "netdev-provider.h"
> @@ -56,6 +57,12 @@ enum dummy_packet_conn_type {
> ACTIVE /* Connect to listener. */
> };
>
> +enum dummy_netdev_conn_state {
> + CONN_STATE_CONNECTED, /* Listener connected. */
> + CONN_STATE_NOT_CONNECTED, /* Listener not connected. */
> + CONN_STATE_UNKNOWN, /* No relavent information. */
> +};
> +
> struct dummy_packet_pconn {
> struct pstream *pstream;
> struct dummy_packet_stream *streams;
> @@ -561,6 +568,24 @@ dummy_packet_conn_send(struct dummy_packet_conn *conn,
> }
> }
>
> +static enum dummy_netdev_conn_state
> +dummy_netdev_get_conn_state(struct dummy_packet_conn *conn)
> +{
> + enum dummy_netdev_conn_state state;
> +
> + if (conn->type == ACTIVE) {
> + if (reconnect_is_connected(conn->u.rconn.reconnect)) {
> + state = CONN_STATE_CONNECTED;
> + } else {
> + state = CONN_STATE_NOT_CONNECTED;
> + }
> + } else {
> + state = CONN_STATE_UNKNOWN;
> + }
> +
> + return state;
> +}
> +
> static void
> netdev_dummy_run(void)
> {
> @@ -1219,6 +1244,70 @@ netdev_dummy_set_admin_state(struct unixctl_conn *conn, int argc,
> unixctl_command_reply(conn, "OK");
> }
>
> +static void
> +display_conn_state__(struct ds *s, const char *name,
> + enum dummy_netdev_conn_state state)
> +{
> + ds_put_format(s, "%s: ", name);
> +
> + switch (state) {
> + case CONN_STATE_CONNECTED:
> + ds_put_cstr(s, "connected\n");
> + break;
> +
> + case CONN_STATE_NOT_CONNECTED:
> + ds_put_cstr(s, "disconnected\n");
> + break;
> +
> + case CONN_STATE_UNKNOWN:
> + default:
> + ds_put_cstr(s, "unknown\n");
> + break;
> + };
> +}
> +
> +static void
> +netdev_dummy_conn_state(struct unixctl_conn *conn, int argc,
> + const char *argv[], void *aux OVS_UNUSED)
> +{
> + enum dummy_netdev_conn_state state = CONN_STATE_UNKNOWN;
Initialization is not used for anything below.
> + struct ds s;
> +
> + ds_init(&s);
> +
> + if (argc > 1) {
> + const char *dev_name = argv[1];
> + struct netdev *netdev = netdev_from_name(dev_name);
> +
> + if (netdev && is_dummy_class(netdev->netdev_class)) {
> + struct netdev_dummy *dummy_dev = netdev_dummy_cast(netdev);
> +
> + ovs_mutex_lock(&dummy_dev->mutex);
> + state = dummy_netdev_get_conn_state(&dummy_dev->conn);
> + ovs_mutex_unlock(&dummy_dev->mutex);
> +
> + netdev_close(netdev);
> + display_conn_state__(&s, dev_name, state);
> + }
> + } else {
> + struct netdev_dummy *netdev;
> +
> + ovs_mutex_lock(&dummy_list_mutex);
> + LIST_FOR_EACH (netdev, list_node, &dummy_list) {
> + ovs_mutex_lock(&netdev->mutex);
> + state = dummy_netdev_get_conn_state(&netdev->conn);
> + ovs_mutex_unlock(&netdev->mutex);
> + if (state != CONN_STATE_UNKNOWN) {
> + display_conn_state__(&s, netdev->up.name, state);
> + }
> + }
> + ovs_mutex_unlock(&dummy_list_mutex);
> + }
> +
> + unixctl_command_reply(conn, ds_cstr(&s));
> + ds_destroy(&s);
> +}
> +
> void
> netdev_dummy_register(bool override)
> {
> @@ -1227,6 +1316,9 @@ netdev_dummy_register(bool override)
> unixctl_command_register("netdev-dummy/set-admin-state",
> "[netdev] up|down", 1, 2,
> netdev_dummy_set_admin_state, NULL);
> + unixctl_command_register("netdev-dummy/conn-state",
> + "[netdev]", 0, 1,
> + netdev_dummy_conn_state, NULL);
>
> if (override) {
> struct sset types;
> --
> 1.9.1
>
More information about the dev
mailing list