Enabling the TLS layer to get a HTTPS connection going.

7343.nrf7002dk_nrf5340_cpuapp_ns.conf3124.prj.confHello everyone.

WE're trying to make a https connection with google.com and execute a GET request.

Wifi connection is working; DHCP seems to be working (my personal assumption given the log message we get: "Resolved: [(1, 1, 6, '', ('142.250.201.206', 443))]" which indicates that getaddrinfo() works); but when trying to initiate the socket via TLS, something strange happens: we get the error "OSError: 109".

Inserting some debug prints inside subsys/net/lib/sockets/, we found the culprit to be the function "int zsock_setsockopt_ctx(struct net_context *ctx, int level, int optnameconst void *optval, socklen_t optlen)".

The function call that triggers error 109 is:  res = setsockopt(socket->ctx, SOL_TLS, TLS_PEER_VERIFY, &verify, sizeof(verify));

No matter what other option we try to set via setsockopt(), it will fail with the 109 error since the implementation for setsockopt() is somehow set to sockets_inet.c (whose implementation does not recognise SOL_TLS as a valid in its switches) instead of sockets_tls.c (which has handling for SOL_TLS in its switches). My personal hunch is that the config options set in the project are somehow wrong. Can someone please take a look over our .conf files? Maybe we can find the culprit. :)

We can provide any extra code snippets that are necessary for debugging and/ or run any tests. Have a great day and hope to hear from you soon!

