Files
openthread/script/make-pretty
T
Song GUO 9cb667c01f [routing-manager] initial PD support with platform generated RA (#9050)
This commit adds the following new API:
- otBorderRoutingProcessIcmp6Ra

And related APIs:
- otBorderRoutingDhcp6PdSetEnabled
- otBorderRoutingGetPdOmrPrefix

They are used to support the DHCPv6 PD on Thread Border Routers. On a
typical OS, the DHCPv6 Client of the platform network stack will
request a IPv6 subnet via DHCPv6-PD, then invoke the daemon for
sending router advertisements on the given interface.

With this commit, the RA will be catched by the processTransmit in
netif.cpp, which will then pass the message to
otBorderRoutingAddPrefixByRouterAdvertisement, RoutingManager will
then add the prefix according to the PIO in the router advertisement,
and take care of the lifetime of the prefix added.
2023-06-07 22:52:39 -07:00

343 lines
10 KiB
Bash
Executable File

#!/bin/bash
#
# Copyright (c) 2019, The OpenThread Authors.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. Neither the name of the copyright holder nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#
# The script to check or format source code of OpenThread.
#
# Format c/c++, markdown, python, and shell:
#
# script/make-pretty
#
# Format c/c++ only:
#
# script/make-pretty clang
# script/make-pretty clang-format
# script/make-pretty clang-tidy
#
# Format markdown only:
#
# script/make-pretty markdown
#
# Format python only:
#
# script/make-pretty python
#
# Format shell only:
#
# script/make-pretty shell
#
# Check only:
#
# script/make-pretty check clang
# script/make-pretty check clang-format
# script/make-pretty check clang-tidy
# script/make-pretty check markdown
# script/make-pretty check python
# script/make-pretty check shell
#
set -euo pipefail
OT_BUILD_JOBS=$(getconf _NPROCESSORS_ONLN)
readonly OT_BUILD_JOBS
OT_EXCLUDE_DIRS=(third_party doc/site)
readonly OT_EXCLUDE_DIRS
OT_CLANG_SOURCES=('*.c' '*.cc' '*.cpp' '*.h' '*.hpp')
readonly OT_CLANG_SOURCES
OT_MARKDOWN_SOURCES=('*.md')
readonly OT_MARKDOWN_SOURCES
OT_PYTHON_SOURCES=('*.py')
readonly OT_PYTHON_SOURCES
OT_CLANG_TIDY_FIX_DIRS=('examples' 'include' 'src' 'tests')
readonly OT_CLANG_TIDY_FIX_DIRS
OT_CLANG_TIDY_BUILD_OPTS=(
'-DCMAKE_EXPORT_COMPILE_COMMANDS=ON'
'-DOT_ANYCAST_LOCATOR=ON'
'-DOT_APP_RCP=OFF'
'-DOT_MTD=OFF'
'-DOT_RCP=OFF'
'-DOT_PLATFORM=simulation'
'-DOT_BACKBONE_ROUTER=ON'
'-DOT_BORDER_AGENT=ON'
'-DOT_BORDER_ROUTER=ON'
'-DOT_BORDER_ROUTING=ON'
'-DOT_BORDER_ROUTING_DHCP6_PD=ON'
'-DOT_CHANNEL_MANAGER=ON'
'-DOT_CHANNEL_MONITOR=ON'
'-DOT_COAP=ON'
'-DOT_COAP_BLOCK=ON'
'-DOT_COAP_OBSERVE=ON'
'-DOT_COAPS=ON'
'-DOT_COMMISSIONER=ON'
'-DOT_CSL_RECEIVER=ON'
'-DOT_DATASET_UPDATER=ON'
'-DOT_DHCP6_CLIENT=ON'
'-DOT_DHCP6_SERVER=ON'
'-DOT_DIAGNOSTIC=ON'
'-DOT_DNS_CLIENT=ON'
'-DOT_DNS_DSO=ON'
'-DOT_DNS_UPSTREAM_QUERY=ON'
'-DOT_DNSSD_SERVER=ON'
'-DOT_DUA=ON'
'-DOT_MLR=ON'
'-DOT_ECDSA=ON'
'-DOT_HISTORY_TRACKER=ON'
'-DOT_IP6_FRAGM=ON'
'-DOT_JAM_DETECTION=ON'
'-DOT_JOINER=ON'
'-DOT_LINK_RAW=ON'
'-DOT_LINK_METRICS_INITIATOR=ON'
'-DOT_LINK_METRICS_SUBJECT=ON'
'-DOT_MAC_FILTER=ON'
'-DOT_MESH_DIAG=ON'
'-DOT_NAT64_BORDER_ROUTING=ON'
'-DOT_NAT64_TRANSLATOR=ON'
'-DOT_NETDATA_PUBLISHER=ON'
'-DOT_NETDIAG_CLIENT=ON'
'-DOT_PING_SENDER=ON'
'-DOT_REFERENCE_DEVICE=ON'
'-DOT_SERVICE=ON'
'-DOT_SLAAC=ON'
'-DOT_SNTP_CLIENT=ON'
'-DOT_SRP_CLIENT=ON'
'-DOT_SRP_SERVER=ON'
'-DOT_THREAD_VERSION=1.3'
'-DOT_TREL=ON'
'-DOT_COVERAGE=ON'
'-DOT_LOG_LEVEL_DYNAMIC=ON'
'-DOT_COMPILE_WARNING_AS_ERROR=ON'
'-DOT_UPTIME=ON'
)
readonly OT_CLANG_TIDY_BUILD_OPTS
OT_CLANG_TIDY_CHECKS="\
-*,\
google-explicit-constructor,\
google-readability-casting,\
misc-unused-using-decls,\
modernize-loop-convert,\
modernize-use-bool-literals,\
modernize-use-equals-default,\
modernize-use-equals-delete,\
modernize-use-nullptr,\
readability-avoid-const-params-in-decls,\
readability-else-after-return,\
readability-inconsistent-declaration-parameter-name,\
readability-make-member-function-const,\
readability-redundant-control-flow,\
readability-redundant-member-init,\
readability-simplify-boolean-expr,\
readability-static-accessed-through-instance,\
"
readonly OT_CLANG_TIDY_CHECKS
do_clang_format()
{
echo -e '========================================'
echo -e ' format c/c++ (clang-format)'
echo -e '========================================'
git ls-files "${OT_CLANG_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
| xargs -n3 -P"$OT_BUILD_JOBS" script/clang-format -style=file -i -verbose
}
do_clang_format_check()
{
echo -e '========================================'
echo -e ' check c/c++ (clang-format)'
echo -e '========================================'
git ls-files "${OT_CLANG_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
| xargs -n3 -P"$OT_BUILD_JOBS" script/clang-format-check
}
do_clang_tidy_fix()
{
echo -e '========================================'
echo -e ' format c/c++ (clang-tidy)'
echo -e '========================================'
(mkdir -p ./build/cmake-tidy \
&& cd ./build/cmake-tidy \
&& THREAD_VERSION=1.3 cmake "${OT_CLANG_TIDY_BUILD_OPTS[@]}" ../.. \
&& ../../script/clang-tidy -header-filter='.*' -checks="${OT_CLANG_TIDY_CHECKS}" -j"$OT_BUILD_JOBS" "${OT_CLANG_TIDY_FIX_DIRS[@]}" -fix)
}
do_clang_tidy_check()
{
echo -e '========================================'
echo -e ' check c/c++ (clang-tidy)'
echo -e '========================================'
(
mkdir -p ./build/cmake-tidy \
&& cd ./build/cmake-tidy \
&& THREAD_VERSION=1.3 cmake "${OT_CLANG_TIDY_BUILD_OPTS[@]}" ../.. \
&& ../../script/clang-tidy -header-filter='.*' -checks="${OT_CLANG_TIDY_CHECKS}" -j"$OT_BUILD_JOBS" "${OT_CLANG_TIDY_FIX_DIRS[@]}" \
| grep -v -E "third_party" >output.txt
if grep -q "warning: \|error: " output.txt; then
echo "You must pass the clang tidy checks before submitting a pull request"
echo ""
grep --color -E 'warning: |error: ' -A 5 output.txt
exit 1
fi
)
}
do_markdown_format()
{
echo -e '========================================'
echo -e ' format markdown'
echo -e '========================================'
git ls-files "${OT_MARKDOWN_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
| xargs -n10 -P"$OT_BUILD_JOBS" npx prettier@2.0.4 --write
}
do_markdown_check()
{
echo -e '========================================'
echo -e ' check markdown'
echo -e '========================================'
git ls-files "${OT_MARKDOWN_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
| xargs -n10 -P"$OT_BUILD_JOBS" npx prettier@2.0.4 --check
}
do_python_format()
{
echo -e '========================================'
echo -e ' format python'
echo -e '========================================'
git ls-files "${OT_PYTHON_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
| xargs -n10 -P"$OT_BUILD_JOBS" python3 -m yapf --verbose --style '{based_on_style: google, column_limit: 119}' -ipr
}
do_python_check()
{
echo -e '========================================'
echo -e ' check python'
echo -e '========================================'
git ls-files "${OT_PYTHON_SOURCES[@]}" | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
| xargs -n10 -P"$OT_BUILD_JOBS" python3 -m yapf --verbose --style '{based_on_style: google, column_limit: 119}' -dpr
}
do_shell_format()
{
echo -e '========================================'
echo -e ' format shell'
echo -e '========================================'
git ls-files | xargs shfmt -f | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
| xargs -n10 -P"$OT_BUILD_JOBS" shfmt -i 4 -bn -ci -fn -s -w
}
do_shell_check()
{
echo -e '========================================'
echo -e ' check shell'
echo -e '========================================'
git ls-files | xargs shfmt -f | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
| xargs -n10 -P"$OT_BUILD_JOBS" shfmt -i 4 -bn -ci -fn -s -d
git ls-files | xargs shfmt -f | grep -v -E "^($(echo "${OT_EXCLUDE_DIRS[@]}" | tr ' ' '|'))" \
| xargs -n10 -P"$OT_BUILD_JOBS" shellcheck
}
do_check()
{
if [ $# == 0 ]; then
do_clang_format_check
do_clang_tidy_check
do_markdown_check
do_python_check
do_shell_check
elif [ "$1" == 'clang' ]; then
do_clang_format_check
do_clang_tidy_check
elif [ "$1" == 'clang-format' ]; then
do_clang_format_check
elif [ "$1" == 'clang-tidy' ]; then
do_clang_tidy_check
elif [ "$1" == 'markdown' ]; then
do_markdown_check
elif [ "$1" == 'python' ]; then
do_python_check
elif [ "$1" == 'shell' ]; then
do_shell_check
else
echo >&2 "Unsupported check: $1. Supported: clang, markdown, python, shell"
# 128 for Invalid arguments
exit 128
fi
}
main()
{
if [ $# == 0 ]; then
do_clang_tidy_fix
do_clang_format
do_markdown_format
do_python_format
do_shell_format
elif [ "$1" == 'clang' ]; then
do_clang_tidy_fix
do_clang_format
elif [ "$1" == 'clang-format' ]; then
do_clang_format
elif [ "$1" == 'clang-tidy' ]; then
do_clang_tidy_fix
elif [ "$1" == 'markdown' ]; then
do_markdown_format
elif [ "$1" == 'python' ]; then
do_python_format
elif [ "$1" == 'shell' ]; then
do_shell_format
elif [ "$1" == 'check' ]; then
shift
do_check "$@"
else
echo >&2 "Unsupported action: $1. Supported: clang, markdown, python, shell"
# 128 for Invalid arguments
exit 128
fi
}
main "$@"