diff --git a/doc/site/en/guides/border-router/beaglebone-black.md b/doc/site/en/guides/border-router/beaglebone-black.md
deleted file mode 100644
index 895211d42..000000000
--- a/doc/site/en/guides/border-router/beaglebone-black.md
+++ /dev/null
@@ -1,210 +0,0 @@
-# BeagleBone Black
-
-Contributor: https://github.com/srickardti
-
-OpenThread Border Router (OTBR) provides support for the [BeagleBone
-Black](http://www.ti.com/tool/BEAGLEBK) (BBB) platform.
-
-Hardware requirements:
-
-* External 5V AC adapter for power
-* An 8 GB or larger microSD card ("uSD card" in this guide)
-* A supported OpenThread platform (such as the [TI
- CC2652](https://openthread.io/vendors/texas-instruments#cc2652)) for Thread
- network connectivity in an RCP design
-
-Steps to enable:
-
-1. Download and install the OS.
-1. Prepare the Debian Environment for OTBR
-1. Build and install OTBR
-1. Set up a Wi-Fi access point
-
-> Note: The BBB does not have built-in Wi-Fi support. This guide was built and
-tested with a BBONE-GATEWAY-CAPE for Wi-Fi AP operation. Some BeagleBone
-variants have onboard Wi-Fi capability, and some of this guide may be
-applicable.
-
-## Step 1: Download and install the OS
-
-1. Download the [latest Debian IoT image for
- BeagleBone](https://beagleboard.org/latest-images).
- * The version used for this guide was
- `bone-debian-10.3-iot-armhf-2020-04-06-4gb.img.xz`
-1. Install the OS image on a uSD Card by following the [BeagleBone getting
- started guide](https://beagleboard.org/getting-started).
-1. Boot the BeagleBone and SSH into the device.
- * Connectivity over a local Ethernet based network is recommended.
- * The cloud9 IDE will be disabled later in this guide.
- * This guide will change the state of BeagleBone network interfaces, be
- aware your secure shell session may disconnect.
- * Modern BeagleBone bootloaders will run from the uSD card by default, but
- some BeagleBone Black devices may try to boot from the internal eMMC.
- Make sure to press the BOOT Button in this case.
-
-> Warning: The power requirements of the development kit used for the
-OpenThread RCP may be too great for the power that can be supplied from a
-computer's USB port. It is recommended that you use the 5V power adaptor for
-the BeagleBone where applicable.
-
-For more detailed information on the BeagleBone, see the [BeagleBoard Support
-Page](https://beagleboard.org/support).
-
-## Step 2: Prepare the Debian Environment for OTBR
-
-Certain parts of the default BeagleBone Debian image run by default. These may
-conflict with some parts of the OpenThread Border Router software.
-
-Some packages are running by default on the BeagleBone to enable quick
-development. These can be found in systemd with the command `sudo systemctl
-list-units --all` and `sudo systemctl list-sockets --all`.
-
-Stop and disable the modules:
-
-```
-$ sudo systemctl stop bonescript-autorun.service
-$ sudo systemctl stop bonescript.socket
-$ sudo systemctl stop bonescript.service
-$ sudo systemctl stop cloud9.socket
-$ sudo systemctl stop cloud9.service
-$ sudo systemctl stop nodered.service
-$ sudo systemctl disable bonescript-autorun.service
-$ sudo systemctl disable bonescript.socket
-$ sudo systemctl disable bonescript.service
-$ sudo systemctl disable cloud9.socket
-$ sudo systemctl disable cloud9.service
-$ sudo systemctl disable nodered.service
-$ sudo systemctl daemon-reload
-```
-
-Disable advertising the Cloud9 IDE and NodeRED services with Avahi by deleting
-the service files:
-
-```
-$ sudo rm /etc/avahi/services/*
-```
-
-The filesystem for the uSD BeagleBone image is limited to 4GB to fit on most
-uSD cards. Expand the partition to enable usage of the entire storage capacity.
-
-```
-$ sudo /opt/scripts/tools/grow_partition.sh
-```
-
-You are encouraged to read that helper script to find out how the filesystem is
-expanded. You will have to reboot the BeagleBone and re-login to use this new
-filesystem definition.
-
-```
-$ sudo shutdown -r now
-```
-
-This will close your SSH session.
-
-Once logged back into the BeagleBone, install Network Manager:
-
-```
-$ sudo apt-get update
-$ sudo apt-get install network-manager
-```
-
-Then disable `connman` and enable `network-manager`:
-
-```
-$ sudo systemctl disable connman
-$ sudo systemctl enable network-manager
-```
-
-If we were to `stop` connman directly here it would break the SSH session
-because the network interface is managed by connman. Instead we configure the
-system to take effect on the next boot. Now reboot the Beaglebone and re-login.
-
-```
-$ sudo shutdown -r now
-```
-
-Network Manager may not have setup the DNS name servers. Edit `resolv.conf`
-with the command `sudo vim /etc/resolv.conf` and make sure the contents contain
-the Google DNS and Cloudflare DNS:
-
-```
-nameserver 8.8.8.8
-nameserver 1.1.1.1
-```
-
-Restart to make sure Network Manager is setup correctly.
-
-```
-$ sudo shutdown -r now
-```
-
-> Note: If your BeagleBone has a WiLink based Wi-Fi module installed, the
-following steps may be applicable to you. This was tested with a
-BBONE-GATEWAY-CAPE. Some of these may not be required.
-
-The WiLink 8 module does not like to have its MAC address changed at runtime.
-Network Manager will try to do this when scanning. Edit the
-`NetworkManager.conf` with the command `sudo vim
-/etc/NetworkManager/NetworkManager.conf` and add the lines below:
-
-```
-[device]
-wifi.scan-rand-mac-address=no
-```
-
-The `BBONE-GATEWAY-CAPE` is not recognized by the BeagleBone by default because
-of a pin conflict. Add the configuration manually by editing the `uEnv.txt`
-with the command `sudo vim /boot/uEnv.txt` and make sure the following lines
-match:
-
-```
-#Custom Cape
-dtb_overlay=/lib/firmware/BB-GATEWAY-WL1837-00A0.dtbo
-#
-#Disable auto loading of virtual capes (emmc/video/wireless/adc)
-disable_uboot_overlay_emmc=1
-disable_uboot_overlay_video=1
-disable_uboot_overlay_audio=1
-disable_uboot_overlay_wireless=1
-disable_uboot_overlay_adc=1
-```
-
-The BeagleBone wilink setup scripts try to use connman by default to enable
-Wi-Fi AP activity. Edit the default configuration folder with the command `sudo
-vim /etc/default/bb-wl18xx` and make sure the variables match below:
-
-```
-TETHER_ENABLED=no
-USE_CONNMAN_TETHER=no
-```
-
-Restart to make sure Network Manager can see the new interface.
-
-```
-$ sudo shutdown -r now
-```
-
-Once logged back in you can run `ifconfig` or `nmcli` to see the new `wlan`
-interface.
-
-> Warning: The startup scripts may take a few moments to enable the `wlan0`
-interface. If you do not see the interface, check `journalctl` to see if the
-system is having difficulty bringing up the interface.
-
-## Step 3: Build and install OTBR
-
-See [Build and Configuration](https://openthread.io/guides/border-router/build)
-for instructions on building and installing OTBR.
-
-> Note: If your BeagleBone has Wi-Fi capabilities, you can enable the OTBR
-build scripts to configure it as an access point by passing
-`NETWORK_MANAGER_WIFI=1` to the build scripts.
-
-## Step 4: Set up a Wi-Fi access point
-
-If your BeagleBone is Wi-Fi enabled and automatic setup of the Wi-Fi access
-point by Network Manager is skipped, see [Wi-Fi Access Point
-Setup](https://openthread.io/guides/border-router/access-point) for manual
-configuration instructions. The guide is written for Raspberry Pi, but most of
-the configuration steps are applicable to the BeagleBone Debian distribution.
-
diff --git a/doc/site/en/guides/porting/_toc.yaml b/doc/site/en/guides/porting/_toc.yaml
deleted file mode 100644
index 82553d136..000000000
--- a/doc/site/en/guides/porting/_toc.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-toc:
-- title: Overview
- path: /guides/porting/
- step_group: porting_guide
-- title: Set up the Build Environment
- path: /guides/porting/set-up-the-build-environment
- step_group: porting_guide
-- title: Implement Platform Abstraction Layer APIs
- path: /guides/porting/implement-platform-abstraction-layer-apis
- step_group: porting_guide
-- title: Implement Advanced Features
- path: /guides/porting/implement-advanced-features
- step_group: porting_guide
-- title: Validate the Port
- path: /guides/porting/validate-the-port
- step_group: porting_guide
-- title: Certification and README
- path: /guides/porting/certification-and-readme
- step_group: porting_guide
-
diff --git a/doc/site/en/guides/porting/certification-and-readme.md b/doc/site/en/guides/porting/certification-and-readme.md
deleted file mode 100644
index 217568f5a..000000000
--- a/doc/site/en/guides/porting/certification-and-readme.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# Certification and README
-
-## Thread Certification
-
-To achieve Thread Certification, the port must be tested against the official
-[Thread Harness](http://graniteriverlabs.com/thread/) and pass all scenarios
-listed in the Thread Certification Test Plan.
-
-For more information, see
-[Certification](https://openthread.io/certification).
-
-## README
-
-A detailed README is necessary to demonstrate how to build and run OpenThread on
-a new hardware platform.
-
-At a minimum, the README should include:
-
-- Information about the hardware platform
-- Links to the required toolchain
-- How to configure platform-specific vendor software
-- How to build and flash binaries onto the platform
-- Versions of libraries and toolchains used for validation of the port
-
-See the
-[EFR32MG12 README](https://github.com/openthread/openthread/blob/main/examples/platforms/efr32/efr32mg12/README.md)
-for an example.
diff --git a/doc/site/en/guides/porting/implement-advanced-features.md b/doc/site/en/guides/porting/implement-advanced-features.md
deleted file mode 100644
index 70c95c041..000000000
--- a/doc/site/en/guides/porting/implement-advanced-features.md
+++ /dev/null
@@ -1,135 +0,0 @@
-# Implement Advanced Features
-
-Some advanced features are optional, depending on whether or not they are
-supported on the target hardware platform.
-
-
-
-## Step 1: Auto frame pending
-
-IEEE 802.15.4 defines two kinds of data transmission methods between parent and
-child: direct transmission and indirect transmission. The latter is designed
-primarily for sleepy end devices (SEDs) which sleep most of the time,
-periodically waking to poll the parent for queued data.
-
-- **Direct Transmission** — parent sends a data frame directly to the end device
-
-
-- **Indirect Transmission** — parent holds data until requested by its intended end device
-
-
-In the Indirect case, a child end device must first poll the parent to determine
-whether any data is available for it. To do this, the child sends a data
-request, which the parent acknowledges. The parent then determines whether it
-has any data for the child device; if so, it sends a data packet to the child
-device, which acknowledges receipt of the data.
-
-If the radio supports dynamically setting the Frame Pending bit in outgoing
-acknowledgments to SEDs, the drivers must implement the
-[source address match](https://github.com/openthread/openthread/blob/main/include/openthread/platform/radio.h#L288)
-API to enable this capability. OpenThread uses this API to tell the radio which
-SEDs to set the Frame Pending bit for.
-
-If the radio does not support dynamically setting the Frame Pending bit, the
-radio might stub out the source address match API to return
-`OT_ERROR_NOT_IMPLEMENTED`.
-
-## Step 2: Energy Scan/Detect with radio
-
-> Note: This feature is optional.
-
-The Energy Scan/Detect feature requires the radio chip to sample energy
-presenting on selected channels and return the detected energy value to the
-upper layer.
-
-If this feature is not implemented, the IEEE 802.15.4 MAC layer
-sends/receives a Beacon Request/Response packet to evaluate the current
-energy value on the channel.
-
-If the radio chip supports Energy Scan/Detect, make sure to disable software
-energy scanning logic by setting the macro
-`OPENTHREAD_CONFIG_ENABLE_SOFTWARE_ENERGY_SCAN = 0`.
-
-## Step 3: Hardware acceleration for mbedTLS
-
-> Note: This feature is optional.
-
-mbedTLS defines several macros in the main configuration header file,
-[`mbedtls-config.h`](https://github.com/openthread/openthread/blob/main/third_party/mbedtls/mbedtls-config.h),
-to allow users to enable alternative implementations of AES, SHA1, SHA2, and
-other modules, as well as individual functions for the Elliptic curve
-cryptography (ECC) over GF(p) module. See
-[mbedTLS hardware acceleration](https://docs.mbed.com/docs/mbed-os-handbook/en/latest/advanced/tls_hardware_acceleration/)
-for more information.
-
-OpenThread does not enable those macros, therefore the symmetric crypto
-algorithms, hash algorithms and ECC functions all utilize software
-implementations by default. These implementations require considerable memory
-and computational resources. For optimal performance and a better user
-experience, we recommend enabling hardware acceleration instead of software to
-implement the above operations.
-
-To enable hardware acceleration within OpenThread, the following mbedTLS
-configuration header files should be added to the compile option flags in the
-platform example's Makefile:
-
-- Main configuration, which defines all necessary macros used in OpenThread:
- `/openthread/third-party/mbedtls/mbedtls-config.h`
-- User-specific configuration, which defines alternate implementations of
- modules and functions: `/openthread/examples/platforms/{platform-name}/crypto/{platform-name}-mbedtls-config.h`
-
-Example:
-
-```
-EFR32_MBEDTLS_CPPFLAGS = -DMBEDTLS_CONFIG_FILE='\"mbedtls-config.h\"'
-EFR32_MBEDTLS_CPPFLAGS += -DMBEDTLS_USER_CONFIG_FILE='\"efr32-mbedtls-config.h\"'
-```
-
-Commented macros in `mbedtls-config.h` are not mandatory, and can be enabled in
-the user-specific configuration header file for hardware acceleration.
-
-For a complete example user-specific configuration, see the
-[`mbedtls_config_autogen.h`](https://github.com/openthread/openthread/blob/main/examples/platforms/efr32/efr32mg12/crypto/mbedtls_config_autogen.h)
-file.
-
-### AES module
-
-OpenThread Security applies AES CCM (Counter with CBC-MAC) crypto to
-encrypt/decrypt the IEEE 802.15.4 or MLE messages and validates the message
-integration code. Hardware acceleration should at least support basic AES ECB
-(Electronic Codebook Book) mode for AES CCM basic functional call.
-
-To utilize an alternative AES module implementation:
-
-1. Define the `MBEDTLS_AES_ALT` macro in the user-specific mbedTLS
- configuration header file
-1. Indicate the path of the `aes_alt.h` file using the `MBEDTLS_CPPFLAGS`
- variable
-
-### SHA256 module
-
-OpenThread Security applies HMAC and SHA256 hash algorithms to calculate the
-hash value for master key management and PSKc generation according to the Thread
-Specification.
-
-To utilize an alternative basic SHA256 module implementation:
-
-1. Define the `MBEDTLS_SHA256_ALT` macro in the user-specific mbedTLS
- configuration header file
-1. Indicate the path of the `sha256_alt.h` file using the `MBEDTLS_CPPFLAGS`
- variable
-
-### ECC functions
-
-Since mbedTLS currently only supports hardware acceleration for parts of ECC
-functions, rather than the entire module, you can choose to implement some
-functions defined in
-`{path-to-mbedtls}/library/ecp.c` to accelerate ECC
-point multiplication.
-
-Curve secp256r1 is used in the key exchange algorithm of the
-[ECJPAKE](https://tools.ietf.org/html/draft-cragie-tls-ecjpake-00) draft. Hence,
-hardware acceleration should at least support the secp256r1 short weierstrass
-curve operation. See [SiLabs CRYPTO Hardware Acceleration for
-mbedTLS](https://siliconlabs.github.io/Gecko_SDK_Doc/mbedtls/html/group__sl__crypto.html)
-for an example.
diff --git a/doc/site/en/guides/porting/implement-platform-abstraction-layer-apis.md b/doc/site/en/guides/porting/implement-platform-abstraction-layer-apis.md
deleted file mode 100644
index 147d4fd99..000000000
--- a/doc/site/en/guides/porting/implement-platform-abstraction-layer-apis.md
+++ /dev/null
@@ -1,204 +0,0 @@
-# Implement Platform Abstraction Layer APIs
-
-OpenThread is OS and platform agnostic, with a narrow Platform Abstraction Layer
-(PAL). This PAL defines:
-
-
-
-
-
-- Alarm interface for free-running timer with alarm
-- Bus interfaces (UART, SPI) for communicating CLI and Spinel messages
-- Radio interface for IEEE 802.15.4-2006 communication
-- GCC-specific initialization routines
-- Entropy for true random number generation
-- Settings service for non-volatile configuration storage
-- Logging interface for delivering OpenThread log messages
-- System-specific initialization routines
-
-All APIs should be implemented based on the underlying Hardware Abstraction
-Layer (HAL) Build Support Package (BSP).
-
-> Key Point: Unless noted as optional, **Platform Abstraction Layer APIs are
-mandatory** and must be implemented according to the definitions in each API
-header file.
-
-API files should be placed in the following directories:
-
-Type | Directory
-------|------
-Platform-specific PAL implementation | `/openthread/examples/platforms/{platform-name}`
-Header files — Non-volatile storage API | `/openthread/examples/platforms/utils`
-All other header files | `/openthread/include/openthread/platform`
-HAL BSP | `/openthread/third_party/{platform-name}`
-
-## Step 1: Alarm
-
-API declaration:
-
-[`/openthread/include/openthread/platform/alarm-milli.h`](https://github.com/openthread/openthread/blob/main/include/openthread/platform/alarm-milli.h)
-
-The Alarm API provides fundamental timing and alarm services for the upper layer
-timer implementation.
-
-There are two alarm service types,
-[millisecond](https://github.com/openthread/openthread/blob/main/include/openthread/platform/alarm-milli.h)
-and [microsecond](https://github.com/openthread/openthread/blob/main/include/openthread/platform/alarm-micro.h).
-Millisecond is required for a new hardware platform. Microsecond is optional.
-
-## Step 2: UART
-
-> Note: This API is optional.
-
-API declaration:
-
-[`/openthread/examples/platforms/utils/uart.h`](https://github.com/openthread/openthread/blob/main/examples/platforms/utils/uart.h)
-
-The UART API implements fundamental serial port communication via the UART
-interface.
-
-While the OpenThread
-[CLI](https://github.com/openthread/openthread/tree/main/examples/apps/cli)
-and [NCP](https://github.com/openthread/openthread/tree/main/examples/apps/ncp)
-add-ons depend on the UART interface to interact with the host side, UART API
-support is optional. However, even if you do not plan to use these add-ons on
-your new hardware platform example, we highly recommend you add support for a
-few reasons:
-
-- The CLI is useful for validating that the port works correctly
-- The Harness Automation Tool uses the UART interface to control OpenThread for testing and certification purposes
-
-If the target hardware platform supports a USB CDC module rather than UART, make
-sure to:
-
-- Install the correct USB CDC driver on the host side
-- Replace the UART API implementation with the USB CDC driver (along with BSP)
- on the OpenThread side, using the same function prototypes
-
-## Step 3: Radio
-
-API declaration:
-
-[`/openthread/include/openthread/platform/radio.h`](https://github.com/openthread/openthread/blob/main/include/openthread/platform/radio.h)
-
-The Radio API defines all necessary functions called by the upper IEEE 802.15.4
-MAC layer. The Radio chip must be fully compliant with the 2.4GHz IEEE
-802.15.4-2006 specification.
-
-Due to its enhanced low power feature, OpenThread requires all platforms to
-implement auto frame pending (indirect transmission) by default, and the source
-address match table should also be implemented in the `radio.h` source file.
-
-However, if your new hardware platform example is resource limited, the source
-address table can be defined as zero length. See
-[Auto Frame Pending](#auto-frame-pending) for more information.
-
-> Note: The `otPlatRadioGetIeeeEui64` Radio API **MUST** return a unique
-administered factory-assigned IEEE EUI-64 that includes the manufacturer's OUI.
-The EUI-64 is used to match to steering data during the Joiner Discovery phase.
-
-## Step 4: Misc/Reset
-
-API declaration:
-
-[`/openthread/include/openthread/platform/misc.h`](https://github.com/openthread/openthread/blob/main/include/openthread/platform/misc.h)
-
-The Misc/Reset API provides a method to reset the software on the chip, and
-query the reason for last reset.
-
-## Step 5: Entropy
-
-> Note: **Implementation of this API is required in every port of OpenThread.**
-
-API declaration:
-
-[`/openthread/include/openthread/platform/entropy.h`](https://github.com/openthread/openthread/blob/main/include/openthread/platform/entropy.h)
-
-The Entropy API provides a true random number generator (TRNG) for the upper
-layer, which is used to maintain security assets for the entire OpenThread
-network. The API should guarantee that a new random number is generated for
-each function call. Security assets affected by the TRNG include:
-
-- AES CCM nonce
-- Random delayed jitter
-- Devices' extended address
-- The initial random period in the trickle timer
-- CoAP token/message IDs
-
-Note that many platforms have already integrated a random number generator,
-exposing the API in its BSP package. In the event that the target hardware
-platform does not support TRNG, consider leveraging ADC module sampling to
-generate a fixed-length random number. Sample over multiple iterations if
-necessary to meet the TRNG requirements (uint32_t).
-
-When the macro `MBEDTLS_ENTROPY_HARDWARE_ALT` is set to `1`, this API should
-also provide a method to generate the hardware entropy used in the mbedTLS
-library.
-
-## Step 6: Non-volatile storage
-
-> Note: **Only _one_ of these APIs is required to be implemented in every port
-of OpenThread.**
-
-API declarations:
-
-[`/openthread/include/openthread/platform/flash.h`](https://github.com/openthread/openthread/blob/main/include/openthread/platform/flash.h)
-
-**or**
-
-[`/openthread/include/openthread/platform/settings.h`](https://github.com/openthread/openthread/blob/main/include/openthread/platform/settings.h)
-
-The Non-volatile storage requirement can be satisfied by implementing one of the
-two APIs listed above. The Flash API implements a flash storage driver, while
-the Settings API provides functions for an underlying flash operation
-implementation to the upper layer.
-
-These APIs expose to the upper layer:
-
-- The available non-volatile storage size used to store application data (for
- example, active/pending operational dataset, current network parameters and
- thread devices' credentials for reattachment after reset)
-- Read, write, erase, and query flash status operations
-
-Use `OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE` in your platform example's
-core config file to indicate which API the platform should use. If set to `1`,
-the Flash API must be implemented. Otherwise, the Settings API must be
-implemented.
-
-This flag must be set in your
-`/openthread/examples/platforms/{platform-name}/openthread-core-{platform-name}-config.h`
-file.
-
-## Step 7: Logging
-
-> Note: This API is optional.
-
-API declaration:
-
-[`/openthread/include/openthread/platform/logging.h`](https://github.com/openthread/openthread/blob/main/include/openthread/platform/logging.h)
-
-The Logging API implements OpenThread's logging and debug functionality, with
-multiple levels of debug output available. This API is optional if you do not
-plan to utilize OpenThread's logging on your new hardware platform example.
-
-The highest and most detailed level is `OPENTHREAD_LOG_LEVEL_DEBG`, which
-prints all raw packet information and logs lines through the serial port or on
-the terminal. Choose a debug level that best meets your needs.
-
-## Step 8: System-specific
-
-API declaration:
-
-[`/openthread/examples/platforms/openthread-system.h`](https://github.com/openthread/openthread/blob/main/examples/platforms/openthread-system.h)
-
-The System-specific API primarily provides initialization and deinitialization
-operations for the selected hardware platform. This API is not called by the
-OpenThread library itself, but may be useful for your system/RTOS. You can also
-implement the initialization of other modules (for example, UART, Radio, Random,
-Misc/Reset) in this source file.
-
-Implementation of this API depends on your use case. If you wish to use the
-generated [CLI and NCP applications](https://openthread.io/guides/build#binaries) for an [example
-platform](https://github.com/openthread/openthread/tree/main/examples/platforms),
-you must implement this API. Otherwise, any API can be implemented to integrate
-the example platform drivers into your system/RTOS.
diff --git a/doc/site/en/guides/porting/index.md b/doc/site/en/guides/porting/index.md
deleted file mode 100644
index ef97988d4..000000000
--- a/doc/site/en/guides/porting/index.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# Porting OpenThread to New Hardware Platforms
-
-Porting the OpenThread stack to a new hardware platform consists of five steps:
-
-1. [Set up the build environment](https://github.com/openthread/openthread/blob/main/doc/site/en/guides/porting/set-up-the-build-environment.md)
-1. [Implement Platform Abstraction Layer APIs](https://github.com/openthread/openthread/blob/main/doc/site/en/guides/porting/implement-platform-abstraction-layer-apis.md)
-1. [Implement advanced features (Hardware Abstraction Layer)](https://github.com/openthread/openthread/blob/main/doc/site/en/guides/porting/implement-advanced-features.md)
-1. [Validate the port](https://github.com/openthread/openthread/blob/main/doc/site/en/guides/porting/validate-the-port.md)
-1. [Certification and README](https://github.com/openthread/openthread/blob/main/doc/site/en/guides/porting/certification-and-readme.md)
-
-## Hardware platform requirements
-
-OpenThread requires the following platform services:
-
-- [IEEE 802.15.4-2006](https://standards.ieee.org/findstds/standard/802.15.4-2006.html)
- 2.4 GHz radio
- - Send and receive IEEE 802.15.4 frames
- - Generate IEEE 802.15.4 Acknowledgment frames
- - Provide Received Signal Strength Indicator (RSSI) measurements on
- received frames
-- A millisecond-resolution free-running timer with alarm
-- Non-volatile storage for storing network configuration settings
-- A true random number generator (TRNG)
-
-## Example builds
-
-Several example builds are provided in the OpenThread repository. For more
-information, see [Platforms](https://openthread.io/platforms).
-
-For a complete end-to-end example of how to port OpenThread from scratch, see
-the [Add support for EFR32](https://github.com/openthread/openthread/pull/1592)
-pull request.
-
diff --git a/doc/site/en/guides/porting/set-up-the-build-environment.md b/doc/site/en/guides/porting/set-up-the-build-environment.md
deleted file mode 100644
index 6be7be33b..000000000
--- a/doc/site/en/guides/porting/set-up-the-build-environment.md
+++ /dev/null
@@ -1,216 +0,0 @@
-# Set Up the Build Environment
-
-To promote free and open development, OpenThread uses GNU Autotools in the build
-toolchain. Currently, this toolchain is required for porting OpenThread to a new
-hardware platform.
-
-Other build toolchains might be supported in the future, but they are not within
-the scope of this porting guide.
-
-> Note: For all path and code examples in this porting
-guide, always replace {platform-name} with the name of
-your new platform example. Most of the examples in the guide use a `efr32` platform
-name.
-
-## Step 1: GNU Autoconf
-
-The [Autoconf](https://www.gnu.org/software/autoconf/autoconf.html) script
-contains the basic system configuration options, including specific
-platform-relative macro definitions. These macros can be exposed for
-conditional compilation in other Makefiles during the pre-compiling phase.
-
-The OpenThread Autoconf script is located at:
-[`/openthread/configure.ac`](https://github.com/openthread/openthread/blob/main/configure.ac)
-
-### Platform example name
-
-In the `AC_ARG_WITH(examples ...)` macro, add the new hardware platform example name. The name
-should be added in alphabetical order.
-
-Example:
-
-```
-AC_ARG_WITH(examples,
- [AS_HELP_STRING([--with-examples=TARGET],
- [Specify the examples from one of: none, simulation, cc2538, efr32, nrf52840 @<:@default=none@:>@.])],
- [
- case "${with_examples}" in
- none)
- ;;
- simulation|cc2538|efr32|nrf52840)
- if test ${enable_posix_app} = "yes"; then
- AC_MSG_ERROR([--with-examples must be none when POSIX apps are enabled by --enable-posix-app])
- fi
- ;;
- *)
- AC_MSG_ERROR([Invalid value ${with_examples} for --with-examples])
- ;;
- esac
- ],
- [with_examples=none])
-```
-
-### Platform-specific C preprocessor symbol
-
-Define a platform-specific C preprocessor symbol for the platform example and
-expose it.
-
-The platform-specific C preprocessor symbol is exposed at
-`include/openthread-config.h`. By including the symbol in this header file, we
-can leverage it in our source code for preprocessor conditional compilation
-cases.
-
-Example:
-
-```
-case ${with_examples} in
-
- ...
-
- efr32)
- OPENTHREAD_EXAMPLES_EFR32=1
- AC_DEFINE_UNQUOTED([OPENTHREAD_EXAMPLES_EFR32],[${OPENTHREAD_EXAMPLES_EFR32}],[Define to 1 if you want to use efr32 examples])
- ;;
-
-...
-
-esac
-
-...
-
-AC_SUBST(OPENTHREAD_EXAMPLES_EFR32)
-AM_CONDITIONAL([OPENTHREAD_EXAMPLES_EFR32], [test "${OPENTHREAD_EXAMPLES}" = "efr32"])
-```
-
-### Makefile output directory
-
-In the `AC_CONFIG_FILES` macro, add a Makefile output directory for the
-platform example.
-
-Example:
-
-```
-AC_CONFIG_FILES ([
- examples/platforms/efr32/Makefile
-])
-```
-
-## Step 2: GNU Automake
-
-Create and modify [Automake](https://www.gnu.org/software/automake/) files to
-support the new platform example.
-
-The following platform-specific Automake files need to be created:
-
-- `/openthread/examples/Makefile-{platform-name}`
-- `/openthread/examples/platforms/{platform-name}/Makefile.am`
-- `/openthread/examples/platforms/{platform-name}/Makefile.platform.am`
-
-See [`/examples`](https://github.com/openthread/openthread/tree/main/examples/) for sample implementations of
-these files.
-
-The following Automake files also need to be updated with your platform
-information:
-
-- [`/openthread/examples/platforms/Makefile.am`](https://github.com/openthread/openthread/blob/main/examples/platforms/Makefile.am)
-- [`/openthread/examples/platforms/Makefile.platform.am`](https://github.com/openthread/openthread/blob/main/examples/platforms/Makefile.platform.am)
-
-### Linker script configuration
-
-The [GNU Linker](http://www.ece.ufrgs.br/~fetter/eng04476/manuals/ld.pdf) script
-describes how to map all sections in the input files (`.o` "object" files
-generated by the GNU Compiler Collection (GCC)) to the final output file (for
-example, `.elf`). It also determines the storage location of each segment of an
-executable program, as well as the entry address. The platform-specific linker
-script is often provided with the platform's BSP.
-
-Configure the `ld` tool to point to the platform-specific linker script using
-the `-T` option of the `LDADD_COMMON` variable.
-
-Create
-`/openthread/examples/platforms/{platform-name}/Makefile.platform.am`
-and point the new platform to its linker script:
-
-```
-if OPENTHREAD_EXAMPLES_EFR32
- LDADD_COMMON += \
- $(top_builddir)/examples/platforms/efr32/libopenthread-efr32.a \
- $(top_srcdir)/third_party/silabs/gecko_sdk_suite/v1.0/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg12_gcc_release.a \
- $(NULL)
-
-LDFLAGS_COMMON += \
- -T $(top_srcdir)/third_party/silabs/gecko_sdk_suite/v1.0/platform/Device/SiliconLabs/EFR32MG12P/Source/GCC/efr32mg12p.ld \
- $(NULL)
-endif # OPENTHREAD_EXAMPLES_EFR32
-```
-
-Add the platform's linker script configuration to the
-[`/openthread/examples/platforms/Makefile.platform.am`](https://github.com/openthread/openthread/blob/main/examples/platforms/Makefile.platform.am)
-utility Makefile:
-
-```
-if OPENTHREAD_EXAMPLES_EFR32
-include $(top_srcdir)/examples/platforms/efr32/Makefile.platform.am
-endif
-```
-
-### Subdirectory configuration
-
-Modify [`/openthread/examples/platforms/Makefile.am`](https://github.com/openthread/openthread/blob/main/examples/platforms/Makefile.platform.am)
-to configure the package subdirectories for the new platform example.
-
-Add the platform subdirectory name in the list for `make dist`, in alphabetical
-order:
-
-```
-# Always package (e.g. for 'make dist') these subdirectories.
-
-DIST_SUBDIRS = \
- cc2538 \
- efr32 \
- nrf52840 \
- simulation \
- utils \
- $(NULL)
-```
-
-Append platform subdirectory name to the `SUBDIRS` variable:
-
-```
-# Always build (e.g. for 'make all') these subdirectories.
-
-if OPENTHREAD_EXAMPLES_EFR32
- SUBDIRS += efr32
-endif
-```
-
-### Toolchain startup code
-
-Toolchain startup code is often provided along with the platform's BSP. This
-code typically:
-
-1. Implements the entry function (`Reset_Handler`) of the executable program
-1. Defines the interrupt vector table
-1. Initializes the Heap and Stack
-1. Copies the `.data` section from non-volatile memory to RAM
-1. Jumps to the application main function to execute the application logic
-
-The startup code (C or assembly source code) must be added to the
-platform-specific `Makefile.am`, otherwise some key variables used in the linker
-script cannot be quoted correctly:
-
-- `/openthread/examples/platforms/{platform-name}/Makefile.am`
-
-Example:
-
-```
-libopenthread_efr32_a_SOURCES = \
-@top_builddir@/third_party/silabs/gecko_sdk_suite/v1.0/hardware/kit/common/bsp/bsp_bcc.c \
-@top_builddir@/third_party/silabs/gecko_sdk_suite/v1.0/hardware/kit/common/bsp/bsp_stk.c \
-@top_builddir@/third_party/silabs/gecko_sdk_suite/v1.0/platform/Device/SiliconLabs/EFR32MG12P/Source/system_efr32mg12p.c \
-@top_builddir@/third_party/silabs/gecko_sdk_suite/v1.0/platform/Device/SiliconLabs/EFR32MG12P/Source/GCC/startup_efr32mg12p.c \
-```
-
-> Note: Any non-original derivative code (for example, linker script or
-toolchain startup code) must be contained in
-[`/openthread/third_party`](https://github.com/openthread/openthread/tree/main/third_party).
diff --git a/doc/site/en/guides/porting/validate-the-port.md b/doc/site/en/guides/porting/validate-the-port.md
deleted file mode 100644
index 99216b05a..000000000
--- a/doc/site/en/guides/porting/validate-the-port.md
+++ /dev/null
@@ -1,214 +0,0 @@
-# Validate the Port
-
-Basic validation is necessary to verify a successful port of OpenThread to a new
-hardware platform example.
-
-## Step 1: Compile for the target platform
-
-Demonstrate a successful build by compiling the example OpenThread application
-for the target platform.
-
-```
-$ ./bootstrap
-$ make -f examples/Makefile-efr32 COMMISSIONER=1 JOINER=1
-```
-
-## Step 2: Interact with the CLI
-
-Demonstrate successful OpenThread execution and UART capability by interacting
-with the CLI.
-
-Open a terminal to `/dev/ttyACM0` (serial port settings: 115200 8-N-1). Type
-`help` for a list of commands.
-
-> Note: The set of CLI commands will vary based on the features enabled in a
-particular build. The majority of them have been elided in the example output
-below.
-
-```
-> help
-help
-autostart
-bufferinfo
-...
-version
-whitelist
-```
-
-## Step 3: Form a Thread network
-
-Demonstrate successful protocol timers by forming a Thread network and verifying
-the node has transitioned to the Leader state.
-
-```
-> dataset init new
-Done
-> dataset
-Active Timestamp: 1
-Channel: 13
-Channel Mask: 07fff800
-Ext PAN ID: d63e8e3e495ebbc3
-Mesh Local Prefix: fd3d:b50b:f96d:722d/64
-Master Key: dfd34f0f05cad978ec4e32b0413038ff
-Network Name: OpenThread-8f28
-PAN ID: 0x8f28
-PSKc: c23a76e98f1a6483639b1ac1271e2e27
-Security Policy: 0, onrcb
-Done
-> dataset commit active
-Done
-> ifconfig up
-Done
-> thread start
-Done
-```
-
-Wait a couple of seconds...
-
-```
-> state
-leader
-Done
-```
-
-## Step 4: Attach a second node
-
-Demonstrate successful radio communication by attaching a second node to the
-newly formed Thread network, using the same Thread Master Key and PAN ID from
-the first node:
-
-```
-> dataset masterkey dfd34f0f05cad978ec4e32b0413038ff
-Done
-> dataset panid 0x8f28
-Done
-> dataset commit active
-Done
-> routerselectionjitter 1
-Done
-> ifconfig up
-Done
-> thread start
-Done
-```
-
-Wait a couple of seconds...
-
-```
-> state
-router
-Done
-```
-
-## Step 5: Ping between devices
-
-Demonstrate successful data path communication by sending/receiving ICMPv6 Echo
-request/response messages.
-
-List all IPv6 addresses of Leader:
-
-```
-> ipaddr
-fdde:ad00:beef:0:0:ff:fe00:fc00
-fdde:ad00:beef:0:0:ff:fe00:800
-fdde:ad00:beef:0:5b:3bcd:deff:7786
-fe80:0:0:0:6447:6e10:cf7:ee29
-Done
-```
-
-Send an ICMPv6 ping from Router to Leader's Mesh-Local EID IPv6 address:
-
-```
-> ping fdde:ad00:beef:0:5b:3bcd:deff:7786
-16 bytes from fdde:ad00:beef:0:5b:3bcd:deff:7786: icmp_seq=1 hlim=64 time=24ms
-```
-
-## Step 6: Reset a device and validate reattachment
-
-Demonstrate non-volatile functionality by resetting the device and validating
-its reattachment to the same network without user intervention.
-
-Start a Thread network:
-
-```
-> dataset init new
-Done
-> dataset
-Active Timestamp: 1
-Channel: 13
-Channel Mask: 07fff800
-Ext PAN ID: d63e8e3e495ebbc3
-Mesh Local Prefix: fd3d:b50b:f96d:722d/64
-Master Key: dfd34f0f05cad978ec4e32b0413038ff
-Network Name: OpenThread-8f28
-PAN ID: 0x8f28
-PSKc: c23a76e98f1a6483639b1ac1271e2e27
-Security Policy: 0, onrcb
-Done
-> dataset commit active
-Done
-> ifconfig up
-Done
-> thread start
-Done
-```
-
-Wait a couple of seconds and verify that the active dataset has been stored in
-non-volatile storage:
-
-```
-> dataset active
-Active Timestamp: 1
-Channel: 13
-Channel Mask: 07fff800
-Ext PAN ID: d63e8e3e495ebbc3
-Mesh Local Prefix: fd3d:b50b:f96d:722d/64
-Master Key: dfd34f0f05cad978ec4e32b0413038ff
-Network Name: OpenThread-8f28
-PAN ID: 0x8f28
-PSKc: c23a76e98f1a6483639b1ac1271e2e27
-Security Policy: 0, onrcb
-Done
-```
-
-Reset the device:
-
-```
-> reset
-> ifconfig up
-Done
-> thread start
-Done
-```
-
-Wait a couple of seconds and verify that the device has successfully reattached
-to the network:
-
-```
-> panid
-0x8f28
-Done
-> state
-router
-Done
-```
-
-## Step 7: Verify random number generation
-
-Demonstrate random number generation by executing the `factoryreset` command and
-verifying a new random extended address.
-
-```
-> extaddr
-a660421703f3fdc3
-Done
-> factoryreset
-```
-
-Wait a couple of seconds...
-
-```
-> extaddr
-9a8ed90715a5f7b6
-Done
-```
diff --git a/doc/site/en/guides/thread-primer/index.md b/doc/site/en/guides/thread-primer/index.md
deleted file mode 100644
index fe9e6f221..000000000
--- a/doc/site/en/guides/thread-primer/index.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# What is Thread?
-
-
-
-
-
-Thread® is an IPv6-based
-networking protocol designed for low-power Internet of Things devices in an IEEE
-802.15.4-2006 wireless mesh network, commonly called a Wireless Personal Area
-Network (WPAN). Thread is independent of other 802.15 mesh networking
-protocols, such a ZigBee, Z-Wave, and Bluetooth LE.
-
-Thread's primary features include:
-
-* Simplicity — Simple installation, start up, and operation
-* Security — All devices in a Thread network are authenticated and all
- communications are encrypted
-* Reliability — Self-healing mesh networking, with no single point of failure,
- and spread-spectrum techniques to provide immunity to interference
-* Efficiency — Low-power Thread devices can sleep and operate on battery power
- for years
-* Scalability — Thread networks can scale up to hundreds of devices
-
-If you're new to Thread, understanding the basics are critical to using
-OpenThread in your own applications. The goal of this primer is to explain the
-concepts behind Thread and how it works, and provide a springboard to OpenThread
-development.
-
-It is assumed you have good working knowledge of the following:
-
-* IEEE 802.15.4
-* Networking and routing concepts
-* IPv6
-
-This primer is based on version 1.1.1 of the Thread Specification. It does not
-cover the full specification, which is available at
-[threadgroup.org](http://threadgroup.org/ThreadSpec).
diff --git a/doc/site/en/guides/thread-primer/ipv6-addressing.md b/doc/site/en/guides/thread-primer/ipv6-addressing.md
deleted file mode 100644
index 438569568..000000000
--- a/doc/site/en/guides/thread-primer/ipv6-addressing.md
+++ /dev/null
@@ -1,276 +0,0 @@
-# IPv6 Addressing
-
-Let's take a look at how Thread identifies each device in the network, and what
-types of addresses they use to communicate with each other.
-
-Key Term: In this primer, the term "interface" is used to identify an endpoint
-of a Thread device within a network. Typically, a single Thread device has
-a single Thread interface.
-
-## Scopes
-
-
-
-
-
-There are three scopes in a Thread network for unicast addressing:
-
-* Link-Local — all interfaces reachable by a single radio transmission
-* Mesh-Local — all interfaces reachable within the same Thread network
-* Global — all interfaces reachable from outside a Thread network
-
-The first two scopes correspond to prefixes designated by a Thread network.
-Link-Local have prefixes of `fe80::/16`, while Mesh-Local have prefixes of
-`fd00::/8`.
-
-
Unicast
-
-There are multiple IPv6 unicast addresses that identify a single Thread device.
-Each has a different function based on the scope and use case.
-
-Before we detail each type, let's learn more about a common one, called the
-Routing Locator (RLOC). The RLOC identifies a Thread interface, based on its
-location in the network topology.
-
-### How a Routing Locator is generated
-
-All devices are assigned a Router ID and a Child ID. Each Router maintains a
-table of all their Children, the combination of which uniquely identifies a
-device within the topology. For example, consider the highlighted nodes in the
-following topology, where the number in a Router (pentagon) is the Router ID,
-and the number in an End Device (circle) is the Child ID:
-
-
-
-
-
-Each Child's Router ID corresponds to their Parent (Router). Because a Router is
-not a Child, the Child ID for a Router is always 0. Together, these values are
-unique for each device in the Thread network, and are used to create the RLOC16,
-which represents the last 16 bits of the RLOC.
-
-For example, here's how the RLOC16 is calculated for the upper-left node (Router
-ID = 1 and Child ID = 1):
-
-
-
-
-
-The RLOC16 is part of the Interface Identifier (IID), which corresponds to the
-last 64 bits of the IPv6 address. Some IIDs can be used to identify some types
-of Thread interfaces. For example, the IID for RLOCs is always of the form
-0000:00ff:fe00:RLOC16.
-
-The IID, combined with a Mesh-Local Prefix, results in the RLOC. For example,
-using a Mesh-Local Prefix of `fde5:8dba:82e1:1::/64`, the RLOC for a node where
-RLOC16 = `0x401` is:
-
-
-
-
-
-This same logic can be used to determine the RLOC for all highlighted nodes in the sample topology above:
-
-
-
-
-
-However, because the RLOC is based on the location of the node in the topology,
-the RLOC of a node can change as the topology changes.
-
-For example, perhaps node `0x400` is removed from the Thread network. Nodes
-`0x401` and `0x402` establish new links to different Routers, and as a result
-they are each assigned a new RLOC16 and RLOC:
-
-
-
-
-
-## Unicast address types
-The RLOC is just one of many IPv6 unicast addresses a Thread device can have.
-Another category of addresses are called Endpoint Identifiers (EIDs), which
-identify a unique Thread interface within a Thread network partition. EIDs are
-independent of Thread network topology.
-
-Common unicast types are detailed below.
-
-
-
-
-
Link-Local Address (LLA)
-
-
-
An EID that identifies a Thread interface reachable by a single radio transmission.
-
-
-
Example
fe80::54db:881c:3845:57f4
-
-
-
IID
Based on 802.15.4 Extended Address
-
-
-
Scope
Link-Local
-
-
-
Details
Used to discover neighbors, configure links, and exchange routing information
Not a routable address
Always has a prefix of fe80::/16
-
-
-
-
-
-
-
-
Mesh-Local EID (ML-EID)
-
-
-
An EID that identifies a Thread interface, independent of network topology. Used to reach a Thread interface within the same Thread partition. Also called a Unique Local Address (ULA).
-
-
-
Example
fde5:8dba:82e1:1:416:993c:8399:35ab
-
-
-
IID
Random, chosen after commissioning is complete
-
-
-
Scope
Mesh-Local
-
-
-
Details
Does not change as the topology changes
Should be used by applications
Always has a prefix fd00::/8
-
-
-
-
-
-
-
-
Routing Locator (RLOC)
-
-
-
Identifies a Thread interface, based on its location in the network topology.
-
-
-
Example
fde5:8dba:82e1:1::ff:fe00:1001
-
-
-
IID
0000:00ff:fe00:RLOC16
-
-
-
Scope
Mesh-Local
-
-
-
Details
Generated once a device attaches to a network
For delivering IPv6 datagrams within a Thread network
Changes as the topology changes
Generally not used by applications
-
-
-
-
-
-
-
-
Anycast Locator (ALOC)
-
-
-
Identifies a Thread interface via RLOC lookup, when the RLOC of a destination is not known.
An EID that identifies a Thread interface on a global scope, beyond a Thread network.
-
-
-
Example
2000::54db:881c:3845:57f4
-
-
-
IID
SLAAC — Randomly assigned by the device itself
DHCP — Assigned by a DHCPv6 server
Manual — Assigned by the application layer
-
-
-
Scope
Global
-
-
-
Details
A public IPv6 address
Always has a prefix of 2000::/3
-
-
-
-
-## Multicast
-
-Multicast is used to communicate information to multiple devices at once. In a
-Thread network, specific addresses are reserved for multicast use with different
-groups of devices, depending on the scope.
-
-| IPv6 Address | Scope | Delivered to |
-| ------------ | ---------- | ----------------- |
-| `ff02::1` | Link-Local | All FTDs and MEDs |
-| `ff02::2` | Link-Local | All FTDs |
-| `ff03::1` | Mesh-Local | All FTDs and MEDs |
-| `ff03::2` | Mesh-Local | All FTDs |
-
-Key Point: A major difference between FTDs and MTDs are that FTDs subscribe to
-the `ff03::2` multicast address. MTDs do not.
-
-You might notice that Sleepy End Devices (SEDs) are not included as a
-recipient in the multicast table above. Instead, Thread defines
-link-local and realm-local scope unicast prefix-based IPv6 multicast
-address used for All Thread Nodes, including SEDs. These multicast
-addresses vary by Thread network, because it is built on the unicast
-Mesh-Local prefix (see [RFC 3306](https://tools.ietf.org/html/rfc3306)
-for more details on unicast-prefix-based IPv6 multicast addresses).
-
-Arbitrary scopes beyond those already listed are also supported for Thread
-devices.
-
-
-## Anycast
-
-Anycast is used to route traffic to a Thread interface when the RLOC of a
-destination is not known. An Anycast Locator (ALOC) identifies the location of
-multiple interfaces within a Thread partition. The last 16 bits of an ALOC,
-called the ALOC16, is in the format of 0xfcXX, which
-represents the type of ALOC.
-
-For example, an ALOC16 between `0xfc01` and `0xfc0f` is reserved for DHCPv6
-Agents. If the specific DHCPv6 Agent RLOC is unknown (perhaps because the
-network topology has changed), a message can be sent to a DHCPv6 Agent ALOC to
-obtain the RLOC.
-
-Thread defines the following ALOC16 values:
-
-| ALOC16 | Type |
-| ------------------------------------------ | ------------------------ |
-| `0xfc00` | Leader |
-| `0xfc01` – `0xfc0f` | DHCPv6 Agent |
-| `0xfc10` – `0xfc2f` | Service |
-| `0xfc30` – `0xfc37` | Commissioner |
-| `0xfc40` – `0xfc4e` | Neighbor Discovery Agent |
-| `0xfc38` – `0xfc3f` `0xfc4f` – `0xfcff` | Reserved |
-
-## Recap
-
-What you've learned:
-
-* A Thread network consists of three scopes: Link-Local, Mesh-Local, and Global
-* A Thread device has multiple unicast IPv6 addresses
- * An RLOC represents a device's location in the Thread network
- * An ML-EID is unique to a Thread device within a partition and should be used by applications
-* Thread uses multicast to forward data to groups of nodes and routers
-* Thread uses anycast when the RLOC of a destination is unknown
-
-To learn more about Thread's IPv6 addressing, see sections 5.2 and 5.3 of the
-[Thread Specification](http://threadgroup.org/ThreadSpec).
diff --git a/doc/site/en/guides/thread-primer/network-discovery.md b/doc/site/en/guides/thread-primer/network-discovery.md
deleted file mode 100644
index c4ff1e872..000000000
--- a/doc/site/en/guides/thread-primer/network-discovery.md
+++ /dev/null
@@ -1,292 +0,0 @@
-# Network Discovery and Formation
-
-## Thread networks
-
-Thread networks are identified by three unique identifiers:
-
-* 2-byte Personal Area Network ID (PAN ID)
-* 8-byte Extended Personal Area Network ID (XPAN ID)
-* A human-readable Network Name
-
-For example, a Thread network may have the following identifiers:
-
-Identifier | Value
----- | ----
-PAN ID | `0xBEEF`
-XPAN ID | `0xBEEF1111CAFE2222`
-Network Name | `yourThreadCafe`
-
-
-
-
-
-When creating a new Thread network, or searching for an existing one to join, a
-Thread device performs an active scan for 802.15.4 networks within radio range:
-
-1. The device broadcasts an 802.15.4 Beacon Request on a specific Channel.
-1. In return, any Routers or Router Eligible End Devices (REEDs) in range
- broadcast a Beacon that contains their Thread network PAN ID, XPAN ID, and
- Network Name.
-1. The device repeats the previous two steps for each Channel.
-
-Once a Thread device has discovered all networks in range, it can either attach
-to an existing network, or create a new one if no networks are discovered.
-
-
Mesh Link Establishment
-
-Thread uses the Mesh Link Establishment (MLE) protocol to configure links and
-disseminate information about the network to Thread devices.
-
-In link configuration, MLE is used to:
-
-* Discover links to neighboring devices
-* Determine the quality of links to neighboring devices
-* Establish links to neighboring devices
-* Negotiate link parameters (device type, frame counters, timeout) with peers
-
-MLE disseminates the following types of information to devices wishing to
-establish links:
-
-* Leader data (Leader RLOC, Partition ID, Partition weight)
-* Network data (on-mesh prefixes, address autoconfiguration, more-specific
- routes)
-* Route propagation
-
-Route propagation in Thread works similar to the Routing Information Protocol
-(RIP), a distance-vector routing protocol.
-
-Note: MLE only proceeds once a Thread device has obtained Thread network
-credentials through Thread Commissioning. Commissioning and Security will be
-covered in depth later in this Primer. For now, this page assumes that the
-device has already been commissioned.
-
-## Create a new network
-
-If the device elects to create a new network, it selects the least busy Channel
-and a PAN ID not in use by other networks, then becomes a Router and elects
-itself the Leader. This device sends MLE Advertisement messages to other
-802.15.4 devices to inform them of its link state, and responds to Beacon
-Requests by other Thread devices performing an active scan.
-
-## Join an existing network
-
-If the device elects to join an existing network, it configures its Channel, PAN
-ID, XPAN ID, and Network Name to match that of the target network via Thread
-Commissioning, then goes through the MLE Attach process to attach as a Child
-(End Device). This process is used for Child-Parent links.
-
-Key Point: Every device, router-capable or not, initially attaches to a Thread
-network as a Child (End Device).
-
-1. The Child sends a multicast [Parent Request](#1_parent_request) to all
- neighboring Routers and REEDs in the target network.
-1. All neighboring Routers and REEDs (if the Parent Request Scan Mask includes
- REEDs) send [Parent Responses](#2_parent_response) with information about
- themselves.
-1. The Child chooses a Parent device and sends a [Child ID
- Request](#3_child_id_request) to it.
-1. The Parent sends a [Child ID Response](#4_child_id_response) to confirm link
- establishment.
-
-### 1. Parent Request
-
-A Parent Request is a multicast request from the attaching device that is used
-to discover neighboring Routers and Router Eligible End Devices (REEDs) in the
-target network.
-
-
-
-
-
-
-
-
-
Parent Request Message Contents
-
-
-
Mode
-
Describes the attaching device
-
-
-
Challenge
-
Tests the timeliness of the Parent Response to prevent replay
- attacks
-
-
-
Scan Mask
-
Limits the request to only Routers or to both Routers and REEDs
-
-
-
-
-### 2. Parent Response
-
-A Parent Response is a unicast response to a Parent Request that provides
-information about a Router or REED to the attaching device.
-
-
-
-
-
-
-
-
-
Parent Response Message Contents
-
-
-
Version
-
Thread protocol version
-
-
-
Response
-
Copy of the Parent Request Challenge
-
-
-
Link Frame
- Counter
-
802.15.4 Frame Counter on the Router/REED
-
-
-
MLE Frame
- Counter
-
MLE Frame Counter on the Router/REED
-
-
-
Source
- Address
-
RLOC16 of the Router/REED
-
-
-
Link
- Margin
-
Receive signal quality of the Router/REED
-
-
-
Connectivity
-
Describes the Router/REED’s level of connectivity
-
-
-
Leader
- Data
-
Information about the Router/REED’s Leader
-
-
-
Challenge
-
Tests the timeliness of the Child ID Request to prevent replay
- attacks
-
-
-
-
-### 3. Child ID Request
-
-A Child ID Request is a unicast request from the attaching device (Child) that
-is sent to the Router or REED (Parent) for the purpose of establishing a
-Child-Parent link. If the request is sent to a REED, it [upgrades itself to a
-Router](/guides/thread-primer/router-selection#upgrade_to_a_router) before
-accepting the request.
-
-
-
-
-
-
-
-
-
Child ID Request Message Contents
-
-
-
Version
-
Thread protocol version
-
-
-
Response
-
Copy of the Parent Response Challenge
-
-
-
Link Frame
- Counter
-
802.15.4 Frame Counter on the Child
-
-
-
MLE Frame
- Counter
MLE Frame Counter on the Child
-
-
-
Mode
-
Describes the Child
-
-
-
Timeout
-
Inactivity duration before the Parent removes the Child
-
-
-
Address
- Registration (MEDs and SEDs only)
-
Register IPv6 addresses
-
-
-
-
-### 4. Child ID Response
-
-A Child ID Response is a unicast response from the Parent that is sent to the
-Child to confirm that a Child-Parent link has been established.
-
-
-
-
-
-
-
-
-
Child ID Response Message Contents
-
-
-
Source
- Address
-
Parent's RLOC16
-
-
-
Address16
-
Child's RLOC16
-
-
-
Leader
- Data
-
Information about the Parent’s Leader (RLOC, Partition ID, Partition
- weight)
-
-
-
Network
- Data
-
Information about the Thread network (on-mesh prefixes, address
- autoconfiguration, more-specific routes)
-
-
-
Route
- (REED only)
-
Route propagation
-
-
-
Timeout
-
Inactivity duration before the Parent removes the Child
-
-
-
Address
- Registration (MEDs and SEDs only)
-
Confirm registered addresses
-
-
-
-
-## Recap
-
-What you've learned:
-
-* A Thread device performs an active scan for existing networks
-* Thread uses Mesh Link Establishment to configure links and disseminate
- information about network devices
-* MLE Advertisement messages inform other Thread devices about a device's
- network and link state
-* The MLE Attach process establishes Child-Parent links
diff --git a/doc/site/en/guides/thread-primer/node-roles-and-types.md b/doc/site/en/guides/thread-primer/node-roles-and-types.md
deleted file mode 100644
index 2db6213c7..000000000
--- a/doc/site/en/guides/thread-primer/node-roles-and-types.md
+++ /dev/null
@@ -1,152 +0,0 @@
-# Node Roles and Types
-
-## Forwarding roles
-
-
-
-
-
-In a Thread network, nodes are split into two forwarding roles:
-
-### Router
-
-A Router is a node that:
-
-* forwards packets for network devices
-* provides secure commissioning services for devices trying to join the network
-* keeps its transceiver enabled at all times
-
-### End Device
-
-An End Device (ED) is a node that:
-
-* communicates primarily with a single Router
-* does not forward packets for other network devices
-* can disable its transceiver to reduce power
-
-Key Point: The relationship between Router and End Device is a Parent-Child
-relationship. An End Device attaches to exactly one Router. The Router is always
-the Parent, the End Device the Child.
-
-## Device types
-
-Furthermore, nodes comprise a number of types.
-
-
-
-
-
-### Full Thread Device
-
-A Full Thread Device (FTD) always has its radio on, subscribes to the
-all-routers multicast address, and maintains IPv6 address mappings. There are
-three types of FTDs:
-
-* Router
-* Router Eligible End Device (REED) — can be promoted to a Router
-* Full End Device (FED) — cannot be promoted to a Router
-
-An FTD can operate as a Router (Parent) or an End Device (Child).
-
-### Minimal Thread Device
-
-A Minimal Thread Device does not subscribe to the all-routers
-multicast address and forwards all messages to its Parent. There are
-two types of MTDs:
-
-* Minimal End Device (MED) — transceiver always on, does not need to poll for
- messages from its parent
-* Sleepy End Device (SED) — normally disabled, wakes on occasion to poll for
- messages from its parent
-
-An MTD can only operate as an End Device (Child).
-
-### Upgrading and downgrading
-
-When a REED is the only node in reach of a new End Device wishing to join the
-Thread network, it can upgrade itself and operate as a Router:
-
-
-
-
-
-Conversely, when a Router has no children, it can downgrade itself and operate
-as an End Device:
-
-
-
-
-
-## Other roles and types
-
-### Thread Leader
-
-
-
-
-
-The Thread Leader is a Router that is responsible for managing the set of
-Routers in a Thread network. It is dynamically self-elected for fault tolerance,
-and aggregates and distributes network-wide configuration information.
-
-Note: There is always a single Leader in each Thread network
-[partition](#partitions).
-
-### Border Router
-
-A Border Router is a device that can forward information between a Thread
-network and a non-Thread network (for example, Wi-Fi). It also configures a
-Thread network for external connectivity.
-
-Any device may serve as a Border Router.
-
-Note: There can be multiple Border Routers in a Thread network.
-
-## Partitions
-
-
-
-
-
-A Thread network might be composed of partitions. This occurs when a group of
-Thread devices can no longer communicate with another group of Thread devices.
-Each partition logically operates as a distinct Thread network with its own
-Leader, Router ID assignments, and network data, while retaining the same
-security credentials for all devices across all partitions.
-
-Partitions in a Thread network do not have wireless connectivity between each
-other, and if partitions regain connectivity, they automatically merge into a
-single partition.
-
-Key Point: Security credentials define the Thread network. Physical radio
-connectivity defines partitions within that Thread network.
-
-Note that the use of "Thread network" in this primer assumes a single partition.
-Where necessary, key concepts and examples are clarified with the term "partition."
-Partitions are covered in-depth later in this primer.
-
-## Device limits
-
-There are limits to the number of device types a single Thread network supports.
-
-Role | Limit
-----|----
-Leader | 1
-Router | 32
-End Device | 511 per Router
-
-Thread tries to keep the number of Routers between 16 and 23. If a REED attaches
-as an End Device and the number of Routers in the network is below 16, it
-automatically promotes itself to a Router.
-
-## Recap
-
-What you learned:
-
-* A Thread device is either a Router (Parent) or an End Device (Child)
-* A Thread device is either a Full Thread Device (maintains IPv6 address
- mappings) or a Minimal Thread Device (forwards all messages to its Parent)
-* A Router Eligible End Device can promote itself to a Router, and vice versa
-* Every Thread network partition has a Leader to manage Routers
-* A Border Router is used to connect Thread and non-Thread networks
-* A Thread network might be composed of multiple partitions
diff --git a/doc/site/en/guides/thread-primer/router-selection.md b/doc/site/en/guides/thread-primer/router-selection.md
deleted file mode 100644
index be96bb6c5..000000000
--- a/doc/site/en/guides/thread-primer/router-selection.md
+++ /dev/null
@@ -1,176 +0,0 @@
-# Router Selection
-
-## Connected Dominating Set
-
-
-Example of a Connected Dominating Set
-
-
-Routers must form a Connected Dominating Set (CDS), which means:
-
-1. There is a Router-only path between any two Routers.
-1. Any one Router in a Thread network can reach any other Router by staying
- entirely within the set of Routers.
-1. Every End Device in a Thread network is directly connected to a Router.
-
-A distributed algorithm maintains the CDS, which ensures a minimum level of
-redundancy. Every device initially attaches to the network as an End Device
-(Child). As the state of the Thread network changes, the algorithm adds or
-removes Routers to maintain the CDS.
-
-Thread adds Routers to:
-
-* Increase coverage if the network is below the Router threshold of 16
-* Increase path diversity
-* Maintain a minimum level of redundancy
-* Extend connectivity and support more Children
-
-Thread removes Routers to:
-
-* Reduce the Routing state below the maximum of 32 Routers
-* Allow new Routers in other parts of the network when needed
-
-## Upgrade to a Router
-
-After attaching to a Thread network, the Child device may elect to become a
-Router. Before initiating the MLE Link Request process, the Child sends an
-Address Solicit message to the Leader, asking for a Router ID. If the Leader
-accepts, it responds with a Router ID and the Child upgrades itself to a Router.
-
-The MLE Link Request process is then used to establish bi-directional
-Router-Router links with neighboring Routers.
-
-1. The new Router sends a multicast [Link Request](#1_link_request) to
- neighboring Routers.
-1. Routers respond with [Link Accept and Request](#2_link_accept_and_request)
- messages.
-1. The new Router responds to each Router with a unicast [Link
- Accept](#3_link_accept) to establish the Router-Router link.
-
-### 1. Link Request
-
-A Link Request is a request from the Router to all other Routers in the Thread
-network. When first becoming a Router, the device sends a multicast Link Request
-to `ff02::2`. Later, after discovering the other Routers via MLE Advertisements,
-the devices send unicast Link Requests.
-
-
-
-
-
-
-
-
-
Link Request Message Contents
-
-
-
Version
-
Thread protocol version
-
-
-
Challenge
-
Tests the timeliness of the Link Response to prevent replay
- attacks
-
-
-
Source
- Address
-
RLOC16 of the sender
-
-
-
Leader
- Data
-
Information about the Router's Leader, as stored on the sender (RLOC,
- Partition ID, Partition weight)
-
-
-
-
-### 2. Link Accept and Request
-
-A Link Accept and Request is a combination of the Link Accept and Link Request
-messages. Thread uses this optimization in the MLE Link Request process to
-reduce the number of messages from four to three.
-
-
-
-
-
-### 3. Link Accept
-
-A Link Accept is a unicast response to a Link Request from a neighboring Router
-that provides information about itself and accepts the link to the neighboring
-Router.
-
-
-
-
-
-
-
-
-
Link Accept Message Contents
-
-
-
Version
-
Thread protocol version
-
-
-
Response
-
Tests the timeliness of the Link Response to prevent replay
- attacks
-
-
-
Link Frame
- Counter
-
802.15.4 Frame Counter on the sender
-
-
-
MLE Frame
- Counter
-
MLE Frame Counter on the sender
-
-
-
Source
- Address
-
RLOC16 of the sender
-
-
-
Leader
- Data
-
Information about the Router's Leader, as stored on the sender (RLOC,
- Partition ID, Partition weight)
-
-
-
-
-## Downgrade to a REED
-
-When a Router downgrades to a REED, its Router-Router links are disconnected,
-and the device initiates the MLE Attach process to establish a Child-Parent
-link.
-
-See [Join an existing
-network](/guides/thread-primer/network-discovery#join_an_existing_network)
-for more information on the MLE Attach process.
-
-## One-way receive links
-
-In some scenarios, it may be necessary to establish a one-way receive link.
-
-After a Router reset, neighboring Routers may still have a valid receive link
-with the reset Router. In this case, the reset Router sends a Link Request
-message to re-establish the Router-Router link.
-
-An End Device may also wish to establish a receive link with neighboring
-non-Parent Routers to improve multicast reliability. We'll learn more about this
-when we get to Multicast Routing.
-
-## Recap
-
-What you've learned:
-
-* Routers in a Thread network must form a Connected Dominating Set (CDS)
-* Thread devices are upgraded to Routers or downgraded to End Devices to
- maintain the CDS
-* The MLE Link Request process is used to establish Router-Router links
diff --git a/doc/site/zh-cn/guides/thread-primer/index.md b/doc/site/zh-cn/guides/thread-primer/index.md
deleted file mode 100644
index 6b861f915..000000000
--- a/doc/site/zh-cn/guides/thread-primer/index.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# 什么是 Thread?
-
-
-
-
-
-Thread® 是一个为低功耗物联网(IEEE 802.15.4-2006 WPAN)设备设计的基于 IPv6 的网络协议。Thread 是一个新的网状网络协议,它并不依赖其它的 802.15 网状网络协议(如 ZigBee、Z-Wave 和 Bluetooth LE)。
-
-Thread 的主要特性包括:
-
-* 易于部署和维护 — 安装、启动和操作相对简单
-* 通信安全 — Thread 网络中的设备都必须通过身份验证,并且所有的通信都经过了加密
-* 稳定可靠 — 具有自愈能力的网状网络,无单点故障,并且采用扩频技术以提高抗干扰能力
-* 低功耗 — Thread 低功耗设备可以进入休眠并使用电池供电,通常使用一块电池便能工作数年
-* 规模可扩展 — Thread 网络的规模可以扩展达数百个设备
-
-如果你不熟悉 Thread,那么了解基本的 Thread 知识对于你在应用中使用 OpenThread 是至关重要的。本入门教程的目的是解释 Thread 的基本概念和工作原理,并为你提供了 OpenThread 开发的起点。
-
-本教程假定读者已具备如下的基本知识:
-
-* IEEE 802.15.4
-* 网络及路由概念
-* IPv6
-
-本入门教程基于 Thread Specification V1.1.1。Thread Specification 可以在 [threadgroup.org](http://threadgroup.org/ThreadSpec) 中获取。
diff --git a/doc/site/zh-cn/guides/thread-primer/ipv6-addressing.md b/doc/site/zh-cn/guides/thread-primer/ipv6-addressing.md
deleted file mode 100644
index 56321b4b3..000000000
--- a/doc/site/zh-cn/guides/thread-primer/ipv6-addressing.md
+++ /dev/null
@@ -1,231 +0,0 @@
-# IPv6 寻址
-
-让我们来看一下 Thread 如何识别网络中的每个设备,以及设备间用何种类型的地址进行相互通信。
-
-Key Term: 在本入门教程中,术语“接口(interface)”用于标识网络内 Thread 设备的端点。通常,单个 Thread 设备具有单个 Thread 接口。
-
-## 域
-
-
-
-
-
-Thread 网络中有三种域用于单播寻址:
-
-* Link-Local — 所有通过单次射频传输可访问的接口
-* Mesh-Local — 所有在同一 Thread 网络中可访问的接口
-* Global — 所有从 Thread 网络外部可以访问的接口
-
-前两个域与 Thread 网络指定的 Prefix(前缀)相对应。Link-Local 的 Prefix 为 `fe80::/16`,Mesh-Local 的 Prefix 为 `fd00::/8`。
-
-