aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Pirko <jiri@resnulli.us>2015-03-16 11:41:04 +0100
committerJiri Pirko <jiri@resnulli.us>2015-03-16 11:41:04 +0100
commit42a1692e386e9d5276397bf6d6468c08374f2966 (patch)
tree51ed4ead56f11fae31fe856cf31651a76c953359
parent11967b05cdee080da6f6ee2127b389a7e43d7ae3 (diff)
downloadlibteam-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.c18
-rw-r--r--teamd/teamd_link_watch.h1
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;
};