Skip to content

Commit 9eba06f

Browse files
committed
Support setting port dynamically via --port option
1 parent defced2 commit 9eba06f

3 files changed

Lines changed: 24 additions & 1 deletion

File tree

examples/all-devices-app/posix/app_options/AppOptions.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ constexpr uint16_t kOptionKVS = 0xffd3;
3434
constexpr uint16_t kOptionDiscriminator = 0xffd4;
3535
constexpr uint16_t kOptionVendorId = 0xffd5;
3636
constexpr uint16_t kOptionProductId = 0xffd6;
37+
constexpr uint16_t kOptionPort = 0xffd7;
3738

3839
DeviceTypeParser AppOptions::sParser;
3940
AppOptions::AppConfig AppOptions::mConfig;
@@ -75,6 +76,18 @@ bool AppOptions::AllDevicesAppOptionHandler(const char * program, OptionSet * op
7576
case kOptionProductId:
7677
mConfig.productId.SetValue(static_cast<uint16_t>(strtoul(value, nullptr, 0)));
7778
return true;
79+
case kOptionPort: {
80+
char * endptr;
81+
unsigned long val = strtoul(value, &endptr, 0);
82+
if (*endptr != '\0' || val > 0xFFFF)
83+
{
84+
ChipLogError(Support, "Invalid port: %s\n", value);
85+
return false;
86+
}
87+
mConfig.port.SetValue(static_cast<uint16_t>(val));
88+
ChipLogProgress(AppServer, "Port option set to %u\n", static_cast<uint16_t>(val));
89+
return true;
90+
}
7891
default:
7992
ChipLogError(Support, "%s: INTERNAL ERROR: Unhandled option: %s\n", program, name);
8093
return false;
@@ -94,6 +107,7 @@ OptionSet * AppOptions::GetOptions()
94107
{ "discriminator", kArgumentRequired, kOptionDiscriminator },
95108
{ "vendor-id", kArgumentRequired, kOptionVendorId },
96109
{ "product-id", kArgumentRequired, kOptionProductId },
110+
{ "port", kArgumentRequired, kOptionPort },
97111
{}, // need empty terminator
98112
};
99113

examples/all-devices-app/posix/app_options/AppOptions.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class AppOptions
3737
chip::Optional<uint16_t> discriminator;
3838
chip::Optional<uint16_t> vendorId;
3939
chip::Optional<uint16_t> productId;
40+
chip::Optional<uint16_t> port;
4041
};
4142

4243
static chip::ArgParser::OptionSet * GetOptions();

examples/all-devices-app/posix/main.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,15 @@ void RunApplication(AppMainLoopImplementation * mainLoop = nullptr)
262262

263263
initParams.dataModelProvider = &devices.DataModelProvider();
264264
initParams.groupDataProvider = &gGroupDataProvider;
265-
initParams.operationalServicePort = CHIP_PORT;
265+
if (AppOptions::GetConfig().port.HasValue())
266+
{
267+
initParams.operationalServicePort = AppOptions::GetConfig().port.Value();
268+
ChipLogProgress(AppServer, "Overriding operationalServicePort to %u\n", initParams.operationalServicePort);
269+
}
270+
else
271+
{
272+
initParams.operationalServicePort = CHIP_PORT;
273+
}
266274
initParams.userDirectedCommissioningPort = CHIP_UDC_PORT;
267275
initParams.interfaceId = Inet::InterfaceId::Null();
268276

0 commit comments

Comments
 (0)