diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index a783505f92..7095ca8cbe 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -633,16 +633,20 @@ sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable config-chassisdb.service # Copy midplane network service file for smart switch sudo cp $IMAGE_CONFIGS/midplane-network/bridge-midplane.netdev $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_NETWORK/bridge-midplane.netdev sudo cp $IMAGE_CONFIGS/midplane-network/bridge-midplane.network $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_NETWORK/bridge-midplane.network +sudo cp $IMAGE_CONFIGS/midplane-network/dummy-midplane.netdev $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_NETWORK/dummy-midplane.netdev +sudo cp $IMAGE_CONFIGS/midplane-network/dummy-midplane.network $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_NETWORK/dummy-midplane.network sudo cp $IMAGE_CONFIGS/midplane-network/midplane-network-npu.network $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_NETWORK/midplane-network-npu.network sudo cp $IMAGE_CONFIGS/midplane-network/midplane-network-dpu.network $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_NETWORK/midplane-network-dpu.network sudo cp $IMAGE_CONFIGS/midplane-network/midplane-network-npu.service $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_SYSTEM/midplane-network-npu.service sudo cp $IMAGE_CONFIGS/midplane-network/midplane-network-dpu.service $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_SYSTEM/midplane-network-dpu.service # Disable smart switch unit by default, these units will be controlled by systemd-sonic-generator -sudo ln -s /dev/null /etc/systemd/network/bridge-midplane.netdev -sudo ln -s /dev/null /etc/systemd/network/bridge-midplane.network -sudo ln -s /dev/null /etc/systemd/network/midplane-network-npu.network -sudo ln -s /dev/null /etc/systemd/network/midplane-network-dpu.network +sudo ln -s /dev/null $FILESYSTEM_ROOT/etc/systemd/network/bridge-midplane.netdev +sudo ln -s /dev/null $FILESYSTEM_ROOT/etc/systemd/network/bridge-midplane.network +sudo ln -s /dev/null $FILESYSTEM_ROOT/etc/systemd/network/dummy-midplane.netdev +sudo ln -s /dev/null $FILESYSTEM_ROOT/etc/systemd/network/dummy-midplane.network +sudo ln -s /dev/null $FILESYSTEM_ROOT/etc/systemd/network/midplane-network-npu.network +sudo ln -s /dev/null $FILESYSTEM_ROOT/etc/systemd/network/midplane-network-dpu.network echo "midplane-network-npu.service" | sudo tee -a $GENERATED_SERVICE_FILE sudo LANG=C chroot $FILESYSTEM_ROOT systemctl disable midplane-network-npu.service echo "midplane-network-dpu.service" | sudo tee -a $GENERATED_SERVICE_FILE @@ -652,6 +656,7 @@ sudo LANG=C chroot $FILESYSTEM_ROOT systemctl disable midplane-network-dpu.servi sudo sed -i 's/#ManageForeignRoutingPolicyRules=yes/ManageForeignRoutingPolicyRules=no/g' $FILESYSTEM_ROOT/etc/systemd/networkd.conf sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable systemd-networkd +sudo LANG=C chroot $FILESYSTEM_ROOT systemctl disable systemd-networkd-wait-online.service # Copy backend-acl script and service file sudo cp $IMAGE_CONFIGS/backend_acl/backend-acl.service $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_SYSTEM/backend-acl.service diff --git a/files/image_config/midplane-network/bridge-midplane.network b/files/image_config/midplane-network/bridge-midplane.network index 1ff42d065a..5a7cabf8fb 100644 --- a/files/image_config/midplane-network/bridge-midplane.network +++ b/files/image_config/midplane-network/bridge-midplane.network @@ -1,7 +1,8 @@ -# Midplane network for NPU +# Network configuration for bridge midplane [Match] Name=bridge-midplane [Network] Address=169.254.200.254/24 +LinkLocalAddressing=no diff --git a/files/image_config/midplane-network/dummy-midplane.netdev b/files/image_config/midplane-network/dummy-midplane.netdev new file mode 100644 index 0000000000..ea92c87532 --- /dev/null +++ b/files/image_config/midplane-network/dummy-midplane.netdev @@ -0,0 +1,5 @@ +# Dummy interface for midplane network + +[NetDev] +Name=dummy-midplane +Kind=dummy diff --git a/files/image_config/midplane-network/dummy-midplane.network b/files/image_config/midplane-network/dummy-midplane.network new file mode 100644 index 0000000000..e4dbb242f4 --- /dev/null +++ b/files/image_config/midplane-network/dummy-midplane.network @@ -0,0 +1,8 @@ +# The systemd-networkd requires that the bridge interface(bridge-midplane) has at least one member interface, otherwise the IP address will not be configured. +# This dummy interface will be added into the bridge-midplane as a member to guarantee the IP address configuration correctly. + +[Match] +Name=dummy-midplane + +[Network] +Bridge=bridge-midplane diff --git a/src/systemd-sonic-generator/ssg-test.cc b/src/systemd-sonic-generator/ssg-test.cc index e8f2449d85..302d6245f1 100644 --- a/src/systemd-sonic-generator/ssg-test.cc +++ b/src/systemd-sonic-generator/ssg-test.cc @@ -391,9 +391,9 @@ class SsgMainTest : public SsgFunctionTest { } else if (cfg.is_smart_switch_npu) { ASSERT_EQ(cfg.is_smart_switch_dpu, false); - nlohmann::json::array_t dpus; + nlohmann::json dpus; for (int i = 0; i < cfg.num_dpus; i++) { - dpus.push_back(nlohmann::json::object()); + dpus["dpu" + std::to_string(i)] = nlohmann::json::object(); } platform_config["DPUS"] = dpus; } @@ -496,6 +496,8 @@ const std::vector SsgMainTest::npu_network_service_list = { "bridge-midplane.netdev", "bridge-midplane.network", + "dummy-midplane.netdev", + "dummy-midplane.network", "midplane-network-npu.network", }; diff --git a/src/systemd-sonic-generator/systemd-sonic-generator.c b/src/systemd-sonic-generator/systemd-sonic-generator.c index 87cd7dc940..08ea06195c 100644 --- a/src/systemd-sonic-generator/systemd-sonic-generator.c +++ b/src/systemd-sonic-generator/systemd-sonic-generator.c @@ -860,10 +860,7 @@ static bool is_smart_switch_npu() { if (platform_info == NULL) { return false; } - if (!json_object_object_get_ex(platform_info, "DPUS", &dpus)) { - return false; - } - return true; + return json_object_object_get_ex(platform_info, "DPUS", &dpus); } @@ -878,11 +875,7 @@ static bool is_smart_switch_dpu() { if (platform_info == NULL) { return false; } - if (!json_object_object_get_ex(platform_info, "DPU", &dpu)) { - return false; - } - - return true; + return json_object_object_get_ex(platform_info, "DPU", &dpu); } @@ -904,7 +897,10 @@ static int get_num_of_dpu() { if (!json_object_object_get_ex(platform_info, "DPUS", &dpus)) { return 0; } - size_t num_dpu = json_object_array_length(dpus); + size_t num_dpu = 0; + json_object_object_foreach(dpus, key, val) { + num_dpu++; + } return num_dpu; } @@ -1076,6 +1072,8 @@ static int install_network_service_for_smart_switch() { static const char* npu_network_units[] = { "bridge-midplane.netdev", "bridge-midplane.network", + "dummy-midplane.netdev", + "dummy-midplane.network", "midplane-network-npu.network", NULL }; diff --git a/src/systemd-sonic-generator/tests/testfiles/dummy-midplane.netdev b/src/systemd-sonic-generator/tests/testfiles/dummy-midplane.netdev new file mode 120000 index 0000000000..2d4fec18f2 --- /dev/null +++ b/src/systemd-sonic-generator/tests/testfiles/dummy-midplane.netdev @@ -0,0 +1 @@ +../../../../files/image_config/midplane-network/dummy-midplane.netdev \ No newline at end of file diff --git a/src/systemd-sonic-generator/tests/testfiles/dummy-midplane.network b/src/systemd-sonic-generator/tests/testfiles/dummy-midplane.network new file mode 120000 index 0000000000..e8278cf8ef --- /dev/null +++ b/src/systemd-sonic-generator/tests/testfiles/dummy-midplane.network @@ -0,0 +1 @@ +../../../../files/image_config/midplane-network/dummy-midplane.network \ No newline at end of file