import libteam-1.29-1.el8
This commit is contained in:
parent
c642c5bda7
commit
402e4923b2
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
|||||||
SOURCES/libteam-1.28.tar.gz
|
SOURCES/libteam-1.29.tar.gz
|
||||||
|
@ -1 +1 @@
|
|||||||
c3429d0b29ae78dd1d4899dab6fe9f13af26ff7d SOURCES/libteam-1.28.tar.gz
|
2dbdd6769c61381f84a31553bc5502a60376e33b SOURCES/libteam-1.29.tar.gz
|
||||||
|
@ -1,30 +0,0 @@
|
|||||||
From f36c191da3d65a4744582b2eb09fa297dd85f9ae Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hangbin Liu <liuhangbin@gmail.com>
|
|
||||||
Date: Fri, 22 Feb 2019 16:27:46 +0800
|
|
||||||
Subject: [PATCH 5/6] man: fix runner.min_ports default value
|
|
||||||
|
|
||||||
It should be 1 instead of 0.
|
|
||||||
|
|
||||||
Reported-by: LiLiang <liali@redhat.com>
|
|
||||||
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
|
|
||||||
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
|
|
||||||
---
|
|
||||||
man/teamd.conf.5 | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/man/teamd.conf.5 b/man/teamd.conf.5
|
|
||||||
index 9bdf46a..5b0f3e9 100644
|
|
||||||
--- a/man/teamd.conf.5
|
|
||||||
+++ b/man/teamd.conf.5
|
|
||||||
@@ -240,7 +240,7 @@ Specifies the minimum number of ports that must be active before asserting carri
|
|
||||||
.RS 7
|
|
||||||
.PP
|
|
||||||
Default:
|
|
||||||
-.BR "0"
|
|
||||||
+.BR "1"
|
|
||||||
.RE
|
|
||||||
.TP
|
|
||||||
.BR "runner.agg_select_policy " (string)
|
|
||||||
--
|
|
||||||
2.18.1
|
|
||||||
|
|
@ -0,0 +1,55 @@
|
|||||||
|
From 337bae54278a112bab9d99e05ee7ec825b12c646 Mon Sep 17 00:00:00 2001
|
||||||
|
Message-Id: <337bae54278a112bab9d99e05ee7ec825b12c646.1566966529.git.lucien.xin@gmail.com>
|
||||||
|
From: Hangbin Liu <liuhangbin@gmail.com>
|
||||||
|
Date: Wed, 24 Jul 2019 17:02:21 +0800
|
||||||
|
Subject: [PATCH] man teamd.conf: update some parameter default values
|
||||||
|
|
||||||
|
Update default runner.name to roundrobin, default runner.tx_hash array
|
||||||
|
to ["eth", "ipv4", "ipv6"], default runner.fast_rate to false.
|
||||||
|
|
||||||
|
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
|
||||||
|
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
|
||||||
|
---
|
||||||
|
man/teamd.conf.5 | 12 ++++++++++++
|
||||||
|
1 file changed, 12 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/man/teamd.conf.5 b/man/teamd.conf.5
|
||||||
|
index 9090b4a..350ffc9 100644
|
||||||
|
--- a/man/teamd.conf.5
|
||||||
|
+++ b/man/teamd.conf.5
|
||||||
|
@@ -42,6 +42,9 @@ To do passive load balancing, runner only sets up BPF hash function which will d
|
||||||
|
.PP
|
||||||
|
.BR "lacp "\(em
|
||||||
|
Implements 802.3ad LACP protocol. Can use same Tx port selection possibilities as loadbalance runner.
|
||||||
|
+.PP
|
||||||
|
+Default:
|
||||||
|
+.BR "roundrobin"
|
||||||
|
.RE
|
||||||
|
.TP
|
||||||
|
.BR "notify_peers.count " (int)
|
||||||
|
@@ -182,6 +185,10 @@ Uses source and destination SCTP ports.
|
||||||
|
.PP
|
||||||
|
.BR "l4 "\(em
|
||||||
|
Uses source and destination TCP and UDP and SCTP ports.
|
||||||
|
+.PP
|
||||||
|
+Default:
|
||||||
|
+.B
|
||||||
|
+["eth", "ipv4", "ipv6"]
|
||||||
|
.RE
|
||||||
|
.TP
|
||||||
|
.BR "runner.tx_balancer.name " (string)
|
||||||
|
@@ -217,6 +224,11 @@ Default:
|
||||||
|
Option specifies the rate at which our link partner is asked to transmit LACPDU packets. If this is
|
||||||
|
.BR "true"
|
||||||
|
then packets will be sent once per second. Otherwise they will be sent every 30 seconds.
|
||||||
|
+.RS 7
|
||||||
|
+.PP
|
||||||
|
+Default:
|
||||||
|
+.BR "false"
|
||||||
|
+.RE
|
||||||
|
.TP
|
||||||
|
.BR "runner.tx_hash " (array)
|
||||||
|
Same as for load balance runner.
|
||||||
|
--
|
||||||
|
2.18.1
|
||||||
|
|
@ -1,68 +0,0 @@
|
|||||||
From c8b356a3cd363af10d71e21a4fb7dc26cf90b5bc Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hangbin Liu <liuhangbin@gmail.com>
|
|
||||||
Date: Mon, 7 Jan 2019 15:58:49 +0800
|
|
||||||
Subject: [PATCH 2/6] teamd: config: update local prio to kernel
|
|
||||||
|
|
||||||
Team port's priority will affect the active port selection. Update the
|
|
||||||
local config is not enough. We also need to update kernel configs.
|
|
||||||
|
|
||||||
Reported-by: Liang Li <liali@redhat.com>
|
|
||||||
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
|
|
||||||
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
|
|
||||||
---
|
|
||||||
teamd/teamd_config.c | 32 ++++++++++++++++++++++++++++++++
|
|
||||||
1 file changed, 32 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/teamd/teamd_config.c b/teamd/teamd_config.c
|
|
||||||
index 94158ce..69b25de 100644
|
|
||||||
--- a/teamd/teamd_config.c
|
|
||||||
+++ b/teamd/teamd_config.c
|
|
||||||
@@ -155,6 +155,31 @@ errout:
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int teamd_config_port_set(struct teamd_context *ctx, const char *port_name,
|
|
||||||
+ json_t *port_obj)
|
|
||||||
+{
|
|
||||||
+ struct teamd_port *tdport;
|
|
||||||
+ json_t *config;
|
|
||||||
+ int tmp, err;
|
|
||||||
+
|
|
||||||
+ tdport = teamd_get_port_by_ifname(ctx, port_name);
|
|
||||||
+ if (!tdport)
|
|
||||||
+ return -ENODEV;
|
|
||||||
+
|
|
||||||
+ config = json_object_get(port_obj, "prio");
|
|
||||||
+ if (json_is_integer(config)) {
|
|
||||||
+ tmp = json_integer_value(config);
|
|
||||||
+ err = team_set_port_priority(ctx->th, tdport->ifindex, tmp);
|
|
||||||
+ if (err) {
|
|
||||||
+ teamd_log_err("%s: Failed to set \"priority\".",
|
|
||||||
+ tdport->ifname);
|
|
||||||
+ return err;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int teamd_config_port_update(struct teamd_context *ctx, const char *port_name,
|
|
||||||
const char *json_port_cfg_str)
|
|
||||||
{
|
|
||||||
@@ -184,6 +209,13 @@ int teamd_config_port_update(struct teamd_context *ctx, const char *port_name,
|
|
||||||
if (err)
|
|
||||||
teamd_log_err("%s: Failed to update existing config "
|
|
||||||
"port object", port_name);
|
|
||||||
+ else {
|
|
||||||
+ err = teamd_config_port_set(ctx, port_name, port_new_obj);
|
|
||||||
+ if (err)
|
|
||||||
+ teamd_log_err("%s: Failed to update config to kernel",
|
|
||||||
+ port_name);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
new_port_decref:
|
|
||||||
json_decref(port_new_obj);
|
|
||||||
return err;
|
|
||||||
--
|
|
||||||
2.18.1
|
|
||||||
|
|
@ -1,74 +0,0 @@
|
|||||||
From 54f137c10579bf97800c61ebb13e732aa1d843e6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hangbin Liu <liuhangbin@gmail.com>
|
|
||||||
Date: Fri, 8 Mar 2019 19:28:55 +0800
|
|
||||||
Subject: [PATCH 6/6] teamd: lacp: update port state according to partner's
|
|
||||||
sync bit
|
|
||||||
|
|
||||||
According to 6.4.15 of IEEE 802.1AX-2014, Figure 6-22, the state that the
|
|
||||||
port is selected moves MUX state from DETACHED to ATTACHED.
|
|
||||||
|
|
||||||
But ATTACHED state does not mean that the port can send and receive user
|
|
||||||
frames. COLLECTING_DISTRIBUTION state is the state that the port can send
|
|
||||||
and receive user frames. To move MUX state from ATTACHED to
|
|
||||||
COLLECTING_DISTRIBUTION, the partner state should be sync as well as the
|
|
||||||
port selected.
|
|
||||||
|
|
||||||
In function lacp_port_actor_update(), only INFO_STATE_SYNCHRONIZATION
|
|
||||||
should be set to the actor.state when the port is selected.
|
|
||||||
INFO_STATE_COLLECTING and INFO_STATE_DISTRIBUTING should be set to false
|
|
||||||
with ATTACHED mode and set to true when INFO_STATE_SYNCHRONIZATION of
|
|
||||||
partner.state is set.
|
|
||||||
|
|
||||||
In function lacp_port_should_be_{enabled, disabled}(), we also need to
|
|
||||||
check the INFO_STATE_SYNCHRONIZATION bit of partner.state.
|
|
||||||
|
|
||||||
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
|
|
||||||
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
|
|
||||||
---
|
|
||||||
teamd/teamd_runner_lacp.c | 16 +++++++++++-----
|
|
||||||
1 file changed, 11 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/teamd/teamd_runner_lacp.c b/teamd/teamd_runner_lacp.c
|
|
||||||
index 555aa06..d292d69 100644
|
|
||||||
--- a/teamd/teamd_runner_lacp.c
|
|
||||||
+++ b/teamd/teamd_runner_lacp.c
|
|
||||||
@@ -333,7 +333,8 @@ static int lacp_port_should_be_enabled(struct lacp_port *lacp_port)
|
|
||||||
struct lacp *lacp = lacp_port->lacp;
|
|
||||||
|
|
||||||
if (lacp_port_selected(lacp_port) &&
|
|
||||||
- lacp_port->agg_lead == lacp->selected_agg_lead)
|
|
||||||
+ lacp_port->agg_lead == lacp->selected_agg_lead &&
|
|
||||||
+ lacp_port->partner.state & INFO_STATE_SYNCHRONIZATION)
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
@@ -343,7 +344,8 @@ static int lacp_port_should_be_disabled(struct lacp_port *lacp_port)
|
|
||||||
struct lacp *lacp = lacp_port->lacp;
|
|
||||||
|
|
||||||
if (!lacp_port_selected(lacp_port) ||
|
|
||||||
- lacp_port->agg_lead != lacp->selected_agg_lead)
|
|
||||||
+ lacp_port->agg_lead != lacp->selected_agg_lead ||
|
|
||||||
+ !(lacp_port->partner.state & INFO_STATE_SYNCHRONIZATION))
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
@@ -914,9 +916,13 @@ static void lacp_port_actor_update(struct lacp_port *lacp_port)
|
|
||||||
if (lacp_port->lacp->cfg.fast_rate)
|
|
||||||
state |= INFO_STATE_LACP_TIMEOUT;
|
|
||||||
if (lacp_port_selected(lacp_port) &&
|
|
||||||
- lacp_port_agg_selected(lacp_port))
|
|
||||||
- state |= INFO_STATE_SYNCHRONIZATION |
|
|
||||||
- INFO_STATE_COLLECTING | INFO_STATE_DISTRIBUTING;
|
|
||||||
+ lacp_port_agg_selected(lacp_port)) {
|
|
||||||
+ state |= INFO_STATE_SYNCHRONIZATION;
|
|
||||||
+ state &= ~(INFO_STATE_COLLECTING | INFO_STATE_DISTRIBUTING);
|
|
||||||
+ if (lacp_port->partner.state & INFO_STATE_SYNCHRONIZATION)
|
|
||||||
+ state |= INFO_STATE_COLLECTING |
|
|
||||||
+ INFO_STATE_DISTRIBUTING;
|
|
||||||
+ }
|
|
||||||
if (lacp_port->state == PORT_STATE_EXPIRED)
|
|
||||||
state |= INFO_STATE_EXPIRED;
|
|
||||||
if (lacp_port->state == PORT_STATE_DEFAULTED)
|
|
||||||
--
|
|
||||||
2.18.1
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
|||||||
From 5f355301b7cafbb51b036ad1e5af38e79d4330d6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hangbin Liu <liuhangbin@gmail.com>
|
|
||||||
Date: Fri, 11 Jan 2019 09:57:10 +0800
|
|
||||||
Subject: [PATCH 3/6] teamd: lw: arp_ping: only check arp reply message
|
|
||||||
|
|
||||||
Currently we check both arp request and reply message for arp_ping link
|
|
||||||
watch. But if we enabled validate_active and validate_inactive at the
|
|
||||||
same time, we will receive the other slave's arp request as the switch
|
|
||||||
broadcasts arp request message. i.e. slave1 receives arp request from
|
|
||||||
slave2 and vice versa.
|
|
||||||
|
|
||||||
Then the arp check will pass even the target is unreachable. Fix it by
|
|
||||||
only check arp reply message.
|
|
||||||
|
|
||||||
Reported-by: LiLiang <liali@redhat.com>
|
|
||||||
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
|
|
||||||
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
|
|
||||||
---
|
|
||||||
teamd/teamd_lw_arp_ping.c | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/teamd/teamd_lw_arp_ping.c b/teamd/teamd_lw_arp_ping.c
|
|
||||||
index 01cd6e1..81806f0 100644
|
|
||||||
--- a/teamd/teamd_lw_arp_ping.c
|
|
||||||
+++ b/teamd/teamd_lw_arp_ping.c
|
|
||||||
@@ -336,7 +336,8 @@ static int lw_ap_receive(struct lw_psr_port_priv *psr_ppriv)
|
|
||||||
if (ap.ah.ar_hrd != htons(ll_my.sll_hatype) ||
|
|
||||||
ap.ah.ar_pro != htons(ETH_P_IP) ||
|
|
||||||
ap.ah.ar_hln != ll_my.sll_halen ||
|
|
||||||
- ap.ah.ar_pln != 4) {
|
|
||||||
+ ap.ah.ar_pln != 4 ||
|
|
||||||
+ ap.ah.ar_op != htons(ARPOP_REPLY)) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.18.1
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
|||||||
From 6bf0e87387878654186bcf7287e0eda59b1c2f2c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hangbin Liu <liuhangbin@gmail.com>
|
|
||||||
Date: Thu, 21 Feb 2019 17:37:46 +0800
|
|
||||||
Subject: [PATCH 4/6] teamd: lw: nsna_ping: only send ns on enabled port
|
|
||||||
|
|
||||||
We forget to check forced_send when using nsna_ping link_watch.
|
|
||||||
Ns is sent from all ports, which cause switch mac flapping. Some
|
|
||||||
reply packets are delivered to disabled port and dropped directly.
|
|
||||||
|
|
||||||
Fix it by checking forced_send and only send ns on enabled port.
|
|
||||||
|
|
||||||
Reported-by: LiLiang <liali@redhat.com>
|
|
||||||
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
|
|
||||||
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
|
|
||||||
---
|
|
||||||
teamd/teamd_lw_nsna_ping.c | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/teamd/teamd_lw_nsna_ping.c b/teamd/teamd_lw_nsna_ping.c
|
|
||||||
index 127d950..82371c4 100644
|
|
||||||
--- a/teamd/teamd_lw_nsna_ping.c
|
|
||||||
+++ b/teamd/teamd_lw_nsna_ping.c
|
|
||||||
@@ -203,6 +203,9 @@ static int lw_nsnap_send(struct lw_psr_port_priv *psr_ppriv)
|
|
||||||
struct sockaddr_in6 sendto_addr;
|
|
||||||
struct ns_packet nsp;
|
|
||||||
|
|
||||||
+ if (!(psr_ppriv->common.forced_send))
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
err = teamd_getsockname_hwaddr(psr_ppriv->sock, &ll_my,
|
|
||||||
sizeof(nsp.hwaddr));
|
|
||||||
if (err)
|
|
||||||
--
|
|
||||||
2.18.1
|
|
||||||
|
|
@ -1,62 +0,0 @@
|
|||||||
From 0f1b2fac03361c5d2bac34e4b19922c60c5c06c6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hangbin Liu <liuhangbin@gmail.com>
|
|
||||||
Date: Wed, 13 Mar 2019 15:04:29 +0800
|
|
||||||
Subject: [PATCH 1/3] teamd: remove port if adding fails
|
|
||||||
|
|
||||||
When we add a port to team via teamdctl, some drivers do not support
|
|
||||||
changing mac address after dev opened, which would lead to the failure
|
|
||||||
of port_obj_create(). The call path looks like below for LACP mode:
|
|
||||||
|
|
||||||
- port_obj_create()
|
|
||||||
- port_priv_init_all()
|
|
||||||
- lacp_port_added()
|
|
||||||
- lacp_port_set_mac()
|
|
||||||
|
|
||||||
Currently, we only destroy the port object if adding port fails. But the
|
|
||||||
port is still enslaved to team in kernel. IP link command shows the port
|
|
||||||
is a team_slave, but teamdctl state shows nothing. This may make users
|
|
||||||
confused.
|
|
||||||
|
|
||||||
Fix it by removing the port if adding fails.
|
|
||||||
|
|
||||||
v2: also calls teamd_port_remove in port_obj_remove()
|
|
||||||
|
|
||||||
Reported-by: Vladimir Benes <vbenes@redhat.com>
|
|
||||||
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
|
|
||||||
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
|
|
||||||
---
|
|
||||||
teamd/teamd_per_port.c | 4 ++++
|
|
||||||
1 file changed, 4 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/teamd/teamd_per_port.c b/teamd/teamd_per_port.c
|
|
||||||
index 09d1dc7..f98a90d 100644
|
|
||||||
--- a/teamd/teamd_per_port.c
|
|
||||||
+++ b/teamd/teamd_per_port.c
|
|
||||||
@@ -42,6 +42,8 @@ struct port_obj {
|
|
||||||
};
|
|
||||||
|
|
||||||
#define _port(port_obj) (&(port_obj)->port)
|
|
||||||
+static int teamd_port_remove(struct teamd_context *ctx,
|
|
||||||
+ struct teamd_port *tdport);
|
|
||||||
|
|
||||||
int teamd_port_priv_create_and_get(void **ppriv, struct teamd_port *tdport,
|
|
||||||
const struct teamd_port_priv *pp,
|
|
||||||
@@ -203,6 +205,7 @@ static int port_obj_create(struct teamd_context *ctx,
|
|
||||||
teamd_event_port_removed:
|
|
||||||
teamd_event_port_removed(ctx, tdport);
|
|
||||||
list_del:
|
|
||||||
+ teamd_port_remove(ctx, tdport);
|
|
||||||
port_obj_destroy(ctx, port_obj);
|
|
||||||
port_obj_free(port_obj);
|
|
||||||
return err;
|
|
||||||
@@ -214,6 +217,7 @@ static void port_obj_remove(struct teamd_context *ctx,
|
|
||||||
struct teamd_port *tdport = _port(port_obj);
|
|
||||||
|
|
||||||
teamd_event_port_removed(ctx, tdport);
|
|
||||||
+ teamd_port_remove(ctx, tdport);
|
|
||||||
port_obj_destroy(ctx, port_obj);
|
|
||||||
port_obj_free(port_obj);
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.18.1
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
|||||||
From 4dc3a7a042c88193f0371a33f1043919843e6447 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Xin Long <lucien.xin@gmail.com>
|
|
||||||
Date: Mon, 1 Apr 2019 16:15:24 +0800
|
|
||||||
Subject: [PATCH 2/3] teamd: tdport has to exist if item->per_port is set in
|
|
||||||
__find_by_item_path
|
|
||||||
|
|
||||||
The issue can be reproduced by:
|
|
||||||
|
|
||||||
# teamd -c '{"device":"team0", "runner":{"name":"lacp"}}' &
|
|
||||||
# teamdctl team0 state item set runner.aggregator.selected true
|
|
||||||
|
|
||||||
teamd process will abort in lacp_port_state_aggregator_selected_set()
|
|
||||||
as gsc->info.tdport was set to NULL in teamd_state_item_value_set()
|
|
||||||
|
|
||||||
The item 'runner.aggregator.selected' is of per_port = true, and it
|
|
||||||
shouldn't allow to call its setter/getter().
|
|
||||||
|
|
||||||
This patch is to add the check for it in __find_by_item_path() called
|
|
||||||
by teamd_state_item_value_get/set().
|
|
||||||
|
|
||||||
Fixes: 6c00aaf02553 ("teamd: add support for state item write operation")
|
|
||||||
Signed-off-by: Xin Long <lucien.xin@gmail.com>
|
|
||||||
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
|
|
||||||
---
|
|
||||||
teamd/teamd_state.c | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/teamd/teamd_state.c b/teamd/teamd_state.c
|
|
||||||
index ab64db9..0714880 100644
|
|
||||||
--- a/teamd/teamd_state.c
|
|
||||||
+++ b/teamd/teamd_state.c
|
|
||||||
@@ -333,6 +333,7 @@ static int __find_by_item_path(struct teamd_state_val_item **p_item,
|
|
||||||
list_for_each_node_entry(item, &ctx->state_val_list, list) {
|
|
||||||
/* item->subpath[0] == '.' */
|
|
||||||
if (!strcmp(item->subpath + 1, subpath) &&
|
|
||||||
+ (!item->per_port || tdport) &&
|
|
||||||
(!item->tdport || item->tdport == tdport)) {
|
|
||||||
*p_item = item;
|
|
||||||
*p_tdport = tdport;
|
|
||||||
--
|
|
||||||
2.18.1
|
|
||||||
|
|
@ -1,76 +0,0 @@
|
|||||||
From 90e5279ce0241838d5687739b3bc795235b7d53b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Xin Long <lucien.xin@gmail.com>
|
|
||||||
Date: Mon, 15 Apr 2019 16:56:35 +0800
|
|
||||||
Subject: [PATCH 3/3] teamd: use enabled option_changed to sync enabled to
|
|
||||||
link_up for lb runner
|
|
||||||
|
|
||||||
LiLiang found an issue that after adding two ports into a team device with
|
|
||||||
lb mode their enabled option sometimes is false.
|
|
||||||
|
|
||||||
It was caused by the unexpected events order:
|
|
||||||
|
|
||||||
0. team_port_add() in kernel.
|
|
||||||
1. port_change event A1 sent to userspace.
|
|
||||||
2. option_change event B1 sent to userspace.
|
|
||||||
3. port_change event A2 sent to userspace IF port is up now.
|
|
||||||
4. process port_change event A1 and set port's enabled option 'false'.
|
|
||||||
5. option_change event B2 sent to userspace.
|
|
||||||
6. process option_change event B1 and sync enabled option (value = 1).
|
|
||||||
7. process port_change event A2 and do nothing as enabled option is 1.
|
|
||||||
8. process option_change event B2 and sync enabled option (value = 0).
|
|
||||||
|
|
||||||
In kernel, when the port is still down after dev_open(), which happens more
|
|
||||||
often since it changed to use netif_oper_up() to check the state instead of
|
|
||||||
netif_carrier_ok(), the event A2 in Step 3 can be sent at any moment. When
|
|
||||||
it's ahead of Step 4, Step 7 won't set enabled option to 1 as Step 8 comes
|
|
||||||
late.
|
|
||||||
|
|
||||||
As the port up event can be triggered by dev_watchdog at anytime in kernel,
|
|
||||||
the port_change and option_change events order can not be controlled. What
|
|
||||||
can only be done here is to correct it at Step 8, to sync enabled option to
|
|
||||||
link_up.
|
|
||||||
|
|
||||||
So this patch is to add enabled option_changed for lb mode to do this sync.
|
|
||||||
|
|
||||||
Reported-by: LiLiang <liali@redhat.com>
|
|
||||||
Signed-off-by: Xin Long <lucien.xin@gmail.com>
|
|
||||||
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
|
|
||||||
---
|
|
||||||
teamd/teamd_runner_loadbalance.c | 15 +++++++++++++++
|
|
||||||
1 file changed, 15 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/teamd/teamd_runner_loadbalance.c b/teamd/teamd_runner_loadbalance.c
|
|
||||||
index b9bfc13..a581472 100644
|
|
||||||
--- a/teamd/teamd_runner_loadbalance.c
|
|
||||||
+++ b/teamd/teamd_runner_loadbalance.c
|
|
||||||
@@ -109,12 +109,27 @@ static int lb_event_watch_port_hwaddr_changed(struct teamd_context *ctx,
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int lb_event_watch_enabled_option_changed(struct teamd_context *ctx,
|
|
||||||
+ struct team_option *option,
|
|
||||||
+ void *priv)
|
|
||||||
+{
|
|
||||||
+ struct teamd_port *tdport;
|
|
||||||
+
|
|
||||||
+ tdport = teamd_get_port(ctx, team_get_option_port_ifindex(option));
|
|
||||||
+ if (!tdport)
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ return lb_event_watch_port_link_changed(ctx, tdport, priv);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static const struct teamd_event_watch_ops lb_port_watch_ops = {
|
|
||||||
.hwaddr_changed = lb_event_watch_hwaddr_changed,
|
|
||||||
.port_hwaddr_changed = lb_event_watch_port_hwaddr_changed,
|
|
||||||
.port_added = lb_event_watch_port_added,
|
|
||||||
.port_removed = lb_event_watch_port_removed,
|
|
||||||
.port_link_changed = lb_event_watch_port_link_changed,
|
|
||||||
+ .option_changed = lb_event_watch_enabled_option_changed,
|
|
||||||
+ .option_changed_match_name = "enabled",
|
|
||||||
};
|
|
||||||
|
|
||||||
static int lb_init(struct teamd_context *ctx, void *priv)
|
|
||||||
--
|
|
||||||
2.18.1
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
From 6e67aa89a746ff98d4b4f4fa3c778aa31d4d2c7f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hangbin Liu <liuhangbin@gmail.com>
|
|
||||||
Date: Mon, 17 Dec 2018 16:58:34 +0800
|
|
||||||
Subject: [PATCH 1/6] teamnl: update help message
|
|
||||||
|
|
||||||
Update help message so people could know we support port name directly.
|
|
||||||
|
|
||||||
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
|
|
||||||
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
|
|
||||||
---
|
|
||||||
utils/teamnl.c | 4 +++-
|
|
||||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/utils/teamnl.c b/utils/teamnl.c
|
|
||||||
index e8de7e2..c53345d 100644
|
|
||||||
--- a/utils/teamnl.c
|
|
||||||
+++ b/utils/teamnl.c
|
|
||||||
@@ -521,7 +521,9 @@ static void print_help(const char *argv0) {
|
|
||||||
|
|
||||||
printf(
|
|
||||||
"%s [options] teamdevname command [command args]\n"
|
|
||||||
- "\t-h --help Show this help\n",
|
|
||||||
+ "\t-h --help Show this help\n"
|
|
||||||
+ "\t-p --port_name team slave port name\n"
|
|
||||||
+ "\t-a --array_index team option array index\n",
|
|
||||||
argv0);
|
|
||||||
printf("Commands:\n");
|
|
||||||
for (i = 0; i < CMD_TYPE_COUNT; i++) {
|
|
||||||
--
|
|
||||||
2.18.1
|
|
||||||
|
|
@ -1,20 +1,12 @@
|
|||||||
Name: libteam
|
Name: libteam
|
||||||
Version: 1.28
|
Version: 1.29
|
||||||
Release: 2%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Library for controlling team network device
|
Summary: Library for controlling team network device
|
||||||
Group: System Environment/Libraries
|
Group: System Environment/Libraries
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
URL: http://www.libteam.org
|
URL: http://www.libteam.org
|
||||||
Source: http://www.libteam.org/files/libteam-%{version}.tar.gz
|
Source: http://www.libteam.org/files/libteam-%{version}.tar.gz
|
||||||
Patch1: libteam-teamnl-update-help-message.patch
|
Patch1: libteam-man-teamd.conf-update-some-parameter-default-values.patch
|
||||||
Patch2: libteam-teamd-config-update-local-prio-to-kernel.patch
|
|
||||||
Patch3: libteam-teamd-lw-arp_ping-only-check-arp-reply-message.patch
|
|
||||||
Patch4: libteam-teamd-lw-nsna_ping-only-send-ns-on-enabled-port.patch
|
|
||||||
Patch5: libteam-man-fix-runner.min_ports-default-value.patch
|
|
||||||
Patch6: libteam-teamd-lacp-update-port-state-according-to-partner-s-.patch
|
|
||||||
Patch7: libteam-teamd-remove-port-if-adding-fails.patch
|
|
||||||
Patch8: libteam-teamd-tdport-has-to-exist-if-item-per_port-is-set-in.patch
|
|
||||||
Patch9: libteam-teamd-use-enabled-option_changed-to-sync-enabled-to-.patch
|
|
||||||
BuildRequires: jansson-devel
|
BuildRequires: jansson-devel
|
||||||
BuildRequires: libdaemon-devel
|
BuildRequires: libdaemon-devel
|
||||||
BuildRequires: libnl3-devel
|
BuildRequires: libnl3-devel
|
||||||
@ -173,6 +165,20 @@ cd binding/python
|
|||||||
%{_sysconfdir}/sysconfig/network-scripts/ifdown-TeamPort
|
%{_sysconfdir}/sysconfig/network-scripts/ifdown-TeamPort
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Oct 14 2019 Xin Long <lxin@redhat.com> - 1.29-1
|
||||||
|
- man teamd.conf: update some parameter default values [1732587]
|
||||||
|
- 1.29 release
|
||||||
|
- teamd: add port_master_ifindex_changed for link_watch_port_watch_ops
|
||||||
|
- initscripts: fix if/fi align
|
||||||
|
- teamd: fix a json object memleak in get_port_obj() [1767685]
|
||||||
|
- libteam: set netlink event socket as non-blocking [1684389]
|
||||||
|
- libteam: double NETLINK_RCVBUF to fix -ENOMEM error
|
||||||
|
- teamd: add a default value 1000 for link_watch.interval
|
||||||
|
* Mon Jul 15 2019 Xin Long <lxin@redhat.com> - 1.28-4
|
||||||
|
- gating: run VM with more RAM [1722449]
|
||||||
|
* Wed Jul 03 2019 Xin Long <lxin@redhat.com> - 1.28-3
|
||||||
|
- teamd: return 0 if tdport doesn't exist in teamd_config_port_set [1722449]
|
||||||
|
- teamd: improve the error output for non-integer port prio
|
||||||
* Mon Apr 29 2019 Xin Long <lxin@redhat.com> - 1.28-2
|
* Mon Apr 29 2019 Xin Long <lxin@redhat.com> - 1.28-2
|
||||||
- teamd: use enabled option_changed to sync enabled to link_up for lb runner [1668132]
|
- teamd: use enabled option_changed to sync enabled to link_up for lb runner [1668132]
|
||||||
- teamd: tdport has to exist if item->per_port is set in __find_by_item_path [1687336]
|
- teamd: tdport has to exist if item->per_port is set in __find_by_item_path [1687336]
|
||||||
|
Loading…
Reference in New Issue
Block a user