Skip to content

Commit e42880e

Browse files
authored
[projmgr] Fix telnet port numbering
1 parent 4b1fa0e commit e42880e

File tree

4 files changed

+48
-14
lines changed

4 files changed

+48
-14
lines changed

tools/projmgr/include/ProjMgrRunDebug.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ class ProjMgrRunDebug {
227227
const std::map<std::string, RteDeviceProperty*>& pnames);
228228
void CollectTelnetOptions(const ContextItem& context, DebugAdapterItem& adapter,
229229
const std::map<std::string, RteDeviceProperty*>& pnames);
230+
void SetTelnetPort(TelnetOptionsItem& item, unsigned long long& port, std::set<unsigned long long>& usedPorts);
230231
CustomItem& CustomMapFind(std::vector<std::pair<std::string, CustomItem>>& customMap, const std::string& key);
231232
void MergeCustomItems(const CustomItem& src, CustomItem& dst);
232233
};

tools/projmgr/src/ProjMgrRunDebug.cpp

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -410,29 +410,34 @@ void ProjMgrRunDebug::CollectTelnetOptions(const ContextItem& context, DebugAdap
410410
unsigned long long port = adapter.defaults.telnet.port.empty() ? 0 : RteUtils::StringToULL(adapter.defaults.telnet.port);
411411
if (m_runDebug.debugger.telnet.find(m_runDebug.debugger.startPname) != m_runDebug.debugger.telnet.end()) {
412412
// add primary processor port first
413-
auto& startPort = m_runDebug.debugger.telnet[m_runDebug.debugger.startPname].ullPort;
414-
if (startPort == 0) {
415-
startPort = port;
416-
} else {
417-
port = startPort;
418-
}
419-
usedPorts.insert(port);
413+
auto& start = m_runDebug.debugger.telnet[m_runDebug.debugger.startPname];
414+
// set next available port
415+
SetTelnetPort(start, port, usedPorts);
416+
// set starting port for other processors
417+
port = start.ullPort;
420418
}
421419
for (auto& [pname, telnet] : m_runDebug.debugger.telnet) {
422420
// add ports for other processors
423421
if (pname != m_runDebug.debugger.startPname) {
424-
// get customized port if set
425-
port = telnet.port.empty() ? port : telnet.ullPort;
426-
while (usedPorts.find(port) != usedPorts.end()) {
427-
// skip port number if it has already been used
428-
port++;
429-
}
430-
telnet.ullPort = port;
422+
// set next available port
423+
SetTelnetPort(telnet, port, usedPorts);
431424
}
432425
}
433426
}
434427
}
435428

429+
void ProjMgrRunDebug::SetTelnetPort(TelnetOptionsItem& item, unsigned long long& port, std::set<unsigned long long>& usedPorts) {
430+
// only assign a port number if it has not been already specified
431+
if (item.port.empty()) {
432+
while (usedPorts.find(port) != usedPorts.end()) {
433+
// skip port number if it has already been used
434+
port++;
435+
}
436+
item.ullPort = port;
437+
usedPorts.insert(port);
438+
}
439+
}
440+
436441
void ProjMgrRunDebug::CollectDebugTopology(const ContextItem& context, const vector<pair<const RteItem*, vector<string>>> debugs,
437442
const std::map<std::string, RteDeviceProperty*>& pnames) {
438443
// debug topology

tools/projmgr/test/data/TestRunDebug/telnet.csolution.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,20 @@ solution:
5454
name: J-Link Server
5555
start-pname: cm0_core1
5656

57+
- set: CustomPorts
58+
images:
59+
- project-context: core0
60+
- project-context: core1
61+
debugger:
62+
name: CMSIS-DAP
63+
telnet:
64+
- mode: monitor
65+
pname: cm0_core1
66+
port: 1234
67+
- mode: monitor
68+
pname: cm0_core0
69+
port: 5678
70+
5771
- set: Warnings
5872
images:
5973
- project-context: core0

tools/projmgr/test/src/ProjMgrUnitTests.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6904,6 +6904,20 @@ R"(- mode: off
69046904
pname: cm0_core1
69056905
port: 4444)", sstream3.str());
69066906

6907+
// dual core with custom port numbers
6908+
argv[6] = (char*)"DualCore@CustomPorts";
6909+
EXPECT_EQ(0, RunProjMgr(7, argv, m_envp));
6910+
const YAML::Node& cbuildrun4 = YAML::LoadFile(testoutput_folder + "/out/telnet+DualCore.cbuild-run.yml");
6911+
stringstream sstream4;
6912+
sstream4 << cbuildrun4["cbuild-run"]["debugger"]["telnet"];
6913+
EXPECT_EQ(
6914+
R"(- mode: monitor
6915+
pname: cm0_core0
6916+
port: 5678
6917+
- mode: monitor
6918+
pname: cm0_core1
6919+
port: 1234)", sstream4.str());
6920+
69076921
// warnings
69086922
StdStreamRedirect streamRedirect;
69096923
argv[6] = (char*)"DualCore@Warnings";

0 commit comments

Comments
 (0)