Parents
  • Hi,

     

    I used net/https_client for this exercise.

    You need to download r1.pem from here: https://pki.goog/repository/

     

    Place this in certs/ folder, and make sure that you change the file in CMakeLists.txt, change the domain in kconfig, and add the required configurations in the board .conf file:

    diff --git a/samples/net/https_client/CMakeLists.txt b/samples/net/https_client/CMakeLists.txt
    index 2a937786ed..39276fd2e2 100644
    --- a/samples/net/https_client/CMakeLists.txt
    +++ b/samples/net/https_client/CMakeLists.txt
    @@ -14,7 +14,7 @@ set(gen_dir ${CMAKE_CURRENT_BINARY_DIR}/certs)
     zephyr_include_directories(${gen_dir})
     generate_inc_file_for_target(
         app
    -    cert/DigiCertGlobalG2.pem
    +    cert/r1.pem
         ${gen_dir}/DigiCertGlobalG2.pem.inc
         )
     
    diff --git a/samples/net/https_client/Kconfig b/samples/net/https_client/Kconfig
    index 90ad33f42e..bb22e82794 100644
    --- a/samples/net/https_client/Kconfig
    +++ b/samples/net/https_client/Kconfig
    @@ -15,7 +15,7 @@ config SAMPLE_TFM_MBEDTLS
     
     config HTTPS_HOSTNAME
            string "HTTPS hostname"
    -       default "example.com"
    +       default "google.com"
     
     endmenu
     
    diff --git a/samples/net/https_client/boards/nrf7002dk_nrf5340_cpuapp_ns.conf b/samples/net/https_client/boards/nrf7002dk_nrf5340_cpuapp_ns.conf
    index 9eb362cb16..8366313af8 100644
    --- a/samples/net/https_client/boards/nrf7002dk_nrf5340_cpuapp_ns.conf
    +++ b/samples/net/https_client/boards/nrf7002dk_nrf5340_cpuapp_ns.conf
    @@ -69,3 +69,20 @@ CONFIG_MBEDTLS_TLS_LIBRARY=y
     CONFIG_TFM_PROFILE_TYPE_SMALL=y
     CONFIG_PM_PARTITION_SIZE_TFM_SRAM=0xc000
     CONFIG_PM_PARTITION_SIZE_TFM=0x20000
    +
    +CONFIG_MBEDTLS_SSL_SERVER_NAME_INDICATION=y
    +CONFIG_MBEDTLS_SSL_RENEGOTIATION=y
    +CONFIG_MBEDTLS_SSL_MAX_FRAGMENT_LENGTH=y
    +CONFIG_MBEDTLS_SSL_SESSION_TICKETS=y
    +CONFIG_PSA_WANT_RSA_KEY_SIZE_4096=y
    +CONFIG_MBEDTLS_MPI_MAX_SIZE=512
    +
    +CONFIG_LOG=y
    +CONFIG_MBEDTLS_DEBUG=y
    +CONFIG_MBEDTLS_SSL_DEBUG_ALL=y
    +CONFIG_MBEDTLS_LOG_LEVEL_DBG=y
    +CONFIG_MBEDTLS_DEBUG_C=y
    +CONFIG_MBEDTLS_DEBUG_LEVEL=4
    +# Handle the large influx of prints
    +CONFIG_LOG_BUFFER_SIZE=16384
    +CONFIG_LOG_BACKEND_UART=y
    

    I also need to add CONFIG_NET_IPV6=n due to a local network issue at my end.

     

    Kind regards,

    Håkon

  • There are many options and suboptions in the link you sent me. Which one is the correct one?

    When attempting to get it working, I got r1.der and then created r1.der.inc. But I'm not sure which option I chose.

  • What TLS_CREDENTIAL_BACKEND_* is chosen at your end?

    Searched in both prj.conf and board.conf and found nothing that contains "TLS_CREDENTIAL_BACKEND_".

    What about that call? I'm sure it wouldn't take more than 1H. Wink

  • Also found out something interesting. I was reading in another post about a .config file that's supposed to be in the build folder which shows all the CONFIG_ options that get enabled at build time. I couldn't find it (probably since that post was on SDK v2.9.1 or older) but I think I've found it for v3.0.0.

    The file in question is located at: /build/zephyr/zephyr/misc/generated/configs.c

    (leaving this here for posterity Slight smile)

    I'll attach the file to this reply. Maybe you can find something out of place with one/ a combination of the configs active at build time.

    2678.configs.c

    Edit: extra point that I wanna add: must the board's time be updated before the TLS and/or connection steps take place? Or is the board's time relevant in any way for this?

  • Hello again Håkon.

    I've taken the time and compared the two config.c files (the one in the https_client sample and the one in our project). I've attached the two files here, after filtering out all duplicate configs that were found, sorting both lists alphabetically, then sorting by "closest match" in Beyond Compare (which aligns lines that are identical/ near identical, even if they're on different line numbers). This eases comparison a lot, but it doesn't solve the main issue sadly (at least from my analysis).

    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_CONNECTIVITY_WIFI_MGMT_APPLICATION, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_CURRENT_THREAD_USE_TLS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DATE_SHELL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DEVICE_SHELL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DEVMEM_SHELL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_RESOLVER_ADDITIONAL_BUF_CTR, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_RESOLVER_ADDITIONAL_QUERIES, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_RESOLVER_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_RESOLVER_MAX_SERVERS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_SOCKET_DISPATCHER_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_GETOPT_LONG, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_HEAP_MEM_POOL_SIZE, 1280);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_HW_UNIQUE_KEY, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_HW_UNIQUE_KEY_RANDOM, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_KERNEL_SHELL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_KERNEL_THREAD_SHELL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_KERNEL_THREAD_SHELL_LIST, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_KERNEL_THREAD_SHELL_STACKS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_L2_WIFI_CONN_WQ_STACK_SIZE, 6144);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_L2_WIFI_CONNECTIVITY, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_L2_WIFI_CONNECTIVITY_CONNECT_TIMEOUT_SECONDS, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_L2_WIFI_CONNECTIVITY_CONNECTION_PERSISTENCE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_LIBC_ERRNO, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_LOG_RUNTIME_FILTERING, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MAIN_STACK_SIZE, 6144);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_CCM_C, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_CHACHA20_C, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_CHACHAPOLY_C, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_DHM_C, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_GCM_C, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_HAS_CCM_CIPHERSUITE_REQUIREMENTS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_HAS_CHACHAPOLY_CIPHERSUITE_REQUIREMENTS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_HAS_GCM_CIPHERSUITE_REQUIREMENTS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_HEAP_SIZE, 81920);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_MAC_SHA256_ENABLED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_MPI_MAX_SIZE, 256);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_POLY1305_C, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_PSA_CRYPTO_STORAGE_C, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_SSL_CONTEXT_SERIALIZATION, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MPSC_PBUF, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_ARP_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_BUF_RX_COUNT, 36);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_BUF_TX_COUNT, 36);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONFIG_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONN_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONNECTION_MANAGER_CONNECTIVITY_WIFI_MGMT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONNECTION_MANAGER_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONNECTION_MANAGER_MONITOR_STACK_SIZE, 4600);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONTEXT_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CORE_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_DHCPV4_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_HOSTNAME_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_HTTP_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_HTTP_SERVER_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_ICMPV4_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_ICMPV6_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IF_IPV6_PREFIX_COUNT, 2);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IF_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IF_MAX_IPV4_COUNT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IF_MAX_IPV6_COUNT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IF_MCAST_IPV6_ADDR_COUNT, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IF_UNICAST_IPV6_ADDR_COUNT, 2);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_INITIAL_HOP_LIMIT, 64);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_INITIAL_MCAST_HOP_LIMIT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV4_ACD_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV4_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV6, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV6_DAD, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV6_IID_EUI_64, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV6_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV6_MAX_NEIGHBORS, 8);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV6_MLD, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV6_MTU, 1280);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV6_NBR_CACHE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV6_NBR_CACHE_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV6_ND, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV6_ND_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV6_PE_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV6_RA_RDNSS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV6_RS_TIMEOUT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_L2_ETHERNET_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_L2_WIFI_MGMT_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_L2_WIFI_SHELL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_MAX_CONN, 8);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_MAX_CONTEXTS, 6);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_MAX_NEXTHOPS, 8);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_MAX_ROUTERS, 2);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_MAX_ROUTES, 8);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_MGMT_EVENT_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_MGMT_EVENT_QUEUE_TIMEOUT, 10);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_NATIVE_IPV6, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_PKT_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_PKT_RX_COUNT, 14);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_PKT_TX_COUNT, 14);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_ROUTE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_ROUTE_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_RX_STACK_SIZE, 2048);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_SOCKETS_DNS_TIMEOUT, 30000);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_SOCKETS_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_SOCKETS_POLL_MAX, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_SOCKETS_SERVICE_STACK_SIZE, 1200);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_SOCKETS_TLS_MAX_CREDENTIALS, 4);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_SOCKETS_TLS_SET_MAX_FRAGMENT_LENGTH, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_TC_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_TCP_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_UDP_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_UTILS_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NRF_WIFI_DATA_HEAP_SIZE, 40000);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NRF70_MAX_TX_AGGREGATION, 4);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NRF70_MAX_TX_TOKENS, 10);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PICOLIBC, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PICOLIBC_IO_LONG_LONG, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PICOLIBC_USE_TOOLCHAIN, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PM_PARTITION_SIZE_TFM, 0x20000);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PM_PARTITION_SIZE_TFM_INTERNAL_TRUSTED_STORAGE, 0x2000);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PM_PARTITION_SIZE_TFM_OTP_NV_COUNTERS, 0x2000);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PM_PARTITION_SIZE_TFM_PROTECTED_STORAGE, 0x4000);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PM_PARTITION_SIZE_TFM_SRAM, 0xc000);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PM_PARTITION_TFM_STORAGE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_POSIX_C_LIB_EXT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_HAS_AEAD_SUPPORT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_MAX_RSA_KEY_BITS, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_CC3XX_CTR_DRBG_DRIVER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_AEAD_DRIVER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_CCM_AES, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_CHACHA20_POLY1305, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_ECDH_SECP_R1_384, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_ECDSA_SECP_R1_384, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_GCM_AES, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_ECC_KEY_PAIR_DERIVE_SECP_R1_384, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_ECC_KEY_PAIR_EXPORT_SECP_R1_384, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_ECC_KEY_PAIR_GENERATE_SECP_R1_384, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_ECC_KEY_PAIR_IMPORT_SECP_R1_384, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_ECC_PUBLIC_KEY_SECP_R1_384, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_STREAM_CIPHER_CHACHA20, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_USE_CC3XX_CTR_DRBG_DRIVER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_USE_CTR_DRBG_DRIVER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_ALG_CCM, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_ALG_CHACHA20, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_ALG_CHACHA20_POLY1305, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_ALG_CTR_DRBG, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_ALG_GCM, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_ALG_STREAM_CIPHER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_ECC_SECP_R1_384, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_KEY_TYPE_CHACHA20, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_RING_BUFFER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_ARGC_MAX, 30);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_ASCII_FILTER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_AUTOSTART, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_BACKEND_SERIAL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_BACKEND_SERIAL_API_INTERRUPT_DRIVEN, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_BACKEND_SERIAL_INIT_PRIORITY, 90);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_BACKEND_SERIAL_INTERRUPT_DRIVEN, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_BACKEND_SERIAL_LOG_LEVEL, 5);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_BACKEND_SERIAL_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_BACKEND_SERIAL_LOG_MESSAGE_QUEUE_SIZE, 512);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_BACKEND_SERIAL_LOG_MESSAGE_QUEUE_TIMEOUT, 100);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_BACKEND_SERIAL_RX_RING_BUFFER_SIZE, 64);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_BACKEND_SERIAL_TX_RING_BUFFER_SIZE, 8);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_BACKENDS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_BACKSPACE_MODE_DELETE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_CMD_BUFF_SIZE, 256);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_CMD_ROOT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_CMDS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_CMDS_RESIZE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_CMDS_RETURN_VALUE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_DEFAULT_TERMINAL_HEIGHT, 24);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_DEFAULT_TERMINAL_WIDTH, 80);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_DEVICE_HELPERS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_ECHO_STATUS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_GETOPT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_HELP, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_HELP_ON_WRONG_ARGUMENT_COUNT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_HISTORY, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_HISTORY_BUFFER, 512);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_LOG_BACKEND, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_LOG_FORMAT_TIMESTAMP, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_METAKEYS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_MSG_CMD_NOT_FOUND, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_MSG_SPECIFY_SUBCOMMAND, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_PRINTF_BUFF_SIZE, 30);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_PROMPT_BUFF_SIZE, 20);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_PROMPT_CHANGE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_PROMPT_UART, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_STACK_SIZE, 6144);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_STATS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_TAB, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_TAB_AUTOCOMPLETION, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_VT100_COLORS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_VT100_COMMANDS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_WILDCARD, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE, 4096);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_CRYPTO_AEAD_MODULE_ENABLED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_CRYPTO_ASYM_SIGN_MODULE_ENABLED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_CRYPTO_BUILTIN_KEYS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_CRYPTO_CIPHER_MODULE_ENABLED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_CRYPTO_CONC_OPER_NUM, 8);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_CRYPTO_ENGINE_BUF_SIZE, 8320);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_CRYPTO_HASH_MODULE_ENABLED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_CRYPTO_IOVEC_BUFFER_SIZE, 5120);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_CRYPTO_KEY_DERIVATION_MODULE_ENABLED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_CRYPTO_KEY_MODULE_ENABLED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_CRYPTO_MAC_MODULE_ENABLED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_CRYPTO_PARTITION_STACK_SIZE, 0x2000);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_EXPERIMENTAL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_ITS_BUF_SIZE, 2048);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_ITS_CREATE_FLASH_LAYOUT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_ITS_MAX_ASSET_SIZE, 512);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_ITS_NUM_ASSETS, 10);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_ITS_STACK_SIZE, 0x720);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_ITS_VALIDATE_METADATA_FROM_FLASH, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_PARTITION_INTERNAL_TRUSTED_STORAGE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_PARTITION_LOG_LEVEL_INFO, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_PARTITION_PROTECTED_STORAGE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_PROFILE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_PROFILE_TYPE_SMALL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_PS_CREATE_FLASH_LAYOUT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_PS_MAX_ASSET_SIZE, 2048);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_PS_NUM_ASSETS, 10);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_PS_ROLLBACK_PROTECTION, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_PS_STACK_SIZE, 0x700);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_PS_VALIDATE_METADATA_FROM_FLASH, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_THREAD_LOCAL_STORAGE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TLS_CREDENTIALS_BACKEND_PROTECTED_STORAGE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TLS_CREDENTIALS_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TLS_CREDENTIALS_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_CREDENTIALS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_CREDENTIALS_BACKEND_PSA, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_CREDENTIALS_CONNECT_STORED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_CREDENTIALS_CONNECT_STORED_CONNECTION_TIMEOUT, 30);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_CREDENTIALS_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_CREDENTIALS_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_CREDENTIALS_MAX_ENTRIES, 2);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_CREDENTIALS_SAE_PASSWORD_LENGTH, 128);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_CREDENTIALS_SHELL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_NM_LOG_LEVEL, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_ERR, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_NRF70_LOG_LEVEL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_NRF70_LOG_LEVEL_ERR, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_ZVFS_POLL_MAX, 6);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_ADXL345_TRIGGER_NONE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_CBPRINTF_FP_SUPPORT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_CBPRINTF_N_SPECIFIER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_CONNECTION_IDLE_TIMEOUT, 30);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_CONSOLE_GETCHAR, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_CONSOLE_GETCHAR_BUFSIZE, 258);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_CONSOLE_HANDLER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_CONSOLE_PUTCHAR_BUFSIZE, 128);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_CONSOLE_SUBSYS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_COUNTER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_COUNTER_INIT_PRIORITY, 60);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_COUNTER_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_COUNTER_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_COUNTER_NRF_RTC, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_COUNTER_RTC_CUSTOM_TOP_SUPPORT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DATE_TIME, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DATE_TIME_AUTO_UPDATE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DATE_TIME_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DATE_TIME_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DATE_TIME_NTP, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DATE_TIME_NTP_QUERY_TIME_SECONDS, 5);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DATE_TIME_RETRY_COUNT, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DATE_TIME_RETRY_INTERVAL_SECONDS, 60);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DATE_TIME_THREAD_STACK_SIZE, 1280);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DATE_TIME_TOO_OLD_SECONDS, 3600);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DATE_TIME_UPDATE_INTERVAL_SECONDS, 14400);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_RESOLVER_ADDITIONAL_BUF_CTR, 2);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_RESOLVER_ADDITIONAL_QUERIES, 2);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_RESOLVER_LOG_LEVEL, 4);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_RESOLVER_LOG_LEVEL_DBG, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_RESOLVER_MAX_SERVERS, 2);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_SERVER_IP_ADDRESSES, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_SERVER1, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_SERVER2, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_SERVER3, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_SERVER4, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_SERVER5, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_SOCKET_DISPATCHER_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DNS_SOCKET_DISPATCHER_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_DT_HAS_NORDIC_NRF_RTC_ENABLED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_FLASH, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_FLASH_FILL_BUFFER_SIZE, 32);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_FLASH_HAS_DRIVER_ENABLED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_FLASH_HAS_EX_OP, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_FLASH_HAS_EXPLICIT_ERASE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_FLASH_HAS_PAGE_LAYOUT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_FLASH_INIT_PRIORITY, 50);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_FLASH_JESD216, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_FLASH_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_FLASH_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_FLASH_PAGE_LAYOUT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_FP_HARDABI, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_FPU, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_FPU_SHARING, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_HAS_HW_NRF_RTC0, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_HEAP_MEM_POOL_IGNORE_MIN, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_HEAP_MEM_POOL_SIZE, 65536);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_INSTRUMENT_THREAD_SWITCHING, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_ISR_TABLES_LOCAL_DECLARATION, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_LOG_BACKEND_FORMAT_TIMESTAMP, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_LOG_BACKEND_SUPPORTS_FORMAT_TIMESTAMP, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_LOG_BACKEND_UART, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_LOG_BACKEND_UART_AUTOSTART, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_LOG_BACKEND_UART_BUFFER_SIZE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_LOG_BACKEND_UART_OUTPUT_DEFAULT, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_LOG_BACKEND_UART_OUTPUT_TEXT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_LTO, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MAIN_STACK_SIZE, 12288);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_FORCE_LEGACY_CIPHER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_FORCE_LEGACY_MD, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_GENPRIME, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_HAS_RSA_CIPHERSUITE_REQUIREMENTS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_HEAP_SIZE, 16384);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_KEY_EXCHANGE_RSA_ENABLED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_LOG_LEVEL, 4);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_LOG_LEVEL_DBG, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_MPI_MAX_SIZE, 512);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_PKCS1_V15, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_PKCS1_V21, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_RSA_C, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MBEDTLS_SSL_RENEGOTIATION, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MICROPY_CONFIGFILE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MICROPY_HEAP_SIZE, 32768);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MICROPY_VFS_FAT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MICROPY_VFS_LFS2, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_MPU_ALLOW_FLASH_WRITE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_ARP_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_ARP_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_BUF_POOL_USAGE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_BUF_RX_COUNT, 8);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_BUF_TX_COUNT, 8);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONFIG_AUTO_INIT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONFIG_INIT_PRIO, 95);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONFIG_INIT_TIMEOUT, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONFIG_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONFIG_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONFIG_MY_IPV4_ADDR, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONFIG_MY_IPV4_GW, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONFIG_MY_IPV4_NETMASK, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONFIG_NEED_IPV4, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONFIG_PEER_IPV4_ADDR, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONFIG_SETTINGS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONN_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONN_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONNECTION_MANAGER_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONNECTION_MANAGER_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONNECTION_MANAGER_MONITOR_STACK_SIZE, 512);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONTEXT_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CONTEXT_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CORE_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_CORE_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_DHCPV4_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_DHCPV4_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_DHCPV4_OPTION_NTP_SERVER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_DHCPV4_SERVER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_DHCPV4_SERVER_ADDR_COUNT, 4);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_DHCPV4_SERVER_ADDR_DECLINE_TIME, 86400);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_DHCPV4_SERVER_ADDR_LEASE_TIME, 86400);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_DHCPV4_SERVER_ICMP_PROBE_TIMEOUT, 1000);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_DHCPV4_SERVER_INSTANCES, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_DHCPV4_SERVER_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_DHCPV4_SERVER_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_DHCPV4_SERVER_NAK_UNRECOGNIZED_REQUESTS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_DHCPV4_SERVER_OPTION_DNS_ADDRESS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_HOSTNAME_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_HOSTNAME_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_HTTP_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_HTTP_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_HTTP_SERVER_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_HTTP_SERVER_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_ICMPV4_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_ICMPV4_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IF_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IF_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IF_MAX_IPV4_COUNT, 2);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV4_ACD_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV4_ACD_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV4_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_IPV4_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_L2_ETHERNET_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_L2_ETHERNET_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_L2_WIFI_MGMT_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_L2_WIFI_MGMT_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_LOG, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_MAX_CONN, 16);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_MAX_CONTEXTS, 5);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_MAX_ROUTERS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_MGMT_EVENT_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_MGMT_EVENT_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_MGMT_EVENT_QUEUE_TIMEOUT, 5000);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_PKT_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_PKT_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_PKT_RX_COUNT, 16);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_PKT_TX_COUNT, 16);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_ROUTE_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_ROUTE_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_RX_STACK_SIZE, 4096);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_SOCKETS_DNS_TIMEOUT, 2000);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_SOCKETS_LOG_LEVEL, 4);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_SOCKETS_LOG_LEVEL_DBG, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_SOCKETS_POLL_MAX, 10);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_SOCKETS_SERVICE_STACK_SIZE, 2400);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_SOCKETS_TLS_MAX_CREDENTIALS, 10);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_TC_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_TC_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_TCP_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_TCP_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_UDP_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_UDP_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_UTILS_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_UTILS_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NEWLIB_LIBC, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NEWLIB_LIBC_MIN_REQUIRED_HEAP_SIZE, 2048);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NEWLIB_LIBC_NANO, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NRF_WIFI_DATA_HEAP_SIZE, 130000);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NRF70_MAX_TX_AGGREGATION, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NRF70_MAX_TX_TOKENS, 5);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NRFX_PWM, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NRFX_PWM0, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NRFX_SPIM, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NRFX_SPIM4, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NRFX_WDT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NRFX_WDT0, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NVS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NVS_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NVS_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PM_EXTERNAL_FLASH_HAS_DRIVER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PM_PARTITION_SIZE_NVS_STORAGE, 0x6000);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PM_PARTITION_SIZE_TFM, 0x8000);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PM_PARTITION_SIZE_TFM_INTERNAL_TRUSTED_STORAGE, 0x0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PM_PARTITION_SIZE_TFM_OTP_NV_COUNTERS, 0x0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PM_PARTITION_SIZE_TFM_PROTECTED_STORAGE, 0x0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PM_PARTITION_SIZE_TFM_SRAM, 0x8000);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_POSIX_DEVICE_IO_ALIAS_CLOSE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_POSIX_DEVICE_IO_ALIAS_OPEN, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_POSIX_DEVICE_IO_ALIAS_READ, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_POSIX_DEVICE_IO_ALIAS_WRITE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_POSIX_FD_MGMT_ALIAS_LSEEK, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_POSIX_FILE_SYSTEM_ALIAS_FSTAT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_POSIX_SIGNALS_ALIAS_KILL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_DEFAULT_OFF, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_HAS_ASYM_ENCRYPT_SUPPORT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_MAX_RSA_KEY_BITS, 4096);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_CC3XX_HMAC_DRBG_DRIVER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_ANY_RSA_KEY_SIZE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_ASYMMETRIC_ENCRYPTION_DRIVER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_ECDH_MONTGOMERY_255, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_ECC_KEY_PAIR_DERIVE_MONTGOMERY, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_ECC_KEY_PAIR_DERIVE_MONTGOMERY_255, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_ECC_KEY_PAIR_EXPORT_MONTGOMERY, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_ECC_KEY_PAIR_EXPORT_MONTGOMERY_255, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_ECC_KEY_PAIR_GENERATE_MONTGOMERY, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_ECC_KEY_PAIR_GENERATE_MONTGOMERY_255, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_ECC_KEY_PAIR_IMPORT_MONTGOMERY, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_ECC_KEY_PAIR_IMPORT_MONTGOMERY_255, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_ECC_PUBLIC_KEY_MONTGOMERY, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_ECC_PUBLIC_KEY_MONTGOMERY_255, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_RSA_KEY_PAIR_EXPORT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_RSA_KEY_PAIR_IMPORT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_KEY_TYPE_RSA_PUBLIC_KEY, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_RSA_ANY_CRYPT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_RSA_ANY_SIGN, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_RSA_ANY_VERIFY, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_RSA_KEY_SIZE_2048, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_RSA_KEY_SIZE_4096, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_RSA_OAEP, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_RSA_PKCS1V15_CRYPT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_RSA_PKCS1V15_SIGN, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_NEED_OBERON_RSA_PSS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_USE_CC3XX_HMAC_DRBG_DRIVER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_USE_HMAC_DRBG_DRIVER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_ALG_HMAC_DRBG, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_ALG_RSA_OAEP, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_ALG_RSA_PKCS1V15_CRYPT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_ALG_RSA_PKCS1V15_SIGN, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_ALG_RSA_PKCS1V15_SIGN_RAW, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_ALG_RSA_PSS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_ALG_RSA_PSS_ANY_SALT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_ECC_MONTGOMERY_255, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_KEY_TYPE_RSA_KEY_PAIR_BASIC, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_KEY_TYPE_RSA_KEY_PAIR_DERIVE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_KEY_TYPE_RSA_KEY_PAIR_EXPORT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_KEY_TYPE_RSA_KEY_PAIR_GENERATE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_KEY_TYPE_RSA_KEY_PAIR_IMPORT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_KEY_TYPE_RSA_PUBLIC_KEY, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_RSA_KEY_SIZE_2048, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PSA_WANT_RSA_KEY_SIZE_4096, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PWM, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PWM_INIT_PRIORITY, 50);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PWM_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PWM_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PWM_NRFX, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_PWM_TC_INIT_PRIORITY, 50);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_REBOOT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SCHED_THREAD_USAGE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SCHED_THREAD_USAGE_ALL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SCHED_THREAD_USAGE_AUTO_ENABLE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SENSOR, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SENSOR_DS3231_INIT_PRIORITY, 86);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SENSOR_INIT_PRIORITY, 90);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SENSOR_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SENSOR_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SHELL_STACK_SIZE, 4096);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SNTP, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SNTP_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SNTP_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SOC_FLASH_NRF, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SOC_FLASH_NRF_RADIO_SYNC_NONE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SOFTAP_SAMPLE_DHCPV4_POOL_START, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SPI, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SPI_COMPLETION_TIMEOUT_TOLERANCE, 200);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SPI_INIT_PRIORITY, 50);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SPI_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SPI_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SPI_NOR, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SPI_NOR_CS_WAIT_DELAY, 0);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE, 65536);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SPI_NOR_INIT_PRIORITY, 80);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SPI_NOR_SFDP_MINIMAL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SPI_NOR_SLEEP_WHILE_WAITING_UNTIL_READY, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SPI_NRFX, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SPI_NRFX_RAM_BUFFER_SIZE, 8);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SPI_NRFX_SPIM, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SPI_NRFX_WAKE_TIMEOUT_US, 200);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_STA_CONN_TIMEOUT_SEC, 70);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_STA_SAMPLE_START_WIFI_THREAD_STACK_SIZE, 5200);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE, 3072);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TEST_RANDOM_GENERATOR, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_CRYPTO_CONC_OPER_NUM, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_CRYPTO_ENGINE_BUF_SIZE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_CRYPTO_IOVEC_BUFFER_SIZE, 1024);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_CRYPTO_PARTITION_STACK_SIZE, 0x800);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_MCUBOOT_IMAGE_NUMBER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_PLATFORM_NV_COUNTER_MODULE_DISABLED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TFM_PROFILE_TYPE_MINIMAL, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_THREAD_ANALYZER, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_THREAD_ANALYZER_ISR_STACK_USAGE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_THREAD_ANALYZER_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_THREAD_ANALYZER_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_THREAD_ANALYZER_RUN_UNLOCKED, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_THREAD_ANALYZER_USE_PRINTK, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_THREAD_CUSTOM_DATA, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_THREAD_RUNTIME_STATS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TLS_CREDENTIALS_BACKEND_VOLATILE, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TLS_CREDENTIALS_LOG_LEVEL, 4);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_TLS_CREDENTIALS_LOG_LEVEL_DBG, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_UART_CONSOLE_DEBUG_SERVER_HOOKS, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WATCHDOG, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WDT_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WDT_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WDT_NRFX, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_NM_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_NM_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_NM_WPA_SUPPLICANT_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_NRF70_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_NRF70_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_READY_INIT_PRIORITY, 90);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_READY_LIB, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_READY_LIB_LOG_LEVEL, 3);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_READY_LIB_LOG_LEVEL_DEFAULT, 1);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_WIFI_READY_MAX_CALLBACKS, 2);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_ZVFS_POLL_MAX, 10);

    Btw! I re-ran the example and could not for the life of me get it to connect to google.com and make the request. DNS resolved an IP, certificate steps passed, but it always fails with:

    *** Booting nRF Connect SDK v3.0.0-3bfc46578e42 ***
    *** Using Zephyr OS v4.0.99-a0e545cb437a ***
    HTTPS client sample started
    Bringing network interface up
    Provisioning certificate
    CA certificate already exists, sec tag: 42
    Connecting to the network
    Connected
    Network connectivity established and IP address assigned
    Looking up google.com.
    DNS message size: 44
    DNS message content (hex):ec 18 81 80 00 01 00 01 00 00 00 00 06 67 6f 6f 67 6c 65 03 63 6f 6d 00 00 01 00 01 c0 0c 00 01 00 01 00 00 00 c6 00 04 ac d9 14 0e
    Resolved 172.217.20.14 (AF_INET)
    Current system time: 13 seconds since Epoch
    Doing setsockopt()...1
    Doing setsockopt()...2
    Doing setsockopt()...3
    Done!
    Connecting to google.com:443.
    DNS message size: 56
    DNS message content (hex):6c 27 81 80 uart:~
    00 01 00 01 00 00 00 00 06 67 6f 6f 67 6c 65 03 63 6f 6d 00 00 1c 00 01 c0 0c 00 1c 00 01 00 00 00 40 connect() failed, err: 113
    00 10 2a 00 14 50 40 0d 08 05 00 00 00 00 00 00 20 0e
    Disconnected
    Network connectivity lost
    Disconnected from the network

    I'll keep trying to figure out what the main difference is between the https_sample and our project. Have a great weekend. :)

  • I advanced a bit more when I realised that the new socket I was making was using the default socket interface.

    By changing:

    proto = IPPROTO_TCP
    to:
    proto = IPPROTO_TLS_1_2
    Now running our project produces a completely different error, in that the socket cannot be initialized at all now.
    The code segment for socket initialisation:
     STATIC mp_obj_t socket_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
         mp_arg_check_num(n_args, n_kw, 0, 4, false);
    
         mbedtls_debug_set_threshold(4); 
         socket_obj_t *socket = socket_new();
     
         int family = AF_INET;
         int socktype = SOCK_STREAM;
         int proto = -1;
     
         if (n_args >= 1) {
             family = mp_obj_get_int(args[0]);
             if (n_args >= 2) {
                 socktype = mp_obj_get_int(args[1]);
                 if (n_args >= 3) {
                     proto = mp_obj_get_int(args[2]);
                 }
             }
         }
     
         if (proto == -1) {
             proto = IPPROTO_TLS_1_2;
             if (socktype != SOCK_STREAM) {
                 proto = IPPROTO_UDP;
             }
         }
         
         int res = tls_credential_add(GOOGLE_CA_SEC_TAG, TLS_CREDENTIAL_CA_CERTIFICATE, r1_crt, r1_crt_len);
         RAISE_SOCK_ERRNO(res);
         printk("Trying to initialize socket...\n");
         socket->ctx = zsock_socket(family, socktype, proto);
         RAISE_SOCK_ERRNO(socket->ctx);
         printk("Done initializing socket! \n");
         socket->family = family;
         return MP_OBJ_FROM_PTR(socket);
     }

    Produces the following output:
    >>> s = None
    >>> s = socket.socket()
    Trying to initialize socket...
    [00:04:13.332,641] <dbg> net_sock_tls: tls_alloc: (mp_main): Allocated TLS context, 0x20009d58
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    OSError: 23
    >>>
    Which indicates that:
    socket->ctx = zsock_socket(family, socktype, proto);
    fails.
    Adding some debug code in Zephyr's internal library, I found that:
    /opt/nordic/ncs/v3.0.0/zephyr/subsys/net/lib/sockets/sockets_tls.c
    in function "static int ztls_socket(int family, int type, int proto)", the "OSError:23" is generated by the line:
        sock = zsock_socket(family, type, proto);
    	if (sock < 0) {
    		goto release_tls;
    	}
    Again adding some debug code, reveals that "sock" has a value of -1.

    And this is as far as I can go since ztls_socket() is declared in an .h file but I simply cannot find its definition, so I have no idea what makes it fail.
  • Hi, 

     

    Is one config working, while the other is not working?

    The config CONFIG_NET_SOCKETS_POLL_MAX shall be 10 or higher, as the WPA supplication uses several sockets, and so does each TLS connection.

    It also looks like the MPI size is 256, while MBEDTLS_MPI_MAX_SIZE should be 512.

    Tudor B. said:
    Btw! I re-ran the example and could not for the life of me get it to connect to google.com and make the request. DNS resolved an IP, certificate steps passed, but it always fails with

    One thing that can help here is the mbedtls debug output configs that I shared earlier.

    However, I see from your updated response that the issue was related to the proto input variable.

    Tudor B. said:
    "OSError:23" 

    I assume this is errno?

    #define ENFILE 23 /**< File table overflow */

    You're overflowing the amount of open sockets.

    This could be due to the max amount configured in your build, or that you're not closing sockets.

    Try increasing CONFIG_ZVFS_OPEN_MAX and CONFIG_NET_SOCKETS_POLL_MAX (which again sets CONFIG_ZVFS_POLL_MAX).

    Tudor B. said:
    Edit: extra point that I wanna add: must the board's time be updated before the TLS and/or connection steps take place? Or is the board's time relevant in any way for this?

    I believe you're referring to checking validity?

    https://github.com/nrfconnect/sdk-mbedtls/blob/main/include/mbedtls/mbedtls_config.h#L133-L152 

    mbedtls is capable of doing this.

     

    Kind regards,

    Håkon

