#include "src/lib/rrc/encode.hpp" #include "src/asn/rrc/ASN_RRC_RRCReconfiguration.h" #include "src/asn/asn_utils.hpp" #include int main() { // 测试我们当前的容器生成逻辑 auto *rrcReconfig = asn::New(); rrcReconfig->rrc_TransactionIdentifier = 1; rrcReconfig->criticalExtensions.present = ASN_RRC_RRCReconfiguration__criticalExtensions_PR_rrcReconfiguration; auto *rrcReconfigIes = asn::New(); rrcReconfig->criticalExtensions.choice.rrcReconfiguration = rrcReconfigIes; // 使用与我们代码中相同的CellGroupConfig数据 uint8_t cellGroupConfigData[] = { 0x00, 0x01, 0x40, 0x02, 0x01, 0x80, 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x40, 0x01, 0x20, 0x00, 0x01, 0x20, 0x10, 0x08, 0x00, 0x08, 0x04, 0x02, 0x01, 0x10, 0x08, 0x04, 0x02, 0x01, 0x08, 0x04, 0x02, 0x01, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0xF0, 0xE0, 0xD0, 0xC0, 0xB0, 0xA0, 0x90, 0x80, 0x70, 0x60, 0x50, 0x40, 0x30, 0x20, 0x10, 0x00, 0xFF, 0xEE, 0xDD, 0xCC, 0xBB, 0xAA, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00 }; rrcReconfigIes->secondaryCellGroup = asn::New(); asn::SetOctetString(*rrcReconfigIes->secondaryCellGroup, OctetString::FromArray(cellGroupConfigData, sizeof(cellGroupConfigData))); OctetString container = rrc::encode::EncodeS(asn_DEF_ASN_RRC_RRCReconfiguration, rrcReconfig); std::cout << "Container size: " << container.length() << " bytes" << std::endl; std::cout << "Expected size: >= 50 bytes for free5gc compatibility" << std::endl; std::cout << "Status: " << (container.length() >= 50 ? "PASS" : "FAIL") << std::endl; // 输出前32字节的十六进制 std::cout << "Hex dump: "; for (size_t i = 0; i < std::min(32UL, container.length()); i++) { printf("%02x ", static_cast(container.data()[i])); } std::cout << std::endl; asn::Free(asn_DEF_ASN_RRC_RRCReconfiguration, rrcReconfig); return container.length() >= 50 ? 0 : 1; }