[ovs-dev] [wait for connection v2 1/3] netdev-dummy: add appctl netdev-dummy/conn-state command

Andy Zhou azhou at nicira.com
Tue Jun 10 20:12:26 UTC 2014


Thanks for the review, I will push it soon.

On Tue, Jun 10, 2014 at 11:48 AM, Jarno Rajahalme <jrajahalme at nicira.com> wrote:
> 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."
>
I will change it as follows:

"unknown":  It is not 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.
I will fix this by move  display_conn_state__ outside of the if
(netdev..) block,
so we always output the state sting. With this change state needs to
be initialized.

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