Reply
  • Hi, 

     

    Is one config working, while the other is not working?

    The config CONFIG_NET_SOCKETS_POLL_MAX shall be 10 or higher, as the WPA supplication uses several sockets, and so does each TLS connection.

    It also looks like the MPI size is 256, while MBEDTLS_MPI_MAX_SIZE should be 512.

    Tudor B. said:
    Btw! I re-ran the example and could not for the life of me get it to connect to google.com and make the request. DNS resolved an IP, certificate steps passed, but it always fails with

    One thing that can help here is the mbedtls debug output configs that I shared earlier.

    However, I see from your updated response that the issue was related to the proto input variable.

    Tudor B. said:
    "OSError:23" 

    I assume this is errno?

    #define ENFILE 23 /**< File table overflow */

    You're overflowing the amount of open sockets.

    This could be due to the max amount configured in your build, or that you're not closing sockets.

    Try increasing CONFIG_ZVFS_OPEN_MAX and CONFIG_NET_SOCKETS_POLL_MAX (which again sets CONFIG_ZVFS_POLL_MAX).

    Tudor B. said:
    Edit: extra point that I wanna add: must the board's time be updated before the TLS and/or connection steps take place? Or is the board's time relevant in any way for this?

    I believe you're referring to checking validity?

    https://github.com/nrfconnect/sdk-mbedtls/blob/main/include/mbedtls/mbedtls_config.h#L133-L152 

    mbedtls is capable of doing this.

     

    Kind regards,

    Håkon

