# Copyright (c) 2020 O.S.Systems
# SPDX -License-Identifier: Apache-2.0

# Disable default configs
CONFIG_BT=n

CONFIG_NET_L2_ETHERNET=n
CONFIG_NET_L2_IEEE802154=n

CONFIG_NET_IPV4=n
CONFIG_NET_DHCPV4=n
CONFIG_NET_TCP=n

# Enable OpenThread network
CONFIG_NET_L2_OPENTHREAD=y

CONFIG_OPENTHREAD_DEBUG=y
CONFIG_OPENTHREAD_L2_DEBUG=y
CONFIG_OPENTHREAD_L2_LOG_LEVEL_INF=y

# Enable OpenThread shell
CONFIG_SHELL=y
CONFIG_OPENTHREAD_SHELL=y

# This follows https://openthread.io/guides/border-router guides
# It uses the default values from otbr-web page
CONFIG_OPENTHREAD_PANID=4660
CONFIG_OPENTHREAD_CHANNEL=15
CONFIG_OPENTHREAD_NETWORK_NAME="OpenThreadDemo"
CONFIG_OPENTHREAD_XPANID="0x1111111122222222"
CONFIG_OPENTHREAD_JOINER=y
CONFIG_OPENTHREAD_JOINER_AUTOSTART=y
CONFIG_OPENTHREAD_JOINER_PSKD="J01NU5"
CONFIG_OPENTHREAD_SLAAC=y

CONFIG_NET_IPV6_NBR_CACHE=n
CONFIG_NET_IPV6_MLD=n

# mbedTLS tweaks
CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN=768

# UpdateHub
CONFIG_MAIN_STACK_SIZE=8192
CONFIG_UPDATEHUB_COAP_BLOCK_SIZE_EXP=2

# Only tested with 6to4
#
#######################
CONFIG_DNS_SERVER_IP_ADDRESSES=y
# Add google IPv4 DNS Server
# https://www.ultratools.com/tools/ipv4toipv6Result?address=8.8.8.8
# Mapped Address: 0:0:0:0:0:ffff:808:808
# Extract value                 >808:808<
# Add prefix        64:ff9b::
CONFIG_DNS_SERVER1="64:ff9b::808:808"
# Repeat the above step with your server IPv4 address translated to IPv6
CONFIG_UPDATEHUB_SERVER="<your server ip address>"
