@@ -34,22 +34,13 @@ void TeamSync::onMsg(int nlmsg_type, struct nl_object *obj)
34
34
if (!type || (strcmp (type, TEAM_DRV_NAME) != 0 ))
35
35
return ;
36
36
37
- bool tracked = m_teamPorts.find (lagName) != m_teamPorts.end ();
38
-
39
- if ((nlmsg_type == RTM_DELLINK) && tracked)
37
+ if (nlmsg_type == RTM_DELLINK)
40
38
{
41
39
/* Remove LAG ports and delete LAG */
42
40
removeLag (lagName);
43
41
return ;
44
42
}
45
43
46
- if ((nlmsg_type == RTM_NEWLINK) && tracked)
47
- return ;
48
-
49
- /*
50
- * New LAG was dedcated for the first time. Sync admin and oper state since
51
- * portsyncd reflects only changes
52
- */
53
44
addLag (lagName, rtnl_link_get_ifindex (link ),
54
45
rtnl_link_get_flags (link ) & IFF_UP,
55
46
rtnl_link_get_flags (link ) & IFF_LOWER_UP,
@@ -59,7 +50,7 @@ void TeamSync::onMsg(int nlmsg_type, struct nl_object *obj)
59
50
void TeamSync::addLag (const string &lagName, int ifindex, bool admin_state,
60
51
bool oper_state, unsigned int mtu)
61
52
{
62
- /* First add the LAG itself */
53
+ /* Set the LAG */
63
54
std::vector<FieldValueTuple> fvVector;
64
55
FieldValueTuple a (" admin_status" , admin_state ? " up" : " down" );
65
56
FieldValueTuple o (" oper_status" , oper_state ? " up" : " down" );
@@ -69,17 +60,28 @@ void TeamSync::addLag(const string &lagName, int ifindex, bool admin_state,
69
60
fvVector.push_back (m);
70
61
m_lagTable.set (lagName, fvVector);
71
62
72
- /* Start adding ports to LAG */
63
+ /* Return when the team instance has already been tracked */
64
+ if (m_teamPorts.find (lagName) != m_teamPorts.end ())
65
+ return ;
66
+
67
+ /* Start track the team instance */
73
68
TeamPortSync *sync = new TeamPortSync (lagName, ifindex, &m_lagTable);
74
69
m_select->addSelectable (sync );
75
70
m_teamPorts[lagName] = shared_ptr<TeamPortSync>(sync );
76
71
}
77
72
78
73
void TeamSync::removeLag (const string &lagName)
79
74
{
75
+ /* Delete the LAG */
76
+ m_lagTable.del (lagName);
77
+
78
+ /* Return when the team instance hasn't been tracked before */
79
+ if (m_teamPorts.find (lagName) == m_teamPorts.end ())
80
+ return ;
81
+
82
+ /* No longer track the current team instance */
80
83
m_select->removeSelectable (m_teamPorts[lagName].get ());
81
84
m_teamPorts.erase (lagName);
82
- m_lagTable.del (lagName);
83
85
}
84
86
85
87
const struct team_change_handler TeamSync::TeamPortSync::gPortChangeHandler = {
0 commit comments