Skip to content

Commit 6149427

Browse files
[lag_keepalive] add --namespace option
Signed-off-by: Stepan Blyschak <[email protected]>
1 parent b247e93 commit 6149427

1 file changed

Lines changed: 21 additions & 8 deletions

File tree

scripts/lag_keepalive.py

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@
1212
import syslog # noqa: E402
1313
import time # noqa: E402
1414
import traceback # noqa: E402
15-
from swsscommon.swsscommon import ConfigDBConnector # noqa: E402
15+
from pyroute2 import netns # noqa: E402
16+
from swsscommon.swsscommon import ConfigDBConnector, SonicDBConfig # noqa: E402
17+
from sonic_py_common import multi_asic # noqa: E402
1618

1719
SYSLOG_ID = 'lag_keepalive'
1820
SLOW_PROTOCOL_MAC_ADDRESS = "01:80:c2:00:00:02"
1921
LACP_ETHERTYPE = 0x8809
2022

21-
2223
def log_info(msg):
2324
syslog.openlog(SYSLOG_ID)
2425
syslog.syslog(syslog.LOG_INFO, msg)
@@ -36,8 +37,11 @@ def getCmdOutput(cmd):
3637
return proc.communicate()[0], proc.returncode
3738

3839

39-
def get_port_channel_config(portChannelName):
40-
(processStdout, _) = getCmdOutput(["teamdctl", portChannelName, "state", "dump"])
40+
def get_port_channel_config(portChannelName, namespace=""):
41+
teamdctl_command = ["teamdctl"]
42+
if namespace:
43+
teamdctl_command += ["-n", namespace.removeprefix("asic")]
44+
(processStdout, _) = getCmdOutput(teamdctl_command + [portChannelName, "state", "dump"])
4145
return json.loads(processStdout)
4246

4347

@@ -65,8 +69,8 @@ def craft_lacp_packet(portChannelConfig, portName):
6569
return packet
6670

6771

68-
def get_lacpdu_per_lag_member():
69-
appDB = ConfigDBConnector()
72+
def get_lacpdu_per_lag_member(namespace):
73+
appDB = ConfigDBConnector(namespace=namespace)
7074
appDB.db_connect('APPL_DB')
7175
appDB_lag_info = appDB.get_keys('LAG_MEMBER_TABLE')
7276
active_lag_members = list()
@@ -79,7 +83,7 @@ def get_lacpdu_per_lag_member():
7983
lag_member = str(lag_entry[1])
8084
active_lag_members.append(lag_member)
8185
# craft lacpdu packets for each lag member based on config
82-
port_channel_config = get_port_channel_config(lag_name)
86+
port_channel_config = get_port_channel_config(lag_name, namespace)
8387
packet = craft_lacp_packet(port_channel_config, lag_member)
8488
socket = conf.L2socket(iface=lag_member)
8589
lag_member_to_packet[lag_member] = (socket, packet)
@@ -108,11 +112,20 @@ def lag_keepalive(lag_member_to_packet):
108112
def main():
109113
parser = argparse.ArgumentParser()
110114
parser.add_argument('--fork-into-background', action='store_true')
115+
parser.add_argument('-n', '--namespace', default="", type=str, help='namespace to use')
111116
args = parser.parse_args()
112117

118+
if multi_asic.is_multi_asic():
119+
SonicDBConfig.initializeGlobalConfig()
120+
121+
if args.namespace:
122+
netns.setns(args.namespace)
123+
global SYSLOG_ID
124+
SYSLOG_ID = f"{SYSLOG_ID}_{args.namespace}"
125+
113126
while True:
114127
try:
115-
active_lag_members, lag_member_to_packet = get_lacpdu_per_lag_member()
128+
active_lag_members, lag_member_to_packet = get_lacpdu_per_lag_member(args.namespace)
116129
if len(active_lag_members) != len(lag_member_to_packet.keys()):
117130
log_error("Failed to craft LACPDU packets for some lag members. " +
118131
"Active lag members: {}. LACPDUs crafted for: {}".format(

0 commit comments

Comments
 (0)