A default interval is a good idea, bonding does this too for miimon,
but 100ms is too small for the ARP monitor.
It is possible for many ARP requests to overwhelm an ARP target. A /24
subnet of 100ms ARP monitors usually achieves this as it generates
2500 ARP requests per second (253 other hosts * 10 per second).
The default ARP monitor interval should be at least 1000ms, a tenfold
reduction in ARP requests from the above.
Suggest revise this patch to either:
- set default 100 for ethtool watch, and 1000 for ARP and NA/NS watch
- set default 1000 for all watchers
Jamie
On Mon, 4 Mar 2019 at 16:55, Hangbin Liu <liuhangbin(a)gmail.com> wrote:
>
> As we don't have a default value for link_watch.interval. If user
> forgot to set this parameter, teamd will failed to init port priv and
> exit at the end.
>
> e.g.
> teamd -g -c
'{"runner":{"name":"activebackup"},"link_watch":{"name":"arp_ping","target_host":"198.51.100.1"}}'
> teamdctl team0 port add p5p1
> teamdctl team0 port add p5p2
>
> teamd debug log shows:
> p5p2: Got link watch from global config.
> p5p2: Using sticky "0".
> Failed to get "interval" link-watch option.
> Failed to load options.
> Failed to init port priv.
> Callback named "lw_periodic" not found.
> Callback named "lw_socket" not found.
> Loop callback failed with: Invalid argument
> Failed loop callback: libteam_events, 0x5624c28b9410
> select() failed.
> Exiting...
> Removed loop callback: usock_acc_conn, 0x5624c28bab60
> Removed loop callback: usock, 0x5624c28b9410
> Removed loop callback: workq, 0x5624c28b9410
> Removed loop callback: libteam_events, 0x5624c28b9410
> Removed loop callback: daemon, 0x5624c28b9410
> Failed: Bad file descriptor
>
> Fix it by adding a default value for link_watch.interval.
>
> Reported-by: LiLiang <liali(a)redhat.com>
> Signed-off-by: Hangbin Liu <liuhangbin(a)gmail.com>
> ---
> man/teamd.conf.5 | 10 ++++++++++
> teamd/teamd_lw_psr.c | 11 ++++++++---
> 2 files changed, 18 insertions(+), 3 deletions(-)
>
> diff --git a/man/teamd.conf.5 b/man/teamd.conf.5
> index 9bdf46a..6d5374a 100644
> --- a/man/teamd.conf.5
> +++ b/man/teamd.conf.5
> @@ -308,6 +308,11 @@ Default:
> .TP
> .BR "link_watch.interval "| " ports.PORTIFNAME.link_watch.interval
" (int)
> Value is a positive number in milliseconds. It is the interval between ARP requests
being sent.
> +.RS 7
> +.PP
> +Default:
> +.BR "100"
> +.RE
> .TP
> .BR "link_watch.init_wait "| " ports.PORTIFNAME.link_watch.init_wait
" (int)
> Value is a positive number in milliseconds. It is the delay between link watch
initialization and the first ARP request being sent.
> @@ -371,6 +376,11 @@ Default:
> .TP
> .BR "link_watch.interval "| " ports.PORTIFNAME.link_watch.interval
" (int)
> Value is a positive number in milliseconds. It is the interval between sending NS
packets.
> +.RS 7
> +.PP
> +Default:
> +.BR "100"
> +.RE
> .TP
> .BR "link_watch.init_wait "| " ports.PORTIFNAME.link_watch.init_wait
" (int)
> Value is a positive number in milliseconds. It is the delay between link watch
initialization and the first NS packet being sent.
> diff --git a/teamd/teamd_lw_psr.c b/teamd/teamd_lw_psr.c
> index c0772db..3ddf295 100644
> --- a/teamd/teamd_lw_psr.c
> +++ b/teamd/teamd_lw_psr.c
> @@ -29,6 +29,7 @@
>
> static const struct timespec lw_psr_default_init_wait = { 0, 1 };
> #define LW_PSR_DEFAULT_MISSED_MAX 3
> +#define LW_PSR_DEFAULT_INTERVAL 100
>
> #define LW_PERIODIC_CB_NAME "lw_periodic"
> static int lw_psr_callback_periodic(struct teamd_context *ctx, int events, void
*priv)
> @@ -77,9 +78,13 @@ static int lw_psr_load_options(struct teamd_context *ctx,
> int tmp;
>
> err = teamd_config_int_get(ctx, &tmp, "@.interval", cpcookie);
> - if (err) {
> - teamd_log_err("Failed to get \"interval\" link-watch
option.");
> - return -EINVAL;
> + if (!err) {
> + if (tmp < 0) {
> + teamd_log_err("\"interval\" must not be
negative number.");
> + return -EINVAL;
> + }
> + } else {
> + tmp = LW_PSR_DEFAULT_INTERVAL;
> }
> teamd_log_dbg("interval \"%d\".", tmp);
> ms_to_timespec(&psr_ppriv->interval, tmp);
> --
> 2.19.2
> _______________________________________________
> libteam mailing list -- libteam(a)lists.fedorahosted.org
> To unsubscribe send an email to libteam-leave(a)lists.fedorahosted.org
> Fedora Code of Conduct:
https://getfedora.org/code-of-conduct.html
> List Guidelines:
https://fedoraproject.org/wiki/Mailing_list_guidelines
> List Archives:
https://lists.fedorahosted.org/archives/list/libteam@lists.fedorahosted.org