[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