[patch libteam 1/2] Collect and export statistics about total probes sent
by Daniele Di Proietto
From: Daniele Di Proietto <ddiproietto(a)google.com>
This is useful to monitor the arp_ping and nsna_ping link watches.
The value is exported as a string, because int in jansson is limited to
32-bits (and in general JSON implementations do not handle 64-bits
values very well).
Signed-off-by: Daniele Di Proietto <ddiproietto(a)google.com>
---
teamd/teamd_link_watch.h | 6 ++++++
teamd/teamd_lw_arp_ping.c | 5 +++++
teamd/teamd_lw_nsna_ping.c | 5 +++++
teamd/teamd_lw_psr.c | 25 ++++++++++++++++++++++++-
4 files changed, 40 insertions(+), 1 deletion(-)
diff --git a/teamd/teamd_link_watch.h b/teamd/teamd_link_watch.h
index ea7ef87..46030aa 100644
--- a/teamd/teamd_link_watch.h
+++ b/teamd/teamd_link_watch.h
@@ -1,6 +1,8 @@
#ifndef _TEAMD_LINK_WATCH_H_
#define _TEAMD_LINK_WATCH_H_
+#include <stdint.h>
+
#include "teamd_state.h"
struct teamd_link_watch {
@@ -40,6 +42,7 @@ struct lw_psr_port_priv {
unsigned int missed_max;
int sock;
unsigned int missed;
+ uint64_t total_probes_sent;
bool reply_received;
};
@@ -77,5 +80,8 @@ int lw_psr_state_missed_max_get(struct teamd_context *ctx,
int lw_psr_state_missed_get(struct teamd_context *ctx,
struct team_state_gsc *gsc,
void *priv);
+int lw_psr_state_total_probes_sent_get(struct teamd_context *ctx,
+ struct team_state_gsc *gsc,
+ void *priv);
#endif
diff --git a/teamd/teamd_lw_arp_ping.c b/teamd/teamd_lw_arp_ping.c
index c3d4710..d429e31 100644
--- a/teamd/teamd_lw_arp_ping.c
+++ b/teamd/teamd_lw_arp_ping.c
@@ -477,6 +477,11 @@ static const struct teamd_state_val lw_ap_state_vals[] = {
.type = TEAMD_STATE_ITEM_TYPE_INT,
.getter = lw_psr_state_missed_get,
},
+ {
+ .subpath = "total_probes_sent",
+ .type = TEAMD_STATE_ITEM_TYPE_STRING,
+ .getter = lw_psr_state_total_probes_sent_get,
+ },
};
const struct teamd_link_watch teamd_link_watch_arp_ping = {
diff --git a/teamd/teamd_lw_nsna_ping.c b/teamd/teamd_lw_nsna_ping.c
index 9273462..9468788 100644
--- a/teamd/teamd_lw_nsna_ping.c
+++ b/teamd/teamd_lw_nsna_ping.c
@@ -324,6 +324,11 @@ static const struct teamd_state_val lw_nsnap_state_vals[] = {
.type = TEAMD_STATE_ITEM_TYPE_INT,
.getter = lw_psr_state_missed_get,
},
+ {
+ .subpath = "total_probes_sent",
+ .type = TEAMD_STATE_ITEM_TYPE_STRING,
+ .getter = lw_psr_state_total_probes_sent_get,
+ },
};
const struct teamd_link_watch teamd_link_watch_nsnap = {
diff --git a/teamd/teamd_lw_psr.c b/teamd/teamd_lw_psr.c
index b0a41f4..68e028d 100644
--- a/teamd/teamd_lw_psr.c
+++ b/teamd/teamd_lw_psr.c
@@ -18,6 +18,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <inttypes.h>
+#include <stdio.h>
#include <private/misc.h>
#include "teamd.h"
#include "teamd_link_watch.h"
@@ -58,7 +60,10 @@ static int lw_psr_callback_periodic(struct teamd_context *ctx, int events, void
return err;
psr_ppriv->reply_received = false;
- return psr_ppriv->ops->send(psr_ppriv);
+ err = psr_ppriv->ops->send(psr_ppriv);
+ if (!err)
+ psr_ppriv->total_probes_sent++;
+ return err;
}
#define LW_SOCKET_CB_NAME "lw_socket"
@@ -235,3 +240,21 @@ int lw_psr_state_missed_get(struct teamd_context *ctx,
gsc->data.int_val = psr_ppriv->missed;
return 0;
}
+
+int lw_psr_state_total_probes_sent_get(struct teamd_context *ctx,
+ struct team_state_gsc *gsc,
+ void *priv)
+{
+ struct lw_common_port_priv *common_ppriv = priv;
+ struct lw_psr_port_priv *psr_ppriv = lw_psr_ppriv_get(common_ppriv);
+ char *str;
+ int err;
+
+ err = asprintf(&str, "%"PRIu64, psr_ppriv->total_probes_sent);
+ if (err == -1)
+ return -ENOMEM;
+
+ gsc->data.str_val.ptr = str;
+ gsc->data.str_val.free = true;
+ return 0;
+}
--
2.32.0.93.g670b81a890-goog
2 years
[patch libteam] utils/bond2team: convert resend_igmp to mcast_rejoin.count
by Jamie Bainbridge
Bonding has option "resend_igmp" to control the number of IGMP
membership reports announced on an active-backup failover.
Teaming has the equivalent functionality with "mcast_rejoin.count"
bond2team reports "parameter resend_igmp not supported, aborting"
Implement conversion of "resend_igmp" to "mcast_rejoin.count"
Signed-off-by: Jamie Bainbridge <jamie.bainbridge(a)gmail.com>
---
utils/bond2team | 58 ++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 57 insertions(+), 1 deletion(-)
diff --git a/utils/bond2team b/utils/bond2team
index 2aae3f5..a8487b7 100755
--- a/utils/bond2team
+++ b/utils/bond2team
@@ -552,6 +552,22 @@ team_master_set_config()
fi
+ nr_opt=${#MCAST_OPTS[@]}
+ if [ $nr_opt -gt 0 ]; then
+ team_config="${team_config}, \"mcast_rejoin\" : { "
+ # add mcast_rejoin_options
+ for pos in $(seq 0 $((${#MCAST_OPTS[@]} - 1)))
+ do
+ if [ $pos -ne 0 ]; then
+ team_config="${team_config}, "
+ fi
+
+ team_config="${team_config} ${MCAST_OPTS[$pos]}"
+ done
+
+ team_config="${team_config} }"
+ fi
+
team_config="${team_config} }'"
pr_dbg "built team_config=${team_config}"
vfile_add_line "TEAM_CONFIG=${team_config}"
@@ -679,6 +695,18 @@ teamd_config_create()
done
fi
+ local mrejoin_nr=${#MCAST_OPTS[@]}
+ if [ ${mrejoin_nr} -gt 0 ]; then
+ local last_pos=$((${mrejoin_nr} - 1))
+ for pos in $(seq 0 ${last_pos})
+ do
+ if [ $pos -eq ${last_pos} ]; then
+ vfile_add_line " ${MCAST_OPTS[$pos]}"
+ else
+ vfile_add_line " ${MCAST_OPTS[$pos]},"
+ fi
+ done
+ fi
vfile_add_line " },"
return 0
}
@@ -1032,6 +1060,31 @@ lwatch_parse_opt()
esac
}
+# mcast Functions
+mcast_add_opt()
+{
+ pr_dbg "${FUNCNAME} $*"
+ local pos=${#MCAST_OPTS[*]}
+ MCAST_OPTS[${pos}]="$1"
+}
+
+mcast_parse_opt()
+{
+ pr_dbg "${FUNCNAME} $*"
+ local param=$1
+ local value=$2
+
+ case $param in
+ "resend_igmp")
+ mcast_add_opt "\"count\" : $value" || return 1
+ ;;
+ *)
+ pr_error "parameter $param=$value is not supported"
+ return 1
+ ;;
+ esac
+}
+
port_parse_opt()
{
pr_dbg "${FUNCNAME} $*"
@@ -1079,7 +1132,7 @@ convert_bond_opts()
pr_info "parameter $key not supported, ignoring"
continue
;;
- "all_slaves_active"|"resend_igmp"|"num_grat_arp"|"num_unsol_na")
+ "all_slaves_active"|"num_grat_arp"|"num_unsol_na")
pr_error "parameter $key not supported, aborting"
return 1
;;
@@ -1092,6 +1145,9 @@ convert_bond_opts()
"primary"|"primary_reselect")
port_parse_opt $key $value || return 1
;;
+ "resend_igmp")
+ mcast_parse_opt $key $value || return 1
+ ;;
*)
pr_error "unknown parameter $key=$value, aborting"
return 1
--
2.25.1
2 years