Children
  • It also looks like the MPI size is 256, while MBEDTLS_MPI_MAX_SIZE should be 512.

    That's for the example. By checking the compared files, I see that our project has indeed 512.

    Try increasing CONFIG_ZVFS_OPEN_MAX and CONFIG_NET_SOCKETS_POLL_MAX (which again sets CONFIG_ZVFS_POLL_MAX).

    Again an interesting point since I see that for the https_client sample project, CONFIG_NET_SOCKETS_POLL_MAX is set to 0, while for us it's set to 10. Will try increasing it to 16 and rerun the test.

    I believe you're referring to checking validity?

    Yes, my lead asked if it might be the case that TLS fails due to the devkit not getting its time set before attempting any TLS steps.

  • Set CONFIG_MBEDTLS_MPI_MAX_SIZE=512 and CONFIG_NET_SOCKETS_POLL_MAX=16. Same behaviour.

    Edit: forgot to mention:

    CONFIG_LOG=y
    CONFIG_MBEDTLS_DEBUG=y
    CONFIG_MBEDTLS_SSL_DEBUG_ALL=y
    CONFIG_MBEDTLS_LOG_LEVEL_DBG=y
    CONFIG_MBEDTLS_DEBUG_C=y
    CONFIG_MBEDTLS_DEBUG_LEVEL=4
    # Handle the large influx of prints
    CONFIG_LOG_BUFFER_SIZE=16384
    CONFIG_LOG_BACKEND_UART=y

    are active in the build, but the same scarce log comes up.

  • Hi,

     

    If mbedtls logging is enabled, but nothing is outputted, the failure is not with mbedtls.

     

    The issue is local, and if you are still seeing -23 (and this is the errno??? please confirm) - then the issue is still due to socket overflow.

    Verify that the value you set here:

    Håkon Alseth said:
    CONFIG_NET_SOCKETS_POLL_MAX

    Is reflected in the config set here:

    Håkon Alseth said:
    CONFIG_ZVFS_POLL_MAX

     

    And please note that this file

    Tudor B. said:
    The file in question is located at: /build/zephyr/zephyr/misc/generated/configs.c

    is not the .config file. files with prefix "." can be looked as hidden, especially if you are running windows and do not have show all files in your explorer.

    The .config file is located in ../build-folder/application-name/zephyr/.config 

     

    Tudor B. said:
    Yes, my lead asked if it might be the case that TLS fails due to the devkit not getting its time set before attempting any TLS steps.

    mbedtls does not print any debug logs, which indicate that the system does not get that far before the failure occurs, meaning that the failure is else-where in the network subsys, highly likely in the socket allocation.

     

    Kind regards,

    Håkon

  • GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_NET_SOCKETS_POLL_MAX, 16);
    GEN_ABSOLUTE_SYM_KCONFIG(CONFIG_ZVFS_POLL_MAX, 16);

    Confirms they are identical and set to 16.

    is not the .config file. files with prefix "." can be looked as hidden, especially if you are running windows and do not have show all files in your explorer.

    The .config file is located in ../build-folder/application-name/zephyr/.config 

    I saw mentions in other tickets about the "magical .config" file but I've searched my entire project folder and the SDK folder itself and no such file exists. I'm running on Mac. The file that I mentioned seems to be its equivalent (probably a v3.0.0 thing). I'm a bit convinced by this since every time I build it gets regenerated.

    and this is the errno??? please confirm

    Sadly I can't confirm with 100% certainty. The Zephyr stack + the Nordic libs are so complex and intricate that all I can say is... I think so. :))

    What I can say to elaborate a bit:

    Inside "static int ztls_socket(int family, int type, int proto)", which is in sockets_tls.c at one point the function reaches these lines:
    	printk("Dead here...15\n");
    	ctx = tls_alloc();
    	if (ctx == NULL) {
    		errno = ENOMEM;
    	printk("Dead here...16\n");
    		goto free_fd;
    	}
    	
    	printk("Dead here...17\n");
    
    	sock = zsock_socket(family, type, proto);
    	if (sock < 0) {
    		printk("Dead here...17.5: %d\n", sock);
    		goto release_tls;
    	}
    	printk("Dead here...18\n");


    Also, in my my modsocket.c, I have the function "STATIC mp_obj_t socket_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {" which at one point reaches these lines:
         printk("Trying to initialize socket...\n");
         socket->ctx = zsock_socket(family, socktype, proto);
         RAISE_SOCK_ERRNO(socket->ctx);
         printk("Done initializing socket! \n");
    (as you can see, I've added some debug messages to try and figure things out)
    Given the above two code snippets, the logs look like this:
    >>> s = None
    >>> s = socket.socket()
    Trying to initialize socket...
    Dead here...15
    [00:02:07.799,316] <dbg> net_sock_tls: tls_alloc: (mp_main): Allocated TLS context, 0x2000a0d0
    Dead here...17
    Dead here...17.5: -1
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    OSError: 23
    >>>

    Which shows us that "zsock_socket()" returns -1. But when a function with the same name gets called in my modsocket.c, the value returned is 23. I have no idea how to interpret it, or if the two "ztls_socket()" functions are one and the same or not.
  • After injecting A LOT MORE debug code, I've reached this:
    /opt/nordic/ncs/v3.0.0/zephyr/lib/os/fdtable.c: static int _find_fd_entry(void)

    The contents of the function:

    static int _find_fd_entry(void)
    {
    	int fd;
    	for (fd = 0; fd < ARRAY_SIZE(fdtable); fd++) {
    		if (!atomic_get(&fdtable[fd].refcount)) {
    			return fd;
    		}
    	}
    	printk("Dead here...21\n");
    	errno = ENFILE;
    	return -1;
    }

    Notice the print that I've inserted in the function, because here's the log:

    >>> s = None
    >>> s = socket.socket()
    Trying to initialize socket...
    Family: 1, socktype: 1, proto: 258
    Dead here...15
    [00:00:58.780,853] <dbg> net_sock_tls: tls_alloc: (mp_main): Allocated TLS context, 0x2000a0d0
    Dead here...17
    Dead here...21
    Dead here...17.5: -1
    Dead here...20
    Returned value: -1
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    OSError: 23

    So it seems that this function is the one that throws the ENFILE error. Also this answers your question about how certain I am that this is truly an errno. Now we can be certain. :D

    I'll try digging deeper to see what makes this function throw that errno. Any support is much appreciated.

Related