diff options
author | Jiri Pirko <jiri@resnulli.us> | 2015-03-16 11:41:04 +0100 |
---|---|---|
committer | Jiri Pirko <jiri@resnulli.us> | 2015-03-16 11:41:04 +0100 |
commit | 42a1692e386e9d5276397bf6d6468c08374f2966 (patch) | |
tree | 51ed4ead56f11fae31fe856cf31651a76c953359 | |
parent | 11967b05cdee080da6f6ee2127b389a7e43d7ae3 (diff) | |
download | libteam-42a1692e386e9d5276397bf6d6468c08374f2966.tar.gz |
teamd: lw: count how many times has been the port down
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
-rw-r--r-- | teamd/teamd_link_watch.c | 18 | ||||
-rw-r--r-- | teamd/teamd_link_watch.h | 1 |
2 files changed, 19 insertions, 0 deletions
diff --git a/teamd/teamd_link_watch.c b/teamd/teamd_link_watch.c index 7839603..c0684ba 100644 --- a/teamd/teamd_link_watch.c +++ b/teamd/teamd_link_watch.c @@ -26,6 +26,7 @@ #include <sys/types.h> #include <netdb.h> #include <time.h> +#include <limits.h> #include <private/misc.h> #include <team.h> @@ -90,6 +91,8 @@ int teamd_link_watch_check_link_up(struct teamd_context *ctx, common_ppriv->link_up = new_link_up; teamd_log_info("%s: %s-link went %s.", tdport->ifname, lw_name, new_link_up ? "up" : "down"); + if (!new_link_up && common_ppriv->link_down_count < INT_MAX) + common_ppriv->link_down_count++; return teamd_event_port_link_changed(ctx, tdport); } @@ -181,6 +184,16 @@ static int link_watch_state_up_get(struct teamd_context *ctx, return 0; } +static int link_watch_state_down_count_get(struct teamd_context *ctx, + struct team_state_gsc *gsc, + void *priv) +{ + struct lw_common_port_priv *common_ppriv = priv; + + gsc->data.int_val = common_ppriv->link_down_count; + return 0; +} + static const struct teamd_state_val link_watch_state_vals[] = { { .subpath = "name", @@ -192,6 +205,11 @@ static const struct teamd_state_val link_watch_state_vals[] = { .type = TEAMD_STATE_ITEM_TYPE_BOOL, .getter = link_watch_state_up_get, }, + { + .subpath = "down_count", + .type = TEAMD_STATE_ITEM_TYPE_INT, + .getter = link_watch_state_down_count_get, + }, }; static const struct teamd_state_val link_watch_state_vg = { diff --git a/teamd/teamd_link_watch.h b/teamd/teamd_link_watch.h index a4d441c..ea7ef87 100644 --- a/teamd/teamd_link_watch.h +++ b/teamd/teamd_link_watch.h @@ -15,6 +15,7 @@ struct lw_common_port_priv { struct teamd_context *ctx; struct teamd_port *tdport; bool link_up; + int link_down_count; bool forced_send; struct teamd_config_path_cookie *cpcookie; }; |