diff --git a/.github/.cSpellWords.txt b/.github/.cSpellWords.txt index ed12e1e9c1..8537fbf8fe 100644 --- a/.github/.cSpellWords.txt +++ b/.github/.cSpellWords.txt @@ -89,6 +89,7 @@ BLXNS bmcr BMSR BPDG +BPIALL brgintclr brginten brgintstat @@ -920,6 +921,7 @@ Picovolts PIDEVAD pidr PIDR +PINSEL PIOA PKHBT pkhtb @@ -1263,6 +1265,7 @@ STLIDMPUSR STLIMPUOR STLNVICACTVOR STLNVICPENDOR +Storex strbt STRBT strexb diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ba6a8c1660..b78ea87ba3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -128,7 +128,7 @@ jobs: path: ./ formatting: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Check formatting @@ -406,7 +406,7 @@ jobs: - name: Set up CBMC runner uses: FreeRTOS/CI-CD-Github-Actions/set_up_cbmc_runner@main with: - cbmc_version: "5.95.1" + cbmc_version: "6.3.1" - env: stepName: Install Dependencies diff --git a/.github/workflows/release-candidate.yml b/.github/workflows/release-candidate.yml index af9725ba09..c9b5d6ec4b 100644 --- a/.github/workflows/release-candidate.yml +++ b/.github/workflows/release-candidate.yml @@ -10,6 +10,10 @@ on: description: 'Release Version Number (Eg, v1.0.0-rc1)' required: true +# Workflow permissions block +permissions: + contents: write # This grants write access to repository content, including pushing commits/tags and creating releases. + jobs: tag-commit: name: Tag commit @@ -32,4 +36,4 @@ jobs: git tag -d ${{ github.event.inputs.version_number }} git remote update git checkout tags/${{ github.event.inputs.version_number }} - git diff ${{ github.event.inputs.commit_id }} tags/${{ github.event.inputs.version_number }} + git diff ${{ github.event.inputs.commit_id }} tags/${{ github.event.inputs.version_number }} \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6018d07f23..5b6ce0b3ef 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,6 +10,10 @@ on: description: 'Release Version Number (Eg, v1.0.0)' required: true +# Workflow permissions block +permissions: + contents: write # This grants write access to repository content, including pushing commits/tags and creating releases. + jobs: tag-commit: name: Tag commit @@ -20,31 +24,56 @@ jobs: with: ref: ${{ github.event.inputs.commit_id }} - name: Configure git identity + env: + ACTOR: ${{ github.actor }} run: | - git config --global user.name ${{ github.actor }} - git config --global user.email ${{ github.actor }}@users.noreply.github.com + git config --global user.name "$ACTOR" + git config --global user.email "$ACTOR"@users.noreply.github.com - name: create a new branch that references commit id - run: git checkout -b ${{ github.event.inputs.version_number }} ${{ github.event.inputs.commit_id }} + env: + VERSION_NUMBER: ${{ github.event.inputs.version_number }} + COMMIT_ID: ${{ github.event.inputs.commit_id }} + run: git checkout -b "$VERSION_NUMBER" "$COMMIT_ID" + - name: Update version number in source files + env: + VERSION_NUMBER: ${{ github.event.inputs.version_number }} + REPO_NAME: ${{ github.event.repository.name }} + source_folder_list: "source test" + run: | + echo "${{ env.source_folder_list }}" | \ + xargs -n 1 sh -c \ + 'find $1 -type f \( -name "*.c" -o -name "*.h" \) \ + -exec sed -i -b -E "0,/^ \* FreeRTOS\+TCP/s/^ \* FreeRTOS\+TCP.*/ \* FreeRTOS\+TCP $VERSION_NUMBER/g" {} +' + git add . + git commit -m '[AUTO][RELEASE]: Update version number in source files' + git push -u origin "$VERSION_NUMBER" - name: Generate SBOM uses: FreeRTOS/CI-CD-Github-Actions/sbom-generator@main with: repo_path: ./ source_path: ./source - name: commit SBOM file + env: + VERSION_NUMBER: ${{ github.event.inputs.version_number }} run: | git add . git commit -m 'Update SBOM' - git push -u origin ${{ github.event.inputs.version_number }} + git push -u origin "$VERSION_NUMBER" - name: Tag Commit and Push to remote + env: + VERSION_NUMBER: ${{ github.event.inputs.version_number }} run: | - git tag ${{ github.event.inputs.version_number }} -a -m "FreeRTOS-Plus-TCP Library ${{ github.event.inputs.version_number }}" + git tag "$VERSION_NUMBER" -a -m "FreeRTOS-Plus-TCP Library $VERSION_NUMBER" git push origin --tags - name: Verify tag on remote + env: + VERSION_NUMBER: ${{ github.event.inputs.version_number }} + COMMIT_ID: ${{ github.event.inputs.commit_id }} run: | - git tag -d ${{ github.event.inputs.version_number }} + git tag -d "$VERSION_NUMBER" git remote update - git checkout tags/${{ github.event.inputs.version_number }} - git diff ${{ github.event.inputs.commit_id }} tags/${{ github.event.inputs.version_number }} + git checkout tags/"$VERSION_NUMBER" + git diff "$COMMIT_ID" tags/"$VERSION_NUMBER" create-zip: needs: tag-commit name: Create ZIP and verify package for release asset. @@ -55,7 +84,7 @@ jobs: - name: Checkout code uses: actions/checkout@v4 with: - ref: ${{ github.event.inputs.commit_id }} + ref: ${{ github.event.inputs.version_number }} path: FreeRTOS-Plus-TCP submodules: recursive - name: Checkout disabled submodules @@ -63,28 +92,36 @@ jobs: cd FreeRTOS-Plus-TCP git submodule update --init --checkout --recursive - name: Create ZIP + env: + VERSION_NUMBER: ${{ github.event.inputs.version_number }} run: | - zip -r FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}.zip FreeRTOS-Plus-TCP -x "*.git*" + zip -r FreeRTOS-Plus-TCP-"$VERSION_NUMBER".zip FreeRTOS-Plus-TCP -x "*.git*" ls ./ - name: Validate created ZIP + env: + VERSION_NUMBER: ${{ github.event.inputs.version_number }} run: | mkdir zip-check - mv FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}.zip zip-check + mv FreeRTOS-Plus-TCP-"$VERSION_NUMBER".zip zip-check cd zip-check - unzip FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}.zip -d FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }} - ls FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }} - diff -r -x "*.git*" FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}/FreeRTOS-Plus-TCP/ ../FreeRTOS-Plus-TCP/ + unzip FreeRTOS-Plus-TCP-"$VERSION_NUMBER".zip -d FreeRTOS-Plus-TCP-"$VERSION_NUMBER" + ls FreeRTOS-Plus-TCP-"$VERSION_NUMBER" + diff -r -x "*.git*" FreeRTOS-Plus-TCP-"$VERSION_NUMBER"/FreeRTOS-Plus-TCP/ ../FreeRTOS-Plus-TCP/ cd ../ - name: Build + env: + VERSION_NUMBER: ${{ github.event.inputs.version_number }} run: | - cd zip-check/FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}/FreeRTOS-Plus-TCP + cd zip-check/FreeRTOS-Plus-TCP-"$VERSION_NUMBER"/FreeRTOS-Plus-TCP sudo apt-get install -y lcov sudo apt-get install unifdef cmake -S test/unit-test -B test/unit-test/build/ make -C test/unit-test/build/ all - name: Test + env: + VERSION_NUMBER: ${{ github.event.inputs.version_number }} run: | - cd zip-check/FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}/FreeRTOS-Plus-TCP + cd zip-check/FreeRTOS-Plus-TCP-"$VERSION_NUMBER"/FreeRTOS-Plus-TCP pushd test/unit-test/build/ ctest -E system --output-on-failure popd @@ -107,6 +144,9 @@ jobs: ref: ${{ github.event.inputs.version_number }} add_release: "true" create-release: + permissions: + contents: write + id-token: write needs: - create-zip - deploy-doxygen @@ -138,6 +178,11 @@ jobs: asset_path: ./FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}.zip asset_name: FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}.zip asset_content_type: application/zip + - name: Backup Release Asset + uses: FreeRTOS/CI-CD-Github-Actions/artifact-backup@main + with: + artifact_path: ./FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}.zip + release_tag: ${{ github.event.inputs.version_number }} cleanup: needs: - create-release @@ -147,6 +192,8 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - name: Delete branch created for Tag by SBOM generator + env: + VERSION_NUMBER: ${{ github.event.inputs.version_number }} run: | # Delete the branch created for Tag by SBOM generator - git push -u origin --delete refs/heads/${{ github.event.inputs.version_number }} + git push -u origin --delete refs/heads/"$VERSION_NUMBER" \ No newline at end of file diff --git a/History.txt b/History.txt index 3275574f99..1c21ba6877 100644 --- a/History.txt +++ b/History.txt @@ -1,5 +1,55 @@ Documentation and download available at https://www.FreeRTOS.org/ +Changes between FreeRTOS-plus-TCP V4.2.5 and V4.2.4 released October 10, 2025: + + The implementation lacked sufficient checks to ensure that received packets + meet the minimum size requirements for certain ICMPv6 message types, leading to + out-of-bounds read operations when processing packets smaller than the expected + size. This issue has been fixed by adding checks to prevent out-of-bounds reads. + The implementation lacked sufficient checks to prevent null pointer dereference + when an IPv6 multicast packet is received on a device not configured with a + link-local endpoint. This issue has been fixed by adding checks to prevent + null pointer dereference. + + The implementation lacked sufficient checks to validate the payload length field + in the IPv6 packet header. This allowed malicious packets with incorrect payload + lengths to cause integer wraparound, resulting in erroneously large calculated + payload length. This inflated payload length bypassed the existing + bounds-checking mechanisms, leading to out-of-bounds read operations. This issue + has been fixed by adding checks to validate the payload length field in the IPv6 + packet header. + + The implementation lacked sufficient checks to validate the IP version field + when a UDP/IPv6 packet is received with ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM + disabled. This allowed the processing of packets with an incorrect IP version + field instead of rejecting them early. Subsequent attempts to extract network + buffers from these invalid UDP packets could result in dereferencing of an + invalid pointer due to incorrect pointer arithmetic. + We would like to thank Ivan Gotovchits of Mayhem Security for collaborating on + this issue through the coordinated vulnerability disclosure process. + +Changes between FreeRTOS-plus-TCP V4.2.4 and V4.2.3 released June 10, 2025: + + Fixed maximum network buffer allocation size check when buffer + allocation scheme 1 is used which caused allocation failure on + some network interfaces. + +Changes between FreeRTOS-plus-TCP V4.2.3 and V4.2.2 released June 04, 2025: + + It was possible to cause an out-of-bounds write when processing LLMNR + or mDNS queries with very long DNS names. This issue only affects systems + using Buffer Allocation Scheme 1 with LLMNR or mDNS enabled. + This issue has been fixed by adding checks to prevent out of bounds write. + We would like to thank Paschal Amusuo (@AmPaschal), + James C Davis (@davisjam), Taylor Le Lievre (@tlelievre26), and + Aravind Kumar Machiry (@machiry) of Purdue University for collaborating + on this issue through the coordinated vulnerability disclosure process. + + Replace any missing functions by assert-false in all CBMC proofs to + improve tests. We would like to thank @tautschnig for their contribution. + + Adjust CBMC proof tooling to support CBMC v6. + We would like to thank @tautschnig for their contribution. + +Changes between FreeRTOS-plus-TCP V4.2.2 and V4.2.1 released July 12, 2024 + + Update version information in public header file + +Changes between FreeRTOS-plus-TCP V4.2.1 and V4.2.0 released June 27, 2024 + + Update version information in source files. + Changes between FreeRTOS-plus-TCP V4.2.0 and V4.1.0 released June 24, 2024 + It was possible for a carefully crafted DNS response with domain name length value greater than the actual domain name length, to cause a buffer diff --git a/README.md b/README.md index eda390d7fe..21d4f6f7fa 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,12 @@ This library has undergone static code analysis and checks for compliance with t ## Getting started The easiest way to use version 4.0.0 and later of FreeRTOS-Plus-TCP is to refer the Getting started Guide (found [here](https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/GettingStarted.md)) -Another way is to start with the pre-configured IPv4 Windows Simulator demo (found in [this directory](https://github.com/FreeRTOS/FreeRTOS/tree/main/FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator)) or IPv6 Multi-endpoint Windows Simulator demo (found in [this directory](https://github.com/FreeRTOS/FreeRTOS/tree/main/FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_IPv6_Demo/IPv6_Multi_WinSim_demo)). That way you will have the correct FreeRTOS source files included, and the correct include paths configured. Once a demo application is building and executing you can remove the demo application files, and start to add in your own application source files. See the [FreeRTOS Kernel Quick Start Guide](https://www.freertos.org/FreeRTOS-quick-start-guide.html) for detailed instructions and other useful links. +Another way is to start with the pre-configured IPv4 Windows Simulator demo (found in [this directory](https://github.com/FreeRTOS/FreeRTOS/tree/main/FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_Minimal_Windows_Simulator)) or IPv6 Multi-endpoint Windows Simulator demo (found in [this directory](https://github.com/FreeRTOS/FreeRTOS/tree/main/FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_IPv6_Demo/IPv6_Multi_WinSim_demo)). That way you will have the correct FreeRTOS source files included, and the correct include paths configured. Once a demo application is building and executing you can remove the demo application files, and start to add in your own application source files. See the [FreeRTOS Kernel Quick Start Guide](https://www.freertos.org/Documentation/01-FreeRTOS-quick-start/01-Beginners-guide/02-Quick-start-guide) for detailed instructions and other useful links. -Additionally, for FreeRTOS-Plus-TCP source code organization refer to the [Documentation](http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_Networking_Tutorial.html), and [API Reference](https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/FreeRTOS_TCP_API_Functions.html). +Additionally, for FreeRTOS-Plus-TCP source code organization refer to the [Documentation](http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_Networking_Tutorial.html), and [API Reference](https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/01-FreeRTOS-plus-TCP-APIs). ### Getting help -If you have any questions or need assistance troubleshooting your FreeRTOS project, we have an active community that can help on the [FreeRTOS Community Support Forum](https://forums.freertos.org). Please also refer to [FAQ](http://www.freertos.org/FAQHelp.html) for frequently asked questions. +If you have any questions or need assistance troubleshooting your FreeRTOS project, we have an active community that can help on the [FreeRTOS Community Support Forum](https://forums.freertos.org). Please also refer to [FAQ](https://www.freertos.org/Why-FreeRTOS/FAQs) for frequently asked questions. Also see the [Submitting a bugs/feature request](https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/.github/CONTRIBUTING.md#submitting-a-bugsfeature-request) section of CONTRIBUTING.md for more details. @@ -86,7 +86,7 @@ git submodule update --checkout --init --recursive tools/CMock test/FreeRTOS-Ker ``` ## Porting -The porting guide is available on [this page](http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/FreeRTOS_TCP_Porting.html). +The porting guide is available on [this page](https://www.freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/01-FreeRTOS_TCP_Porting). ## Repository structure This repository contains the FreeRTOS-Plus-TCP repository and a number of supplementary libraries for testing/PR Checks. diff --git a/docs/doxygen/config.doxyfile b/docs/doxygen/config.doxyfile index 9f406bd078..61f7fce318 100644 --- a/docs/doxygen/config.doxyfile +++ b/docs/doxygen/config.doxyfile @@ -48,7 +48,7 @@ PROJECT_NAME = FreeRTOS-Plus-TCP # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = V4.2.0 +PROJECT_NUMBER = V4.2.5 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/manifest.yml b/manifest.yml index 5f19b66e96..e9366602bf 100644 --- a/manifest.yml +++ b/manifest.yml @@ -1,5 +1,5 @@ name: "FreeRTOS-Plus-TCP" -version: "V4.2.0" +version: "V4.2.5" description: "Thread safe FreeRTOS TCP/IP stack working on top of the FreeRTOS-Kernel to implement the TCP/IP protocol. Suitable for microcontrollers." diff --git a/readme.txt b/readme.txt index 65e5e2b19d..62f2df8465 100644 --- a/readme.txt +++ b/readme.txt @@ -7,7 +7,7 @@ A description of the source code organisation is available on: http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_Networking_Tutorial.html The porting guide is available on: -http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/FreeRTOS_TCP_Porting.html +https://www.freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/01-FreeRTOS_TCP_Porting License information is available on: http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/FreeRTOS_Plus_TCP_License.html diff --git a/sbom.spdx b/sbom.spdx new file mode 100644 index 0000000000..8563466cad --- /dev/null +++ b/sbom.spdx @@ -0,0 +1,702 @@ +SPDXVersion: SPDX-2.2 +DataLicense: CC0-1.0 +SPDXID: SPDXRef-DOCUMENT +DocumentName: FreeRTOS-Plus-TCP +DocumentNamespace: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/V4.2.4/sbom.spdx +Creator: Organization:Amazon Web Services +Created: 2025-06-10T15:45:07Z +CreatorComment: NOASSERTION +DocumentComment: NOASSERTION + +PackageName: FreeRTOS-Plus-TCP +SPDXID: SPDXRef-Package-FreeRTOS-Plus-TCP +PackageVersion: V4.2.4 +PackageDownloadLocation: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/tree/V4.2.4 +PackageLicenseDeclared: MIT +PackageLicenseConcluded: MIT +PackageLicenseInfoFromFiles: NOASSERTION +FilesAnalyzed: true +PackageVerificationCode: 93e92a9fdbf0141880f22eb6d885132858f231b6 +PackageCopyrightText: NOASSERTION +PackageSummary: NOASSERTION +PackageDescription: Thread safe FreeRTOS TCP/IP stack working on top of the FreeRTOS-Kernel to implement the TCP/IP protocol. Suitable for microcontrollers. + +FileName: ./FreeRTOS_ARP.c +SPDXID: SPDXRef-File-FreeRTOSARP.c +FileChecksum: SHA1: c95e1411686896c97f2a7a5ada57179feee25e8e +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_DNS_Callback.c +SPDXID: SPDXRef-File-FreeRTOSDNSCallback.c +FileChecksum: SHA1: a66b41a5b19132aa288fffbe6b79104dd2eca62b +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_IPv4.c +SPDXID: SPDXRef-File-FreeRTOSIPv4.c +FileChecksum: SHA1: 5ad901f90a1f74ee9e2c72719f1373094eda93b5 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_TCP_Utils_IPv4.c +SPDXID: SPDXRef-File-FreeRTOSTCPUtilsIPv4.c +FileChecksum: SHA1: ab88c905e91a98fbb4db049f625c036760d85df2 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_TCP_Transmission.c +SPDXID: SPDXRef-File-FreeRTOSTCPTransmission.c +FileChecksum: SHA1: c965e38cd045faa2ec2e94bd832a32ab02992767 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_TCP_IP.c +SPDXID: SPDXRef-File-FreeRTOSTCPIP.c +FileChecksum: SHA1: 4dda66ecd667829a5c785338e820648b0aad7165 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_IPv4_Sockets.c +SPDXID: SPDXRef-File-FreeRTOSIPv4Sockets.c +FileChecksum: SHA1: 8ede3e666e32b8c63371ac3c33a73f6d00e9a3e9 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_TCP_Transmission_IPv4.c +SPDXID: SPDXRef-File-FreeRTOSTCPTransmissionIPv4.c +FileChecksum: SHA1: 2eaba4e699c28cf1520bda50343f20561f867853 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_DNS_Parser.c +SPDXID: SPDXRef-File-FreeRTOSDNSParser.c +FileChecksum: SHA1: cff17174fd64370f452abd72d0ebd73da2b566cb +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_IPv6.c +SPDXID: SPDXRef-File-FreeRTOSIPv6.c +FileChecksum: SHA1: 8264cbbbb3730c152cdb14844a5b22552f49c76e +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_TCP_IP_IPv6.c +SPDXID: SPDXRef-File-FreeRTOSTCPIPIPv6.c +FileChecksum: SHA1: 0ad8b306df297ef7b1057b413bc4b29ef6a8fc6a +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_ND.c +SPDXID: SPDXRef-File-FreeRTOSND.c +FileChecksum: SHA1: f9fb03c6b72caa8c49d8b79dd4757f4d76bde711 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_DNS_Networking.c +SPDXID: SPDXRef-File-FreeRTOSDNSNetworking.c +FileChecksum: SHA1: 26717f9db84068b9453097be331871f8c67e5d3b +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_IPv6_Sockets.c +SPDXID: SPDXRef-File-FreeRTOSIPv6Sockets.c +FileChecksum: SHA1: 4a13347ad217c26de310c3def011d0760aafd566 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_UDP_IPv4.c +SPDXID: SPDXRef-File-FreeRTOSUDPIPv4.c +FileChecksum: SHA1: a79a7bf288b74f61aee6f90f0fa9f30d7636e7f5 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_TCP_Reception.c +SPDXID: SPDXRef-File-FreeRTOSTCPReception.c +FileChecksum: SHA1: 0c610b1be8a6273c015c7d65f9489171b90dc7f0 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_DNS.c +SPDXID: SPDXRef-File-FreeRTOSDNS.c +FileChecksum: SHA1: 6684ec6e2e0e046b5e6904012ad642247c06dbf8 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_UDP_IPv6.c +SPDXID: SPDXRef-File-FreeRTOSUDPIPv6.c +FileChecksum: SHA1: a6ac7c3d264f24dc4fcbe2803b572188e460cd15 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_Routing.c +SPDXID: SPDXRef-File-FreeRTOSRouting.c +FileChecksum: SHA1: 548158b984128edd5de9a4367b4f26575402bae8 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_TCP_IP_IPv4.c +SPDXID: SPDXRef-File-FreeRTOSTCPIPIPv4.c +FileChecksum: SHA1: d13b8655141183f1387fcfee5764bcd0f4356db4 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_IP.c +SPDXID: SPDXRef-File-FreeRTOSIP.c +FileChecksum: SHA1: 1f6b907e96610555e3c2b4263dea46411c64925c +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_TCP_WIN.c +SPDXID: SPDXRef-File-FreeRTOSTCPWIN.c +FileChecksum: SHA1: 9a4eabab4ec7c2f8104f4b0a8d2ddecfdfbdfd74 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_TCP_State_Handling.c +SPDXID: SPDXRef-File-FreeRTOSTCPStateHandling.c +FileChecksum: SHA1: 2e05a3adaa01744eb41e4d8bace0683ab065b62d +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_TCP_Transmission_IPv6.c +SPDXID: SPDXRef-File-FreeRTOSTCPTransmissionIPv6.c +FileChecksum: SHA1: 41a8a0b6ebb9206767847f0ea050773603b98995 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_DHCP.c +SPDXID: SPDXRef-File-FreeRTOSDHCP.c +FileChecksum: SHA1: 7df812edcf9291704d775278acac762ec97f6fde +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_DNS_Cache.c +SPDXID: SPDXRef-File-FreeRTOSDNSCache.c +FileChecksum: SHA1: 20361fcbdc5d41888b82cefe4c0567ea9dab9ab5 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_TCP_State_Handling_IPv4.c +SPDXID: SPDXRef-File-FreeRTOSTCPStateHandlingIPv4.c +FileChecksum: SHA1: fe3f95d2daeeac99a408984c3360e895d7bd99bc +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_TCP_State_Handling_IPv6.c +SPDXID: SPDXRef-File-FreeRTOSTCPStateHandlingIPv6.c +FileChecksum: SHA1: 04ede58321fa5cc56cee3f4f1359828be2d0c3fe +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_IPv6_Utils.c +SPDXID: SPDXRef-File-FreeRTOSIPv6Utils.c +FileChecksum: SHA1: 6f420771db3ce6aebb56bed6e49903761a6743dc +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_Tiny_TCP.c +SPDXID: SPDXRef-File-FreeRTOSTinyTCP.c +FileChecksum: SHA1: 62085ee1e525242bbf8b375a9e8238ff4d50881e +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_Sockets.c +SPDXID: SPDXRef-File-FreeRTOSSockets.c +FileChecksum: SHA1: 8c4434a87a7df7ba33a53b2c214e9599e5b349a4 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_IP_Utils.c +SPDXID: SPDXRef-File-FreeRTOSIPUtils.c +FileChecksum: SHA1: cbf02255dad2eac2204f5acd36fd8c7330ce59bb +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_UDP_IP.c +SPDXID: SPDXRef-File-FreeRTOSUDPIP.c +FileChecksum: SHA1: f5f384b2638a7dd1d148ebf3138831fd98a4ab57 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_TCP_Utils_IPv6.c +SPDXID: SPDXRef-File-FreeRTOSTCPUtilsIPv6.c +FileChecksum: SHA1: e4d082075a377a69af3846ffce5f617c7d97bb60 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_IP_Timers.c +SPDXID: SPDXRef-File-FreeRTOSIPTimers.c +FileChecksum: SHA1: fa4a529c30abbd12ccf64234fb2bee80b8d33625 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_RA.c +SPDXID: SPDXRef-File-FreeRTOSRA.c +FileChecksum: SHA1: a7072bb3f2ec5151598ee2b531b6bed6f1f749bb +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_ICMP.c +SPDXID: SPDXRef-File-FreeRTOSICMP.c +FileChecksum: SHA1: a3fd42403b2ceabe2cbcdb047209e4c4a030742e +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_IPv4_Utils.c +SPDXID: SPDXRef-File-FreeRTOSIPv4Utils.c +FileChecksum: SHA1: 2109ac50737e032090949f5b0fb0b3484d3c45ad +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_TCP_Utils.c +SPDXID: SPDXRef-File-FreeRTOSTCPUtils.c +FileChecksum: SHA1: 8d6fc6fd7c991f0343db730273fde8e5ab9ff20d +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_Stream_Buffer.c +SPDXID: SPDXRef-File-FreeRTOSStreamBuffer.c +FileChecksum: SHA1: fe18641ca235ca9d6f38cb4017041e01c5216797 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_BitConfig.c +SPDXID: SPDXRef-File-FreeRTOSBitConfig.c +FileChecksum: SHA1: e743f04ce748a3eab81d277765926e72c117f9b0 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./FreeRTOS_DHCPv6.c +SPDXID: SPDXRef-File-FreeRTOSDHCPv6.c +FileChecksum: SHA1: 828bfcd2cff5f228c71d57e3fb67c5e404fca0fa +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/Common/phyHandling.c +SPDXID: SPDXRef-File-portable-NetworkInterface-Common-phyHandling.c +FileChecksum: SHA1: d9e5348eee9b6e2d311c75128806ff3051df9e93 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/libslirp/MBuffNetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-libslirp-MBuffNetworkInterface.c +FileChecksum: SHA1: 768e4e4d56d001e5b08d5ead513fa2e078c2b8f2 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/libslirp/MBuffNetifBackendLibslirp.c +SPDXID: SPDXRef-File-portable-NetworkInterface-libslirp-MBuffNetifBackendLibslirp.c +FileChecksum: SHA1: 3dfaa69ee2ce7c20b7e68c2343c4b61d3311b56f +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/mw300_rd/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-mw300rd-NetworkInterface.c +FileChecksum: SHA1: 45b47e521939b1a83991ba25d7f932c140309b0d +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/ksz8851snl/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-ksz8851snl-NetworkInterface.c +FileChecksum: SHA1: dc0d5ac9e131f539e1fd80ff821ad499b8d3c60f +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/ksz8851snl/ksz8851snl.c +SPDXID: SPDXRef-File-portable-NetworkInterface-ksz8851snl-ksz8851snl.c +FileChecksum: SHA1: 1ebaba711088fd35f69278c4dd98d692b63879d3 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/MPS2_AN385/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-MPS2AN385-NetworkInterface.c +FileChecksum: SHA1: 5c87ddcb804c57597e1d0275305fac313d19df3c +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/MPS2_AN385/ether_lan9118/smsc9220_eth_drv.c +SPDXID: SPDXRef-File-portable-NetworkInterface-MPS2AN385-etherlan9118-smsc9220ethdrv.c +FileChecksum: SHA1: 4dea999b13a46ae8966fc7ed55f8802f61cad16d +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/STM32Hxx/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-STM32Hxx-NetworkInterface.c +FileChecksum: SHA1: 4219f419bb9193866ea85e1d2091be9b066e3c8b +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/STM32Hxx/stm32hxx_hal_eth.c +SPDXID: SPDXRef-File-portable-NetworkInterface-STM32Hxx-stm32hxxhaleth.c +FileChecksum: SHA1: bd3a097f93c6c5ae8012fee0b95af049dadfe16a +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/MPS3_AN552/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-MPS3AN552-NetworkInterface.c +FileChecksum: SHA1: a1f3c429ef9475a06f1ad4b07ea8ba6662c50401 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/MPS3_AN552/CMSIS_Driver/ETH_LAN91C111.c +SPDXID: SPDXRef-File-portable-NetworkInterface-MPS3AN552-CMSISDriver-ETHLAN91C111.c +FileChecksum: SHA1: f83733bfe6206ead4a27e1bcc7253f34a99e1be8 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/RX/ether_callback.c +SPDXID: SPDXRef-File-portable-NetworkInterface-RX-ethercallback.c +FileChecksum: SHA1: 0a2896913be2a566eb9d12dc06c6ce1857b894da +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/RX/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-RX-NetworkInterface.c +FileChecksum: SHA1: 3c238f9cb9dab89c5dbcd8a67da23d52078155f5 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/ThirdParty/MSP432/NetworkMiddleware.c +SPDXID: SPDXRef-File-portable-NetworkInterface-ThirdParty-MSP432-NetworkMiddleware.c +FileChecksum: SHA1: 557581177f42bd2eb5d8f04727d3a67834efd8fa +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/ThirdParty/MSP432/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-ThirdParty-MSP432-NetworkInterface.c +FileChecksum: SHA1: 3e9b3fc369e8fc036593795730110fd3f3d0814e +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/LPC54018/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-LPC54018-NetworkInterface.c +FileChecksum: SHA1: 3c1517ee8af10694c0627b0051f19c3bb4ef5439 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/loopback/loopbackNetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-loopback-loopbackNetworkInterface.c +FileChecksum: SHA1: 1187f0bf88d4ed59aee45f29c29794ec2d9f58d9 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/xilinx_ultrascale/uncached_memory.c +SPDXID: SPDXRef-File-portable-NetworkInterface-xilinxultrascale-uncachedmemory.c +FileChecksum: SHA1: 9b69d15d7d7cbd90d304e01fff7125d25f275322 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/xilinx_ultrascale/x_emacpsif_physpeed.c +SPDXID: SPDXRef-File-portable-NetworkInterface-xilinxultrascale-xemacpsifphyspeed.c +FileChecksum: SHA1: e0d2254df7e6c332d2fdce20b2b5c7100c127444 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/xilinx_ultrascale/x_emacpsif_hw.c +SPDXID: SPDXRef-File-portable-NetworkInterface-xilinxultrascale-xemacpsifhw.c +FileChecksum: SHA1: 3ea9ebe6231e44bbe2322be4006cbca9ec9f9d90 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/xilinx_ultrascale/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-xilinxultrascale-NetworkInterface.c +FileChecksum: SHA1: b6bdaa978f63cc16fa17749a7f94e0667cd4efc2 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/xilinx_ultrascale/x_emacpsif_dma.c +SPDXID: SPDXRef-File-portable-NetworkInterface-xilinxultrascale-xemacpsifdma.c +FileChecksum: SHA1: 94b2d0ede80befb49b590a9099af13abe47bf73f +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/DriverSAM/gmac_SAM.c +SPDXID: SPDXRef-File-portable-NetworkInterface-DriverSAM-gmacSAM.c +FileChecksum: SHA1: 4b52d28114ae8c69d5b2ce4ab266e84bb382f30d +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/DriverSAM/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-DriverSAM-NetworkInterface.c +FileChecksum: SHA1: 5419771af86d73d71c577b93ff5853bbbfd7f0b5 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/ATSAM4E/ethernet_phy.c +SPDXID: SPDXRef-File-portable-NetworkInterface-ATSAM4E-ethernetphy.c +FileChecksum: SHA1: 40490a00413a5823bf4f6c7c74bd1f68b045ccfc +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/ATSAM4E/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-ATSAM4E-NetworkInterface.c +FileChecksum: SHA1: 4dffe9c8059bce4adfc936eef6140a26e99b5603 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/ATSAM4E/gmac.c +SPDXID: SPDXRef-File-portable-NetworkInterface-ATSAM4E-gmac.c +FileChecksum: SHA1: ded6e53855e422d5445ccca15f683cc029ed638f +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/NXP1060/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-NXP1060-NetworkInterface.c +FileChecksum: SHA1: dc7876a6eca9a88575282d94a5b3364c6399c37f +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/STM32Fxx/stm32fxx_hal_eth.c +SPDXID: SPDXRef-File-portable-NetworkInterface-STM32Fxx-stm32fxxhaleth.c +FileChecksum: SHA1: 92b2f12f433a4f09c7046ee77736c1b74dc3176f +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/STM32Fxx/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-STM32Fxx-NetworkInterface.c +FileChecksum: SHA1: 2467b94cd2818870ee854ad0b2768da0f3450d39 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/LPC18xx/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-LPC18xx-NetworkInterface.c +FileChecksum: SHA1: 0a63947ae1e8bb3f76be039c3a890ea9c90205f9 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/LPC17xx/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-LPC17xx-NetworkInterface.c +FileChecksum: SHA1: 635a43fc202cff3d5ca040f59c57d602f4bb3050 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/linux/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-linux-NetworkInterface.c +FileChecksum: SHA1: bb0c63070746e3b58101cea28fd738d105880253 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/board_family/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-boardfamily-NetworkInterface.c +FileChecksum: SHA1: 8ae81f9ce11bd5849e923a8b104002d43ff8bbac +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/Zynq/uncached_memory.c +SPDXID: SPDXRef-File-portable-NetworkInterface-Zynq-uncachedmemory.c +FileChecksum: SHA1: da79c2ba096d3ea9137c26d95986c9f3cd51adf9 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/Zynq/x_emacpsif_physpeed.c +SPDXID: SPDXRef-File-portable-NetworkInterface-Zynq-xemacpsifphyspeed.c +FileChecksum: SHA1: cffcfe94c7c3e2db1b7bf1b75b59d4d3e2e8b7bc +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/Zynq/x_emacpsif_hw.c +SPDXID: SPDXRef-File-portable-NetworkInterface-Zynq-xemacpsifhw.c +FileChecksum: SHA1: 578c15c5ee78186f49a4060088d742f0ee386409 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/Zynq/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-Zynq-NetworkInterface.c +FileChecksum: SHA1: 0fb3ea227b02dc172725bc51d1aef67fc1a65d4c +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/Zynq/x_emacpsif_dma.c +SPDXID: SPDXRef-File-portable-NetworkInterface-Zynq-xemacpsifdma.c +FileChecksum: SHA1: e4841b3e5e94ec911b0eabb342e6372682f9c16f +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/TM4C/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-TM4C-NetworkInterface.c +FileChecksum: SHA1: 9543186324c41d90b4ee0f2794fdc840eff9e69c +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/ATSAME5x/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-ATSAME5x-NetworkInterface.c +FileChecksum: SHA1: bd34a8b38424bdc70b5a8610f5e907ba33885629 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/WinPCap/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-WinPCap-NetworkInterface.c +FileChecksum: SHA1: 2ed8a94ae0ab0cb23c4396b0773f78763cb9efc9 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/WinPCap/FaultInjection.c +SPDXID: SPDXRef-File-portable-NetworkInterface-WinPCap-FaultInjection.c +FileChecksum: SHA1: e7eddd2edef440d27f6bef5839f722884d2cf447 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/MPS4_CS315/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-MPS4CS315-NetworkInterface.c +FileChecksum: SHA1: a1f3c429ef9475a06f1ad4b07ea8ba6662c50401 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/MPS4_CS315/CMSIS_Driver/ETH_LAN91C111.c +SPDXID: SPDXRef-File-portable-NetworkInterface-MPS4CS315-CMSISDriver-ETHLAN91C111.c +FileChecksum: SHA1: ae6fbf4c93e02bd1ce0fa97d386250b285083423 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/SH2A/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-SH2A-NetworkInterface.c +FileChecksum: SHA1: 607a2c38307e551198ce3967801871bca75b799a +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/M487/m480_eth.c +SPDXID: SPDXRef-File-portable-NetworkInterface-M487-m480eth.c +FileChecksum: SHA1: b555c5dac03afb3cd39e5373d71738398dcfdcd3 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/M487/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-M487-NetworkInterface.c +FileChecksum: SHA1: 4049b87bc58a851871cebdd9d17a2501b01c146c +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/esp32/NetworkInterface.c +SPDXID: SPDXRef-File-portable-NetworkInterface-esp32-NetworkInterface.c +FileChecksum: SHA1: bd7f42cf691da33263a9e780f93218628f12b611 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/pic32mzef/BufferAllocation_2.c +SPDXID: SPDXRef-File-portable-NetworkInterface-pic32mzef-BufferAllocation2.c +FileChecksum: SHA1: a591bbe41c41cf06c9a4243cbe744b9636f820b4 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/pic32mzef/NetworkInterface_eth.c +SPDXID: SPDXRef-File-portable-NetworkInterface-pic32mzef-NetworkInterfaceeth.c +FileChecksum: SHA1: f5cec8f2c47f18e1fa305ff65e43693578f8c786 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/NetworkInterface/pic32mzef/NetworkInterface_wifi.c +SPDXID: SPDXRef-File-portable-NetworkInterface-pic32mzef-NetworkInterfacewifi.c +FileChecksum: SHA1: 57c966e7ba03effad3a01ac48545afe4d28670e6 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/BufferManagement/BufferAllocation_1.c +SPDXID: SPDXRef-File-portable-BufferManagement-BufferAllocation1.c +FileChecksum: SHA1: e1c986eefd5c6466f3786e9fc2e5ffd6ad226179 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + +FileName: ./portable/BufferManagement/BufferAllocation_2.c +SPDXID: SPDXRef-File-portable-BufferManagement-BufferAllocation2.c +FileChecksum: SHA1: c8695a6fd8b7c9d79775a3b8bfd507f7345772d0 +LicenseConcluded: MIT +FileCopyrightText: NOASSERTION +FileComment: NOASSERTION + diff --git a/source/FreeRTOS_ARP.c b/source/FreeRTOS_ARP.c index 8fd9672fa9..680e8ea071 100644 --- a/source/FreeRTOS_ARP.c +++ b/source/FreeRTOS_ARP.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_BitConfig.c b/source/FreeRTOS_BitConfig.c index 515b8770df..ec70a35184 100644 --- a/source/FreeRTOS_BitConfig.c +++ b/source/FreeRTOS_BitConfig.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP V2.3.1 + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/source/FreeRTOS_DHCP.c b/source/FreeRTOS_DHCP.c index 1f95b6e41c..554afcd2c0 100644 --- a/source/FreeRTOS_DHCP.c +++ b/source/FreeRTOS_DHCP.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -81,7 +81,7 @@ /** * @brief The number of end-points that are making use of the UDP-socket. */ - static BaseType_t xDHCPSocketUserCount = 0; + _static BaseType_t xDHCPSocketUserCount = 0; /* * Generate a DHCP discover message and send it on the DHCP socket. @@ -881,7 +881,7 @@ configASSERT( xSocketValid( xDHCPv4Socket ) == pdTRUE ); /* MISRA Ref 11.4.1 [Socket error and integer to pointer conversion] */ -/* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-114 */ + /* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-114 */ /* coverity[misra_c_2012_rule_11_4_violation] */ if( xSocketValid( xDHCPv4Socket ) == pdTRUE ) { diff --git a/source/FreeRTOS_DHCPv6.c b/source/FreeRTOS_DHCPv6.c index 4dc00a2ed8..095dc36720 100644 --- a/source/FreeRTOS_DHCPv6.c +++ b/source/FreeRTOS_DHCPv6.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP V2.3.1 + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -85,11 +85,11 @@ ( ( ( uint32_t ) 1U ) << DHCPv6_Option_Server_Identifier ) ) /** @brief The UDP socket which is shared by all end-points that need DHCPv6. */ -static Socket_t xDHCPv6Socket; +_static Socket_t xDHCPv6Socket; /** @brief A reference count makes sure that the UDP socket will be deleted when it * is not used anymore. */ -static BaseType_t xDHCPv6SocketUserCount; +_static BaseType_t xDHCPv6SocketUserCount; static BaseType_t prvIsOptionLengthValid( uint16_t usOption, size_t uxOptionLength, @@ -151,7 +151,7 @@ static BaseType_t prvDHCPv6_handleOption( struct xNetworkEndPoint * pxEndPoint, /** * @brief DHCP IPv6 message object */ -static DHCPMessage_IPv6_t xDHCPMessage; +_static DHCPMessage_IPv6_t xDHCPMessage; /** * @brief Get the DHCP state from a given endpoint. @@ -1500,7 +1500,13 @@ static BaseType_t prvDHCPv6Analyse( struct xNetworkEndPoint * pxEndPoint, } else { - ulOptionsReceived |= ( ( ( uint32_t ) 1U ) << usOption ); + /* ulOptionsReceived has only 32-bits, it's not allowed to shift more than 32-bits on it. */ + if( usOption < 32 ) + { + /* Store the option by bit-map only if it's less than 32. */ + ulOptionsReceived |= ( ( ( uint32_t ) 1U ) << usOption ); + } + xReady = prvDHCPv6_handleOption( pxEndPoint, usOption, &( xSet ), pxDHCPMessage, &( xMessage ) ); } diff --git a/source/FreeRTOS_DNS.c b/source/FreeRTOS_DNS.c index 0eb249e4c3..d4ecf64830 100644 --- a/source/FreeRTOS_DNS.c +++ b/source/FreeRTOS_DNS.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_DNS_Cache.c b/source/FreeRTOS_DNS_Cache.c index 7c8e236383..902c21cdff 100644 --- a/source/FreeRTOS_DNS_Cache.c +++ b/source/FreeRTOS_DNS_Cache.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -448,10 +448,9 @@ /* Add or update the item. */ if( strlen( pcName ) < ( size_t ) ipconfigDNS_CACHE_NAME_LENGTH ) { - ( void ) strncpy( xDNSCache[ uxFreeEntry ].pcName, pcName, ipconfigDNS_CACHE_NAME_LENGTH ); + ( void ) strncpy( xDNSCache[ uxFreeEntry ].pcName, pcName, strlen( pcName ) ); ( void ) memcpy( &( xDNSCache[ uxFreeEntry ].xAddresses[ 0 ] ), pxIP, sizeof( *pxIP ) ); - xDNSCache[ uxFreeEntry ].ulTTL = ulTTL; xDNSCache[ uxFreeEntry ].ulTimeWhenAddedInSeconds = ulCurrentTimeSeconds; #if ( ipconfigDNS_CACHE_ADDRESSES_PER_ENTRY > 1 ) diff --git a/source/FreeRTOS_DNS_Callback.c b/source/FreeRTOS_DNS_Callback.c index 15bddbfe51..ebc6bee2f3 100644 --- a/source/FreeRTOS_DNS_Callback.c +++ b/source/FreeRTOS_DNS_Callback.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_DNS_Networking.c b/source/FreeRTOS_DNS_Networking.c index 9d41bcd877..4fa368e25d 100644 --- a/source/FreeRTOS_DNS_Networking.c +++ b/source/FreeRTOS_DNS_Networking.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_DNS_Parser.c b/source/FreeRTOS_DNS_Parser.c index 13fb75a858..e2c97f3e18 100644 --- a/source/FreeRTOS_DNS_Parser.c +++ b/source/FreeRTOS_DNS_Parser.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -484,31 +484,30 @@ LLMNRAnswer_t * pxAnswer; uint8_t * pucNewBuffer = NULL; size_t uxExtraLength; + size_t uxDataLength = uxBufferLength + + sizeof( UDPHeader_t ) + + sizeof( EthernetHeader_t ) + + uxIPHeaderSizePacket( pxNetworkBuffer ); - if( xBufferAllocFixedSize == pdFALSE ) - { - size_t uxDataLength = uxBufferLength + - sizeof( UDPHeader_t ) + - sizeof( EthernetHeader_t ) + - uxIPHeaderSizePacket( pxNetworkBuffer ); - - #if ( ipconfigUSE_IPv6 != 0 ) - if( xSet.usType == dnsTYPE_AAAA_HOST ) - { - uxExtraLength = sizeof( LLMNRAnswer_t ) + ipSIZE_OF_IPv6_ADDRESS - sizeof( pxAnswer->ulIPAddress ); - } - else - #endif /* ( ipconfigUSE_IPv6 != 0 ) */ - #if ( ipconfigUSE_IPv4 != 0 ) - { - uxExtraLength = sizeof( LLMNRAnswer_t ); - } - #else /* ( ipconfigUSE_IPv4 != 0 ) */ + #if ( ipconfigUSE_IPv6 != 0 ) + if( xSet.usType == dnsTYPE_AAAA_HOST ) { - /* do nothing, coverity happy */ + uxExtraLength = sizeof( LLMNRAnswer_t ) + ipSIZE_OF_IPv6_ADDRESS - sizeof( pxAnswer->ulIPAddress ); } - #endif /* ( ipconfigUSE_IPv4 != 0 ) */ + else + #endif /* ( ipconfigUSE_IPv6 != 0 ) */ + #if ( ipconfigUSE_IPv4 != 0 ) + { + uxExtraLength = sizeof( LLMNRAnswer_t ); + } + #else /* ( ipconfigUSE_IPv4 != 0 ) */ + { + /* do nothing, coverity happy */ + } + #endif /* ( ipconfigUSE_IPv4 != 0 ) */ + if( xBufferAllocFixedSize == pdFALSE ) + { /* Set the size of the outgoing packet. */ pxNetworkBuffer->xDataLength = uxDataLength; pxNewBuffer = pxDuplicateNetworkBufferWithDescriptor( pxNetworkBuffer, @@ -537,7 +536,17 @@ } else { - pucNewBuffer = &( pxNetworkBuffer->pucEthernetBuffer[ uxUDPOffset ] ); + /* When xBufferAllocFixedSize is TRUE, check if the buffer size is big enough to + * store the answer. */ + if( ( uxDataLength + uxExtraLength ) <= ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ) + { + pucNewBuffer = &( pxNetworkBuffer->pucEthernetBuffer[ uxUDPOffset ] ); + } + else + { + /* Just to indicate that the message may not be answered. */ + pxNetworkBuffer = NULL; + } } if( ( pxNetworkBuffer != NULL ) ) @@ -1093,7 +1102,7 @@ /* Define the ASCII value of the capital "A". */ const uint8_t ucCharA = ( uint8_t ) 0x41U; - ucByte = ( uint8_t ) ( ( ( pucSource[ 0 ] - ucCharA ) << 4 ) | + ucByte = ( uint8_t ) ( ( ( ( pucSource[ 0 ] - ucCharA ) & 0x0F ) << 4 ) | ( pucSource[ 1 ] - ucCharA ) ); /* Make sure there are no trailing spaces in the name. */ @@ -1208,7 +1217,11 @@ { /* BufferAllocation_1.c is used, the Network Buffers can contain at least * ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER. */ - configASSERT( uxSizeNeeded < ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ); + if( uxSizeNeeded > ( ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ) ) + { + /* The buffer is too small to reply. Drop silently. */ + break; + } } pxNetworkBuffer->xDataLength = uxSizeNeeded; diff --git a/source/FreeRTOS_ICMP.c b/source/FreeRTOS_ICMP.c index 75e51bb79b..283cb439be 100644 --- a/source/FreeRTOS_ICMP.c +++ b/source/FreeRTOS_ICMP.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_IP.c b/source/FreeRTOS_IP.c index 3765e85a43..b65e244fe6 100644 --- a/source/FreeRTOS_IP.c +++ b/source/FreeRTOS_IP.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_IP_Timers.c b/source/FreeRTOS_IP_Timers.c index 09b2bd6b39..8646ea7892 100644 --- a/source/FreeRTOS_IP_Timers.c +++ b/source/FreeRTOS_IP_Timers.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_IP_Utils.c b/source/FreeRTOS_IP_Utils.c index 3c27eb8bc6..abd321be89 100644 --- a/source/FreeRTOS_IP_Utils.c +++ b/source/FreeRTOS_IP_Utils.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -1694,6 +1694,81 @@ size_t FreeRTOS_min_size_t( size_t a, } /*-----------------------------------------------------------*/ +/** + * @brief Performs a safe addition of two 32-bit integers, preventing overflow and underflow. + * @param[in] a the first value. + * @param[in] b the second value. + * @return The result of a + b if no overflow/underflow occurs, or INT32_MAX/INT32_MIN if overflow/underflow would occur. + */ +int32_t FreeRTOS_add_int32( int32_t a, + int32_t b ) +{ + int32_t ret; + + if( ( a > 0 ) && ( b > ipINT32_MAX_VALUE - a ) ) + { + ret = ipINT32_MAX_VALUE; /* Positive overflow */ + } + else if( ( a < 0 ) && ( b < ipINT32_MIN_VALUE - a ) ) + { + ret = ipINT32_MIN_VALUE; /* Negative underflow */ + } + else + { + ret = a + b; + } + + return ret; +} +/*-----------------------------------------------------------*/ + +/** + * @brief Performs a safe multiplication of two 32-bit integers, preventing overflow and underflow. + * @param[in] a the first value. + * @param[in] b the second value. + * @return The result of a * b if no overflow occurs, or ipINT32_MAX_VALUE if an overflow would occur. + */ +int32_t FreeRTOS_multiply_int32( int32_t a, + int32_t b ) +{ + int32_t ret; + + /* Check for overflow/underflow */ + if( a > 0 ) + { + if( ( b > 0 ) && ( a > ipINT32_MAX_VALUE / b ) ) + { + ret = ipINT32_MAX_VALUE; /* Positive overflow */ + } + else if( ( b < 0 ) && ( b < ipINT32_MIN_VALUE / a ) ) + { + ret = ipINT32_MIN_VALUE; /* Negative underflow */ + } + else + { + ret = a * b; + } + } + else + { + if( ( b > 0 ) && ( a < ipINT32_MIN_VALUE / b ) ) + { + ret = ipINT32_MIN_VALUE; /* Negative underflow */ + } + else if( ( b < 0 ) && ( a < ipINT32_MAX_VALUE / b ) ) + { + ret = ipINT32_MAX_VALUE; /* Positive overflow */ + } + else + { + ret = a * b; + } + } + + return ret; +} +/*-----------------------------------------------------------*/ + /** * @brief Round-up a number to a multiple of 'd'. * @param[in] a the first value. diff --git a/source/FreeRTOS_IPv4.c b/source/FreeRTOS_IPv4.c index d095f1266e..0d2c5b3b96 100644 --- a/source/FreeRTOS_IPv4.c +++ b/source/FreeRTOS_IPv4.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_IPv4_Sockets.c b/source/FreeRTOS_IPv4_Sockets.c index c6a5533ed9..ab526620fd 100644 --- a/source/FreeRTOS_IPv4_Sockets.c +++ b/source/FreeRTOS_IPv4_Sockets.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_IPv4_Utils.c b/source/FreeRTOS_IPv4_Utils.c index b79bdc8de8..be8f30eb36 100644 --- a/source/FreeRTOS_IPv4_Utils.c +++ b/source/FreeRTOS_IPv4_Utils.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_IPv6.c b/source/FreeRTOS_IPv6.c index 0e8f85ea19..0ff89a6d00 100644 --- a/source/FreeRTOS_IPv6.c +++ b/source/FreeRTOS_IPv6.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -93,7 +93,6 @@ const struct xIPv6_Address FreeRTOS_in6addr_loopback = { { 0U, 0U, 0U, 0U, 0U, 0 size_t uxBufferLength ) { BaseType_t xResult = pdFAIL; - uint16_t ucVersionTrafficClass; uint16_t usPayloadLength; uint8_t ucNextHeader; size_t uxMinimumLength; @@ -116,15 +115,6 @@ const struct xIPv6_Address FreeRTOS_in6addr_loopback = { { 0U, 0U, 0U, 0U, 0U, 0 break; } - ucVersionTrafficClass = pxIPv6Packet->xIPHeader.ucVersionTrafficClass; - - /* Test if the IP-version is 6. */ - if( ( ( ucVersionTrafficClass & ( uint8_t ) 0xF0U ) >> 4 ) != 6U ) - { - DEBUG_SET_TRACE_VARIABLE( xLocation, 2 ); - break; - } - /* Check if the IPv6-header is transferred. */ if( uxBufferLength < ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER ) ) { @@ -497,6 +487,7 @@ eFrameProcessingResult_t prvAllowIPPacketIPv6( const IPHeader_IPv6_t * const pxI const IPv6_Address_t * pxDestinationIPAddress = &( pxIPv6Header->xDestinationAddress ); const IPv6_Address_t * pxSourceIPAddress = &( pxIPv6Header->xSourceAddress ); BaseType_t xHasUnspecifiedAddress = pdFALSE; + uint16_t ucVersionTrafficClass = pxIPv6Header->ucVersionTrafficClass; /* Drop if packet has unspecified IPv6 address (defined in RFC4291 - sec 2.5.2) * either in source or destination address. */ @@ -506,10 +497,17 @@ eFrameProcessingResult_t prvAllowIPPacketIPv6( const IPHeader_IPv6_t * const pxI xHasUnspecifiedAddress = pdTRUE; } + /* Test if the IP-version is 6. */ + if( ( ( ucVersionTrafficClass & ( uint8_t ) 0xF0U ) >> 4 ) != 6U ) + { + /* Can not handle, unknown or invalid header version. */ + eReturn = eReleaseBuffer; + FreeRTOS_printf( ( "prvAllowIPPacketIPv6: drop packet, invalid header version: %u\n", ( ucVersionTrafficClass & ( uint8_t ) 0xF0U ) >> 4 ) ); + } /* Is the packet for this IP address? */ - if( ( xHasUnspecifiedAddress == pdFALSE ) && - ( pxNetworkBuffer->pxEndPoint != NULL ) && - ( memcmp( pxDestinationIPAddress->ucBytes, pxNetworkBuffer->pxEndPoint->ipv6_settings.xIPAddress.ucBytes, sizeof( IPv6_Address_t ) ) == 0 ) ) + else if( ( xHasUnspecifiedAddress == pdFALSE ) && + ( pxNetworkBuffer->pxEndPoint != NULL ) && + ( memcmp( pxDestinationIPAddress->ucBytes, pxNetworkBuffer->pxEndPoint->ipv6_settings.xIPAddress.ucBytes, sizeof( IPv6_Address_t ) ) == 0 ) ) { eReturn = eProcessBuffer; } diff --git a/source/FreeRTOS_IPv6_Sockets.c b/source/FreeRTOS_IPv6_Sockets.c index 0801c34775..7c839e18d1 100644 --- a/source/FreeRTOS_IPv6_Sockets.c +++ b/source/FreeRTOS_IPv6_Sockets.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_IPv6_Utils.c b/source/FreeRTOS_IPv6_Utils.c index f35995bb5a..a99a6f01d1 100644 --- a/source/FreeRTOS_IPv6_Utils.c +++ b/source/FreeRTOS_IPv6_Utils.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -92,7 +92,7 @@ BaseType_t prvChecksumIPv6Checks( uint8_t * pucEthernetBuffer, { uxExtensionHeaderLength = usGetExtensionHeaderLength( pucEthernetBuffer, uxBufferLength, &pxSet->ucProtocol ); - if( uxExtensionHeaderLength >= uxBufferLength ) + if( ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + uxExtensionHeaderLength ) >= uxBufferLength ) { /* Error detected when parsing extension header. */ pxSet->usChecksum = ipINVALID_LENGTH; @@ -107,8 +107,18 @@ BaseType_t prvChecksumIPv6Checks( uint8_t * pucEthernetBuffer, /* coverity[misra_c_2012_rule_11_3_violation] */ pxSet->pxProtocolHeaders = ( ( ProtocolHeaders_t * ) &( pucEthernetBuffer[ ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + uxExtensionHeaderLength ] ) ); pxSet->usPayloadLength = FreeRTOS_ntohs( pxSet->pxIPPacket_IPv6->usPayloadLength ); + /* For IPv6, the number of bytes in the protocol is indicated. */ - pxSet->usProtocolBytes = ( uint16_t ) ( pxSet->usPayloadLength - uxExtensionHeaderLength ); + if( pxSet->usPayloadLength < uxExtensionHeaderLength ) + { + /* Invalid payload length - extension headers exceed payload. */ + pxSet->usChecksum = ipINVALID_LENGTH; + xReturn = 4; + } + else + { + pxSet->usProtocolBytes = ( uint16_t ) ( pxSet->usPayloadLength - uxExtensionHeaderLength ); + } uxNeeded = ( size_t ) pxSet->usPayloadLength; uxNeeded += ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER; diff --git a/source/FreeRTOS_ND.c b/source/FreeRTOS_ND.c index d5c55e478e..2cec3e37fa 100644 --- a/source/FreeRTOS_ND.c +++ b/source/FreeRTOS_ND.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP V2.3.1 + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -147,7 +147,7 @@ MACAddress_t * const pxMACAddress, NetworkEndPoint_t ** ppxEndPoint ) { - eARPLookupResult_t eReturn; + eARPLookupResult_t eReturn = eARPCacheMiss; /* Mostly used multi-cast address is ff02::. */ if( xIsIPv6AllowedMulticast( pxAddressToLookup ) != pdFALSE ) @@ -157,14 +157,20 @@ if( ppxEndPoint != NULL ) { *ppxEndPoint = pxFindLocalEndpoint(); - } - eReturn = eARPCacheHit; + if( *ppxEndPoint != NULL ) + { + eReturn = eARPCacheHit; + } + else + { + /* No link-local endpoint configured, eARPCacheHit */ + } + } } else { - /* Not a multicast IP address. */ - eReturn = eARPCacheMiss; + /* Not a multicast IP address, eARPCacheHit */ } return eReturn; @@ -252,12 +258,15 @@ /* See if the gateway has an entry in the cache. */ eReturn = prvNDCacheLookup( pxIPAddress, pxMACAddress, ppxEndPoint ); - if( *ppxEndPoint != NULL ) + if( ( ppxEndPoint != NULL ) && ( *ppxEndPoint != NULL ) ) { FreeRTOS_printf( ( "eNDGetCacheEntry: found end-point %pip\n", ( void * ) ( *ppxEndPoint )->ipv6_settings.xIPAddress.ucBytes ) ); } - *( ppxEndPoint ) = pxEndPoint; + if( ppxEndPoint != NULL ) + { + *( ppxEndPoint ) = pxEndPoint; + } } } } @@ -955,194 +964,238 @@ */ eFrameProcessingResult_t prvProcessICMPMessage_IPv6( NetworkBufferDescriptor_t * const pxNetworkBuffer ) { - /* MISRA Ref 11.3.1 [Misaligned access] */ - /* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-113 */ - /* coverity[misra_c_2012_rule_11_3_violation] */ - ICMPPacket_IPv6_t * pxICMPPacket = ( ( ICMPPacket_IPv6_t * ) pxNetworkBuffer->pucEthernetBuffer ); - /* coverity[misra_c_2012_rule_11_3_violation] */ - ICMPHeader_IPv6_t * pxICMPHeader_IPv6 = ( ( ICMPHeader_IPv6_t * ) &( pxICMPPacket->xICMPHeaderIPv6 ) ); - /* Note: pxNetworkBuffer->pxEndPoint is already verified to be non-NULL in prvProcessEthernetPacket() */ - NetworkEndPoint_t * pxEndPoint = pxNetworkBuffer->pxEndPoint; - size_t uxNeededSize; - - #if ( ipconfigHAS_PRINTF == 1 ) + /* + * ICMPv6 messages have the following general format: + * + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Type | Code | Checksum | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | | + + Message Body + + | | + | + | The packet should contain atleast 4 bytes of general fields + | + */ + if( pxNetworkBuffer->xDataLength >= ( ( size_t ) ipSIZE_OF_ETH_HEADER + ( size_t ) ipSIZE_OF_IPv6_HEADER + ( size_t ) ipICMPv6_GENERAL_FIELD_SIZE ) ) { - if( pxICMPHeader_IPv6->ucTypeOfMessage != ipICMP_PING_REQUEST_IPv6 ) + /* MISRA Ref 11.3.1 [Misaligned access] */ + /* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-113 */ + /* coverity[misra_c_2012_rule_11_3_violation] */ + ICMPPacket_IPv6_t * pxICMPPacket = ( ( ICMPPacket_IPv6_t * ) pxNetworkBuffer->pucEthernetBuffer ); + /* coverity[misra_c_2012_rule_11_3_violation] */ + ICMPHeader_IPv6_t * pxICMPHeader_IPv6 = ( ( ICMPHeader_IPv6_t * ) &( pxICMPPacket->xICMPHeaderIPv6 ) ); + /* Note: pxNetworkBuffer->pxEndPoint is already verified to be non-NULL in prvProcessEthernetPacket() */ + NetworkEndPoint_t * pxEndPoint = pxNetworkBuffer->pxEndPoint; + size_t uxNeededSize; + + #if ( ipconfigHAS_PRINTF == 1 ) { - char pcAddress[ 40 ]; - FreeRTOS_printf( ( "ICMPv6_recv %d (%s) from %pip to %pip end-point = %s\n", - pxICMPHeader_IPv6->ucTypeOfMessage, - pcMessageType( ( BaseType_t ) pxICMPHeader_IPv6->ucTypeOfMessage ), - ( void * ) pxICMPPacket->xIPHeader.xSourceAddress.ucBytes, - ( void * ) pxICMPPacket->xIPHeader.xDestinationAddress.ucBytes, - pcEndpointName( pxEndPoint, pcAddress, sizeof( pcAddress ) ) ) ); + if( pxICMPHeader_IPv6->ucTypeOfMessage != ipICMP_PING_REQUEST_IPv6 ) + { + char pcAddress[ 40 ]; + FreeRTOS_printf( ( "ICMPv6_recv %d (%s) from %pip to %pip end-point = %s\n", + pxICMPHeader_IPv6->ucTypeOfMessage, + pcMessageType( ( BaseType_t ) pxICMPHeader_IPv6->ucTypeOfMessage ), + ( void * ) pxICMPPacket->xIPHeader.xSourceAddress.ucBytes, + ( void * ) pxICMPPacket->xIPHeader.xDestinationAddress.ucBytes, + pcEndpointName( pxEndPoint, pcAddress, sizeof( pcAddress ) ) ) ); + } } - } - #endif /* ( ipconfigHAS_PRINTF == 1 ) */ + #endif /* ( ipconfigHAS_PRINTF == 1 ) */ - if( pxEndPoint->bits.bIPv6 != pdFALSE_UNSIGNED ) - { - switch( pxICMPHeader_IPv6->ucTypeOfMessage ) + if( pxEndPoint->bits.bIPv6 != pdFALSE_UNSIGNED ) { - case ipICMP_DEST_UNREACHABLE_IPv6: - case ipICMP_PACKET_TOO_BIG_IPv6: - case ipICMP_TIME_EXCEEDED_IPv6: - case ipICMP_PARAMETER_PROBLEM_IPv6: - /* These message types are not implemented. They are logged here above. */ - break; + switch( pxICMPHeader_IPv6->ucTypeOfMessage ) + { + case ipICMP_DEST_UNREACHABLE_IPv6: + case ipICMP_PACKET_TOO_BIG_IPv6: + case ipICMP_TIME_EXCEEDED_IPv6: + case ipICMP_PARAMETER_PROBLEM_IPv6: + /* These message types are not implemented. They are logged here above. */ + break; + + case ipICMP_PING_REQUEST_IPv6: + { + size_t uxICMPSize; + uint16_t usICMPSize; - case ipICMP_PING_REQUEST_IPv6: - { - size_t uxICMPSize; - uint16_t usICMPSize; + /* Lint would complain about casting '()' immediately. */ + usICMPSize = FreeRTOS_ntohs( pxICMPPacket->xIPHeader.usPayloadLength ); + uxICMPSize = ( size_t ) usICMPSize; + uxNeededSize = ( size_t ) ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + uxICMPSize ); + + if( uxNeededSize > pxNetworkBuffer->xDataLength ) + { + FreeRTOS_printf( ( "Too small\n" ) ); + break; + } - /* Lint would complain about casting '()' immediately. */ - usICMPSize = FreeRTOS_ntohs( pxICMPPacket->xIPHeader.usPayloadLength ); - uxICMPSize = ( size_t ) usICMPSize; - uxNeededSize = ( size_t ) ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + uxICMPSize ); + pxICMPHeader_IPv6->ucTypeOfMessage = ipICMP_PING_REPLY_IPv6; - if( uxNeededSize > pxNetworkBuffer->xDataLength ) - { - FreeRTOS_printf( ( "Too small\n" ) ); - break; + /* MISRA Ref 4.14.1 [The validity of values received from external sources]. */ + /* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#directive-414. */ + /* coverity[misra_c_2012_directive_4_14_violation] */ + prvReturnICMP_IPv6( pxNetworkBuffer, uxICMPSize ); } + break; - pxICMPHeader_IPv6->ucTypeOfMessage = ipICMP_PING_REPLY_IPv6; + #if ( ipconfigSUPPORT_OUTGOING_PINGS != 0 ) + case ipICMP_PING_REPLY_IPv6: + { + ePingReplyStatus_t eStatus = eSuccess; + /* MISRA Ref 11.3.1 [Misaligned access] */ + /* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-113 */ + /* coverity[misra_c_2012_rule_11_3_violation] */ + const ICMPEcho_IPv6_t * pxICMPEchoHeader = ( ( const ICMPEcho_IPv6_t * ) pxICMPHeader_IPv6 ); + size_t uxDataLength, uxCount; + const uint8_t * pucByte; - /* MISRA Ref 4.14.1 [The validity of values received from external sources]. */ - /* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#directive-414. */ - /* coverity[misra_c_2012_directive_4_14_violation] */ - prvReturnICMP_IPv6( pxNetworkBuffer, uxICMPSize ); - } - break; + /* Find the total length of the IP packet. */ + uxDataLength = ipNUMERIC_CAST( size_t, FreeRTOS_ntohs( pxICMPPacket->xIPHeader.usPayloadLength ) ); - #if ( ipconfigSUPPORT_OUTGOING_PINGS != 0 ) - case ipICMP_PING_REPLY_IPv6: - { - ePingReplyStatus_t eStatus = eSuccess; - /* MISRA Ref 11.3.1 [Misaligned access] */ - /* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-113 */ - /* coverity[misra_c_2012_rule_11_3_violation] */ - const ICMPEcho_IPv6_t * pxICMPEchoHeader = ( ( const ICMPEcho_IPv6_t * ) pxICMPHeader_IPv6 ); - size_t uxDataLength, uxCount; - const uint8_t * pucByte; - - /* Find the total length of the IP packet. */ - uxDataLength = ipNUMERIC_CAST( size_t, FreeRTOS_ntohs( pxICMPPacket->xIPHeader.usPayloadLength ) ); - uxDataLength = uxDataLength - sizeof( *pxICMPEchoHeader ); - - /* Find the first byte of the data within the ICMP packet. */ - pucByte = ( const uint8_t * ) pxICMPEchoHeader; - pucByte = &( pucByte[ sizeof( *pxICMPEchoHeader ) ] ); - - /* Check each byte. */ - for( uxCount = 0; uxCount < uxDataLength; uxCount++ ) - { - if( *pucByte != ( uint8_t ) ipECHO_DATA_FILL_BYTE ) + uxNeededSize = ( size_t ) ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + uxDataLength ); + + if( uxNeededSize > pxNetworkBuffer->xDataLength ) { - eStatus = eInvalidData; + FreeRTOS_printf( ( "Too small\n" ) ); break; } - pucByte++; - } + uxDataLength = uxDataLength - sizeof( *pxICMPEchoHeader ); - /* Call back into the application to pass it the result. */ - vApplicationPingReplyHook( eStatus, pxICMPEchoHeader->usIdentifier ); - } - break; - #endif /* ( ipconfigSUPPORT_OUTGOING_PINGS != 0 ) */ - case ipICMP_NEIGHBOR_SOLICITATION_IPv6: - { - size_t uxICMPSize; - BaseType_t xCompare; - const NetworkEndPoint_t * pxTargetedEndPoint = pxEndPoint; - const NetworkEndPoint_t * pxEndPointInSameSubnet = FreeRTOS_InterfaceEPInSameSubnet_IPv6( pxNetworkBuffer->pxInterface, &( pxICMPHeader_IPv6->xIPv6Address ) ); + /* Find the first byte of the data within the ICMP packet. */ + pucByte = ( const uint8_t * ) pxICMPEchoHeader; + pucByte = &( pucByte[ sizeof( *pxICMPEchoHeader ) ] ); - if( pxEndPointInSameSubnet != NULL ) - { - pxTargetedEndPoint = pxEndPointInSameSubnet; - } - else - { - FreeRTOS_debug_printf( ( "prvProcessICMPMessage_IPv6: No match for %pip\n", - pxICMPHeader_IPv6->xIPv6Address.ucBytes ) ); - } + /* Check each byte. */ + for( uxCount = 0; uxCount < uxDataLength; uxCount++ ) + { + if( *pucByte != ( uint8_t ) ipECHO_DATA_FILL_BYTE ) + { + eStatus = eInvalidData; + break; + } - uxICMPSize = sizeof( ICMPHeader_IPv6_t ); - uxNeededSize = ( size_t ) ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + uxICMPSize ); + pucByte++; + } - if( uxNeededSize > pxNetworkBuffer->xDataLength ) + /* Call back into the application to pass it the result. */ + vApplicationPingReplyHook( eStatus, pxICMPEchoHeader->usIdentifier ); + } + break; + #endif /* ( ipconfigSUPPORT_OUTGOING_PINGS != 0 ) */ + case ipICMP_NEIGHBOR_SOLICITATION_IPv6: { - FreeRTOS_printf( ( "Too small\n" ) ); - break; - } + size_t uxICMPSize; + BaseType_t xCompare; + const NetworkEndPoint_t * pxTargetedEndPoint = pxEndPoint; + const NetworkEndPoint_t * pxEndPointInSameSubnet = FreeRTOS_InterfaceEPInSameSubnet_IPv6( pxNetworkBuffer->pxInterface, &( pxICMPHeader_IPv6->xIPv6Address ) ); - xCompare = memcmp( pxICMPHeader_IPv6->xIPv6Address.ucBytes, pxTargetedEndPoint->ipv6_settings.xIPAddress.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); + if( pxEndPointInSameSubnet != NULL ) + { + pxTargetedEndPoint = pxEndPointInSameSubnet; + } + else + { + FreeRTOS_debug_printf( ( "prvProcessICMPMessage_IPv6: No match for %pip\n", + pxICMPHeader_IPv6->xIPv6Address.ucBytes ) ); + } - FreeRTOS_printf( ( "ND NS for %pip endpoint %pip %s\n", - ( void * ) pxICMPHeader_IPv6->xIPv6Address.ucBytes, - ( void * ) pxNetworkBuffer->pxEndPoint->ipv6_settings.xIPAddress.ucBytes, - ( xCompare == 0 ) ? "Reply" : "Ignore" ) ); + uxICMPSize = sizeof( ICMPHeader_IPv6_t ); + uxNeededSize = ( size_t ) ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + uxICMPSize ); - if( xCompare == 0 ) - { - pxICMPHeader_IPv6->ucTypeOfMessage = ipICMP_NEIGHBOR_ADVERTISEMENT_IPv6; - pxICMPHeader_IPv6->ucTypeOfService = 0U; - pxICMPHeader_IPv6->ulReserved = ndICMPv6_FLAG_SOLICITED | ndICMPv6_FLAG_UPDATE; - pxICMPHeader_IPv6->ulReserved = FreeRTOS_htonl( pxICMPHeader_IPv6->ulReserved ); - - /* Type of option. */ - pxICMPHeader_IPv6->ucOptionType = ndICMP_TARGET_LINK_LAYER_ADDRESS; - /* Length of option in units of 8 bytes. */ - pxICMPHeader_IPv6->ucOptionLength = 1U; - ( void ) memcpy( pxICMPHeader_IPv6->ucOptionBytes, pxTargetedEndPoint->xMACAddress.ucBytes, sizeof( MACAddress_t ) ); - pxICMPPacket->xIPHeader.ucHopLimit = 255U; - ( void ) memcpy( pxICMPHeader_IPv6->xIPv6Address.ucBytes, pxTargetedEndPoint->ipv6_settings.xIPAddress.ucBytes, sizeof( pxICMPHeader_IPv6->xIPv6Address.ucBytes ) ); - prvReturnICMP_IPv6( pxNetworkBuffer, uxICMPSize ); - } - } - break; + if( uxNeededSize > pxNetworkBuffer->xDataLength ) + { + FreeRTOS_printf( ( "Too small\n" ) ); + break; + } - case ipICMP_NEIGHBOR_ADVERTISEMENT_IPv6: - /* MISRA Ref 11.3.1 [Misaligned access] */ - /* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-113 */ - /* coverity[misra_c_2012_rule_11_3_violation] */ - vNDRefreshCacheEntry( ( ( const MACAddress_t * ) pxICMPHeader_IPv6->ucOptionBytes ), - &( pxICMPHeader_IPv6->xIPv6Address ), - pxEndPoint ); - FreeRTOS_printf( ( "NEIGHBOR_ADV from %pip\n", - ( void * ) pxICMPHeader_IPv6->xIPv6Address.ucBytes ) ); + xCompare = memcmp( pxICMPHeader_IPv6->xIPv6Address.ucBytes, pxTargetedEndPoint->ipv6_settings.xIPAddress.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); - #if ( ipconfigUSE_RA != 0 ) + FreeRTOS_printf( ( "ND NS for %pip endpoint %pip %s\n", + ( void * ) pxICMPHeader_IPv6->xIPv6Address.ucBytes, + ( void * ) pxNetworkBuffer->pxEndPoint->ipv6_settings.xIPAddress.ucBytes, + ( xCompare == 0 ) ? "Reply" : "Ignore" ) ); - /* Receive a NA ( Neighbour Advertisement ) message to see if a chosen IP-address is already in use. - * This is important during SLAAC. */ - vReceiveNA( pxNetworkBuffer ); - #endif + if( xCompare == 0 ) + { + pxICMPHeader_IPv6->ucTypeOfMessage = ipICMP_NEIGHBOR_ADVERTISEMENT_IPv6; + pxICMPHeader_IPv6->ucTypeOfService = 0U; + pxICMPHeader_IPv6->ulReserved = ndICMPv6_FLAG_SOLICITED | ndICMPv6_FLAG_UPDATE; + pxICMPHeader_IPv6->ulReserved = FreeRTOS_htonl( pxICMPHeader_IPv6->ulReserved ); + + /* Type of option. */ + pxICMPHeader_IPv6->ucOptionType = ndICMP_TARGET_LINK_LAYER_ADDRESS; + /* Length of option in units of 8 bytes. */ + pxICMPHeader_IPv6->ucOptionLength = 1U; + ( void ) memcpy( pxICMPHeader_IPv6->ucOptionBytes, pxTargetedEndPoint->xMACAddress.ucBytes, sizeof( MACAddress_t ) ); + pxICMPPacket->xIPHeader.ucHopLimit = 255U; + ( void ) memcpy( pxICMPHeader_IPv6->xIPv6Address.ucBytes, pxTargetedEndPoint->ipv6_settings.xIPAddress.ucBytes, sizeof( pxICMPHeader_IPv6->xIPv6Address.ucBytes ) ); + prvReturnICMP_IPv6( pxNetworkBuffer, uxICMPSize ); + } + } + break; - if( ( pxARPWaitingNetworkBuffer != NULL ) && - ( uxIPHeaderSizePacket( pxARPWaitingNetworkBuffer ) == ipSIZE_OF_IPv6_HEADER ) ) - { - prvCheckWaitingBuffer( &( pxICMPHeader_IPv6->xIPv6Address ) ); - } + case ipICMP_NEIGHBOR_ADVERTISEMENT_IPv6: + { + size_t uxICMPSize; + uxICMPSize = sizeof( ICMPHeader_IPv6_t ); + uxNeededSize = ( size_t ) ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + uxICMPSize ); - break; + if( uxNeededSize > pxNetworkBuffer->xDataLength ) + { + FreeRTOS_printf( ( "Too small\n" ) ); + break; + } - case ipICMP_ROUTER_SOLICITATION_IPv6: - break; + /* MISRA Ref 11.3.1 [Misaligned access] */ + /* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-113 */ + /* coverity[misra_c_2012_rule_11_3_violation] */ + vNDRefreshCacheEntry( ( ( const MACAddress_t * ) pxICMPHeader_IPv6->ucOptionBytes ), + &( pxICMPHeader_IPv6->xIPv6Address ), + pxEndPoint ); + FreeRTOS_printf( ( "NEIGHBOR_ADV from %pip\n", + ( void * ) pxICMPHeader_IPv6->xIPv6Address.ucBytes ) ); - #if ( ipconfigUSE_RA != 0 ) - case ipICMP_ROUTER_ADVERTISEMENT_IPv6: - vReceiveRA( pxNetworkBuffer ); - break; - #endif /* ( ipconfigUSE_RA != 0 ) */ + #if ( ipconfigUSE_RA != 0 ) - default: - /* All possible values are included here above. */ - break; - } /* switch( pxICMPHeader_IPv6->ucTypeOfMessage ) */ - } /* if( pxEndPoint->bits.bIPv6 != pdFALSE_UNSIGNED ) */ + /* Receive a NA ( Neighbour Advertisement ) message to see if a chosen IP-address is already in use. + * This is important during SLAAC. */ + vReceiveNA( pxNetworkBuffer ); + #endif + + if( ( pxARPWaitingNetworkBuffer != NULL ) && + ( uxIPHeaderSizePacket( pxARPWaitingNetworkBuffer ) == ipSIZE_OF_IPv6_HEADER ) ) + { + prvCheckWaitingBuffer( &( pxICMPHeader_IPv6->xIPv6Address ) ); + } + } + break; + + case ipICMP_ROUTER_SOLICITATION_IPv6: + break; + + #if ( ipconfigUSE_RA != 0 ) + case ipICMP_ROUTER_ADVERTISEMENT_IPv6: + /* Size check is done inside vReceiveRA */ + vReceiveRA( pxNetworkBuffer ); + break; + #endif /* ( ipconfigUSE_RA != 0 ) */ + + default: + /* All possible values are included here above. */ + break; + } /* switch( pxICMPHeader_IPv6->ucTypeOfMessage ) */ + } /* if( pxEndPoint->bits.bIPv6 != pdFALSE_UNSIGNED ) */ + } + else + { + /* Malformed ICMPv6 packet, release the network buffer (performed + * in prvProcessEthernetPacket)*/ + } return eReleaseBuffer; } diff --git a/source/FreeRTOS_RA.c b/source/FreeRTOS_RA.c index 446dfae98c..984ca4f306 100644 --- a/source/FreeRTOS_RA.c +++ b/source/FreeRTOS_RA.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP V2.3.1 + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/source/FreeRTOS_Routing.c b/source/FreeRTOS_Routing.c index 5d342c83e0..39530432f2 100644 --- a/source/FreeRTOS_Routing.c +++ b/source/FreeRTOS_Routing.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP V2.3.1 + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/source/FreeRTOS_Sockets.c b/source/FreeRTOS_Sockets.c index 83d0cb0455..5af831ba0e 100644 --- a/source/FreeRTOS_Sockets.c +++ b/source/FreeRTOS_Sockets.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_Stream_Buffer.c b/source/FreeRTOS_Stream_Buffer.c index 5c0c52fc85..761a1c3a16 100644 --- a/source/FreeRTOS_Stream_Buffer.c +++ b/source/FreeRTOS_Stream_Buffer.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_TCP_IP.c b/source/FreeRTOS_TCP_IP.c index dafbf3c0a4..3759b1f591 100644 --- a/source/FreeRTOS_TCP_IP.c +++ b/source/FreeRTOS_TCP_IP.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_TCP_IP_IPv4.c b/source/FreeRTOS_TCP_IP_IPv4.c index 9ccb729014..d916f736f9 100644 --- a/source/FreeRTOS_TCP_IP_IPv4.c +++ b/source/FreeRTOS_TCP_IP_IPv4.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_TCP_IP_IPv6.c b/source/FreeRTOS_TCP_IP_IPv6.c index f9b2dd75f7..ef867cb991 100644 --- a/source/FreeRTOS_TCP_IP_IPv6.c +++ b/source/FreeRTOS_TCP_IP_IPv6.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_TCP_Reception.c b/source/FreeRTOS_TCP_Reception.c index 4dcd396b6a..e8b2009938 100644 --- a/source/FreeRTOS_TCP_Reception.c +++ b/source/FreeRTOS_TCP_Reception.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -99,7 +99,7 @@ size_t uxTCPHeaderOffset = ipSIZE_OF_ETH_HEADER + uxIPHeaderSizePacket( pxNetworkBuffer ); /* MISRA Ref 11.3.1 [Misaligned access] */ -/* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-113 */ + /* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-113 */ /* coverity[misra_c_2012_rule_11_3_violation] */ const ProtocolHeaders_t * pxProtocolHeaders = ( ( ProtocolHeaders_t * ) &( pxNetworkBuffer->pucEthernetBuffer[ uxTCPHeaderOffset ] ) ); @@ -237,7 +237,17 @@ /* Option is only valid in SYN phase. */ if( xHasSYNFlag != 0 ) { - pxSocket->u.xTCP.ucPeerWinScaleFactor = pucPtr[ 2 ]; + /* From RFC7323 - section 2.3, we should limit the WSopt not larger than 14. */ + if( pucPtr[ 2 ] > tcpTCP_OPT_WSOPT_MAXIMUM_VALUE ) + { + FreeRTOS_debug_printf( ( "The WSopt(%u) from SYN packet is larger than maximum value.", pucPtr[ 2 ] ) ); + pxSocket->u.xTCP.ucPeerWinScaleFactor = tcpTCP_OPT_WSOPT_MAXIMUM_VALUE; + } + else + { + pxSocket->u.xTCP.ucPeerWinScaleFactor = pucPtr[ 2 ]; + } + pxSocket->u.xTCP.bits.bWinScaling = pdTRUE_UNSIGNED; } @@ -430,7 +440,7 @@ /* Map the ethernet buffer onto the ProtocolHeader_t struct for easy access to the fields. */ /* MISRA Ref 11.3.1 [Misaligned access] */ -/* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-113 */ + /* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-113 */ /* coverity[misra_c_2012_rule_11_3_violation] */ const ProtocolHeaders_t * pxProtocolHeaders = ( ( ProtocolHeaders_t * ) &( pxNetworkBuffer->pucEthernetBuffer[ ( size_t ) ipSIZE_OF_ETH_HEADER + uxIPHeaderSizePacket( pxNetworkBuffer ) ] ) ); diff --git a/source/FreeRTOS_TCP_State_Handling.c b/source/FreeRTOS_TCP_State_Handling.c index f8e7de41c5..9eaf05196b 100644 --- a/source/FreeRTOS_TCP_State_Handling.c +++ b/source/FreeRTOS_TCP_State_Handling.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_TCP_State_Handling_IPv4.c b/source/FreeRTOS_TCP_State_Handling_IPv4.c index d7da55d499..07ead0a745 100644 --- a/source/FreeRTOS_TCP_State_Handling_IPv4.c +++ b/source/FreeRTOS_TCP_State_Handling_IPv4.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_TCP_State_Handling_IPv6.c b/source/FreeRTOS_TCP_State_Handling_IPv6.c index d13211a02f..a22e94ac38 100644 --- a/source/FreeRTOS_TCP_State_Handling_IPv6.c +++ b/source/FreeRTOS_TCP_State_Handling_IPv6.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_TCP_Transmission.c b/source/FreeRTOS_TCP_Transmission.c index e05c998b7f..9544934318 100644 --- a/source/FreeRTOS_TCP_Transmission.c +++ b/source/FreeRTOS_TCP_Transmission.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_TCP_Transmission_IPv4.c b/source/FreeRTOS_TCP_Transmission_IPv4.c index 2b2492957b..8200634c51 100644 --- a/source/FreeRTOS_TCP_Transmission_IPv4.c +++ b/source/FreeRTOS_TCP_Transmission_IPv4.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_TCP_Transmission_IPv6.c b/source/FreeRTOS_TCP_Transmission_IPv6.c index 125da5acfa..4f7706fa78 100644 --- a/source/FreeRTOS_TCP_Transmission_IPv6.c +++ b/source/FreeRTOS_TCP_Transmission_IPv6.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_TCP_Utils.c b/source/FreeRTOS_TCP_Utils.c index 425906e219..3c9afd48cd 100644 --- a/source/FreeRTOS_TCP_Utils.c +++ b/source/FreeRTOS_TCP_Utils.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_TCP_Utils_IPv4.c b/source/FreeRTOS_TCP_Utils_IPv4.c index 40760fd4ed..69a2d51de5 100644 --- a/source/FreeRTOS_TCP_Utils_IPv4.c +++ b/source/FreeRTOS_TCP_Utils_IPv4.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_TCP_Utils_IPv6.c b/source/FreeRTOS_TCP_Utils_IPv6.c index 789bfe6ace..c824a78fa7 100644 --- a/source/FreeRTOS_TCP_Utils_IPv6.c +++ b/source/FreeRTOS_TCP_Utils_IPv6.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_TCP_WIN.c b/source/FreeRTOS_TCP_WIN.c index 543ce28769..f7b013d7ab 100644 --- a/source/FreeRTOS_TCP_WIN.c +++ b/source/FreeRTOS_TCP_WIN.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -1901,18 +1901,33 @@ const TCPSegment_t * pxSegment ) { int32_t mS = ( int32_t ) ulTimerGetAge( &( pxSegment->xTransmitTimer ) ); + int32_t lSum = 0; + int32_t lWeight = 0; + int32_t lDivisor = 0; + + mS = mS < 0 ? ipINT32_MAX_VALUE : mS; if( pxWindow->lSRTT >= mS ) { /* RTT becomes smaller: adapt slowly. */ - pxWindow->lSRTT = ( ( winSRTT_DECREMENT_NEW * mS ) + ( winSRTT_DECREMENT_CURRENT * pxWindow->lSRTT ) ) / ( winSRTT_DECREMENT_NEW + winSRTT_DECREMENT_CURRENT ); + lWeight = winSRTT_DECREMENT_CURRENT; + lDivisor = winSRTT_DECREMENT_NEW + winSRTT_DECREMENT_CURRENT; + mS = FreeRTOS_multiply_int32( mS, + winSRTT_DECREMENT_NEW ); } else { /* RTT becomes larger: adapt quicker */ - pxWindow->lSRTT = ( ( winSRTT_INCREMENT_NEW * mS ) + ( winSRTT_INCREMENT_CURRENT * pxWindow->lSRTT ) ) / ( winSRTT_INCREMENT_NEW + winSRTT_INCREMENT_CURRENT ); + lWeight = winSRTT_INCREMENT_CURRENT; + lDivisor = winSRTT_INCREMENT_NEW + winSRTT_INCREMENT_CURRENT; + mS = FreeRTOS_multiply_int32( mS, + winSRTT_INCREMENT_NEW ); } + lSum = FreeRTOS_multiply_int32( pxWindow->lSRTT, lWeight ); + lSum = FreeRTOS_add_int32( lSum, mS ); + pxWindow->lSRTT = lSum / lDivisor; + /* Cap to the minimum of 50ms. */ if( pxWindow->lSRTT < winSRTT_CAP_mS ) { @@ -1946,7 +1961,7 @@ const ListItem_t * pxIterator; /* MISRA Ref 11.3.1 [Misaligned access] */ -/* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-113 */ + /* More details at: https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA.md#rule-113 */ /* coverity[misra_c_2012_rule_11_3_violation] */ const ListItem_t * pxEnd = ( ( const ListItem_t * ) &( pxWindow->xTxSegments.xListEnd ) ); BaseType_t xDoUnlink; diff --git a/source/FreeRTOS_Tiny_TCP.c b/source/FreeRTOS_Tiny_TCP.c index 2778b7083b..ef647c38f1 100644 --- a/source/FreeRTOS_Tiny_TCP.c +++ b/source/FreeRTOS_Tiny_TCP.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_UDP_IP.c b/source/FreeRTOS_UDP_IP.c index d5ea687a73..d14a3f68cc 100644 --- a/source/FreeRTOS_UDP_IP.c +++ b/source/FreeRTOS_UDP_IP.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_UDP_IPv4.c b/source/FreeRTOS_UDP_IPv4.c index ceed53e93d..c97ec88a66 100644 --- a/source/FreeRTOS_UDP_IPv4.c +++ b/source/FreeRTOS_UDP_IPv4.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/FreeRTOS_UDP_IPv6.c b/source/FreeRTOS_UDP_IPv6.c index 80762bd9ca..de857998e7 100644 --- a/source/FreeRTOS_UDP_IPv6.c +++ b/source/FreeRTOS_UDP_IPv6.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOSIPConfigDefaults.h b/source/include/FreeRTOSIPConfigDefaults.h index cf1a6ba7ce..89cff24ab0 100644 --- a/source/include/FreeRTOSIPConfigDefaults.h +++ b/source/include/FreeRTOSIPConfigDefaults.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOSIPDeprecatedDefinitions.h b/source/include/FreeRTOSIPDeprecatedDefinitions.h index 48c71407f5..c430c48b9c 100644 --- a/source/include/FreeRTOSIPDeprecatedDefinitions.h +++ b/source/include/FreeRTOSIPDeprecatedDefinitions.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_ARP.h b/source/include/FreeRTOS_ARP.h index 21357b799b..024045c2da 100644 --- a/source/include/FreeRTOS_ARP.h +++ b/source/include/FreeRTOS_ARP.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_BitConfig.h b/source/include/FreeRTOS_BitConfig.h index 952bfb7149..94bf4a4e27 100644 --- a/source/include/FreeRTOS_BitConfig.h +++ b/source/include/FreeRTOS_BitConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP V2.3.1 + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/source/include/FreeRTOS_DHCP.h b/source/include/FreeRTOS_DHCP.h index f5b6433c18..850bf1d4d0 100644 --- a/source/include/FreeRTOS_DHCP.h +++ b/source/include/FreeRTOS_DHCP.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_DHCPv6.h b/source/include/FreeRTOS_DHCPv6.h index 0e2792c86e..c1338173da 100644 --- a/source/include/FreeRTOS_DHCPv6.h +++ b/source/include/FreeRTOS_DHCPv6.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP V2.3.1 + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/source/include/FreeRTOS_DNS.h b/source/include/FreeRTOS_DNS.h index 927921ec28..ba9c052dcb 100644 --- a/source/include/FreeRTOS_DNS.h +++ b/source/include/FreeRTOS_DNS.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_DNS_Cache.h b/source/include/FreeRTOS_DNS_Cache.h index 2dd6b19a30..0736f121ea 100644 --- a/source/include/FreeRTOS_DNS_Cache.h +++ b/source/include/FreeRTOS_DNS_Cache.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_DNS_Callback.h b/source/include/FreeRTOS_DNS_Callback.h index 94955c9252..b6841c79f1 100644 --- a/source/include/FreeRTOS_DNS_Callback.h +++ b/source/include/FreeRTOS_DNS_Callback.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_DNS_Globals.h b/source/include/FreeRTOS_DNS_Globals.h index b523badbb5..535d06d92f 100644 --- a/source/include/FreeRTOS_DNS_Globals.h +++ b/source/include/FreeRTOS_DNS_Globals.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_DNS_Networking.h b/source/include/FreeRTOS_DNS_Networking.h index 7a2ede391c..a621b08ede 100644 --- a/source/include/FreeRTOS_DNS_Networking.h +++ b/source/include/FreeRTOS_DNS_Networking.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_DNS_Parser.h b/source/include/FreeRTOS_DNS_Parser.h index e45e619249..afe18cb47f 100644 --- a/source/include/FreeRTOS_DNS_Parser.h +++ b/source/include/FreeRTOS_DNS_Parser.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_ICMP.h b/source/include/FreeRTOS_ICMP.h index 45eaf79639..ba46dd5f3f 100644 --- a/source/include/FreeRTOS_ICMP.h +++ b/source/include/FreeRTOS_ICMP.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_IP.h b/source/include/FreeRTOS_IP.h index cfbbca8bcf..d9659b0b23 100644 --- a/source/include/FreeRTOS_IP.h +++ b/source/include/FreeRTOS_IP.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -44,13 +44,11 @@ /* Constants defining the current version of the FreeRTOS+TCP * network stack. */ -#define ipFR_TCP_VERSION_NUMBER "V4.0.999" -#define ipFR_TCP_VERSION_MAJOR 4 -#define ipFR_TCP_VERSION_MINOR 0 +#define ipFR_TCP_VERSION_NUMBER "V4.2.2" +#define ipFR_TCP_VERSION_MAJOR 4 +#define ipFR_TCP_VERSION_MINOR 2 /* Development builds are always version 999. */ -#define ipFR_TCP_VERSION_BUILD 999 -/* Using TCP version to support backward compatibility in the Demo files. */ -#define FREERTOS_PLUS_TCP_VERSION 10 +#define ipFR_TCP_VERSION_BUILD 2 /* Some constants defining the sizes of several parts of a packet. * These defines come before including the configuration header files. */ @@ -62,6 +60,11 @@ #define ipSIZE_OF_UDP_HEADER 8U #define ipSIZE_OF_TCP_HEADER 20U +/* The maximum of int32 value. */ +#define ipINT32_MAX_VALUE ( ( int32_t ) 0x7FFFFFFF ) + +/* The minimum of int32 value. */ +#define ipINT32_MIN_VALUE ( ( int32_t ) 0x80000000 ) /* * Generate a randomized TCP Initial Sequence Number per RFC. @@ -272,6 +275,11 @@ uint32_t FreeRTOS_min_uint32( uint32_t a, size_t FreeRTOS_min_size_t( size_t a, size_t b ); +int32_t FreeRTOS_add_int32( int32_t a, + int32_t b ); +int32_t FreeRTOS_multiply_int32( int32_t a, + int32_t b ); + uint32_t FreeRTOS_round_up( uint32_t a, uint32_t d ); uint32_t FreeRTOS_round_down( uint32_t a, @@ -309,7 +317,7 @@ uint32_t FreeRTOS_round_down( uint32_t a, /* * FULL, UP-TO-DATE AND MAINTAINED REFERENCE DOCUMENTATION FOR ALL THESE * FUNCTIONS IS AVAILABLE ON THE FOLLOWING URL: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/FreeRTOS_TCP_API_Functions.html + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/01-FreeRTOS-plus-TCP-APIs */ /* FreeRTOS_IPInit_Multi() replaces the earlier FreeRTOS_IPInit(). It assumes diff --git a/source/include/FreeRTOS_IP_Common.h b/source/include/FreeRTOS_IP_Common.h index e557fd07b2..2ddb99dd84 100644 --- a/source/include/FreeRTOS_IP_Common.h +++ b/source/include/FreeRTOS_IP_Common.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_IP_Private.h b/source/include/FreeRTOS_IP_Private.h index b594582fc9..2e2a006301 100644 --- a/source/include/FreeRTOS_IP_Private.h +++ b/source/include/FreeRTOS_IP_Private.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_IP_Timers.h b/source/include/FreeRTOS_IP_Timers.h index 8d7a84e263..1a589b489c 100644 --- a/source/include/FreeRTOS_IP_Timers.h +++ b/source/include/FreeRTOS_IP_Timers.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_IP_Utils.h b/source/include/FreeRTOS_IP_Utils.h index 301f149055..1f3bc868c5 100644 --- a/source/include/FreeRTOS_IP_Utils.h +++ b/source/include/FreeRTOS_IP_Utils.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_IPv4.h b/source/include/FreeRTOS_IPv4.h index c0f9aa05b6..4531a4c42f 100644 --- a/source/include/FreeRTOS_IPv4.h +++ b/source/include/FreeRTOS_IPv4.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_IPv4_Private.h b/source/include/FreeRTOS_IPv4_Private.h index fd1cc922cf..f785d90357 100644 --- a/source/include/FreeRTOS_IPv4_Private.h +++ b/source/include/FreeRTOS_IPv4_Private.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_IPv4_Sockets.h b/source/include/FreeRTOS_IPv4_Sockets.h index 0d6ef32213..453402c8c2 100644 --- a/source/include/FreeRTOS_IPv4_Sockets.h +++ b/source/include/FreeRTOS_IPv4_Sockets.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_IPv4_Utils.h b/source/include/FreeRTOS_IPv4_Utils.h index 0ac2f66ce0..5daba6accb 100644 --- a/source/include/FreeRTOS_IPv4_Utils.h +++ b/source/include/FreeRTOS_IPv4_Utils.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_IPv6.h b/source/include/FreeRTOS_IPv6.h index 0706a7dac4..ec54b54f63 100644 --- a/source/include/FreeRTOS_IPv6.h +++ b/source/include/FreeRTOS_IPv6.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP V2.3.1 + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/source/include/FreeRTOS_IPv6_Private.h b/source/include/FreeRTOS_IPv6_Private.h index c56c9b32b3..29c8bb972d 100644 --- a/source/include/FreeRTOS_IPv6_Private.h +++ b/source/include/FreeRTOS_IPv6_Private.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -132,6 +132,8 @@ struct xNetworkEndPoint; struct xNetworkInterface; +#define ipICMPv6_GENERAL_FIELD_SIZE ( 4U ) + #include "pack_struct_start.h" struct xIP_HEADER_IPv6 { diff --git a/source/include/FreeRTOS_IPv6_Sockets.h b/source/include/FreeRTOS_IPv6_Sockets.h index c9a931e67a..77f7002508 100644 --- a/source/include/FreeRTOS_IPv6_Sockets.h +++ b/source/include/FreeRTOS_IPv6_Sockets.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_IPv6_Utils.h b/source/include/FreeRTOS_IPv6_Utils.h index db80071d4b..e0fafc0309 100644 --- a/source/include/FreeRTOS_IPv6_Utils.h +++ b/source/include/FreeRTOS_IPv6_Utils.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_ND.h b/source/include/FreeRTOS_ND.h index d0f1685313..1ca46aef86 100644 --- a/source/include/FreeRTOS_ND.h +++ b/source/include/FreeRTOS_ND.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP V2.3.1 + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/source/include/FreeRTOS_Routing.h b/source/include/FreeRTOS_Routing.h index 4a68bb3196..6f01997c8f 100644 --- a/source/include/FreeRTOS_Routing.h +++ b/source/include/FreeRTOS_Routing.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP V2.3.1 + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/source/include/FreeRTOS_Sockets.h b/source/include/FreeRTOS_Sockets.h index 0a93660a8f..68c42aa273 100644 --- a/source/include/FreeRTOS_Sockets.h +++ b/source/include/FreeRTOS_Sockets.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -199,7 +199,7 @@ /** * FULL, UP-TO-DATE AND MAINTAINED REFERENCE DOCUMENTATION FOR ALL THESE * FUNCTIONS IS AVAILABLE ON THE FOLLOWING URL: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/FreeRTOS_TCP_API_Functions.html + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/01-FreeRTOS-plus-TCP-APIs */ /* Common Socket Attributes. */ diff --git a/source/include/FreeRTOS_Stream_Buffer.h b/source/include/FreeRTOS_Stream_Buffer.h index 884ad044ab..443f69803e 100644 --- a/source/include/FreeRTOS_Stream_Buffer.h +++ b/source/include/FreeRTOS_Stream_Buffer.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_TCP_IP.h b/source/include/FreeRTOS_TCP_IP.h index 0e00c8a729..627a1dd9d3 100644 --- a/source/include/FreeRTOS_TCP_IP.h +++ b/source/include/FreeRTOS_TCP_IP.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -96,25 +96,26 @@ typedef enum eTCP_STATE /* * A few values of the TCP options: */ -#define tcpTCP_OPT_END 0U /**< End of TCP options list. */ -#define tcpTCP_OPT_NOOP 1U /**< "No-operation" TCP option. */ -#define tcpTCP_OPT_MSS 2U /**< Maximum segment size TCP option. */ -#define tcpTCP_OPT_WSOPT 3U /**< TCP Window Scale Option (3-byte long). */ -#define tcpTCP_OPT_SACK_P 4U /**< Advertise that SACK is permitted. */ -#define tcpTCP_OPT_SACK_A 5U /**< SACK option with first/last. */ -#define tcpTCP_OPT_TIMESTAMP 8U /**< Time-stamp option. */ +#define tcpTCP_OPT_END 0U /**< End of TCP options list. */ +#define tcpTCP_OPT_NOOP 1U /**< "No-operation" TCP option. */ +#define tcpTCP_OPT_MSS 2U /**< Maximum segment size TCP option. */ +#define tcpTCP_OPT_WSOPT 3U /**< TCP Window Scale Option (3-byte long). */ +#define tcpTCP_OPT_SACK_P 4U /**< Advertise that SACK is permitted. */ +#define tcpTCP_OPT_SACK_A 5U /**< SACK option with first/last. */ +#define tcpTCP_OPT_TIMESTAMP 8U /**< Time-stamp option. */ -#define tcpTCP_OPT_MSS_LEN 4U /**< Length of TCP MSS option. */ -#define tcpTCP_OPT_WSOPT_LEN 3U /**< Length of TCP WSOPT option. */ +#define tcpTCP_OPT_MSS_LEN 4U /**< Length of TCP MSS option. */ +#define tcpTCP_OPT_WSOPT_LEN 3U /**< Length of TCP WSOPT option. */ +#define tcpTCP_OPT_WSOPT_MAXIMUM_VALUE ( 14U ) /**< Maximum value of TCP WSOPT option. */ -#define tcpTCP_OPT_TIMESTAMP_LEN 10 /**< fixed length of the time-stamp option. */ +#define tcpTCP_OPT_TIMESTAMP_LEN 10 /**< fixed length of the time-stamp option. */ /** @brief * Minimum segment length as outlined by RFC 791 section 3.1. * Minimum segment length ( 536 ) = Minimum MTU ( 576 ) - IP Header ( 20 ) - TCP Header ( 20 ). */ -#define tcpMINIMUM_SEGMENT_LENGTH 536U +#define tcpMINIMUM_SEGMENT_LENGTH 536U /** @brief * The macro tcpNOW_CONNECTED() is use to determine if the connection makes a diff --git a/source/include/FreeRTOS_TCP_Reception.h b/source/include/FreeRTOS_TCP_Reception.h index 004b0f3c7d..48a654555c 100644 --- a/source/include/FreeRTOS_TCP_Reception.h +++ b/source/include/FreeRTOS_TCP_Reception.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_TCP_State_Handling.h b/source/include/FreeRTOS_TCP_State_Handling.h index 21208c5e21..85abe46870 100644 --- a/source/include/FreeRTOS_TCP_State_Handling.h +++ b/source/include/FreeRTOS_TCP_State_Handling.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_TCP_Transmission.h b/source/include/FreeRTOS_TCP_Transmission.h index df8f4824be..7f272eff8d 100644 --- a/source/include/FreeRTOS_TCP_Transmission.h +++ b/source/include/FreeRTOS_TCP_Transmission.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_TCP_Utils.h b/source/include/FreeRTOS_TCP_Utils.h index 12d2daf407..212c580af1 100644 --- a/source/include/FreeRTOS_TCP_Utils.h +++ b/source/include/FreeRTOS_TCP_Utils.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_TCP_WIN.h b/source/include/FreeRTOS_TCP_WIN.h index 36ea00cc14..d247744410 100644 --- a/source/include/FreeRTOS_TCP_WIN.h +++ b/source/include/FreeRTOS_TCP_WIN.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/FreeRTOS_UDP_IP.h b/source/include/FreeRTOS_UDP_IP.h index 0285aaebbe..df4b79ee7d 100644 --- a/source/include/FreeRTOS_UDP_IP.h +++ b/source/include/FreeRTOS_UDP_IP.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/IPTraceMacroDefaults.h b/source/include/IPTraceMacroDefaults.h index 3c3872f15f..2a68b3287c 100644 --- a/source/include/IPTraceMacroDefaults.h +++ b/source/include/IPTraceMacroDefaults.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -29,7 +29,7 @@ * @file IPTraceMacroDefaults.h * @brief This file provides default (empty) implementations for any IP trace * macros that are not defined by the user. See - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/TCP_IP_Trace.html + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/08-Trace-macros */ #ifndef IP_TRACE_MACRO_DEFAULTS_H diff --git a/source/include/NetworkBufferManagement.h b/source/include/NetworkBufferManagement.h index 3fd9804a3f..b7bbce27e1 100644 --- a/source/include/NetworkBufferManagement.h +++ b/source/include/NetworkBufferManagement.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/include/NetworkInterface.h b/source/include/NetworkInterface.h index 50b354ca9d..f8a4ea3ce5 100644 --- a/source/include/NetworkInterface.h +++ b/source/include/NetworkInterface.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -48,7 +48,7 @@ */ /* The following function is defined only when BufferAllocation_1.c is linked in the project. */ -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ); +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ); BaseType_t xGetPhyLinkStatus( struct xNetworkInterface * pxInterface ); diff --git a/source/portable/BufferManagement/BufferAllocation_1.c b/source/portable/BufferManagement/BufferAllocation_1.c index 2d564d0085..4495d15c01 100644 --- a/source/portable/BufferManagement/BufferAllocation_1.c +++ b/source/portable/BufferManagement/BufferAllocation_1.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -29,7 +29,7 @@ * * See the following web page for essential buffer allocation scheme usage and * configuration details: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/05-Buffer-management * ******************************************************************************/ @@ -70,6 +70,8 @@ static NetworkBufferDescriptor_t xNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DES * packet. No resizing will be done. */ const BaseType_t xBufferAllocFixedSize = pdTRUE; +static size_t uxMaxNetworkInterfaceAllocatedSizeBytes; + /* The semaphore used to obtain network buffers. */ static SemaphoreHandle_t xNetworkBufferSemaphore = NULL; @@ -201,7 +203,10 @@ BaseType_t xNetworkBuffersInitialise( void ) /* Initialise all the network buffers. The buffer storage comes * from the network interface, and different hardware has different * requirements. */ - vNetworkInterfaceAllocateRAMToBuffers( xNetworkBuffers ); + uxMaxNetworkInterfaceAllocatedSizeBytes = uxNetworkInterfaceAllocateRAMToBuffers( xNetworkBuffers ); + + /* The allocated buffer should hold atleast ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER bytes */ + configASSERT( ( uxMaxNetworkInterfaceAllocatedSizeBytes >= ( ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ) ) ); for( x = 0U; x < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; x++ ) { @@ -237,11 +242,8 @@ NetworkBufferDescriptor_t * pxGetNetworkBufferWithDescriptor( size_t xRequestedS BaseType_t xInvalid = pdFALSE; UBaseType_t uxCount; - /* The current implementation only has a single size memory block, so - * the requested size parameter is not used (yet). */ - ( void ) xRequestedSizeBytes; - - if( xNetworkBufferSemaphore != NULL ) + if( ( xNetworkBufferSemaphore != NULL ) && + ( xRequestedSizeBytes <= uxMaxNetworkInterfaceAllocatedSizeBytes ) ) { /* If there is a semaphore available, there is a network buffer * available. */ @@ -432,10 +434,18 @@ UBaseType_t uxGetNumberOfFreeNetworkBuffers( void ) NetworkBufferDescriptor_t * pxResizeNetworkBufferWithDescriptor( NetworkBufferDescriptor_t * pxNetworkBuffer, size_t xNewSizeBytes ) { - /* In BufferAllocation_1.c all network buffer are allocated with a - * maximum size of 'ipTOTAL_ETHERNET_FRAME_SIZE'.No need to resize the - * network buffer. */ - pxNetworkBuffer->xDataLength = xNewSizeBytes; + if( xNewSizeBytes <= uxMaxNetworkInterfaceAllocatedSizeBytes ) + { + /* In BufferAllocation_1.c all network buffer are allocated with a + * maximum size of 'ipTOTAL_ETHERNET_FRAME_SIZE'.No need to resize the + * network buffer. */ + pxNetworkBuffer->xDataLength = xNewSizeBytes; + } + else + { + pxNetworkBuffer = NULL; + } + return pxNetworkBuffer; } diff --git a/source/portable/BufferManagement/BufferAllocation_2.c b/source/portable/BufferManagement/BufferAllocation_2.c index 62169043c1..90b3e2dbb8 100644 --- a/source/portable/BufferManagement/BufferAllocation_2.c +++ b/source/portable/BufferManagement/BufferAllocation_2.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -31,7 +31,7 @@ * * See the following web page for essential buffer allocation scheme usage and * configuration details: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/05-Buffer-management * ******************************************************************************/ diff --git a/source/portable/Compiler/CompilerName/pack_struct_end.h b/source/portable/Compiler/CompilerName/pack_struct_end.h index 86252fc024..ce4ec435cb 100644 --- a/source/portable/Compiler/CompilerName/pack_struct_end.h +++ b/source/portable/Compiler/CompilerName/pack_struct_end.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ ; /* FIX ME. Update for the compiler specifier needed at end of a struct declaration to pack the struct. */ diff --git a/source/portable/Compiler/CompilerName/pack_struct_start.h b/source/portable/Compiler/CompilerName/pack_struct_start.h index 1f519674f8..bcf052db66 100644 --- a/source/portable/Compiler/CompilerName/pack_struct_start.h +++ b/source/portable/Compiler/CompilerName/pack_struct_start.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ /* FIX ME. Update for the compiler specifier needed at the start of a struct declaration to pack the struct. */ diff --git a/source/portable/Compiler/GCC/pack_struct_end.h b/source/portable/Compiler/GCC/pack_struct_end.h index 4f4b2f904b..5208f0015c 100644 --- a/source/portable/Compiler/GCC/pack_struct_end.h +++ b/source/portable/Compiler/GCC/pack_struct_end.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ __attribute__( ( packed ) ); diff --git a/source/portable/Compiler/GCC/pack_struct_start.h b/source/portable/Compiler/GCC/pack_struct_start.h index 5da2689d39..ef2e7ba1d5 100644 --- a/source/portable/Compiler/GCC/pack_struct_start.h +++ b/source/portable/Compiler/GCC/pack_struct_start.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ diff --git a/source/portable/Compiler/IAR/pack_struct_end.h b/source/portable/Compiler/IAR/pack_struct_end.h index 0f72081c4d..1ff188088c 100644 --- a/source/portable/Compiler/IAR/pack_struct_end.h +++ b/source/portable/Compiler/IAR/pack_struct_end.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ diff --git a/source/portable/Compiler/IAR/pack_struct_start.h b/source/portable/Compiler/IAR/pack_struct_start.h index 9cd5a3274d..d0174b2f88 100644 --- a/source/portable/Compiler/IAR/pack_struct_start.h +++ b/source/portable/Compiler/IAR/pack_struct_start.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ diff --git a/source/portable/Compiler/Keil/pack_struct_end.h b/source/portable/Compiler/Keil/pack_struct_end.h index 286b99a645..8466c8bb69 100644 --- a/source/portable/Compiler/Keil/pack_struct_end.h +++ b/source/portable/Compiler/Keil/pack_struct_end.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ ; diff --git a/source/portable/Compiler/Keil/pack_struct_start.h b/source/portable/Compiler/Keil/pack_struct_start.h index ea31babf92..858cc9fb39 100644 --- a/source/portable/Compiler/Keil/pack_struct_start.h +++ b/source/portable/Compiler/Keil/pack_struct_start.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ diff --git a/source/portable/Compiler/MPLAB_XC/pack_struct_end.h b/source/portable/Compiler/MPLAB_XC/pack_struct_end.h index 38472525c5..b6d6765385 100644 --- a/source/portable/Compiler/MPLAB_XC/pack_struct_end.h +++ b/source/portable/Compiler/MPLAB_XC/pack_struct_end.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ diff --git a/source/portable/Compiler/MPLAB_XC/pack_struct_start.h b/source/portable/Compiler/MPLAB_XC/pack_struct_start.h index fa61000c9d..89835e456d 100644 --- a/source/portable/Compiler/MPLAB_XC/pack_struct_start.h +++ b/source/portable/Compiler/MPLAB_XC/pack_struct_start.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,6 +28,6 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ diff --git a/source/portable/Compiler/MSVC/pack_struct_end.h b/source/portable/Compiler/MSVC/pack_struct_end.h index 6aed02ac6e..f591872cf3 100644 --- a/source/portable/Compiler/MSVC/pack_struct_end.h +++ b/source/portable/Compiler/MSVC/pack_struct_end.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ diff --git a/source/portable/Compiler/MSVC/pack_struct_start.h b/source/portable/Compiler/MSVC/pack_struct_start.h index 824902bdd9..dbe3930e89 100644 --- a/source/portable/Compiler/MSVC/pack_struct_start.h +++ b/source/portable/Compiler/MSVC/pack_struct_start.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ diff --git a/source/portable/Compiler/Renesas/pack_struct_end.h b/source/portable/Compiler/Renesas/pack_struct_end.h index f2b99123d0..c6f33f927f 100644 --- a/source/portable/Compiler/Renesas/pack_struct_end.h +++ b/source/portable/Compiler/Renesas/pack_struct_end.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ diff --git a/source/portable/Compiler/Renesas/pack_struct_start.h b/source/portable/Compiler/Renesas/pack_struct_start.h index 6d5325cbe6..4013fb2d8e 100644 --- a/source/portable/Compiler/Renesas/pack_struct_start.h +++ b/source/portable/Compiler/Renesas/pack_struct_start.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ diff --git a/source/portable/Compiler/Tasking/pack_struct_end.h b/source/portable/Compiler/Tasking/pack_struct_end.h index 96e3ea9468..6b711c5bd7 100644 --- a/source/portable/Compiler/Tasking/pack_struct_end.h +++ b/source/portable/Compiler/Tasking/pack_struct_end.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ diff --git a/source/portable/Compiler/Tasking/pack_struct_start.h b/source/portable/Compiler/Tasking/pack_struct_start.h index 5da2689d39..ef2e7ba1d5 100644 --- a/source/portable/Compiler/Tasking/pack_struct_start.h +++ b/source/portable/Compiler/Tasking/pack_struct_start.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ diff --git a/source/portable/NetworkInterface/ATSAM4E/NetworkInterface.c b/source/portable/NetworkInterface/ATSAM4E/NetworkInterface.c index 48a7b5bab8..00d9f411dc 100644 --- a/source/portable/NetworkInterface/ATSAM4E/NetworkInterface.c +++ b/source/portable/NetworkInterface/ATSAM4E/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/portable/NetworkInterface/ATSAME5x/NetworkInterface.c b/source/portable/NetworkInterface/ATSAME5x/NetworkInterface.c index 72fbd8c551..82437e9a46 100644 --- a/source/portable/NetworkInterface/ATSAME5x/NetworkInterface.c +++ b/source/portable/NetworkInterface/ATSAME5x/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -473,9 +473,10 @@ void xRxCallback( void ) #if ( ipUSE_STATIC_ALLOCATION == 1 ) -/* Next provide the vNetworkInterfaceAllocateRAMToBuffers() function, which - * simply fills in the pucEthernetBuffer member of each descriptor. */ - void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +/* Next provide the uxNetworkInterfaceAllocateRAMToBuffers() function, which + * simply fills in the pucEthernetBuffer member of each descriptor and returns + * the allocated buffer size. */ + size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { BaseType_t x; @@ -489,6 +490,8 @@ void xRxCallback( void ) * future versions. */ *( ( uint32_t * ) &ucBuffers[ x ][ 0 ] ) = ( uint32_t ) &( pxNetworkBuffers[ x ] ); } + + return( NETWORK_BUFFER_SIZE - ipBUFFER_PADDING ); } #endif /* if ( ipUSE_STATIC_ALLOCATION == 1 ) */ diff --git a/source/portable/NetworkInterface/Common/phyHandling.c b/source/portable/NetworkInterface/Common/phyHandling.c index 05041e93d9..282f8fec99 100644 --- a/source/portable/NetworkInterface/Common/phyHandling.c +++ b/source/portable/NetworkInterface/Common/phyHandling.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/portable/NetworkInterface/DriverSAM/NetworkInterface.c b/source/portable/NetworkInterface/DriverSAM/NetworkInterface.c index c787bbd0b8..4df4ff51ab 100644 --- a/source/portable/NetworkInterface/DriverSAM/NetworkInterface.c +++ b/source/portable/NetworkInterface/DriverSAM/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP V2.3.1 + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -1409,7 +1409,7 @@ static void vCheckBuffersAndQueue( void ) /*-----------------------------------------------------------*/ extern uint8_t ucNetworkPackets[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS * NETWORK_BUFFER_SIZE ]; -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { uint8_t * ucRAMBuffer = ucNetworkPackets; uint32_t ulIndex; @@ -1422,6 +1422,8 @@ void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkB } cache_clean_invalidate(); + + return( NETWORK_BUFFER_SIZE - ipBUFFER_PADDING ); } /*-----------------------------------------------------------*/ diff --git a/source/portable/NetworkInterface/LPC17xx/NetworkInterface.c b/source/portable/NetworkInterface/LPC17xx/NetworkInterface.c index be0a2647a3..f057c99f2c 100644 --- a/source/portable/NetworkInterface/LPC17xx/NetworkInterface.c +++ b/source/portable/NetworkInterface/LPC17xx/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/portable/NetworkInterface/LPC18xx/NetworkInterface.c b/source/portable/NetworkInterface/LPC18xx/NetworkInterface.c index 5f4e5742b4..e5ec34882b 100644 --- a/source/portable/NetworkInterface/LPC18xx/NetworkInterface.c +++ b/source/portable/NetworkInterface/LPC18xx/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -332,7 +332,7 @@ BaseType_t xNetworkInterfaceInitialise( void ) static __attribute__( ( section( "._ramAHB32" ) ) ) uint8_t ucNetworkPackets[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS * niBUFFER_1_PACKET_SIZE ] __attribute__( ( aligned( 32 ) ) ); -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { uint8_t * ucRAMBuffer = ucNetworkPackets; uint32_t ul; @@ -343,6 +343,8 @@ void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkB *( ( unsigned * ) ucRAMBuffer ) = ( unsigned ) ( &( pxNetworkBuffers[ ul ] ) ); ucRAMBuffer += niBUFFER_1_PACKET_SIZE; } + + return( niBUFFER_1_PACKET_SIZE - ipBUFFER_PADDING ); } /*-----------------------------------------------------------*/ diff --git a/source/portable/NetworkInterface/LPC54018/NetworkInterface.c b/source/portable/NetworkInterface/LPC54018/NetworkInterface.c index d6a822fb0b..5133a676ad 100644 --- a/source/portable/NetworkInterface/LPC54018/NetworkInterface.c +++ b/source/portable/NetworkInterface/LPC54018/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -372,11 +372,13 @@ BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkB /* statically allocate the buffers */ /* allocating them as uint32_t's to force them into word alignment, a requirement of the DMA. */ __ALIGN_BEGIN static uint32_t buffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ][ ( ipBUFFER_PADDING + ENET_RXBUFF_SIZE ) / sizeof( uint32_t ) + 1 ] __ALIGN_END; -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { for( int x = 0; x < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; x++ ) { pxNetworkBuffers[ x ].pucEthernetBuffer = ( uint8_t * ) &buffers[ x ][ 0 ] + ipBUFFER_PADDING; buffers[ x ][ 0 ] = ( uint32_t ) &pxNetworkBuffers[ x ]; } + + return ENET_RXBUFF_SIZE; } diff --git a/source/portable/NetworkInterface/M487/NetworkInterface.c b/source/portable/NetworkInterface/M487/NetworkInterface.c index fdced336a7..d5a1d15af7 100644 --- a/source/portable/NetworkInterface/M487/NetworkInterface.c +++ b/source/portable/NetworkInterface/M487/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -73,7 +73,7 @@ static void prvEMACHandlerTask( void * pvParameters ); static void prvPhyTmrCallback( TimerHandle_t xTimer ); /* The size of each buffer when BufferAllocation_1 is used: - * http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html */ + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/05-Buffer-management */ #define niBUFFER_1_PACKET_SIZE 1536 #ifdef __ICCARM__ @@ -180,7 +180,7 @@ BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxDescript } -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { uint8_t * ucRAMBuffer = ucNetworkPackets; uint32_t ul; @@ -191,6 +191,8 @@ void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkB *( ( unsigned * ) ucRAMBuffer ) = ( unsigned ) ( &( pxNetworkBuffers[ ul ] ) ); ucRAMBuffer += niBUFFER_1_PACKET_SIZE; } + + return( niBUFFER_1_PACKET_SIZE - ipBUFFER_PADDING ); } diff --git a/source/portable/NetworkInterface/MPS2_AN385/NetworkInterface.c b/source/portable/NetworkInterface/MPS2_AN385/NetworkInterface.c index 1c55f82dbf..c5c7bb6ebc 100644 --- a/source/portable/NetworkInterface/MPS2_AN385/NetworkInterface.c +++ b/source/portable/NetworkInterface/MPS2_AN385/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -368,7 +368,7 @@ static BaseType_t xMPS2_NetworkInterfaceOutput( NetworkInterface_t * pxInterface } /*-----------------------------------------------------------*/ -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { /* FIX ME if you want to use BufferAllocation_1.c, which uses statically * allocated network buffers. */ @@ -377,6 +377,7 @@ void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkB * without implementing this function. */ configASSERT( xRxTaskHandle == ( TaskHandle_t ) 1 ); ( void ) pxNetworkBuffers; + return 0; } /*-----------------------------------------------------------*/ diff --git a/source/portable/NetworkInterface/MPS3_AN552/NetworkInterface.c b/source/portable/NetworkInterface/MPS3_AN552/NetworkInterface.c index ac68594ac2..86f5106179 100644 --- a/source/portable/NetworkInterface/MPS3_AN552/NetworkInterface.c +++ b/source/portable/NetworkInterface/MPS3_AN552/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Copyright 2023 Arm Limited and/or its affiliates * @@ -485,7 +485,7 @@ static BaseType_t xLAN91C111_NetworkInterfaceOutput( NetworkInterface_t * pxInte } /*-----------------------------------------------------------*/ -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { /* FIX ME if you want to use BufferAllocation_1.c, which uses statically * allocated network buffers. */ @@ -494,6 +494,7 @@ void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkB * without implementing this function. */ configASSERT( 0 ); ( void ) pxNetworkBuffers; + return 0; } /*-----------------------------------------------------------*/ diff --git a/source/portable/NetworkInterface/MPS4_CS315/NetworkInterface.c b/source/portable/NetworkInterface/MPS4_CS315/NetworkInterface.c index ac68594ac2..86f5106179 100644 --- a/source/portable/NetworkInterface/MPS4_CS315/NetworkInterface.c +++ b/source/portable/NetworkInterface/MPS4_CS315/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Copyright 2023 Arm Limited and/or its affiliates * @@ -485,7 +485,7 @@ static BaseType_t xLAN91C111_NetworkInterfaceOutput( NetworkInterface_t * pxInte } /*-----------------------------------------------------------*/ -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { /* FIX ME if you want to use BufferAllocation_1.c, which uses statically * allocated network buffers. */ @@ -494,6 +494,7 @@ void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkB * without implementing this function. */ configASSERT( 0 ); ( void ) pxNetworkBuffers; + return 0; } /*-----------------------------------------------------------*/ diff --git a/source/portable/NetworkInterface/NXP1060/NetworkInterface.c b/source/portable/NetworkInterface/NXP1060/NetworkInterface.c index 4d50974258..e15104b083 100644 --- a/source/portable/NetworkInterface/NXP1060/NetworkInterface.c +++ b/source/portable/NetworkInterface/NXP1060/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/portable/NetworkInterface/RX/NetworkInterface.c b/source/portable/NetworkInterface/RX/NetworkInterface.c index 6f5d3a6c72..82051c0b49 100644 --- a/source/portable/NetworkInterface/RX/NetworkInterface.c +++ b/source/portable/NetworkInterface/RX/NetworkInterface.c @@ -406,13 +406,13 @@ static void prvEMACDeferredInterruptHandlerTask( void * pvParameters ) /*********************************************************************************************************************** - * Function Name: vNetworkInterfaceAllocateRAMToBuffers () + * Function Name: uxNetworkInterfaceAllocateRAMToBuffers () * Description : . * Arguments : pxNetworkBuffers * Return Value : none **********************************************************************************************************************/ -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { uint32_t ul; uint8_t * buffer_address; @@ -433,7 +433,9 @@ void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkB *( ( unsigned * ) buffer_address ) = ( unsigned ) ( &( pxNetworkBuffers[ ul ] ) ); buffer_address += ETHER_CFG_BUFSIZE; } -} /* End of function vNetworkInterfaceAllocateRAMToBuffers() */ + + return( ETHER_CFG_BUFSIZE - ipBUFFER_PADDING ); +} /* End of function uxNetworkInterfaceAllocateRAMToBuffers() */ /*********************************************************************************************************************** * Function Name: prvLinkStatusChange () diff --git a/source/portable/NetworkInterface/SH2A/NetworkInterface.c b/source/portable/NetworkInterface/SH2A/NetworkInterface.c index 3225126227..1ac5f21f70 100644 --- a/source/portable/NetworkInterface/SH2A/NetworkInterface.c +++ b/source/portable/NetworkInterface/SH2A/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/portable/NetworkInterface/STM32Fxx/NetworkInterface.c b/source/portable/NetworkInterface/STM32Fxx/NetworkInterface.c index 64e8071f58..ca3b45238e 100644 --- a/source/portable/NetworkInterface/STM32Fxx/NetworkInterface.c +++ b/source/portable/NetworkInterface/STM32Fxx/NetworkInterface.c @@ -4,7 +4,7 @@ */ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -1377,7 +1377,7 @@ static BaseType_t xSTM32F_GetPhyLinkStatus( NetworkInterface_t * pxInterface ) /* Uncomment this in case BufferAllocation_1.c is used. */ -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { static #if defined( STM32F7xx ) @@ -1393,6 +1393,8 @@ void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkB *( ( unsigned * ) ucRAMBuffer ) = ( unsigned ) ( &( pxNetworkBuffers[ ul ] ) ); ucRAMBuffer += ETH_MAX_PACKET_SIZE; } + + return( ETH_MAX_PACKET_SIZE - ipBUFFER_PADDING ); } /*-----------------------------------------------------------*/ diff --git a/source/portable/NetworkInterface/STM32Hxx/NetworkInterface.c b/source/portable/NetworkInterface/STM32Hxx/NetworkInterface.c index 4456d517e4..8dff991f56 100644 --- a/source/portable/NetworkInterface/STM32Hxx/NetworkInterface.c +++ b/source/portable/NetworkInterface/STM32Hxx/NetworkInterface.c @@ -4,7 +4,7 @@ */ /* - * FreeRTOS+TCP V2.3.2 + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -1031,7 +1031,7 @@ uint8_t ucNetworkPackets[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS * ETH_RX_BUF_SI #endif /* ( ipconfigZERO_COPY_RX_DRIVER != 0 || ipconfigZERO_COPY_TX_DRIVER != 0 ) */ __attribute__( ( aligned( 32 ) ) ); -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { uint8_t * ucRAMBuffer = ucNetworkPackets; uint32_t ul; @@ -1042,6 +1042,8 @@ void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkB *( ( unsigned * ) ucRAMBuffer ) = ( unsigned ) ( &( pxNetworkBuffers[ ul ] ) ); ucRAMBuffer += ETH_RX_BUF_SIZE; } + + return( ETH_RX_BUF_SIZE - ipBUFFER_PADDING ); } /*-----------------------------------------------------------*/ @@ -1174,6 +1176,12 @@ static void prvEMACHandlerTask( void * pvParameters ) */ if( xSTM32H_GetPhyLinkStatus( pxMyInterface ) == pdFALSE ) { + #if ( ipconfigSUPPORT_NETWORK_DOWN_EVENT != 0 ) + { + FreeRTOS_NetworkDown( pxMyInterface ); + } + #endif /* ( ipconfigSUPPORT_NETWORK_DOWN_EVENT != 0 ) */ + /* Stop the DMA transfer. */ HAL_ETH_Stop_IT( &( xEthHandle ) ); /* Clear the Transmit buffers. */ diff --git a/source/portable/NetworkInterface/TM4C/NetworkInterface.c b/source/portable/NetworkInterface/TM4C/NetworkInterface.c index 5a5a4f1cd3..bca3ae8573 100644 --- a/source/portable/NetworkInterface/TM4C/NetworkInterface.c +++ b/source/portable/NetworkInterface/TM4C/NetworkInterface.c @@ -57,7 +57,7 @@ #include "NetworkInterface.h" #include "phyHandling.h" -#define BUFFER_SIZE_WO_PADDING ( ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ) +#define BUFFER_SIZE_WO_PADDING ( ipTOTAL_ETHERNET_FRAME_SIZE ) #define BUFFER_SIZE ( BUFFER_SIZE_WO_PADDING + ipBUFFER_PADDING ) #define BUFFER_SIZE_ROUNDED_UP ( ( BUFFER_SIZE + 7 ) & ~0x7UL ) #define PHY_PHYS_ADDR 0 @@ -403,7 +403,7 @@ BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkB return success; } -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +void uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { BaseType_t i; @@ -415,6 +415,8 @@ void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkB /* Set the 'hidden' reference to the descriptor for use in DMA interrupts */ *( ( uint32_t * ) &_network_buffers[ i ][ 0 ] ) = ( uint32_t ) &( ( pxNetworkBuffers[ i ] ) ); } + + return( BUFFER_SIZE_ROUNDED_UP - ipBUFFER_PADDING ); } static BaseType_t _ethernet_mac_get( uint8_t * mac_address_bytes ) diff --git a/source/portable/NetworkInterface/ThirdParty/MSP432/NetworkInterface.c b/source/portable/NetworkInterface/ThirdParty/MSP432/NetworkInterface.c index bac7e4587c..1154bf3892 100644 --- a/source/portable/NetworkInterface/ThirdParty/MSP432/NetworkInterface.c +++ b/source/portable/NetworkInterface/ThirdParty/MSP432/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -997,7 +997,7 @@ BaseType_t xGetPhyLinkStatus( void ) #define BUFFER_SIZE_ALLOC1 ( ipTOTAL_ETHERNET_FRAME_SIZE + ipBUFFER_PADDING ) #define BUFFER_SIZE_ALLOC1_ROUNDED_UP ( ( BUFFER_SIZE_ALLOC1 + 7 ) & ~0x07UL ) static uint8_t ucBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ][ BUFFER_SIZE_ALLOC1_ROUNDED_UP ]; -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { BaseType_t x; @@ -1011,4 +1011,6 @@ void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkB * future versions. */ *( ( uint32_t * ) &ucBuffers[ x ][ 0 ] ) = ( uint32_t ) &( pxNetworkBuffers[ x ] ); } + + return( BUFFER_SIZE_ALLOC1_ROUNDED_UP - ipBUFFER_PADDING ); } diff --git a/source/portable/NetworkInterface/ThirdParty/MSP432/NetworkInterface.h b/source/portable/NetworkInterface/ThirdParty/MSP432/NetworkInterface.h index 70f59fff0c..9a17556288 100644 --- a/source/portable/NetworkInterface/ThirdParty/MSP432/NetworkInterface.h +++ b/source/portable/NetworkInterface/ThirdParty/MSP432/NetworkInterface.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/portable/NetworkInterface/ThirdParty/MSP432/NetworkMiddleware.c b/source/portable/NetworkInterface/ThirdParty/MSP432/NetworkMiddleware.c index 7a4f97f50b..63ba09582e 100644 --- a/source/portable/NetworkInterface/ThirdParty/MSP432/NetworkMiddleware.c +++ b/source/portable/NetworkInterface/ThirdParty/MSP432/NetworkMiddleware.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/portable/NetworkInterface/ThirdParty/MSP432/NetworkMiddleware.h b/source/portable/NetworkInterface/ThirdParty/MSP432/NetworkMiddleware.h index 57a37135de..833661f4e5 100644 --- a/source/portable/NetworkInterface/ThirdParty/MSP432/NetworkMiddleware.h +++ b/source/portable/NetworkInterface/ThirdParty/MSP432/NetworkMiddleware.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/portable/NetworkInterface/WinPCap/NetworkInterface.c b/source/portable/NetworkInterface/WinPCap/NetworkInterface.c index e7f8975a8a..5ec3054a43 100644 --- a/source/portable/NetworkInterface/WinPCap/NetworkInterface.c +++ b/source/portable/NetworkInterface/WinPCap/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -946,7 +946,7 @@ static const char * prvRemoveSpaces( char * pcBuffer, #define BUFFER_SIZE ( ipTOTAL_ETHERNET_FRAME_SIZE + ipBUFFER_PADDING ) #define BUFFER_SIZE_ROUNDED_UP ( ( BUFFER_SIZE + 7 ) & ~0x07UL ) -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { static uint8_t * pucNetworkPacketBuffers = NULL; size_t uxIndex; @@ -979,4 +979,6 @@ void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkB pxNetworkBuffers[ uxIndex ].pucEthernetBuffer = &( pucNetworkPacketBuffers[ uxOffset + ipBUFFER_PADDING ] ); } } + + return( BUFFER_SIZE_ROUNDED_UP - ipBUFFER_PADDING ); } diff --git a/source/portable/NetworkInterface/Zynq/NetworkInterface.c b/source/portable/NetworkInterface/Zynq/NetworkInterface.c index 25dfd8e0fe..997a826e5b 100644 --- a/source/portable/NetworkInterface/Zynq/NetworkInterface.c +++ b/source/portable/NetworkInterface/Zynq/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -64,7 +64,7 @@ #define niBMSR_LINK_STATUS 0x0004uL /* The size of each buffer when BufferAllocation_1 is used: - * http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html */ + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/05-Buffer-management */ #define niBUFFER_1_PACKET_SIZE 1536 /* Naming and numbering of PHY registers. */ @@ -466,7 +466,7 @@ static BaseType_t prvGMACWaitLS( BaseType_t xEMACIndex, /*-----------------------------------------------------------*/ #if ( nicUSE_UNCACHED_MEMORY == 0 ) - void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) + size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { static uint8_t ucNetworkPackets[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS * niBUFFER_1_PACKET_SIZE ] __attribute__( ( aligned( 32 ) ) ); uint8_t * ucRAMBuffer = ucNetworkPackets; @@ -478,9 +478,11 @@ static BaseType_t prvGMACWaitLS( BaseType_t xEMACIndex, *( ( unsigned * ) ucRAMBuffer ) = ( unsigned ) ( &( pxNetworkBuffers[ ul ] ) ); ucRAMBuffer += niBUFFER_1_PACKET_SIZE; } + + return( niBUFFER_1_PACKET_SIZE - ipBUFFER_PADDING ); } #else /* if ( nicUSE_UNCACHED_MEMORY == 0 ) */ - void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) + size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { static uint8_t * pucNetworkPackets = NULL; @@ -501,6 +503,8 @@ static BaseType_t prvGMACWaitLS( BaseType_t xEMACIndex, } } } + + return( niBUFFER_1_PACKET_SIZE - ipBUFFER_PADDING ); } #endif /* ( nicUSE_UNCACHED_MEMORY == 0 ) */ /*-----------------------------------------------------------*/ diff --git a/source/portable/NetworkInterface/Zynq/x_emacpsif_dma.c b/source/portable/NetworkInterface/Zynq/x_emacpsif_dma.c index f1684982bb..39c5da7e94 100644 --- a/source/portable/NetworkInterface/Zynq/x_emacpsif_dma.c +++ b/source/portable/NetworkInterface/Zynq/x_emacpsif_dma.c @@ -31,7 +31,7 @@ ******************************************************************************/ /* - * FreeRTOS+TCP V2.3.3 + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -89,7 +89,7 @@ #endif #define TX_OFFSET ipconfigPACKET_FILLER_SIZE -#define dmaRX_TX_BUFFER_SIZE 1536 +#define dmaRX_TX_BUFFER_SIZE ( 1536 - ipBUFFER_PADDING ) /* Defined in NetworkInterface.c */ extern TaskHandle_t xEMACTaskHandles[ XPAR_XEMACPS_NUM_INSTANCES ]; diff --git a/source/portable/NetworkInterface/board_family/NetworkInterface.c b/source/portable/NetworkInterface/board_family/NetworkInterface.c index 0a6fa05054..f41422f7a7 100644 --- a/source/portable/NetworkInterface/board_family/NetworkInterface.c +++ b/source/portable/NetworkInterface/board_family/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -31,7 +31,7 @@ * concrete implementations of the functions in this file. * * See the following URL for an explanation of this file and its functions: -* https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/03-Embedded_Ethernet_Porting * *****************************************************************************/ @@ -64,9 +64,10 @@ BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkB return pdFALSE; } -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { /* FIX ME. */ + return 0; } BaseType_t xGetPhyLinkStatus( void ) diff --git a/source/portable/NetworkInterface/board_family/ReadMe.txt b/source/portable/NetworkInterface/board_family/ReadMe.txt index 782e429355..352670ab5c 100644 --- a/source/portable/NetworkInterface/board_family/ReadMe.txt +++ b/source/portable/NetworkInterface/board_family/ReadMe.txt @@ -2,4 +2,4 @@ Update NetworkInterface.c and include other files needed by FreeRTOS+TCP here. Note: The NetworkInterface.c file in this directory is Not! to be used as is. The purpose of the file is to provide a template for writing a network interface. Each network interface will have to provide concrete implementations of the functions in NetworkInterface.c. -See the following URL for an explanation of the file and its functions: https://freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Porting.html \ No newline at end of file +See the following URL for an explanation of the file and its functions: https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/03-Embedded_Ethernet_Porting \ No newline at end of file diff --git a/source/portable/NetworkInterface/include/phyHandling.h b/source/portable/NetworkInterface/include/phyHandling.h index ed9cc3a469..d97bddd568 100644 --- a/source/portable/NetworkInterface/include/phyHandling.h +++ b/source/portable/NetworkInterface/include/phyHandling.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/portable/NetworkInterface/ksz8851snl/NetworkInterface.c b/source/portable/NetworkInterface/ksz8851snl/NetworkInterface.c index fb019faf6f..10a49e75bc 100644 --- a/source/portable/NetworkInterface/ksz8851snl/NetworkInterface.c +++ b/source/portable/NetworkInterface/ksz8851snl/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/portable/NetworkInterface/libslirp/MBuffNetifBackendLibslirp.c b/source/portable/NetworkInterface/libslirp/MBuffNetifBackendLibslirp.c index 85760bcbd9..340ada32d1 100644 --- a/source/portable/NetworkInterface/libslirp/MBuffNetifBackendLibslirp.c +++ b/source/portable/NetworkInterface/libslirp/MBuffNetifBackendLibslirp.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/portable/NetworkInterface/libslirp/MBuffNetworkInterface.c b/source/portable/NetworkInterface/libslirp/MBuffNetworkInterface.c index 3c2699acd0..b6a92521cd 100644 --- a/source/portable/NetworkInterface/libslirp/MBuffNetworkInterface.c +++ b/source/portable/NetworkInterface/libslirp/MBuffNetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -332,7 +332,7 @@ static BaseType_t xNetworkInterfaceOutput( NetworkInterface_t * pxNetif, * Called when the BufferAllocation1 scheme is used. * @param [in,out] pxNetworkBuffers Pointer to an array of NetworkBufferDescriptor_t to populate. */ -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { static uint8_t * pucNetworkPacketBuffers = NULL; size_t uxIndex; @@ -365,6 +365,8 @@ void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkB pxNetworkBuffers[ uxIndex ].pucEthernetBuffer = &( pucNetworkPacketBuffers[ uxOffset + ipBUFFER_PADDING ] ); } } + + return( BUFFER_SIZE_ROUNDED_UP - ipBUFFER_PADDING ); } BaseType_t xGetPhyLinkStatus( NetworkInterface_t * pxNetif ) diff --git a/source/portable/NetworkInterface/linux/NetworkInterface.c b/source/portable/NetworkInterface/linux/NetworkInterface.c index a198be31cb..945761b46b 100644 --- a/source/portable/NetworkInterface/linux/NetworkInterface.c +++ b/source/portable/NetworkInterface/linux/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -1098,7 +1098,7 @@ static void print_hex( unsigned const char * const bin_data, * Called when the BufferAllocation1 scheme is used. * @param [in,out] pxNetworkBuffers Pointer to an array of NetworkBufferDescriptor_t to populate. */ -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { static uint8_t * pucNetworkPacketBuffers = NULL; size_t uxIndex; @@ -1131,4 +1131,6 @@ void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkB pxNetworkBuffers[ uxIndex ].pucEthernetBuffer = &( pucNetworkPacketBuffers[ uxOffset + ipBUFFER_PADDING ] ); } } + + return( BUFFER_SIZE_ROUNDED_UP - ipBUFFER_PADDING ); } diff --git a/source/portable/NetworkInterface/loopback/loopbackNetworkInterface.c b/source/portable/NetworkInterface/loopback/loopbackNetworkInterface.c index cf66a62ffe..ec692dc33e 100644 --- a/source/portable/NetworkInterface/loopback/loopbackNetworkInterface.c +++ b/source/portable/NetworkInterface/loopback/loopbackNetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP V2.3.1 + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/source/portable/NetworkInterface/mw300_rd/NetworkInterface.c b/source/portable/NetworkInterface/mw300_rd/NetworkInterface.c index 26baf2ddc9..b72d132c21 100644 --- a/source/portable/NetworkInterface/mw300_rd/NetworkInterface.c +++ b/source/portable/NetworkInterface/mw300_rd/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -181,9 +181,15 @@ BaseType_t xNetworkInterfaceInitialise( void ) return ( xInterfaceState == INTERFACE_UP && ret == WM_SUCCESS ) ? pdTRUE : pdFALSE; } -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { /* FIX ME. */ + + /* Hard force an assert as this driver cannot be used with BufferAllocation_1.c + * without implementing this function. */ + configASSERT( 0 ); + ( void ) pxNetworkBuffers; + return 0; } BaseType_t xGetPhyLinkStatus( void ) diff --git a/source/portable/NetworkInterface/pic32mzef/BufferAllocation_2.c b/source/portable/NetworkInterface/pic32mzef/BufferAllocation_2.c index c177f6ff6f..ca2c05a89e 100644 --- a/source/portable/NetworkInterface/pic32mzef/BufferAllocation_2.c +++ b/source/portable/NetworkInterface/pic32mzef/BufferAllocation_2.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -29,7 +29,7 @@ * * See the following web page for essential buffer allocation scheme usage and * configuration details: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/05-Buffer-management * ******************************************************************************/ diff --git a/source/portable/NetworkInterface/xilinx_ultrascale/NetworkInterface.c b/source/portable/NetworkInterface/xilinx_ultrascale/NetworkInterface.c index 56dba016ae..ab9d6837c7 100644 --- a/source/portable/NetworkInterface/xilinx_ultrascale/NetworkInterface.c +++ b/source/portable/NetworkInterface/xilinx_ultrascale/NetworkInterface.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -68,7 +68,7 @@ #endif /* The size of each buffer when BufferAllocation_1 is used: - * http://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Buffer_Management.html */ + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/05-Buffer-management */ #if ( USE_JUMBO_FRAMES == 1 ) #define niBUFFER_1_PACKET_SIZE 10240 #else @@ -390,7 +390,7 @@ static BaseType_t prvGMACWaitLS( TickType_t xMaxTimeTicks ) /*-----------------------------------------------------------*/ #if ( nicUSE_UNCACHED_MEMORY == 0 ) - void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) + size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { static uint8_t ucNetworkPackets[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS * niBUFFER_1_PACKET_SIZE ] __attribute__( ( aligned( 32 ) ) ); uint8_t * ucRAMBuffer = ucNetworkPackets; @@ -402,9 +402,11 @@ static BaseType_t prvGMACWaitLS( TickType_t xMaxTimeTicks ) *( ( uintptr_t * ) ucRAMBuffer ) = ( uintptr_t ) &( pxNetworkBuffers[ ul ] ); ucRAMBuffer += niBUFFER_1_PACKET_SIZE; } + + return( niBUFFER_1_PACKET_SIZE - ipBUFFER_PADDING ); } #else /* if ( nicUSE_UNCACHED_MEMORY == 0 ) */ - void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) + size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { static uint8_t * pucNetworkPackets = NULL; @@ -425,6 +427,8 @@ static BaseType_t prvGMACWaitLS( TickType_t xMaxTimeTicks ) } } } + + return( niBUFFER_1_PACKET_SIZE - ipBUFFER_PADDING ); } #endif /* ( nicUSE_UNCACHED_MEMORY == 0 ) */ /*-----------------------------------------------------------*/ diff --git a/source/portable/NetworkInterface/xilinx_ultrascale/uncached_memory.c b/source/portable/NetworkInterface/xilinx_ultrascale/uncached_memory.c index c9035c7fb2..7f6aa66baa 100644 --- a/source/portable/NetworkInterface/xilinx_ultrascale/uncached_memory.c +++ b/source/portable/NetworkInterface/xilinx_ultrascale/uncached_memory.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/source/portable/NetworkInterface/xilinx_ultrascale/x_emacpsif_dma.c b/source/portable/NetworkInterface/xilinx_ultrascale/x_emacpsif_dma.c index 34ec35a46e..61ea723376 100644 --- a/source/portable/NetworkInterface/xilinx_ultrascale/x_emacpsif_dma.c +++ b/source/portable/NetworkInterface/xilinx_ultrascale/x_emacpsif_dma.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -85,9 +85,9 @@ #endif /* ( ipconfigNETWORK_MTU > 1526 ) */ #if ( USE_JUMBO_FRAMES == 1 ) - #define dmaRX_TX_BUFFER_SIZE 10240 + #define dmaRX_TX_BUFFER_SIZE ( 10240 - ipBUFFER_PADDING ) #else - #define dmaRX_TX_BUFFER_SIZE 1536 + #define dmaRX_TX_BUFFER_SIZE ( 1536 - ipBUFFER_PADDING ) #endif /* ( USE_JUMBO_FRAMES == 1 ) */ #if ( ipconfigULTRASCALE == 1 ) diff --git a/test/Coverity/ConfigFiles/FreeRTOSConfig.h b/test/Coverity/ConfigFiles/FreeRTOSConfig.h index f98d4c7796..27e95bd7a3 100644 --- a/test/Coverity/ConfigFiles/FreeRTOSConfig.h +++ b/test/Coverity/ConfigFiles/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/Coverity/ConfigFiles/FreeRTOSIPConfig.h b/test/Coverity/ConfigFiles/FreeRTOSIPConfig.h index 6d3da4df7a..25fe470594 100644 --- a/test/Coverity/ConfigFiles/FreeRTOSIPConfig.h +++ b/test/Coverity/ConfigFiles/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -103,7 +103,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/Coverity/ConfigFiles/pack_struct_end.h b/test/Coverity/ConfigFiles/pack_struct_end.h index dc615181a2..88f093e976 100644 --- a/test/Coverity/ConfigFiles/pack_struct_end.h +++ b/test/Coverity/ConfigFiles/pack_struct_end.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ diff --git a/test/Coverity/ConfigFiles/pack_struct_start.h b/test/Coverity/ConfigFiles/pack_struct_start.h index 5da2689d39..ef2e7ba1d5 100644 --- a/test/Coverity/ConfigFiles/pack_struct_start.h +++ b/test/Coverity/ConfigFiles/pack_struct_start.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ diff --git a/test/Coverity/ConfigFiles/portmacro.h b/test/Coverity/ConfigFiles/portmacro.h index e315c4e839..cda7fc25fd 100644 --- a/test/Coverity/ConfigFiles/portmacro.h +++ b/test/Coverity/ConfigFiles/portmacro.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/Coverity/README.md b/test/Coverity/README.md index db4579b585..f75869c560 100644 --- a/test/Coverity/README.md +++ b/test/Coverity/README.md @@ -13,7 +13,7 @@ see the [MISRA.md](https://github.com/FreeRTOS/FreeRTOS-Plus-TCP/blob/main/MISRA ## Getting Started ### Prerequisites -You can run this on a platform supported by Coverity. The list and other details can be found [here](https://sig-docs.synopsys.com/polaris/topics/c_coverity-compatible-platforms.html). +You can run this on a platform supported by Coverity. The list and other details can be found [here](https://documentation.blackduck.com/bundle/coverity-docs/page/deploy-install-guide/topics/supported_platforms_for_coverity_analysis.html). To compile and run the Coverity target successfully, you must have the following: 1. CMake version > 3.13.0 (You can check whether you have this by typing `cmake --version`) diff --git a/test/build-combination/AllDisable/FreeRTOSIPConfig.h b/test/build-combination/AllDisable/FreeRTOSIPConfig.h index b84c2670c6..1cbc3c815c 100644 --- a/test/build-combination/AllDisable/FreeRTOSIPConfig.h +++ b/test/build-combination/AllDisable/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -99,7 +99,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 0 diff --git a/test/build-combination/AllEnable/FreeRTOSIPConfig.h b/test/build-combination/AllEnable/FreeRTOSIPConfig.h index bdafa06272..813818c7b8 100644 --- a/test/build-combination/AllEnable/FreeRTOSIPConfig.h +++ b/test/build-combination/AllEnable/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -130,7 +130,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/build-combination/Common/FreeRTOSConfig.h b/test/build-combination/Common/FreeRTOSConfig.h index fbfac53dff..04f6c5bc2e 100644 --- a/test/build-combination/Common/FreeRTOSConfig.h +++ b/test/build-combination/Common/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/build-combination/Common/main.c b/test/build-combination/Common/main.c index f2617a1d26..956ad839b5 100644 --- a/test/build-combination/Common/main.c +++ b/test/build-combination/Common/main.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/build-combination/DefaultConf/FreeRTOSIPConfig.h b/test/build-combination/DefaultConf/FreeRTOSIPConfig.h index 313c401e6e..596b2a529a 100644 --- a/test/build-combination/DefaultConf/FreeRTOSIPConfig.h +++ b/test/build-combination/DefaultConf/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/build-combination/Enable_IPv4/FreeRTOSIPConfig.h b/test/build-combination/Enable_IPv4/FreeRTOSIPConfig.h index 1af6f8bf92..0518724e05 100644 --- a/test/build-combination/Enable_IPv4/FreeRTOSIPConfig.h +++ b/test/build-combination/Enable_IPv4/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -133,7 +133,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/build-combination/Enable_IPv4_IPv6/FreeRTOSIPConfig.h b/test/build-combination/Enable_IPv4_IPv6/FreeRTOSIPConfig.h index 758c68f907..a10a7d7478 100644 --- a/test/build-combination/Enable_IPv4_IPv6/FreeRTOSIPConfig.h +++ b/test/build-combination/Enable_IPv4_IPv6/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -133,7 +133,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/build-combination/Enable_IPv4_TCP/FreeRTOSIPConfig.h b/test/build-combination/Enable_IPv4_TCP/FreeRTOSIPConfig.h index 9689f54a66..5b1592d296 100644 --- a/test/build-combination/Enable_IPv4_TCP/FreeRTOSIPConfig.h +++ b/test/build-combination/Enable_IPv4_TCP/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -133,7 +133,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/build-combination/Enable_IPv6/FreeRTOSIPConfig.h b/test/build-combination/Enable_IPv6/FreeRTOSIPConfig.h index 5be4d7c3f4..db73d29a69 100644 --- a/test/build-combination/Enable_IPv6/FreeRTOSIPConfig.h +++ b/test/build-combination/Enable_IPv6/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -133,7 +133,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/build-combination/Enable_IPv6_TCP/FreeRTOSIPConfig.h b/test/build-combination/Enable_IPv6_TCP/FreeRTOSIPConfig.h index 2a4b581d9e..ffb46b4eda 100644 --- a/test/build-combination/Enable_IPv6_TCP/FreeRTOSIPConfig.h +++ b/test/build-combination/Enable_IPv6_TCP/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -133,7 +133,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/build-combination/Header_Self_Contain/FreeRTOSConfig.h b/test/build-combination/Header_Self_Contain/FreeRTOSConfig.h index fbfac53dff..04f6c5bc2e 100644 --- a/test/build-combination/Header_Self_Contain/FreeRTOSConfig.h +++ b/test/build-combination/Header_Self_Contain/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/build-combination/Header_Self_Contain/FreeRTOSIPConfig.h b/test/build-combination/Header_Self_Contain/FreeRTOSIPConfig.h index 0516653469..a854067d36 100644 --- a/test/build-combination/Header_Self_Contain/FreeRTOSIPConfig.h +++ b/test/build-combination/Header_Self_Contain/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -129,7 +129,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/cbmc/patches/FreeRTOSConfig.h b/test/cbmc/patches/FreeRTOSConfig.h index e0d033b4fb..6965b8c8ea 100644 --- a/test/cbmc/patches/FreeRTOSConfig.h +++ b/test/cbmc/patches/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/cbmc/patches/FreeRTOSIPConfig.h b/test/cbmc/patches/FreeRTOSIPConfig.h index f94bfb655a..dcb3a2513c 100644 --- a/test/cbmc/patches/FreeRTOSIPConfig.h +++ b/test/cbmc/patches/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of @@ -96,7 +96,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/cbmc/proofs/ARP/ARPAgeCache/ARPAgeCache_harness.c b/test/cbmc/proofs/ARP/ARPAgeCache/ARPAgeCache_harness.c index 5a5b3e7c2a..509cacb7ba 100644 --- a/test/cbmc/proofs/ARP/ARPAgeCache/ARPAgeCache_harness.c +++ b/test/cbmc/proofs/ARP/ARPAgeCache/ARPAgeCache_harness.c @@ -33,6 +33,12 @@ BaseType_t NetworkInterfaceOutputFunction_Stub( struct xNetworkInterface * pxDes return 0; } + +void FreeRTOS_OutputAdvertiseIPv6( NetworkEndPoint_t * pxEndPoint ) +{ + __CPROVER_assert( pxEndPoint != NULL, "The Endpoint cannot be NULL." ); +} + void harness() { /* diff --git a/test/cbmc/proofs/ARP/ARPAgeCache/Makefile.json b/test/cbmc/proofs/ARP/ARPAgeCache/Makefile.json index 24de2ff3c0..b122ddc7dc 100644 --- a/test/cbmc/proofs/ARP/ARPAgeCache/Makefile.json +++ b/test/cbmc/proofs/ARP/ARPAgeCache/Makefile.json @@ -15,6 +15,9 @@ "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_Routing.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_ARP.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Utils.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/tasks.goto" ], "DEF": diff --git a/test/cbmc/proofs/ARP/ARPGetCacheEntry/ARPGetCacheEntry_harness.c b/test/cbmc/proofs/ARP/ARPGetCacheEntry/ARPGetCacheEntry_harness.c index 9b1e4b227c..51bad65b7e 100644 --- a/test/cbmc/proofs/ARP/ARPGetCacheEntry/ARPGetCacheEntry_harness.c +++ b/test/cbmc/proofs/ARP/ARPGetCacheEntry/ARPGetCacheEntry_harness.c @@ -12,6 +12,7 @@ void harness() { uint32_t ulIPAddress; MACAddress_t xMACAddress; + struct xNetworkEndPoint * pxEndPoint = NULL; /* * For this proof, its assumed that the endpoints and interfaces are correctly @@ -38,13 +39,5 @@ void harness() pxNetworkEndPoints->pxNext = NULL; } - NetworkInterface_t ** ppxInterface = ( NetworkInterface_t ** ) malloc( sizeof( NetworkInterface_t * ) ); - - if( ppxInterface ) - { - *ppxInterface = ( NetworkInterface_t * ) malloc( sizeof( NetworkInterface_t ) ); - __CPROVER_assume( *ppxInterface != NULL ); - } - - eARPGetCacheEntry( &ulIPAddress, &xMACAddress, ppxInterface ); + eARPGetCacheEntry( &ulIPAddress, &xMACAddress, &pxEndPoint ); } diff --git a/test/cbmc/proofs/ARP/ARPGetCacheEntry/Configurations.json b/test/cbmc/proofs/ARP/ARPGetCacheEntry/Configurations.json index aa4d602966..3301afb404 100644 --- a/test/cbmc/proofs/ARP/ARPGetCacheEntry/Configurations.json +++ b/test/cbmc/proofs/ARP/ARPGetCacheEntry/Configurations.json @@ -14,6 +14,8 @@ [ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_Routing.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IPv4.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IPv4_Utils.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_ARP.goto" ], "DEF": diff --git a/test/cbmc/proofs/ARP/ARPProcessPacket/ARPProcessPacket_harness.c b/test/cbmc/proofs/ARP/ARPProcessPacket/ARPProcessPacket_harness.c index 539f02d180..7be8045595 100644 --- a/test/cbmc/proofs/ARP/ARPProcessPacket/ARPProcessPacket_harness.c +++ b/test/cbmc/proofs/ARP/ARPProcessPacket/ARPProcessPacket_harness.c @@ -1,5 +1,3 @@ -#include "cbmc.h" - /* FreeRTOS includes. */ #include "FreeRTOS.h" #include "queue.h" @@ -10,8 +8,37 @@ #include "FreeRTOS_ARP.h" #include "FreeRTOS_Routing.h" +/* CBMC includes. */ +#include "cbmc.h" + /* This pointer is maintained by the IP-task. Defined in FreeRTOS_IP.c */ extern NetworkBufferDescriptor_t * pxARPWaitingNetworkBuffer; +NetworkEndPoint_t * pxNetworkEndPoint_Temp; + +/* Stub FreeRTOS_FindEndPointOnNetMask_IPv6 as its not relevant to the + * correctness of the proof */ +NetworkEndPoint_t * FreeRTOS_FindEndPointOnNetMask_IPv6( const IPv6_Address_t * pxIPv6Address ) +{ + __CPROVER_assert( pxIPv6Address != NULL, "Precondition: pxIPv6Address != NULL" ); + + /* Assume at least one end-point is available */ + return pxNetworkEndPoint_Temp; +} + +/* Stub FreeRTOS_FindEndPointOnNetMask_IPv6 as its not relevant to the + * correctness of the proof */ +NetworkEndPoint_t * FreeRTOS_FindEndPointOnNetMask( uint32_t ulIPAddress, + uint32_t ulWhere ) +{ + /* Assume at least one end-point is available */ + return pxNetworkEndPoint_Temp; +} + +/* Get rid of configASSERT in FreeRTOS_TCP_IP.c */ +BaseType_t xIsCallingFromIPTask( void ) +{ + return pdTRUE; +} /* This is an output function and need not be tested with this proof. */ void FreeRTOS_OutputARPRequest_Multi( NetworkEndPoint_t * pxEndPoint, @@ -36,9 +63,19 @@ eARPLookupResult_t eARPGetCacheEntry( uint32_t * pulIPAddress, void harness() { - NetworkBufferDescriptor_t xLocalBuffer; + NetworkBufferDescriptor_t * pxLocalBuffer; + NetworkBufferDescriptor_t * pxNetworkBuffer2; + TickType_t xBlockTimeTicks; uint16_t usEthernetBufferSize; + /* + * The assumption made here is that the buffer pointed by pucEthernetBuffer + * is at least allocated to sizeof(ARPPacket_t) size but eventually an even larger buffer. + * This is not checked inside eARPProcessPacket. + */ + uint8_t ucBUFFER_SIZE; + + /* Non deterministically determine whether the pxARPWaitingNetworkBuffer will * point to some valid data or will it be NULL. */ if( nondet_bool() ) @@ -47,48 +84,34 @@ void harness() * checked in the function as the pointer is stored by the IP-task itself * and therefore it will always be of the required size. */ __CPROVER_assume( usEthernetBufferSize >= sizeof( IPPacket_t ) ); - - /* Add matching data length to the network buffer descriptor. */ - __CPROVER_assume( xLocalBuffer.xDataLength == usEthernetBufferSize ); - - xLocalBuffer.pucEthernetBuffer = malloc( usEthernetBufferSize ); + pxLocalBuffer = pxGetNetworkBufferWithDescriptor( usEthernetBufferSize, xBlockTimeTicks ); /* Since this pointer is maintained by the IP-task, either the pointer - * pxARPWaitingNetworkBuffer will be NULL or xLocalBuffer.pucEthernetBuffer + * pxARPWaitingNetworkBuffer will be NULL or pxLocalBuffer->pucEthernetBuffer * will be non-NULL. */ - __CPROVER_assume( xLocalBuffer.pucEthernetBuffer != NULL ); + __CPROVER_assume( pxLocalBuffer != NULL ); + __CPROVER_assume( pxLocalBuffer->pucEthernetBuffer != NULL ); + __CPROVER_assume( pxLocalBuffer->xDataLength == usEthernetBufferSize ); - pxARPWaitingNetworkBuffer = &xLocalBuffer; + pxARPWaitingNetworkBuffer = pxLocalBuffer; } else { pxARPWaitingNetworkBuffer = NULL; } - /* - * The assumption made here is that the buffer pointed by pucEthernetBuffer - * is at least allocated to sizeof(ARPPacket_t) size but eventually an even larger buffer. - * This is not checked inside eARPProcessPacket. - */ - uint8_t ucBUFFER_SIZE; - - void * xBuffer = malloc( ucBUFFER_SIZE + sizeof( ARPPacket_t ) ); - - __CPROVER_assume( xBuffer != NULL ); - - NetworkBufferDescriptor_t xNetworkBuffer2; - - xNetworkBuffer2.pucEthernetBuffer = xBuffer; - xNetworkBuffer2.xDataLength = ucBUFFER_SIZE + sizeof( ARPPacket_t ); + pxNetworkBuffer2 = pxGetNetworkBufferWithDescriptor( ucBUFFER_SIZE + sizeof( ARPPacket_t ), xBlockTimeTicks ); + __CPROVER_assume( pxNetworkBuffer2 != NULL ); + __CPROVER_assume( pxNetworkBuffer2->pucEthernetBuffer != NULL ); /* * This proof assumes one end point is present. */ - xNetworkBuffer2.pxEndPoint = ( NetworkEndPoint_t * ) malloc( sizeof( NetworkEndPoint_t ) ); - __CPROVER_assume( xNetworkBuffer2.pxEndPoint != NULL ); - xNetworkBuffer2.pxEndPoint->pxNext = NULL; + pxNetworkBuffer2->pxEndPoint = ( NetworkEndPoint_t * ) safeMalloc( sizeof( NetworkEndPoint_t ) ); + __CPROVER_assume( pxNetworkBuffer2->pxEndPoint != NULL ); + pxNetworkBuffer2->pxEndPoint->pxNext = NULL; /* eARPProcessPacket will be called in the source code only after checking if - * xNetworkBuffer2.pucEthernetBuffer is not NULL, hence, __CPROVER_assume( xBuffer != NULL ); */ - eARPProcessPacket( &xNetworkBuffer2 ); + * pxNetworkBuffer2->pucEthernetBuffer is not NULL, hence, __CPROVER_assume( xBuffer != NULL ); */ + eARPProcessPacket( pxNetworkBuffer2 ); } diff --git a/test/cbmc/proofs/ARP/ARPProcessPacket/Makefile.json b/test/cbmc/proofs/ARP/ARPProcessPacket/Makefile.json index 00079ded19..003611ae97 100644 --- a/test/cbmc/proofs/ARP/ARPProcessPacket/Makefile.json +++ b/test/cbmc/proofs/ARP/ARPProcessPacket/Makefile.json @@ -11,6 +11,9 @@ [ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_ARP.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto" + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto" ] } diff --git a/test/cbmc/proofs/ARP/ARPSendGratuitous/Makefile.json b/test/cbmc/proofs/ARP/ARPSendGratuitous/Makefile.json index f069f59597..044a2b2c2d 100644 --- a/test/cbmc/proofs/ARP/ARPSendGratuitous/Makefile.json +++ b/test/cbmc/proofs/ARP/ARPSendGratuitous/Makefile.json @@ -10,7 +10,9 @@ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_ARP.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto", - "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/tasks.goto" + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Utils.goto", + "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/tasks.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto" ], "DEF": [ diff --git a/test/cbmc/proofs/ARP/ARP_FreeRTOS_OutputARPRequest/Configurations.json b/test/cbmc/proofs/ARP/ARP_FreeRTOS_OutputARPRequest/Configurations.json index 62bb3e0523..5e2c516c39 100644 --- a/test/cbmc/proofs/ARP/ARP_FreeRTOS_OutputARPRequest/Configurations.json +++ b/test/cbmc/proofs/ARP/ARP_FreeRTOS_OutputARPRequest/Configurations.json @@ -37,7 +37,9 @@ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_Routing.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_ARP.goto" + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_ARP.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto" ], #That is the minimal required size for an ARPPacket_t plus offset in the buffer. "MINIMUM_PACKET_BYTES": 50, diff --git a/test/cbmc/proofs/ARP/ARP_FreeRTOS_OutputARPRequest/OutputARPRequest_harness.c b/test/cbmc/proofs/ARP/ARP_FreeRTOS_OutputARPRequest/OutputARPRequest_harness.c index 9337fb4f74..b5b45cf674 100644 --- a/test/cbmc/proofs/ARP/ARP_FreeRTOS_OutputARPRequest/OutputARPRequest_harness.c +++ b/test/cbmc/proofs/ARP/ARP_FreeRTOS_OutputARPRequest/OutputARPRequest_harness.c @@ -35,6 +35,8 @@ #include "FreeRTOS_IP_Private.h" #include "FreeRTOS_ARP.h" +/* CBMC includes. */ +#include "cbmc.h" ARPPacket_t xARPPacket; NetworkBufferDescriptor_t xNetworkBuffer; @@ -56,15 +58,15 @@ NetworkBufferDescriptor_t * pxGetNetworkBufferWithDescriptor( size_t xRequestedS { #ifdef CBMC_PROOF_ASSUMPTION_HOLDS #if ( ipconfigETHERNET_MINIMUM_PACKET_BYTES > 0 ) - xNetworkBuffer.pucEthernetBuffer = malloc( ipconfigETHERNET_MINIMUM_PACKET_BYTES ); + xNetworkBuffer.pucEthernetBuffer = safeMalloc( ipconfigETHERNET_MINIMUM_PACKET_BYTES ); #else - xNetworkBuffer.pucEthernetBuffer = malloc( xRequestedSizeBytes ); + xNetworkBuffer.pucEthernetBuffer = safeMalloc( xRequestedSizeBytes ); #endif #else uint32_t malloc_size; __CPROVER_assert( !__CPROVER_overflow_mult( 2, xRequestedSizeBytes ) ); __CPROVER_assume( malloc_size > 0 && malloc_size < 2 * xRequestedSizeBytes ); - xNetworkBuffer.pucEthernetBuffer = malloc( malloc_size ); + xNetworkBuffer.pucEthernetBuffer = safeMalloc( malloc_size ); #endif __CPROVER_assume( xNetworkBuffer.pucEthernetBuffer != NULL ); @@ -72,6 +74,21 @@ NetworkBufferDescriptor_t * pxGetNetworkBufferWithDescriptor( size_t xRequestedS return &xNetworkBuffer; } +/* STUB! + * In this function, it only allocates network buffer by pxGetNetworkBufferWithDescriptor + * stub function above here. In this case, we should just free the allocated pucEthernetBuffer. + */ +void vReleaseNetworkBufferAndDescriptor( NetworkBufferDescriptor_t * const pxNetworkBuffer ) +{ + __CPROVER_assert( pxNetworkBuffer != NULL, + "Precondition: pxNetworkBuffer != NULL" ); + + if( pxNetworkBuffer->pucEthernetBuffer != NULL ) + { + free( pxNetworkBuffer->pucEthernetBuffer ); + } +} + BaseType_t NetworkInterfaceOutputFunction_Stub( struct xNetworkInterface * pxDescriptor, NetworkBufferDescriptor_t * const pxNetworkBuffer, BaseType_t xReleaseAfterSend ) @@ -81,6 +98,14 @@ BaseType_t NetworkInterfaceOutputFunction_Stub( struct xNetworkInterface * pxDes __CPROVER_assert( pxNetworkBuffer->pucEthernetBuffer != NULL, "The ethernet buffer cannot be NULL." ); } +BaseType_t xIsCallingFromIPTask( void ) +{ + BaseType_t xReturn; + + __CPROVER_assume( xReturn == pdFALSE || xReturn == pdTRUE ); + + return xReturn; +} void harness() { @@ -92,16 +117,16 @@ void harness() * Assumes one endpoint and interface is present. */ - pxNetworkEndPoints = ( NetworkEndPoint_t * ) malloc( sizeof( NetworkEndPoint_t ) ); + pxNetworkEndPoints = ( NetworkEndPoint_t * ) safeMalloc( sizeof( NetworkEndPoint_t ) ); __CPROVER_assume( pxNetworkEndPoints != NULL ); /* Interface init. */ - pxNetworkEndPoints->pxNetworkInterface = ( NetworkInterface_t * ) malloc( sizeof( NetworkInterface_t ) ); + pxNetworkEndPoints->pxNetworkInterface = ( NetworkInterface_t * ) safeMalloc( sizeof( NetworkInterface_t ) ); __CPROVER_assume( pxNetworkEndPoints->pxNetworkInterface != NULL ); if( nondet_bool() ) { - pxNetworkEndPoints->pxNext = ( NetworkEndPoint_t * ) malloc( sizeof( NetworkEndPoint_t ) ); + pxNetworkEndPoints->pxNext = ( NetworkEndPoint_t * ) safeMalloc( sizeof( NetworkEndPoint_t ) ); __CPROVER_assume( pxNetworkEndPoints->pxNext != NULL ); pxNetworkEndPoints->pxNext->pxNext = NULL; pxNetworkEndPoints->pxNext->pxNetworkInterface = pxNetworkEndPoints->pxNetworkInterface; diff --git a/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/Configurations.json b/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/Configurations.json index e243382c31..8e0123bdc9 100644 --- a/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/Configurations.json +++ b/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/Configurations.json @@ -4,7 +4,7 @@ "CBMCFLAGS": [ "--unwind {MINIMUM_PACKET_BYTES}", - "--unwindset xNetworkBuffersInitialise.0:3,xNetworkBuffersInitialise.1:3,vListInsert.0:3,pxGetNetworkBufferWithDescriptor.0:3,pxGetNetworkBufferWithDescriptor.1:3,vNetworkInterfaceAllocateRAMToBuffers.0:3" + "--unwindset xNetworkBuffersInitialise.0:3,xNetworkBuffersInitialise.1:3,vListInsert.0:3,pxGetNetworkBufferWithDescriptor.0:3,pxGetNetworkBufferWithDescriptor.1:3,uxNetworkInterfaceAllocateRAMToBuffers.0:3" ], "OBJS": [ @@ -14,7 +14,9 @@ "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_Routing.goto", "$(FREERTOS_PLUS_TCP)/source/portable/BufferManagement/BufferAllocation_1.goto", "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/list.goto", - "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/queue.goto" + "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/queue.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/proofs/CBMCStubLibrary/tasksStubs.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto" ], "DEF": [ diff --git a/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/OutputARPRequest_harness.c b/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/OutputARPRequest_harness.c index 492d97683a..3d49a835f1 100644 --- a/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/OutputARPRequest_harness.c +++ b/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/OutputARPRequest_harness.c @@ -23,19 +23,28 @@ #include "NetworkInterface.h" #include "NetworkBufferManagement.h" -void vNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) +size_t uxNetworkInterfaceAllocateRAMToBuffers( NetworkBufferDescriptor_t pxNetworkBuffers[ ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS ] ) { + /* + * In the case of buffer allocation scheme 1 the network buffers are + * fixed size and its asserted in xNetworkBuffersInitialise call that the + * buffer is at least ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER bytes + * + * Refer: + * configASSERT( ( uxMaxNetworkInterfaceAllocatedSizeBytes >= ( ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ) ) ); + * + */ + size_t xAllocSize = ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER; + for( int x = 0; x < ipconfigNUM_NETWORK_BUFFER_DESCRIPTORS; x++ ) { NetworkBufferDescriptor_t * current = &pxNetworkBuffers[ x ]; - #if ( ipconfigETHERNET_MINIMUM_PACKET_BYTES > 0 ) - current->pucEthernetBuffer = malloc( sizeof( ARPPacket_t ) + ( ipconfigETHERNET_MINIMUM_PACKET_BYTES - sizeof( ARPPacket_t ) ) ); - #else - current->pucEthernetBuffer = malloc( sizeof( ARPPacket_t ) ); - #endif + current->pucEthernetBuffer = malloc( xAllocSize ); __CPROVER_assume( current->pucEthernetBuffer != NULL ); current->xDataLength = sizeof( ARPPacket_t ); } + + return xAllocSize; } /* The code expects that the Semaphore creation relying on pvPortMalloc @@ -75,6 +84,14 @@ BaseType_t NetworkInterfaceOutputFunction_Stub( struct xNetworkInterface * pxDes } } +BaseType_t xIsCallingFromIPTask( void ) +{ + BaseType_t xReturn; + + __CPROVER_assume( xReturn == pdFALSE || xReturn == pdTRUE ); + + return xReturn; +} void harness() { @@ -92,6 +109,7 @@ void harness() /* Interface init. */ pxNetworkEndPoints->pxNetworkInterface = ( NetworkInterface_t * ) malloc( sizeof( NetworkInterface_t ) ); + __CPROVER_assume( pxNetworkEndPoints->pxNetworkInterface != NULL ); pxNetworkEndPoints->pxNetworkInterface->pxNext = NULL; pxNetworkEndPoints->pxNetworkInterface->pfOutput = NetworkInterfaceOutputFunction_Stub; diff --git a/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/README.md b/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/README.md index ea5eac78d4..7cc692c93d 100644 --- a/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/README.md +++ b/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc1/README.md @@ -16,7 +16,7 @@ this function: * xTaskPriorityDisinherit This proof checks ```FreeRTOS_OutputARPRequest``` in multiple configurations. -All assume the memory safety of vNetworkInterfaceAllocateRAMToBuffers. +All assume the memory safety of uxNetworkInterfaceAllocateRAMToBuffers. * The ```config_minimal_configuration``` proof sets ```ipconfigUSE_LINKED_RX_MESSAGES=0```. * The ```config_minimal_configuration_linked_rx_messages``` proof sets diff --git a/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/Configurations.json b/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/Configurations.json index 5b2cdd30db..42165fed64 100644 --- a/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/Configurations.json +++ b/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/Configurations.json @@ -4,7 +4,7 @@ "CBMCFLAGS": [ "--unwind {MINIMUM_PACKET_BYTES}", - "--unwindset xNetworkBuffersInitialise.0:3,xNetworkBuffersInitialise.1:3,vListInsert.0:3,pxGetNetworkBufferWithDescriptor.0:3,pxGetNetworkBufferWithDescriptor.1:3,vNetworkInterfaceAllocateRAMToBuffers.0:3" + "--unwindset xNetworkBuffersInitialise.0:3,xNetworkBuffersInitialise.1:3,vListInsert.0:3,pxGetNetworkBufferWithDescriptor.0:3,pxGetNetworkBufferWithDescriptor.1:3,uxNetworkInterfaceAllocateRAMToBuffers.0:3" ], "OBJS": [ @@ -14,7 +14,9 @@ "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_Routing.goto", "$(FREERTOS_PLUS_TCP)/source/portable/BufferManagement/BufferAllocation_2.goto", "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/list.goto", - "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/queue.goto" + "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/queue.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/proofs/CBMCStubLibrary/tasksStubs.goto" ], "DEF": [ diff --git a/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/OutputARPRequest_harness.c b/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/OutputARPRequest_harness.c index 4d84934494..af3abf26e9 100644 --- a/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/OutputARPRequest_harness.c +++ b/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/OutputARPRequest_harness.c @@ -55,6 +55,15 @@ BaseType_t NetworkInterfaceOutputFunction_Stub( struct xNetworkInterface * pxDes } } +BaseType_t xIsCallingFromIPTask( void ) +{ + BaseType_t xReturn; + + __CPROVER_assume( xReturn == pdFALSE || xReturn == pdTRUE ); + + return xReturn; +} + void harness() { BaseType_t xRes = xNetworkBuffersInitialise(); @@ -71,6 +80,7 @@ void harness() /* Interface init. */ pxNetworkEndPoints->pxNetworkInterface = ( NetworkInterface_t * ) malloc( sizeof( NetworkInterface_t ) ); + __CPROVER_assume( pxNetworkEndPoints->pxNetworkInterface != NULL ); pxNetworkEndPoints->pxNetworkInterface->pxNext = NULL; pxNetworkEndPoints->pxNetworkInterface->pfOutput = NetworkInterfaceOutputFunction_Stub; diff --git a/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/README.md b/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/README.md index 5d509a7e83..642d2a42be 100644 --- a/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/README.md +++ b/test/cbmc/proofs/ARP/ARP_OutputARPRequest_buffer_alloc2/README.md @@ -18,7 +18,7 @@ this function: * pvPortMalloc * pvPortFree * xNetworkInterfaceOutput -* vNetworkInterfaceAllocateRAMToBuffers +* uxNetworkInterfaceAllocateRAMToBuffers This proof disables the tracing library in the header. @@ -29,7 +29,7 @@ This proof checks FreeRTOS_OutputARPRequest in multiple configuration: FreeRTOS_OutputARPRequest and FreeRTOS-Plus-TCP/source/portable/BufferManagement/BufferAllocation_2.c are memory save. This proof depends entirely of the implementation - correctness of vNetworkInterfaceAllocateRAMToBuffers. + correctness of uxNetworkInterfaceAllocateRAMToBuffers. * The proof in directory minimal_configuration_minimal_packet_size guarantees that using FreeRTOS-Plus-TCP/source/portable/BufferManagement/BufferAllocation_2.c diff --git a/test/cbmc/proofs/CheckOptionsInner/CheckOptionsInner_harness.c b/test/cbmc/proofs/CheckOptionsInner/CheckOptionsInner_harness.c index e4a08e2eee..3da849aaf4 100644 --- a/test/cbmc/proofs/CheckOptionsInner/CheckOptionsInner_harness.c +++ b/test/cbmc/proofs/CheckOptionsInner/CheckOptionsInner_harness.c @@ -32,8 +32,6 @@ void __CPROVER_file_local_FreeRTOS_TCP_Reception_c_prvReadSackOption( const uint * Proof of prvReadSackOption function contract ****************************************************************/ - - void harness() { /* pucPtr points into a buffer */ @@ -87,7 +85,7 @@ void harness() /* Preconditions */ /* CBMC model of pointers limits the size of the buffer */ - __CPROVER_assume( buffer_size < CBMC_MAX_OBJECT_SIZE ); + __CPROVER_assume( buffer_size < ipconfigNETWORK_MTU ); /* Both preconditions are required to avoid integer overflow in the */ /* pointer offset of the pointer pucPtr + uxIndex + 8 */ @@ -97,6 +95,8 @@ void harness() /* Assuming quite a bit more about the initialization of pxSocket */ __CPROVER_assume( pucPtr != NULL ); __CPROVER_assume( pxSocket != NULL ); + /* lSRTT is guaranteed to be always greater than or equal to minimum value. */ + __CPROVER_assume( pxSocket->u.xTCP.xTCPWindow.lSRTT >= ipconfigTCP_SRTT_MINIMUM_VALUE_MS ); __CPROVER_file_local_FreeRTOS_TCP_Reception_c_prvReadSackOption( pucPtr, uxIndex, pxSocket ); diff --git a/test/cbmc/proofs/CheckOptionsInner/Makefile.json b/test/cbmc/proofs/CheckOptionsInner/Makefile.json index a902bcc944..522ca4ccad 100644 --- a/test/cbmc/proofs/CheckOptionsInner/Makefile.json +++ b/test/cbmc/proofs/CheckOptionsInner/Makefile.json @@ -12,6 +12,7 @@ "OBJS": [ "$(ENTRY)_harness.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Utils.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_Reception.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_IP.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_WIN.goto", @@ -21,6 +22,7 @@ ], "DEF": [ - "ipconfigUSE_TCP=1" + "ipconfigUSE_TCP=1", + "ipconfigNETWORK_MTU=586" ] } diff --git a/test/cbmc/proofs/CheckOptionsOuter/CheckOptionsOuter_harness.c b/test/cbmc/proofs/CheckOptionsOuter/CheckOptionsOuter_harness.c index 3d58d0dd1d..867305d930 100644 --- a/test/cbmc/proofs/CheckOptionsOuter/CheckOptionsOuter_harness.c +++ b/test/cbmc/proofs/CheckOptionsOuter/CheckOptionsOuter_harness.c @@ -81,7 +81,7 @@ void harness() ****************************************************************/ /* CBMC model of pointers limits the size of the buffer */ - __CPROVER_assume( buffer_size < CBMC_MAX_OBJECT_SIZE ); + __CPROVER_assume( buffer_size < ipconfigNETWORK_MTU ); /* Preconditions */ __CPROVER_assume( 8 <= buffer_size ); /* ulFirst and ulLast */ diff --git a/test/cbmc/proofs/CheckOptionsOuter/Makefile.json b/test/cbmc/proofs/CheckOptionsOuter/Makefile.json index d97be23e62..898d1ea5ba 100644 --- a/test/cbmc/proofs/CheckOptionsOuter/Makefile.json +++ b/test/cbmc/proofs/CheckOptionsOuter/Makefile.json @@ -12,6 +12,7 @@ "OBJS": [ "$(ENTRY)_harness.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Utils.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_Reception.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_WIN.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_Stream_Buffer.goto", @@ -20,5 +21,6 @@ ], "DEF": [ + "ipconfigNETWORK_MTU=586" ] } diff --git a/test/cbmc/proofs/DHCP/DHCPProcess/DHCPProcess_harness.c b/test/cbmc/proofs/DHCP/DHCPProcess/DHCPProcess_harness.c index 10c6aacf83..6ba76d4be0 100644 --- a/test/cbmc/proofs/DHCP/DHCPProcess/DHCPProcess_harness.c +++ b/test/cbmc/proofs/DHCP/DHCPProcess/DHCPProcess_harness.c @@ -49,6 +49,7 @@ /* Static members defined in FreeRTOS_DHCP.c */ extern DHCPData_t xDHCPData; extern Socket_t xDHCPv4Socket; +extern BaseType_t xDHCPSocketUserCount; void prvCreateDHCPSocket( NetworkEndPoint_t * pxEndPoint ); uint32_t uxSocketCloseCnt = 0; @@ -166,6 +167,13 @@ int32_t FreeRTOS_recvfrom( Socket_t xSocket, return retVal; } +void * vSocketClose( FreeRTOS_Socket_t * pxSocket ) +{ + __CPROVER_assert( pxSocket != NULL, "Closing socket cannot be NULL." ); + + return NULL; +} + /**************************************************************** * The proof of vDHCPProcess ****************************************************************/ @@ -175,6 +183,9 @@ void harness() BaseType_t xReset; eDHCPState_t eExpectedState; + /* The only possibility of making xDHCPSocketUserCount overflow is having more than BaseType_t endpoints, which is assumed not possible here. */ + __CPROVER_assume( xDHCPSocketUserCount >= 0 && xDHCPSocketUserCount <= ENDPOINT_DNS_ADDRESS_COUNT ); + pxNetworkEndPoints = ( NetworkEndPoint_t * ) safeMalloc( sizeof( NetworkEndPoint_t ) ); __CPROVER_assume( pxNetworkEndPoints != NULL ); diff --git a/test/cbmc/proofs/DHCP/DHCPProcess/Makefile.json b/test/cbmc/proofs/DHCP/DHCPProcess/Makefile.json index 99e79d3b2e..8de985a953 100644 --- a/test/cbmc/proofs/DHCP/DHCPProcess/Makefile.json +++ b/test/cbmc/proofs/DHCP/DHCPProcess/Makefile.json @@ -24,7 +24,8 @@ "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DHCP.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_ARP.goto" + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_ARP.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto" ], "DEF": [ @@ -32,6 +33,7 @@ "BUFFER_SIZE={BUFFER_SIZE}", "ipconfigDHCP_REGISTER_HOSTNAME=1", "CBMC_REQUIRE_NETWORKBUFFER_ETHERNETBUFFER_NONNULL=1", - "CBMC_GETNETWORKBUFFER_FAILURE_BOUND={FAILURE_BOUND}" + "CBMC_GETNETWORKBUFFER_FAILURE_BOUND={FAILURE_BOUND}", + "ENDPOINT_DNS_ADDRESS_COUNT={ENDPOINT_DNS_ADDRESS_COUNT}" ] } diff --git a/test/cbmc/proofs/DHCP/DHCPProcessEndPoint/DHCPProcessEndPoint_harness.c b/test/cbmc/proofs/DHCP/DHCPProcessEndPoint/DHCPProcessEndPoint_harness.c index db482595cd..74891fa02a 100644 --- a/test/cbmc/proofs/DHCP/DHCPProcessEndPoint/DHCPProcessEndPoint_harness.c +++ b/test/cbmc/proofs/DHCP/DHCPProcessEndPoint/DHCPProcessEndPoint_harness.c @@ -51,6 +51,7 @@ /* Static members defined in FreeRTOS_DHCP.c */ extern DHCPData_t xDHCPData; extern Socket_t xDHCPv4Socket; +extern BaseType_t xDHCPSocketUserCount; void prvCreateDHCPSocket( NetworkEndPoint_t * pxEndPoint ); /* Static member defined in freertos_api.c */ @@ -145,6 +146,35 @@ Socket_t FreeRTOS_socket( BaseType_t xDomain, return ensure_FreeRTOS_Socket_t_is_allocated(); } +void vApplicationIPNetworkEventHook_Multi( eIPCallbackEvent_t eNetworkEvent, + struct xNetworkEndPoint * pxEndPoint ) +{ + __CPROVER_assert( eNetworkEvent == eNetworkUp || eNetworkEvent == eNetworkDown, "Network event is not correct" ); + __CPROVER_assert( pxEndPoint != NULL, "Endpoint cannot be NULL" ); +} + +BaseType_t xIsCallingFromIPTask( void ) +{ + BaseType_t xReturn; + + __CPROVER_assume( xReturn == pdFALSE || xReturn == pdTRUE ); + + return xReturn; +} + +void * vSocketClose( FreeRTOS_Socket_t * pxSocket ) +{ + __CPROVER_assert( pxSocket != NULL, "Closing socket cannot be NULL" ); + + return NULL; +} + +void vManageSolicitedNodeAddress( const struct xNetworkEndPoint * pxEndPoint, + BaseType_t xNetworkGoingUp ) +{ + __CPROVER_assert( pxEndPoint != NULL, "Endpoint cannot be NULL" ); + __CPROVER_assert( pxEndPoint->pxNetworkInterface != NULL, "The network interface cannot be NULL" ); +} /**************************************************************** * The proof of vDHCPProcess @@ -155,6 +185,9 @@ void harness() BaseType_t xReset; BaseType_t xDoCheck; + /* The only possibility of making xDHCPSocketUserCount overflow is having more than BaseType_t endpoints, which is assumed not possible here. */ + __CPROVER_assume( xDHCPSocketUserCount >= 0 && xDHCPSocketUserCount <= ENDPOINT_DNS_ADDRESS_COUNT ); + pxNetworkEndPoints = ( NetworkEndPoint_t * ) safeMalloc( sizeof( NetworkEndPoint_t ) ); __CPROVER_assume( pxNetworkEndPoints != NULL ); @@ -178,6 +211,7 @@ void harness() __CPROVER_assume( pxNetworkEndPoint_Temp != NULL ); pxNetworkEndPoint_Temp->pxNext = NULL; pxNetworkEndPoint_Temp->xDHCPData.xDHCPSocket = NULL; + pxNetworkEndPoint_Temp->pxNetworkInterface = pxNetworkEndPoints->pxNetworkInterface; /**************************************************************** * Initialize the counter used to bound the number of times diff --git a/test/cbmc/proofs/DHCP/DHCPProcessEndPoint/Makefile.json b/test/cbmc/proofs/DHCP/DHCPProcessEndPoint/Makefile.json index ed74976135..75426470db 100644 --- a/test/cbmc/proofs/DHCP/DHCPProcessEndPoint/Makefile.json +++ b/test/cbmc/proofs/DHCP/DHCPProcessEndPoint/Makefile.json @@ -23,8 +23,10 @@ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DHCP.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Timers.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_ARP.goto" ], "DEF": @@ -32,6 +34,7 @@ "BUFFER_SIZE={BUFFER_SIZE}", "ipconfigDHCP_REGISTER_HOSTNAME=1", "CBMC_REQUIRE_NETWORKBUFFER_ETHERNETBUFFER_NONNULL=1", - "CBMC_GETNETWORKBUFFER_FAILURE_BOUND={FAILURE_BOUND}" + "CBMC_GETNETWORKBUFFER_FAILURE_BOUND={FAILURE_BOUND}", + "ENDPOINT_DNS_ADDRESS_COUNT={ENDPOINT_DNS_ADDRESS_COUNT}" ] } diff --git a/test/cbmc/proofs/DHCPv6/DHCPv6Analyse/DHCPv6Analyse_harness.c b/test/cbmc/proofs/DHCPv6/DHCPv6Analyse/DHCPv6Analyse_harness.c index bba0186807..cb8a71af06 100644 --- a/test/cbmc/proofs/DHCPv6/DHCPv6Analyse/DHCPv6Analyse_harness.c +++ b/test/cbmc/proofs/DHCPv6/DHCPv6Analyse/DHCPv6Analyse_harness.c @@ -52,6 +52,19 @@ BaseType_t __CPROVER_file_local_FreeRTOS_DHCPv6_c_prvDHCPv6Analyse( struct xNetw size_t uxTotalLength, DHCPMessage_IPv6_t * pxDHCPMessage ); +/* prvDHCPv6_handleOption is tested separately. Using mock function in this test case. */ +BaseType_t __CPROVER_file_local_FreeRTOS_DHCPv6_c_prvDHCPv6_handleOption( struct xNetworkEndPoint * pxEndPoint, + uint16_t usOption, + const DHCPOptionSet_t * pxSet, + DHCPMessage_IPv6_t * pxDHCPMessage, + BitConfig_t * pxMessage ) +{ + __CPROVER_assert( __CPROVER_r_ok( pxEndPoint, sizeof( struct xNetworkEndPoint ) ), "pxEndPoint region must be readable" ); + __CPROVER_assert( __CPROVER_r_ok( pxSet, sizeof( DHCPOptionSet_t ) ), "pxSet region must be readable" ); + __CPROVER_assert( __CPROVER_r_ok( pxDHCPMessage, sizeof( DHCPMessage_IPv6_t ) ), "pxDHCPMessage region must be readable" ); + __CPROVER_assert( __CPROVER_r_ok( pxMessage, sizeof( BitConfig_t ) ), "pxMessage region must be readable" ); +} + void harness() { size_t uxTotalLength; diff --git a/test/cbmc/proofs/DHCPv6/DHCPv6Analyse/Makefile.json b/test/cbmc/proofs/DHCPv6/DHCPv6Analyse/Makefile.json index 08e8432de6..8a2b998f63 100644 --- a/test/cbmc/proofs/DHCPv6/DHCPv6Analyse/Makefile.json +++ b/test/cbmc/proofs/DHCPv6/DHCPv6Analyse/Makefile.json @@ -9,7 +9,6 @@ ], "INSTFLAGS": [ - "--remove-function-body __CPROVER_file_local_FreeRTOS_DHCPv6_c_prvDHCPv6_handleOption", "--malloc-may-fail" ], "OPT": diff --git a/test/cbmc/proofs/DHCPv6/DHCPv6HandleOption/DHCPv6HandleOption_harness.c b/test/cbmc/proofs/DHCPv6/DHCPv6HandleOption/DHCPv6HandleOption_harness.c index 7a54953136..96b30b73cd 100644 --- a/test/cbmc/proofs/DHCPv6/DHCPv6HandleOption/DHCPv6HandleOption_harness.c +++ b/test/cbmc/proofs/DHCPv6/DHCPv6HandleOption/DHCPv6HandleOption_harness.c @@ -74,6 +74,23 @@ BaseType_t __CPROVER_file_local_FreeRTOS_DHCPv6_c_prvDHCPv6_subOption( uint16_t return nondet_BaseType(); } +uint16_t usBitConfig_read_16( BitConfig_t * pxConfig ) +{ + return ( uint16_t ) nondet_uint32(); +} + +uint8_t ucBitConfig_read_8( BitConfig_t * pxConfig ) +{ + return ( uint8_t ) nondet_uint32(); +} + +BaseType_t xBitConfig_read_uc( BitConfig_t * pxConfig, + uint8_t * pucData, + size_t uxSize ) +{ + return nondet_BaseType(); +} + void harness() { BaseType_t xResult; diff --git a/test/cbmc/proofs/DHCPv6/DHCPv6HandleOption/Makefile.json b/test/cbmc/proofs/DHCPv6/DHCPv6HandleOption/Makefile.json index 09859a60b0..ba6dbd18f5 100644 --- a/test/cbmc/proofs/DHCPv6/DHCPv6HandleOption/Makefile.json +++ b/test/cbmc/proofs/DHCPv6/DHCPv6HandleOption/Makefile.json @@ -5,12 +5,6 @@ "--unwind 2", "--nondet-static --flush" ], - "INSTFLAGS": - [ - "--remove-function-body usBitConfig_read_16", - "--remove-function-body xBitConfig_read_uc", - "--remove-function-body ucBitConfig_read_8" - ], "OPT": [ "--export-file-local-symbols" diff --git a/test/cbmc/proofs/DHCPv6/DHCPv6Process/DHCPv6Process_harness.c b/test/cbmc/proofs/DHCPv6/DHCPv6Process/DHCPv6Process_harness.c index 6e82bf284b..980c620853 100644 --- a/test/cbmc/proofs/DHCPv6/DHCPv6Process/DHCPv6Process_harness.c +++ b/test/cbmc/proofs/DHCPv6/DHCPv6Process/DHCPv6Process_harness.c @@ -46,6 +46,7 @@ extern Socket_t xDHCPv6Socket; extern DHCPMessage_IPv6_t xDHCPMessage; +extern BaseType_t xDHCPv6SocketUserCount; void __CPROVER_file_local_FreeRTOS_DHCPv6_c_prvCreateDHCPv6Socket( NetworkEndPoint_t * pxEndPoint ); @@ -156,6 +157,8 @@ void harness() { BaseType_t xReset; + __CPROVER_assume( xDHCPv6SocketUserCount >= 0 && xDHCPv6SocketUserCount <= ENDPOINT_DNS_ADDRESS_COUNT ); + NetworkEndPoint_t * pxNetworkEndPoint = safeMalloc( sizeof( NetworkEndPoint_t ) ); __CPROVER_assume( pxNetworkEndPoint != NULL ); diff --git a/test/cbmc/proofs/DHCPv6/DHCPv6Process/Makefile.json b/test/cbmc/proofs/DHCPv6/DHCPv6Process/Makefile.json index 40839470b2..5a2d345cb4 100644 --- a/test/cbmc/proofs/DHCPv6/DHCPv6Process/Makefile.json +++ b/test/cbmc/proofs/DHCPv6/DHCPv6Process/Makefile.json @@ -1,6 +1,7 @@ { "ENTRY": "DHCPv6Process", "LOOP_UNWIND_COUNT": 4, + "ENDPOINT_DNS_ADDRESS_COUNT": 5, "CBMCFLAGS": [ "--unwind {LOOP_UNWIND_COUNT}", @@ -13,12 +14,16 @@ "DEF": [ "ipconfigUSE_DHCPv6=1", - "FR_RECV_FROM_SUCCESS_COUNT={LOOP_UNWIND_COUNT}" + "FR_RECV_FROM_SUCCESS_COUNT={LOOP_UNWIND_COUNT}", + "ENDPOINT_DNS_ADDRESS_COUNT={ENDPOINT_DNS_ADDRESS_COUNT}" ], "OBJS": [ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DHCPv6.goto" + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DHCPv6.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Timers.goto" ] } \ No newline at end of file diff --git a/test/cbmc/proofs/DHCPv6/DHCPv6ProcessEndPoint/DHCPv6ProcessEndPoint_harness.c b/test/cbmc/proofs/DHCPv6/DHCPv6ProcessEndPoint/DHCPv6ProcessEndPoint_harness.c index 9157a86f2e..adf753da71 100644 --- a/test/cbmc/proofs/DHCPv6/DHCPv6ProcessEndPoint/DHCPv6ProcessEndPoint_harness.c +++ b/test/cbmc/proofs/DHCPv6/DHCPv6ProcessEndPoint/DHCPv6ProcessEndPoint_harness.c @@ -47,6 +47,7 @@ /* Static members defined in FreeRTOS_DHCP.c */ extern Socket_t xDHCPv6Socket; +extern BaseType_t xDHCPv6SocketUserCount; void __CPROVER_file_local_FreeRTOS_DHCPv6_c_prvCreateDHCPv6Socket( NetworkEndPoint_t * pxEndPoint ); BaseType_t __CPROVER_file_local_FreeRTOS_DHCPv6_c_xDHCPv6ProcessEndPoint_HandleState( NetworkEndPoint_t * pxEndPoint, @@ -77,6 +78,18 @@ Socket_t FreeRTOS_socket( BaseType_t xDomain, return pxSocket; } +void vIPNetworkUpCalls( struct xNetworkEndPoint * pxEndPoint ) +{ + __CPROVER_assert( pxEndPoint != NULL, "Endpoint cannot be NULL" ); +} + +void * vSocketClose( FreeRTOS_Socket_t * pxSocket ) +{ + __CPROVER_assert( pxSocket != NULL, "Closing socket cannot be NULL." ); + + return NULL; +} + /** * For the purpose of this proof we assume that xSocketValid returns true always. * This has to do with assertions in the source code that checks for socket being invalid. @@ -135,6 +148,8 @@ void harness() { BaseType_t xReset, xGivingUp; + __CPROVER_assume( xDHCPv6SocketUserCount >= 0 && xDHCPv6SocketUserCount <= ENDPOINT_DNS_ADDRESS_COUNT ); + NetworkEndPoint_t * pxNetworkEndPoint_Temp = safeMalloc( sizeof( NetworkEndPoint_t ) ); __CPROVER_assume( pxNetworkEndPoint_Temp != NULL ); diff --git a/test/cbmc/proofs/DHCPv6/DHCPv6ProcessEndPoint/Makefile.json b/test/cbmc/proofs/DHCPv6/DHCPv6ProcessEndPoint/Makefile.json index d2d5931bcd..25d5a8d6f9 100644 --- a/test/cbmc/proofs/DHCPv6/DHCPv6ProcessEndPoint/Makefile.json +++ b/test/cbmc/proofs/DHCPv6/DHCPv6ProcessEndPoint/Makefile.json @@ -1,30 +1,26 @@ { "ENTRY": "DHCPv6ProcessEndPoint", + "ENDPOINT_DNS_ADDRESS_COUNT": 5, "CBMCFLAGS": [ "--nondet-static --flush", "--unwind 1" ], - "INSTFLAGS": - [ - "--remove-function-body vIPSetDHCP_RATimerEnableState", - "--remove-function-body vDHCP_RATimerReload", - "--remove-function-body vIPNetworkUpCalls", - "--remove-function-body prvCloseDHCPv6Socket", - "--remove-function-body prvSendDHCPMessage" - ], "OPT": [ "--export-file-local-symbols" ], "DEF": [ - "ipconfigUSE_DHCPv6=1" + "ipconfigUSE_DHCPv6=1", + "ENDPOINT_DNS_ADDRESS_COUNT={ENDPOINT_DNS_ADDRESS_COUNT}" ], "OBJS": [ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DHCPv6.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Timers.goto" diff --git a/test/cbmc/proofs/DHCPv6/SendDHCPMessage/Makefile.json b/test/cbmc/proofs/DHCPv6/SendDHCPMessage/Makefile.json index 08cb3e73a1..98bc9f7248 100644 --- a/test/cbmc/proofs/DHCPv6/SendDHCPMessage/Makefile.json +++ b/test/cbmc/proofs/DHCPv6/SendDHCPMessage/Makefile.json @@ -4,20 +4,6 @@ [ "--nondet-static" ], - "INSTFLAGS": - [ - "--remove-function-body xApplicationGetRandomNumber", - "--remove-function-body ulApplicationTimeHook", - "--remove-function-body xBitConfig_init", - "--remove-function-body vBitConfig_write_8", - "--remove-function-body vBitConfig_write_uc", - "--remove-function-body vBitConfig_write_16", - "--remove-function-body vBitConfig_write_32", - "--remove-function-body pucBitConfig_peek_last_index_uc", - "--remove-function-body FreeRTOS_inet_pton6", - "--remove-function-body FreeRTOS_sendto", - "--remove-function-body vBitConfig_release" - ], "OPT": [ "--export-file-local-symbols" @@ -29,9 +15,9 @@ "OBJS": [ "$(ENTRY)_harness.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DHCPv6.goto", "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_Sockets.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_BitConfig.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DHCPv6.goto" + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto" ] } \ No newline at end of file diff --git a/test/cbmc/proofs/DHCPv6/SendDHCPMessage/SendDHCPMessage_harness.c b/test/cbmc/proofs/DHCPv6/SendDHCPMessage/SendDHCPMessage_harness.c index fc28867207..436b96cf5d 100644 --- a/test/cbmc/proofs/DHCPv6/SendDHCPMessage/SendDHCPMessage_harness.c +++ b/test/cbmc/proofs/DHCPv6/SendDHCPMessage/SendDHCPMessage_harness.c @@ -42,14 +42,103 @@ #include "FreeRTOS_DHCP.h" #include "FreeRTOS_DHCPv6.h" #include "FreeRTOS_ARP.h" +#include "FreeRTOS_BitConfig.h" /* CBMC includes. */ #include "cbmc.h" +void __CPROVER_file_local_FreeRTOS_DHCPv6_c_prvSendDHCPMessage( NetworkEndPoint_t * pxEndPoint ); +BaseType_t xBitConfig_init( BitConfig_t * pxConfig, + const uint8_t * pucData, + size_t uxSize ) +{ + BaseType_t xReturn; -void __CPROVER_file_local_FreeRTOS_DHCPv6_c_prvSendDHCPMessage( NetworkEndPoint_t * pxEndPoint ); + __CPROVER_assert( pxConfig != NULL, "pxConfig cannot be NULL" ); + + if( nondet_bool() ) + { + xReturn = pdTRUE; + + pxConfig->ucContents = safeMalloc( uxSize ); + __CPROVER_assume( pxConfig->ucContents != NULL ); + } + else + { + xReturn = pdFALSE; + } + + return xReturn; +} + +BaseType_t pucBitConfig_peek_last_index_uc( BitConfig_t * pxConfig, + uint8_t * pucData, + size_t uxSize ) +{ + BaseType_t xReturn; + + __CPROVER_assert( pxConfig != NULL, "pxConfig cannot be NULL" ); + __CPROVER_assert( pucData != NULL, "pucData cannot be NULL" ); + + __CPROVER_assume( xReturn == pdTRUE || xReturn == pdFALSE ); + + return xReturn; +} + +void vBitConfig_write_uc( BitConfig_t * pxConfig, + const uint8_t * pucData, + size_t uxSize ) +{ + __CPROVER_assert( pxConfig != NULL, "pxConfig cannot be NULL" ); + __CPROVER_assert( pucData != NULL, "pucData cannot be NULL" ); +} + +void vBitConfig_write_8( BitConfig_t * pxConfig, + uint8_t ucValue ) +{ + __CPROVER_assert( pxConfig != NULL, "pxConfig cannot be NULL" ); +} +void vBitConfig_write_16( BitConfig_t * pxConfig, + uint16_t usValue ) +{ + __CPROVER_assert( pxConfig != NULL, "pxConfig cannot be NULL" ); +} + +void vBitConfig_write_32( BitConfig_t * pxConfig, + uint32_t ulValue ) +{ + __CPROVER_assert( pxConfig != NULL, "pxConfig cannot be NULL" ); +} + +void vBitConfig_release( BitConfig_t * pxConfig ) +{ + __CPROVER_assert( pxConfig != NULL, "pxConfig cannot be NULL" ); + + if( pxConfig->ucContents != NULL ) + { + free( pxConfig->ucContents ); + } +} + +BaseType_t FreeRTOS_inet_pton6( const char * pcSource, + void * pvDestination ) +{ + BaseType_t xReturn; + + __CPROVER_assert( pcSource != NULL, "pcSource cannot be NULL" ); + __CPROVER_assert( pvDestination != NULL, "pvDestination cannot be NULL" ); + + __CPROVER_assume( xReturn == pdTRUE || xReturn == pdFALSE ); + + return xReturn; +} + +uint32_t ulApplicationTimeHook( void ) +{ + return nondet_uint32(); +} void harness() { diff --git a/test/cbmc/proofs/DNS/CreateDNSMessage/CreateDNSMessage_harness.c b/test/cbmc/proofs/DNS/CreateDNSMessage/CreateDNSMessage_harness.c index 34120f3dbd..76725b659b 100644 --- a/test/cbmc/proofs/DNS/CreateDNSMessage/CreateDNSMessage_harness.c +++ b/test/cbmc/proofs/DNS/CreateDNSMessage/CreateDNSMessage_harness.c @@ -55,6 +55,7 @@ void harness() /* pcHostName is tested to be valid prior */ char * pcHostName = malloc( len ); + __CPROVER_assume( pcHostName != NULL ); if( len && pcHostName ) { @@ -81,6 +82,7 @@ void harness() /* pucUDPPayloadBuffer is tested to be valid prior */ uint8_t * pucUDPPayloadBuffer = malloc( uxExpectedPayloadLength ); + __CPROVER_assume( pucUDPPayloadBuffer != NULL ); __CPROVER_file_local_FreeRTOS_DNS_c_prvCreateDNSMessage( pucUDPPayloadBuffer, pcHostName, uxIdentifier, uxHostType ); } diff --git a/test/cbmc/proofs/DNS/DNSHandlePacket/DNShandlePacket_harness.c b/test/cbmc/proofs/DNS/DNSHandlePacket/DNShandlePacket_harness.c index 983f1f1092..85bb0b8fac 100644 --- a/test/cbmc/proofs/DNS/DNSHandlePacket/DNShandlePacket_harness.c +++ b/test/cbmc/proofs/DNS/DNSHandlePacket/DNShandlePacket_harness.c @@ -7,11 +7,18 @@ #include "FreeRTOS_DNS.h" #include "FreeRTOS_IP_Private.h" -/* Function prvParseDNSReply is proven to be correct separately. */ -uint32_t prvParseDNSReply( uint8_t * pucUDPPayloadBuffer, - size_t xBufferLength, - BaseType_t xExpected ) +/* CBMC includes. */ +#include "cbmc.h" + +/* Function DNS_ParseDNSReply is proven to be correct separately. */ +uint32_t DNS_ParseDNSReply( uint8_t * pucUDPPayloadBuffer, + size_t uxBufferLength, + struct freertos_addrinfo ** ppxAddressInfo, + BaseType_t xExpected, + uint16_t usPort ) { + __CPROVER_assert( pucUDPPayloadBuffer != NULL, "pucUDPPayloadBuffer cannot be NULL" ); + return nondet_uint32(); } void harness() @@ -19,5 +26,7 @@ void harness() NetworkBufferDescriptor_t xNetworkBuffer; xNetworkBuffer.pucEthernetBuffer = malloc( sizeof( UDPPacket_t ) + sizeof( DNSMessage_t ) ); + __CPROVER_assume( xNetworkBuffer.pucEthernetBuffer != NULL ); + ulDNSHandlePacket( &xNetworkBuffer ); } diff --git a/test/cbmc/proofs/DNS/DNSHandlePacket/Makefile.json b/test/cbmc/proofs/DNS/DNSHandlePacket/Makefile.json index 27864b1461..511a166ca5 100644 --- a/test/cbmc/proofs/DNS/DNSHandlePacket/Makefile.json +++ b/test/cbmc/proofs/DNS/DNSHandlePacket/Makefile.json @@ -4,7 +4,8 @@ "OBJS": [ "$(ENTRY)_harness.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DNS.goto" + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DNS.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto" ], "DEF": [ diff --git a/test/cbmc/proofs/DNS/DNSTreatNBNS/DNS_TreatNBNS_harness.c b/test/cbmc/proofs/DNS/DNSTreatNBNS/DNS_TreatNBNS_harness.c index d6be53942f..cea7f57f53 100644 --- a/test/cbmc/proofs/DNS/DNSTreatNBNS/DNS_TreatNBNS_harness.c +++ b/test/cbmc/proofs/DNS/DNSTreatNBNS/DNS_TreatNBNS_harness.c @@ -38,6 +38,7 @@ #include "cbmc.h" +const BaseType_t xBufferAllocFixedSize = pdFALSE; NetworkBufferDescriptor_t xNetworkBuffer; NetworkBufferDescriptor_t * pxUDPPayloadBuffer_to_NetworkBuffer( const void * pvBuffer ) @@ -67,6 +68,11 @@ NetworkBufferDescriptor_t * pxResizeNetworkBufferWithDescriptor( NetworkBufferDe uint8_t * pucNewBuffer = safeMalloc( xNewSizeBytes ); __CPROVER_assume( pucNewBuffer != NULL ); + if( pxNetworkBuffer->pucEthernetBuffer ) + { + free( pxNetworkBuffer->pucEthernetBuffer ); + } + pxNetworkBuffer->pucEthernetBuffer = pucNewBuffer; if( nondet_bool() ) @@ -88,6 +94,26 @@ void prepareReplyDNSMessage( NetworkBufferDescriptor_t * pxNetworkBuffer, __CPROVER_assert( pxNetworkBuffer != NULL, "pxNetworkBuffer: pvBuffer != NULL" ); } +BaseType_t xApplicationDNSQueryHook_Multi( struct xNetworkEndPoint * pxEndPoint, + const char * pcName ) +{ + BaseType_t xReturn; + + __CPROVER_assert( strlen( pcName ) < ipconfigDNS_CACHE_NAME_LENGTH, "The length of domain name must be less than cache size" ); + __CPROVER_assume( xReturn == pdFALSE || xReturn == pdTRUE ); + + return xReturn; +} + +/* vReturnEthernetFrame() is proved separately */ +void vReturnEthernetFrame( NetworkBufferDescriptor_t * pxNetworkBuffer, + BaseType_t xReleaseAfterSend ) +{ + __CPROVER_assert( pxNetworkBuffer != NULL, "xNetworkBuffer != NULL" ); + __CPROVER_assert( pxNetworkBuffer->pucEthernetBuffer != NULL, "pxNetworkBuffer->pucEthernetBuffer != NULL" ); + __CPROVER_assert( __CPROVER_r_ok( pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength ), "Data must be valid" ); +} + void harness() { uint32_t ulIPAddress; @@ -96,16 +122,15 @@ void harness() BaseType_t xDataSize; - /* When re-adjusting the buffer, (sizeof( NBNSAnswer_t ) - 2 * sizeof( uint16_t )) more bytes are - * required to be added to the existing buffer. Make sure total bytes doesn't exceed ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER - * when re-resizing. This will prevent hitting an assert if Buffer Allocation 1 is used. */ - __CPROVER_assume( ( xDataSize != 0 ) && ( xDataSize < ( ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER - ( sizeof( NBNSAnswer_t ) - 2 * sizeof( uint16_t ) ) ) ) ); + __CPROVER_assume( ( xDataSize > 0 ) && ( xDataSize < ( ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ) ) ); xNetworkBuffer.pucEthernetBuffer = safeMalloc( xDataSize ); xNetworkBuffer.xDataLength = xDataSize; + __CPROVER_assume( xNetworkBuffer.pucEthernetBuffer != NULL ); if( nondet_bool() ) { + __CPROVER_assume( pxNetworkEndPoint_Temp != NULL ); xNetworkBuffer.pxEndPoint = pxNetworkEndPoint_Temp; } else diff --git a/test/cbmc/proofs/DNS/DNSTreatNBNS/Makefile.json b/test/cbmc/proofs/DNS/DNSTreatNBNS/Makefile.json index 458443eb78..7de551e7c8 100644 --- a/test/cbmc/proofs/DNS/DNSTreatNBNS/Makefile.json +++ b/test/cbmc/proofs/DNS/DNSTreatNBNS/Makefile.json @@ -1,22 +1,29 @@ { "ENTRY": "DNS_TreatNBNS", "USE_CACHE":1, + "NBNS_NAME_MAX_LENGTH":17, "CBMCFLAGS": [ "--unwind 1", - "--unwindset DNS_TreatNBNS.0:16", - "--nondet-static" + "--unwindset DNS_TreatNBNS.0:{NBNS_NAME_MAX_LENGTH}", + "--unwindset prvFindEntryIndex.0:2", + "--unwindset strcmp.0:{NBNS_NAME_MAX_LENGTH}", + "--unwindset strlen.0:{NBNS_NAME_MAX_LENGTH}", + "--unwindset strncpy.0:{NBNS_NAME_MAX_LENGTH}" ], "OBJS": [ "$(ENTRY)_harness.goto", - "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Utils.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DNS_Parser.goto" + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DNS_Parser.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DNS_Cache.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto" ], "DEF": [ "ipconfigUSE_DNS_CACHE={USE_CACHE}", - "ipconfigUSE_NBNS=1" + "ipconfigUSE_NBNS=1", + "ipconfigNETWORK_MTU=586" ] } diff --git a/test/cbmc/proofs/DNS/DNSgetHostByName/DNSgetHostByName_harness.c b/test/cbmc/proofs/DNS/DNSgetHostByName/DNSgetHostByName_harness.c index e849b4ee1b..9e5658074a 100644 --- a/test/cbmc/proofs/DNS/DNSgetHostByName/DNSgetHostByName_harness.c +++ b/test/cbmc/proofs/DNS/DNSgetHostByName/DNSgetHostByName_harness.c @@ -17,6 +17,7 @@ #include "NetworkBufferManagement.h" #include "NetworkInterface.h" +/* CBMC includes. */ #include "cbmc.h" uint32_t FreeRTOS_dnslookup( const char * pcHostName ); @@ -37,6 +38,7 @@ size_t __CPROVER_file_local_FreeRTOS_DNS_c_prvCreateDNSMessage( uint8_t * pucUDP const char * pcHostName, TickType_t uxIdentifier, UBaseType_t uxHostType ); +uintptr_t __CPROVER_file_local_FreeRTOS_IP_Utils_c_void_ptr_to_uintptr( const void * pvPointer ); /**************************************************************** * We abstract: @@ -56,6 +58,54 @@ size_t __CPROVER_file_local_FreeRTOS_DNS_c_prvCreateDNSMessage( uint8_t * pucUDP * bound the iterations of strcmp. ****************************************************************/ +/*We assume that the pxGetNetworkBufferWithDescriptor function is implemented correctly and returns a valid data structure. */ +/*This is the mock to mimic the correct expected behavior. If this allocation fails, this might invalidate the proof. */ +NetworkBufferDescriptor_t * pxGetNetworkBufferWithDescriptor( size_t xRequestedSizeBytes, + TickType_t xBlockTimeTicks ) +{ + NetworkBufferDescriptor_t * pxNetworkBuffer = ( NetworkBufferDescriptor_t * ) safeMalloc( sizeof( NetworkBufferDescriptor_t ) ); + + if( pxNetworkBuffer != NULL ) + { + pxNetworkBuffer->pucEthernetBuffer = safeMalloc( xRequestedSizeBytes + ipUDP_PAYLOAD_IP_TYPE_OFFSET ); + + if( pxNetworkBuffer->pucEthernetBuffer == NULL ) + { + free( pxNetworkBuffer ); + pxNetworkBuffer = NULL; + } + else + { + pxNetworkBuffer->pucEthernetBuffer = ( ( uint8_t * ) pxNetworkBuffer->pucEthernetBuffer ) + ipUDP_PAYLOAD_IP_TYPE_OFFSET; + pxNetworkBuffer->xDataLength = xRequestedSizeBytes; + } + } + + return pxNetworkBuffer; +} + +/* + * In this function, it only allocates network buffer by pxGetNetworkBufferWithDescriptor + * stub function above here. In this case, we should free both network buffer descriptor and pucEthernetBuffer. + */ +void vReleaseNetworkBufferAndDescriptor( NetworkBufferDescriptor_t * const pxNetworkBuffer ) +{ + __CPROVER_assert( pxNetworkBuffer != NULL, + "Precondition: pxNetworkBuffer != NULL" ); + + free( pxNetworkBuffer->pucEthernetBuffer - ipUDP_PAYLOAD_IP_TYPE_OFFSET ); + free( pxNetworkBuffer ); +} + +/* FreeRTOS_ReleaseUDPPayloadBuffer is mocked here and the memory + * is not freed as the buffer allocated by the FreeRTOS_recvfrom is static + * memory */ +void FreeRTOS_ReleaseUDPPayloadBuffer( void * pvBuffer ) +{ + __CPROVER_assert( pvBuffer != NULL, + "FreeRTOS precondition: pvBuffer != NULL" ); +} + /**************************************************************** * Abstract DNS_ParseDNSReply proved memory safe in ParseDNSReply. * @@ -96,6 +146,22 @@ uint32_t DNS_SendRequest( Socket_t xDNSSocket, return ret; } +/**************************************************************** +* Abstract DNS_BindSocket +* +* We stub out this function with return constraint of true or false +* +****************************************************************/ +BaseType_t DNS_BindSocket( Socket_t xSocket, + uint16_t usPort ) +{ + BaseType_t xReturn; + + __CPROVER_assume( xReturn == pdTRUE || xReturn == pdFALSE ); + + return xReturn; +} + /**************************************************************** * Abstract DNS_ReadReply * @@ -106,20 +172,39 @@ BaseType_t DNS_ReadReply( ConstSocket_t xDNSSocket, struct freertos_sockaddr * xAddress, struct xDNSBuffer * pxDNSBuf ) { - BaseType_t ret; int len; + uintptr_t uxTypeOffset; + const uint8_t * pucIPType; + uint8_t ucIPType; + NetworkBufferDescriptor_t * pxNetworkEndPoints; - __CPROVER_assume( ( len > sizeof( DNSMessage_t ) ) && ( len < CBMC_MAX_OBJECT_SIZE ) ); + __CPROVER_assume( ( len > sizeof( DNSMessage_t ) ) && ( len < ipconfigNETWORK_MTU ) ); - pxDNSBuf->pucPayloadBuffer = malloc( len ); + pxNetworkEndPoints = pxGetNetworkBufferWithDescriptor( len, 0 ); + __CPROVER_assume( pxNetworkEndPoints != NULL ); + __CPROVER_assume( pxNetworkEndPoints->pucEthernetBuffer != NULL ); + pxDNSBuf->pucPayloadBuffer = pxNetworkEndPoints->pucEthernetBuffer; pxDNSBuf->uxPayloadLength = len; - __CPROVER_assume( pxDNSBuf->pucPayloadBuffer != NULL ); - __CPROVER_havoc_slice( pxDNSBuf->pucPayloadBuffer, pxDNSBuf->uxPayloadLength ); - return ret; + /* When IPv6 is supported, find out the type of the packet. + * It is stored 48 bytes before the payload buffer as 0x40 or 0x60. */ + uxTypeOffset = __CPROVER_file_local_FreeRTOS_IP_Utils_c_void_ptr_to_uintptr( pxDNSBuf->pucPayloadBuffer ); + uxTypeOffset -= ipUDP_PAYLOAD_IP_TYPE_OFFSET; + pucIPType = ( const uint8_t * ) uxTypeOffset; + + /* For an IPv4 packet, pucIPType points to 6 bytes before the pucEthernetBuffer, + * for a IPv6 packet, pucIPType will point to the first byte of the IP-header: 'ucVersionTrafficClass'. */ + ucIPType = pucIPType[ 0 ] & 0xf0U; + + /* To help the translation from a UDP payload pointer to a networkBuffer, + * a byte was stored at a certain negative offset (-48 bytes). + * It must have a value of either 0x4x or 0x6x. */ + __CPROVER_assume( ( ucIPType == ipTYPE_IPv4 ) || ( ucIPType == ipTYPE_IPv6 ) ); + + return nondet_basetype(); } @@ -177,30 +262,11 @@ size_t __CPROVER_file_local_FreeRTOS_DNS_c_prvCreateDNSMessage( uint8_t * pucUDP return size; } -/*We assume that the pxGetNetworkBufferWithDescriptor function is implemented correctly and returns a valid data structure. */ -/*This is the mock to mimic the correct expected behavior. If this allocation fails, this might invalidate the proof. */ -NetworkBufferDescriptor_t * pxGetNetworkBufferWithDescriptor( size_t xRequestedSizeBytes, - TickType_t xBlockTimeTicks ) +uint32_t Prepare_CacheLookup( const char * pcHostName, + BaseType_t xFamily, + struct freertos_addrinfo ** ppxAddressInfo ) { - NetworkBufferDescriptor_t * pxNetworkBuffer = ( NetworkBufferDescriptor_t * ) malloc( sizeof( NetworkBufferDescriptor_t ) ); - - if( pxNetworkBuffer != NULL ) - { - pxNetworkBuffer->pucEthernetBuffer = malloc( xRequestedSizeBytes + ipUDP_PAYLOAD_IP_TYPE_OFFSET ); - - if( pxNetworkBuffer->pucEthernetBuffer == NULL ) - { - free( pxNetworkBuffer ); - pxNetworkBuffer = NULL; - } - else - { - pxNetworkBuffer->pucEthernetBuffer = ( ( uint8_t * ) pxNetworkBuffer->pucEthernetBuffer ) + ipUDP_PAYLOAD_IP_TYPE_OFFSET; - pxNetworkBuffer->xDataLength = xRequestedSizeBytes; - } - } - - return pxNetworkBuffer; + return nondet_uint32(); } /**************************************************************** diff --git a/test/cbmc/proofs/DNS/DNSgetHostByName/Makefile.json b/test/cbmc/proofs/DNS/DNSgetHostByName/Makefile.json index 66b7cad54e..46a0c62cf2 100644 --- a/test/cbmc/proofs/DNS/DNSgetHostByName/Makefile.json +++ b/test/cbmc/proofs/DNS/DNSgetHostByName/Makefile.json @@ -11,6 +11,7 @@ "ENDPOINT_DNS_ADDRESS_COUNT": 5, "HOSTNAME_UNWIND": "__eval {MAX_HOSTNAME_LEN} + 1", "ENDPOINT_DNS_ADDRESS_COUNT_UNWIND": "__eval {ENDPOINT_DNS_ADDRESS_COUNT} + 1", + "DNS_CACHE_ENTRIES": 2, "CBMCFLAGS": [ @@ -30,11 +31,13 @@ "OBJS": [ "$(ENTRY)_harness.goto", - "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_Routing.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Utils.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DNS.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_Routing.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DNS_Parser.goto" + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DNS_Parser.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto" ], "DEF": @@ -42,6 +45,7 @@ "ipconfigUSE_IPv6=1", "ipconfigDNS_USE_CALLBACKS={callback}", "MAX_HOSTNAME_LEN={MAX_HOSTNAME_LEN}", - "ipconfigENDPOINT_DNS_ADDRESS_COUNT={ENDPOINT_DNS_ADDRESS_COUNT}" + "ipconfigENDPOINT_DNS_ADDRESS_COUNT={ENDPOINT_DNS_ADDRESS_COUNT}", + "ipconfigDNS_CACHE_ENTRIES={DNS_CACHE_ENTRIES}" ] } diff --git a/test/cbmc/proofs/DNS/DNSgetHostByName_a/DNSgetHostByName_a_harness.c b/test/cbmc/proofs/DNS/DNSgetHostByName_a/DNSgetHostByName_a_harness.c index 7b7c4a3fb9..03d1ecb736 100644 --- a/test/cbmc/proofs/DNS/DNSgetHostByName_a/DNSgetHostByName_a_harness.c +++ b/test/cbmc/proofs/DNS/DNSgetHostByName_a/DNSgetHostByName_a_harness.c @@ -17,8 +17,11 @@ #include "NetworkBufferManagement.h" #include "NetworkInterface.h" +/* CBMC includes. */ #include "cbmc.h" +uintptr_t __CPROVER_file_local_FreeRTOS_IP_Utils_c_void_ptr_to_uintptr( const void * pvPointer ); + /**************************************************************** * We abstract: * @@ -37,6 +40,54 @@ * bound the iterations of strcmp. ****************************************************************/ +/*We assume that the pxGetNetworkBufferWithDescriptor function is implemented correctly and returns a valid data structure. */ +/*This is the mock to mimic the correct expected behavior. If this allocation fails, this might invalidate the proof. */ +NetworkBufferDescriptor_t * pxGetNetworkBufferWithDescriptor( size_t xRequestedSizeBytes, + TickType_t xBlockTimeTicks ) +{ + NetworkBufferDescriptor_t * pxNetworkBuffer = ( NetworkBufferDescriptor_t * ) safeMalloc( sizeof( NetworkBufferDescriptor_t ) ); + + if( pxNetworkBuffer != NULL ) + { + pxNetworkBuffer->pucEthernetBuffer = safeMalloc( xRequestedSizeBytes + ipBUFFER_PADDING + ipUDP_PAYLOAD_IP_TYPE_OFFSET ); + + if( pxNetworkBuffer->pucEthernetBuffer == NULL ) + { + free( pxNetworkBuffer ); + pxNetworkBuffer = NULL; + } + else + { + pxNetworkBuffer->pucEthernetBuffer = ( ( uint8_t * ) pxNetworkBuffer->pucEthernetBuffer ) + ipBUFFER_PADDING + ipUDP_PAYLOAD_IP_TYPE_OFFSET; + pxNetworkBuffer->xDataLength = xRequestedSizeBytes; + } + } + + return pxNetworkBuffer; +} + +/* + * In this function, it only allocates network buffer by pxGetNetworkBufferWithDescriptor + * stub function above here. In this case, we should free both network buffer descriptor and pucEthernetBuffer. + */ +void vReleaseNetworkBufferAndDescriptor( NetworkBufferDescriptor_t * const pxNetworkBuffer ) +{ + __CPROVER_assert( pxNetworkBuffer != NULL, + "Precondition: pxNetworkBuffer != NULL" ); + + free( pxNetworkBuffer->pucEthernetBuffer - ( ipUDP_PAYLOAD_IP_TYPE_OFFSET + ipBUFFER_PADDING ) ); + free( pxNetworkBuffer ); +} + +/* FreeRTOS_ReleaseUDPPayloadBuffer is mocked here and the memory + * is not freed as the buffer allocated by the FreeRTOS_recvfrom is static + * memory */ +void FreeRTOS_ReleaseUDPPayloadBuffer( void * pvBuffer ) +{ + __CPROVER_assert( pvBuffer != NULL, + "FreeRTOS precondition: pvBuffer != NULL" ); +} + /**************************************************************** * Abstract DNS_ParseDNSReply proved memory safe in ParseDNSReply. * @@ -111,37 +162,93 @@ BaseType_t NetworkInterfaceOutputFunction_Stub( struct xNetworkInterface * pxDes return ret; } -/*We assume that the pxGetNetworkBufferWithDescriptor function is implemented correctly and returns a valid data structure. */ -/*This is the mock to mimic the correct expected behavior. If this allocation fails, this might invalidate the proof. */ -NetworkBufferDescriptor_t * pxGetNetworkBufferWithDescriptor( size_t xRequestedSizeBytes, - TickType_t xBlockTimeTicks ) +Socket_t DNS_CreateSocket( TickType_t uxReadTimeout_ticks ) { - NetworkBufferDescriptor_t * pxNetworkBuffer = ( NetworkBufferDescriptor_t * ) malloc( sizeof( NetworkBufferDescriptor_t ) ); + Socket_t xSock = safeMalloc( sizeof( struct xSOCKET ) ); - if( pxNetworkBuffer != NULL ) - { - pxNetworkBuffer->pucEthernetBuffer = malloc( xRequestedSizeBytes + ipUDP_PAYLOAD_IP_TYPE_OFFSET ); + return xSock; +} - if( pxNetworkBuffer->pucEthernetBuffer == NULL ) - { - free( pxNetworkBuffer ); - pxNetworkBuffer = NULL; - } - else - { - pxNetworkBuffer->pucEthernetBuffer = ( ( uint8_t * ) pxNetworkBuffer->pucEthernetBuffer ) + ipUDP_PAYLOAD_IP_TYPE_OFFSET; - pxNetworkBuffer->xDataLength = xRequestedSizeBytes; - } - } +void DNS_CloseSocket( Socket_t xDNSSocket ) +{ + __CPROVER_assert( xDNSSocket != NULL, "The xDNSSocket cannot be NULL." ); + free( xDNSSocket ); +} - return pxNetworkBuffer; +/**************************************************************** +* Abstract DNS_BindSocket +* +* We stub out this function with return constraint of true or false +* +****************************************************************/ +BaseType_t DNS_BindSocket( Socket_t xSocket, + uint16_t usPort ) +{ + BaseType_t xReturn; + + __CPROVER_assume( xReturn == pdTRUE || xReturn == pdFALSE ); + + return xReturn; } -Socket_t DNS_CreateSocket( TickType_t uxReadTimeout_ticks ) +/**************************************************************** +* Abstract DNS_SendRequest +* +* We stub out this function with return constraint of true or false +* +****************************************************************/ +uint32_t DNS_SendRequest( Socket_t xDNSSocket, + struct freertos_sockaddr * xAddress, + struct xDNSBuffer * pxDNSBuf ) { - Socket_t xSock = safeMalloc( sizeof( struct xSOCKET ) ); + uint32_t ret; - return xSock; + __CPROVER_assume( ret >= 0 ); + __CPROVER_assume( ret <= 1 ); + + return ret; +} + +/**************************************************************** +* Abstract DNS_ReadReply +* +* We stub out this function which returned a dns_buffer filled with random data +* +****************************************************************/ +BaseType_t DNS_ReadReply( ConstSocket_t xDNSSocket, + struct freertos_sockaddr * xAddress, + struct xDNSBuffer * pxDNSBuf ) +{ + int len; + NetworkBufferDescriptor_t * pxNetworkBuffer; + + __CPROVER_assume( ( len > sizeof( DNSMessage_t ) ) && ( len < ipconfigNETWORK_MTU ) ); + + pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( len, 0 ); + __CPROVER_assume( pxNetworkBuffer != NULL ); + __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); + + pxDNSBuf->pucPayloadBuffer = pxNetworkBuffer->pucEthernetBuffer; + pxDNSBuf->uxPayloadLength = len; + + __CPROVER_havoc_slice( pxDNSBuf->pucPayloadBuffer, pxDNSBuf->uxPayloadLength ); + + return nondet_basetype(); +} + +/* Function xDNSSetCallBack is proven to be correct separately. */ +BaseType_t xDNSSetCallBack( const char * pcHostName, + void * pvSearchID, + FOnDNSEvent pCallbackFunction, + TickType_t xTimeout, + TickType_t xIdentifier, + BaseType_t xIsIPv6 ) +{ + BaseType_t xReturn; + + __CPROVER_assume( xReturn == pdTRUE || xReturn == pdFALSE ); + + return xReturn; } uint32_t Prepare_CacheLookup( const char * pcHostName, diff --git a/test/cbmc/proofs/DNS/DNSgetHostByName_a/Makefile.json b/test/cbmc/proofs/DNS/DNSgetHostByName_a/Makefile.json index f67cb0a113..e4114a1a63 100644 --- a/test/cbmc/proofs/DNS/DNSgetHostByName_a/Makefile.json +++ b/test/cbmc/proofs/DNS/DNSgetHostByName_a/Makefile.json @@ -24,11 +24,12 @@ "OBJS": [ "$(ENTRY)_harness.goto", - "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_Routing.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DNS.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DNS_Parser.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto" + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Utils.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto" ], "DEF": [ diff --git a/test/cbmc/proofs/DNS/DNSgetHostByName_cancel/DNSgetHostByName_cancel_harness.c b/test/cbmc/proofs/DNS/DNSgetHostByName_cancel/DNSgetHostByName_cancel_harness.c index 4ece6565be..e4ec2ecff5 100644 --- a/test/cbmc/proofs/DNS/DNSgetHostByName_cancel/DNSgetHostByName_cancel_harness.c +++ b/test/cbmc/proofs/DNS/DNSgetHostByName_cancel/DNSgetHostByName_cancel_harness.c @@ -8,6 +8,8 @@ #include "FreeRTOS_DNS.h" #include "FreeRTOS_IP_Private.h" +/* CBMC includes. */ +#include "cbmc.h" /* This proof assumes the length of pcHostName is bounded by MAX_HOSTNAME_LEN. This also abstracts the concurrency. */ @@ -20,27 +22,38 @@ BaseType_t xDNSSetCallBack( const char * pcHostName, TickType_t xIdentifier, BaseType_t xIsIPv6 ); -void * safeMalloc( size_t xWantedSize ) /* Returns a NULL pointer if the wanted size is 0. */ +/* Abstraction of uxListRemove from list. This also abstracts the concurrency. */ +void vListInitialise( List_t * const pxList ) { - if( xWantedSize == 0 ) - { - return NULL; - } + __CPROVER_assert( pxList != NULL, "pxList cannot be NULL" ); - uint8_t byte; + pxList->pxIndex = ( ListItem_t * ) &( pxList->xListEnd ); + pxList->xListEnd.xItemValue = portMAX_DELAY; - return byte ? malloc( xWantedSize ) : NULL; + /* The list end next and previous pointers point to itself so we know + * when the list is empty. */ + pxList->xListEnd.pxNext = ( ListItem_t * ) &( pxList->xListEnd ); + pxList->xListEnd.pxPrevious = ( ListItem_t * ) &( pxList->xListEnd ); + pxList->uxNumberOfItems = ( UBaseType_t ) 0U; } -/* Abstraction of xTaskCheckForTimeOut from task pool. This also abstracts the concurrency. */ -BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, - TickType_t * const pxTicksToWait ) +/* Abstraction of uxListRemove from list. This also abstracts the concurrency. */ +UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove ) { -} + List_t * const pxList = pxItemToRemove->pxContainer; -/* Abstraction of xTaskResumeAll from task pool. This also abstracts the concurrency. */ -BaseType_t xTaskResumeAll( void ) -{ + pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious; + pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext; + + if( pxList->pxIndex == pxItemToRemove ) + { + pxList->pxIndex = pxItemToRemove->pxPrevious; + } + + pxItemToRemove->pxContainer = NULL; + ( pxList->uxNumberOfItems )--; + + return pxList->uxNumberOfItems; } /* The function func mimics the callback function.*/ @@ -61,13 +74,11 @@ void harness() size_t len; BaseType_t xReturn; - __CPROVER_assume( len >= 0 && len <= MAX_HOSTNAME_LEN ); + __CPROVER_assume( len > 0 && len <= MAX_HOSTNAME_LEN ); char * pcHostName = safeMalloc( len ); - - if( len && pcHostName ) - { - pcHostName[ len - 1 ] = NULL; - } + __CPROVER_assume( pcHostName != NULL ); + __CPROVER_havoc_slice( pcHostName, len - 1 ); + pcHostName[ len - 1 ] = NULL; xReturn = xDNSSetCallBack( pcHostName, &pvSearchID, pCallback, xTimeout, xIdentifier, xIsIPv6 ); /* Add an item to be able to check the cancel function if the list is non-empty. */ FreeRTOS_gethostbyname_cancel( &pvSearchID ); diff --git a/test/cbmc/proofs/DNS/DNSgetHostByName_cancel/Makefile.json b/test/cbmc/proofs/DNS/DNSgetHostByName_cancel/Makefile.json index 8f568fb540..fc7bfc4c01 100644 --- a/test/cbmc/proofs/DNS/DNSgetHostByName_cancel/Makefile.json +++ b/test/cbmc/proofs/DNS/DNSgetHostByName_cancel/Makefile.json @@ -10,14 +10,18 @@ [ "--unwind 1", "--unwindset prvProcessDNSCache.0:5,strlen.0:{HOSTNAME_UNWIND},__builtin___strcpy_chk.0:{HOSTNAME_UNWIND},vDNSCheckCallBack.0:2,strcpy.0:{HOSTNAME_UNWIND}", - "--nondet-static" + "--unwindset strncpy.0:{HOSTNAME_UNWIND}" ], "OBJS": [ "$(ENTRY)_harness.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Utils.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Timers.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DNS.goto", - "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/tasks.goto", - "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/list.goto" + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DNS_Callback.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto" ], "DEF": [ diff --git a/test/cbmc/proofs/DNS/prepareReplyDNSMessage/Makefile.json b/test/cbmc/proofs/DNS/prepareReplyDNSMessage/Makefile.json index f4f366afbf..29e55e2b6f 100644 --- a/test/cbmc/proofs/DNS/prepareReplyDNSMessage/Makefile.json +++ b/test/cbmc/proofs/DNS/prepareReplyDNSMessage/Makefile.json @@ -10,6 +10,7 @@ [ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Utils.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DNS_Parser.goto" ], diff --git a/test/cbmc/proofs/DNS_ParseDNSReply/Configurations.json b/test/cbmc/proofs/DNS_ParseDNSReply/Configurations.json index 80f783f4cd..ae8c857026 100644 --- a/test/cbmc/proofs/DNS_ParseDNSReply/Configurations.json +++ b/test/cbmc/proofs/DNS_ParseDNSReply/Configurations.json @@ -1,16 +1,18 @@ { "ENTRY": "DNS_ParseDNSReply", - "TEST_PAYLOAD_SIZE": 2, - "TEST_IPV4_PACKET_SIZE": 29, - "TEST_IPV6_PACKET_SIZE": 49, + "TEST_MAX_TEST_UNWIND_LOOP": 6, + "TEST_MIN_TEST_DNS_HEADER": 12, + "TEST_MIN_IPV4_UDP_PACKET_SIZE": 42, + "TEST_MIN_IPV6_UDP_PACKET_SIZE": 62, + "TEST_IPV4_NETWORK_MTU": "__eval {TEST_MIN_IPV4_UDP_PACKET_SIZE} + {TEST_MIN_TEST_DNS_HEADER} + {TEST_MAX_TEST_UNWIND_LOOP}", + "TEST_IPV6_NETWORK_MTU": "__eval {TEST_MIN_IPV6_UDP_PACKET_SIZE} + {TEST_MIN_TEST_DNS_HEADER} + {TEST_MAX_TEST_UNWIND_LOOP}", "CBMCFLAGS": [ "--unwind 1", - "--unwindset DNS_ParseDNSReply.0:{TEST_PAYLOAD_SIZE}", - "--unwindset DNS_ReadNameField.0:{TEST_PAYLOAD_SIZE}", - "--unwindset DNS_ReadNameField.1:{TEST_PAYLOAD_SIZE}", - "--unwindset parseDNSAnswer.0:{TEST_PAYLOAD_SIZE}", - "--unwindset strncpy.0:{TEST_PAYLOAD_SIZE}" + "--unwindset strlen.0:{TEST_MAX_TEST_UNWIND_LOOP}", + "--unwindset DNS_ParseDNSReply.0:{TEST_MAX_TEST_UNWIND_LOOP}", + "--unwindset DNS_ReadNameField.0:{TEST_MAX_TEST_UNWIND_LOOP}", + "--unwindset DNS_ReadNameField.1:{TEST_MAX_TEST_UNWIND_LOOP}" ], "OPT": [ @@ -25,21 +27,63 @@ "DEF": [ { - "IPv4": + "IPv4_FixedNetworkBufferSize": [ - "TEST_PACKET_SIZE={TEST_IPV4_PACKET_SIZE}", + "TEST_MAX_PAYLOAD_SIZE={TEST_MAX_TEST_UNWIND_LOOP}", "ipconfigUSE_LLMNR=1", "ipconfigUSE_MDNS=1", - "IS_TESTING_IPV6=0" + "IS_TESTING_IPV6=0", + "IS_BUFFER_ALLOCATE_FIXED=1", + "ipconfigNETWORK_MTU={TEST_IPV4_NETWORK_MTU}", + "ipconfigUSE_TCP=0", + "ipconfigUSE_DHCP=0", + "ipconfigTCP_MSS=536", + "ipconfigDNS_CACHE_NAME_LENGTH={TEST_MAX_TEST_UNWIND_LOOP}" ] }, { - "IPv6": + "IPv6_FixedNetworkBufferSize": [ - "TEST_PACKET_SIZE={TEST_IPV6_PACKET_SIZE}", + "TEST_MAX_PAYLOAD_SIZE={TEST_MAX_TEST_UNWIND_LOOP}", "ipconfigUSE_LLMNR=1", "ipconfigUSE_MDNS=1", - "IS_TESTING_IPV6=1" + "IS_TESTING_IPV6=1", + "IS_BUFFER_ALLOCATE_FIXED=1", + "ipconfigNETWORK_MTU={TEST_IPV6_NETWORK_MTU}", + "ipconfigUSE_TCP=0", + "ipconfigUSE_DHCP=0", + "ipconfigTCP_MSS=536", + "ipconfigDNS_CACHE_NAME_LENGTH={TEST_MAX_TEST_UNWIND_LOOP}" + ] + }, + { + "IPv4_DynamicNetworkBufferSize": + [ + "TEST_MAX_PAYLOAD_SIZE={TEST_MAX_TEST_UNWIND_LOOP}", + "ipconfigUSE_LLMNR=1", + "ipconfigUSE_MDNS=1", + "IS_TESTING_IPV6=0", + "IS_BUFFER_ALLOCATE_FIXED=0", + "ipconfigNETWORK_MTU={TEST_IPV4_NETWORK_MTU}", + "ipconfigUSE_TCP=0", + "ipconfigUSE_DHCP=0", + "ipconfigTCP_MSS=536", + "ipconfigDNS_CACHE_NAME_LENGTH={TEST_MAX_TEST_UNWIND_LOOP}" + ] + }, + { + "IPv6_DynamicNetworkBufferSize": + [ + "TEST_MAX_PAYLOAD_SIZE={TEST_MAX_TEST_UNWIND_LOOP}", + "ipconfigUSE_LLMNR=1", + "ipconfigUSE_MDNS=1", + "IS_TESTING_IPV6=1", + "IS_BUFFER_ALLOCATE_FIXED=0", + "ipconfigNETWORK_MTU={TEST_IPV6_NETWORK_MTU}", + "ipconfigUSE_TCP=0", + "ipconfigUSE_DHCP=0", + "ipconfigTCP_MSS=536", + "ipconfigDNS_CACHE_NAME_LENGTH={TEST_MAX_TEST_UNWIND_LOOP}" ] } ], diff --git a/test/cbmc/proofs/DNS_ParseDNSReply/DNS_ParseDNSReply_harness.c b/test/cbmc/proofs/DNS_ParseDNSReply/DNS_ParseDNSReply_harness.c index 9fae89ddc8..60572ef2df 100644 --- a/test/cbmc/proofs/DNS_ParseDNSReply/DNS_ParseDNSReply_harness.c +++ b/test/cbmc/proofs/DNS_ParseDNSReply/DNS_ParseDNSReply_harness.c @@ -10,6 +10,7 @@ /* FreeRTOS+TCP includes. */ #include "FreeRTOS_IP.h" +#include "FreeRTOS_IP_Private.h" #include "FreeRTOS_DNS.h" #include "FreeRTOS_DNS_Parser.h" #include "NetworkBufferManagement.h" @@ -17,7 +18,8 @@ #include "IPTraceMacroDefaults.h" #include "cbmc.h" -#include "../../utility/memory_assignments.c" + +const BaseType_t xBufferAllocFixedSize = IS_BUFFER_ALLOCATE_FIXED; /**************************************************************** * Signature of function under test @@ -60,12 +62,18 @@ NetworkBufferDescriptor_t * pxUDPPayloadBuffer_to_NetworkBuffer( const void * pv uint32_t ulChar2u32( const uint8_t * pucPtr ) { + uint32_t ret; + __CPROVER_assert( __CPROVER_r_ok( pucPtr, 4 ), "must be 4 bytes legal address to read" ); + return ret; } uint16_t usChar2u16( const uint8_t * pucPtr ) { + uint16_t ret; + __CPROVER_assert( __CPROVER_r_ok( pucPtr, 2 ), "must be 2 bytes legal address to read" ); + return ret; } const char * FreeRTOS_inet_ntop( BaseType_t xAddressFamily, @@ -131,11 +139,14 @@ NetworkBufferDescriptor_t * pxDuplicateNetworkBufferWithDescriptor( const Networ { NetworkBufferDescriptor_t * pxNetworkBuffer = safeMalloc( sizeof( NetworkBufferDescriptor_t ) ); - if( ensure_memory_is_valid( pxNetworkBuffer, xNewLength ) ) + if( pxNetworkBuffer != NULL ) { pxNetworkBuffer->pucEthernetBuffer = safeMalloc( xNewLength ); - __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer ); + __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); pxNetworkBuffer->xDataLength = xNewLength; + + pxNetworkBuffer->pxEndPoint = safeMalloc( sizeof( NetworkEndPoint_t ) ); + __CPROVER_assume( pxNetworkBuffer->pxEndPoint != NULL ); } return pxNetworkBuffer; @@ -176,23 +187,31 @@ void harness() uint8_t * pPayloadBuffer; size_t uxPayloadBufferLength; - __CPROVER_assert( TEST_PACKET_SIZE < CBMC_MAX_OBJECT_SIZE, - "TEST_PACKET_SIZE < CBMC_MAX_OBJECT_SIZE" ); - - __CPROVER_assume( uxBufferLength < CBMC_MAX_OBJECT_SIZE ); - __CPROVER_assume( uxBufferLength <= TEST_PACKET_SIZE ); + __CPROVER_assume( uxBufferLength <= ipconfigNETWORK_MTU ); + __CPROVER_assume( pxNetworkEndPoint_Temp != NULL ); lIsIPv6Packet = IS_TESTING_IPV6; - xNetworkBuffer.pucEthernetBuffer = safeMalloc( uxBufferLength ); - xNetworkBuffer.xDataLength = uxBufferLength; - xNetworkBuffer.pxEndPoint = pxNetworkEndPoint_Temp; + if( xBufferAllocFixedSize != pdFALSE ) + { + /* When xBufferAllocFixedSize is true, buffers in all network descriptors + * is big enough to allow all Ethernet packet. */ + xNetworkBuffer.pucEthernetBuffer = safeMalloc( ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ); + xNetworkBuffer.xDataLength = uxBufferLength; + xNetworkBuffer.pxEndPoint = pxNetworkEndPoint_Temp; + } + else + { + xNetworkBuffer.pucEthernetBuffer = safeMalloc( uxBufferLength ); + xNetworkBuffer.xDataLength = uxBufferLength; + xNetworkBuffer.pxEndPoint = pxNetworkEndPoint_Temp; + } __CPROVER_assume( xNetworkBuffer.pucEthernetBuffer != NULL ); if( lIsIPv6Packet ) { - __CPROVER_assume( uxBufferLength >= ulIpv6UdpOffset ); /* 62 is total size of IPv4 UDP header, including ethernet, IPv6, UDP headers. */ + __CPROVER_assume( uxBufferLength >= ulIpv6UdpOffset ); /* 62 is total size of IPv6 UDP header, including ethernet, IPv6, UDP headers. */ pPayloadBuffer = xNetworkBuffer.pucEthernetBuffer + ulIpv6UdpOffset; uxPayloadBufferLength = uxBufferLength - ulIpv6UdpOffset; } diff --git a/test/cbmc/proofs/IP/ProcessEthernetPacket/Makefile.json b/test/cbmc/proofs/IP/ProcessEthernetPacket/Makefile.json index 4a2b35b440..101f63983f 100644 --- a/test/cbmc/proofs/IP/ProcessEthernetPacket/Makefile.json +++ b/test/cbmc/proofs/IP/ProcessEthernetPacket/Makefile.json @@ -12,6 +12,9 @@ [ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto" + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Timers.goto" ] } diff --git a/test/cbmc/proofs/IP/SendEventToIPTask/Makefile.json b/test/cbmc/proofs/IP/SendEventToIPTask/Makefile.json index 30727432c1..dfffab176a 100644 --- a/test/cbmc/proofs/IP/SendEventToIPTask/Makefile.json +++ b/test/cbmc/proofs/IP/SendEventToIPTask/Makefile.json @@ -36,6 +36,8 @@ [ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto", - "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/tasks.goto" + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Timers.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto" ] } diff --git a/test/cbmc/proofs/IP/SendEventToIPTask/SendEventToIPTask_harness.c b/test/cbmc/proofs/IP/SendEventToIPTask/SendEventToIPTask_harness.c index 706bdb9051..665d0ee927 100644 --- a/test/cbmc/proofs/IP/SendEventToIPTask/SendEventToIPTask_harness.c +++ b/test/cbmc/proofs/IP/SendEventToIPTask/SendEventToIPTask_harness.c @@ -36,6 +36,16 @@ #include "FreeRTOS_IP.h" #include "FreeRTOS_IP_Private.h" +/* Abstraction of xIsCallingFromIPTask */ +BaseType_t xIsCallingFromIPTask( void ) +{ + BaseType_t xReturn; + + __CPROVER_assume( ( xReturn == pdTRUE ) || ( xReturn == pdFALSE ) ); + + return xReturn; +} + /* The harness test proceeds to call SendEventToIPTask with an unconstrained value */ void harness() { diff --git a/test/cbmc/proofs/Makefile.template b/test/cbmc/proofs/Makefile.template index 094fd560c1..847b0a8f2a 100644 --- a/test/cbmc/proofs/Makefile.template +++ b/test/cbmc/proofs/Makefile.template @@ -105,7 +105,11 @@ $(ENTRY)5.goto: $(ENTRY)4.goto $(GOTO_INSTRUMENT) --drop-unused-functions @RULE_INPUT@ @RULE_OUTPUT@ \ > $(ENTRY)5.txt 2>&1 -$(ENTRY).goto: $(ENTRY)5.goto +$(ENTRY)6.goto: $(ENTRY)5.goto + $(GOTO_INSTRUMENT) --generate-function-body '(?!__CPROVER).*' --generate-function-body-options assert-false @RULE_INPUT@ @RULE_OUTPUT@ \ + > $(ENTRY)6.txt 2>&1 + +$(ENTRY).goto: $(ENTRY)6.goto @CP@ @RULE_INPUT@ @RULE_OUTPUT@ # ____________________________________________________________________ @@ -120,13 +124,13 @@ goto: # report if the proof failed. If the proof failed, we separately fail # the entire job using the check-cbmc-result rule. cbmc.xml: $(ENTRY).goto - -cbmc $(CBMCFLAGS) $(SOLVER) --unwinding-assertions --trace --xml-ui @RULE_INPUT@ > $@ 2>&1 + -cbmc $(CBMCFLAGS) $(SOLVER) --trace --xml-ui @RULE_INPUT@ > $@ 2>&1 property.xml: $(ENTRY).goto - cbmc $(CBMCFLAGS) --unwinding-assertions --show-properties --xml-ui @RULE_INPUT@ > $@ 2>&1 + cbmc $(CBMCFLAGS) --show-properties --xml-ui @RULE_INPUT@ > $@ 2>&1 coverage.xml: $(ENTRY).goto - cbmc $(CBMCFLAGS) --cover location --xml-ui @RULE_INPUT@ > $@ 2>&1 + cbmc $(CBMCFLAGS) --no-standard-checks --malloc-may-fail --malloc-fail-null --cover location --xml-ui @RULE_INPUT@ > $@ 2>&1 cbmc: cbmc.xml diff --git a/test/cbmc/proofs/MakefileCommon.json b/test/cbmc/proofs/MakefileCommon.json index 7ada3e1dca..79e8b7bfbe 100644 --- a/test/cbmc/proofs/MakefileCommon.json +++ b/test/cbmc/proofs/MakefileCommon.json @@ -32,9 +32,7 @@ "CBMCFLAGS ": [ "--object-bits 8", - "--32", - "--bounds-check", - "--pointer-check" + "--32" ], "FORWARD_SLASH": ["/"], diff --git a/test/cbmc/proofs/ND/prvProcessICMPMessage_IPv6/Makefile.json b/test/cbmc/proofs/ND/prvProcessICMPMessage_IPv6/Makefile.json index 09f7d0beb9..151aefe2ec 100644 --- a/test/cbmc/proofs/ND/prvProcessICMPMessage_IPv6/Makefile.json +++ b/test/cbmc/proofs/ND/prvProcessICMPMessage_IPv6/Makefile.json @@ -8,8 +8,11 @@ "OBJS": [ "$(ENTRY)_harness.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_ND.goto" - + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Timers.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_ND.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto" ], "DEF": [ diff --git a/test/cbmc/proofs/ND/prvProcessICMPMessage_IPv6/ProcessICMPMessage_IPv6_harness.c b/test/cbmc/proofs/ND/prvProcessICMPMessage_IPv6/ProcessICMPMessage_IPv6_harness.c index 990736bc7d..a6c1bc1ec7 100644 --- a/test/cbmc/proofs/ND/prvProcessICMPMessage_IPv6/ProcessICMPMessage_IPv6_harness.c +++ b/test/cbmc/proofs/ND/prvProcessICMPMessage_IPv6/ProcessICMPMessage_IPv6_harness.c @@ -37,7 +37,6 @@ #include "FreeRTOS_ND.h" /* CBMC includes. */ -#include "../../utility/memory_assignments.c" #include "cbmc.h" extern NDCacheRow_t xNDCache[ ipconfigND_CACHE_ENTRIES ]; @@ -70,6 +69,12 @@ void vReceiveNA( const NetworkBufferDescriptor_t * pxNetworkBuffer ) __CPROVER_assert( pxNetworkBuffer != NULL, "The network buffer descriptor cannot be NULL." ); } +/* This function has been tested separately. Therefore, we assume that the implementation is correct. */ +void vReceiveRA( const NetworkBufferDescriptor_t * pxNetworkBuffer ) +{ + __CPROVER_assert( pxNetworkBuffer != NULL, "The network buffer descriptor cannot be NULL." ); +} + /* This function has been tested separately. Therefore, we assume that the implementation is correct. */ BaseType_t xSendEventStructToIPTask( const IPStackEvent_t * pxEvent, TickType_t uxTimeout ) @@ -103,7 +108,7 @@ NetworkEndPoint_t * FreeRTOS_InterfaceEPInSameSubnet_IPv6( const NetworkInterfac pxEndPoints = ( NetworkEndPoint_t * ) safeMalloc( sizeof( NetworkEndPoint_t ) ); - if( ensure_memory_is_valid( pxEndPoints, sizeof( NetworkEndPoint_t ) ) ) + if( ( pxEndPoints ) && __CPROVER_w_ok( pxEndPoints, sizeof( NetworkEndPoint_t ) ) ) { /* Interface init. */ pxEndPoints->pxNetworkInterface = ( NetworkInterface_t * ) safeMalloc( sizeof( NetworkInterface_t ) ); @@ -116,21 +121,34 @@ NetworkEndPoint_t * FreeRTOS_InterfaceEPInSameSubnet_IPv6( const NetworkInterfac return pxEndPoints; } +size_t uxIPHeaderSizePacket( const NetworkBufferDescriptor_t * pxNetworkBuffer ) +{ + size_t uxResult; + + __CPROVER_assume( ( uxResult == ipSIZE_OF_IPv4_HEADER ) || ( uxResult == ipSIZE_OF_IPv6_HEADER ) ); + + return uxResult; +} + void harness() { - NetworkBufferDescriptor_t * pxNetworkBuffer = ensure_FreeRTOS_NetworkBuffer_is_allocated(); + NetworkBufferDescriptor_t * pxNetworkBuffer; uint32_t ulLen; uint16_t usEthernetBufferSize; - NetworkBufferDescriptor_t xLocalBuffer; + NetworkBufferDescriptor_t * pxLocalARPWaitingNetworkBuffer; + + /* Following assumption is to make sure ulLen doesn't go + * beyond CBMC_MAX_OBJECT_SIZE */ + __CPROVER_assume( ulLen < ( CBMC_MAX_OBJECT_SIZE - ipBUFFER_PADDING ) ); + + pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( ulLen, 0 ); /* The code does not expect pxNetworkBuffer to be NULL. */ __CPROVER_assume( pxNetworkBuffer != NULL ); - - __CPROVER_assume( ( ulLen >= sizeof( ICMPPacket_IPv6_t ) ) && ( ulLen < ipconfigNETWORK_MTU ) ); + __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); + __CPROVER_havoc_slice( pxNetworkBuffer->pucEthernetBuffer, ulLen ); pxNetworkBuffer->xDataLength = ulLen; - pxNetworkBuffer->pucEthernetBuffer = safeMalloc( ulLen ); - __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); /* Add an end point to the network buffer present. Its assumed that the * network interface layer correctly assigns the end point to the generated buffer. */ @@ -147,19 +165,20 @@ void harness() /* The packet must at least be as big as an IPv6 Packet. The size is not * checked in the function as the pointer is stored by the IP-task itself * and therefore it will always be of the required size. */ - __CPROVER_assume( usEthernetBufferSize >= sizeof( IPPacket_IPv6_t ) ); - - /* Add matching data length to the network buffer descriptor. */ - __CPROVER_assume( xLocalBuffer.xDataLength == usEthernetBufferSize ); - - xLocalBuffer.pucEthernetBuffer = safeMalloc( usEthernetBufferSize ); + __CPROVER_assume( ( usEthernetBufferSize >= sizeof( IPPacket_IPv6_t ) ) && ( usEthernetBufferSize < ipconfigNETWORK_MTU ) ); + pxLocalARPWaitingNetworkBuffer = pxGetNetworkBufferWithDescriptor( usEthernetBufferSize, 0 ); /* Since this pointer is maintained by the IP-task, either the pointer - * pxARPWaitingNetworkBuffer will be NULL or xLocalBuffer.pucEthernetBuffer + * pxARPWaitingNetworkBuffer will be NULL or pxLocalARPWaitingNetworkBuffer.pucEthernetBuffer * will be non-NULL. */ - __CPROVER_assume( xLocalBuffer.pucEthernetBuffer != NULL ); + __CPROVER_assume( pxLocalARPWaitingNetworkBuffer != NULL ); + __CPROVER_assume( pxLocalARPWaitingNetworkBuffer->pucEthernetBuffer != NULL ); + __CPROVER_havoc_slice( pxLocalARPWaitingNetworkBuffer->pucEthernetBuffer, usEthernetBufferSize ); + + /* Add matching data length to the network buffer descriptor. */ + pxLocalARPWaitingNetworkBuffer->xDataLength = usEthernetBufferSize; - pxARPWaitingNetworkBuffer = &xLocalBuffer; + pxARPWaitingNetworkBuffer = pxLocalARPWaitingNetworkBuffer; } else { diff --git a/test/cbmc/proofs/ND/prvReturnICMP_IPv6/Makefile.json b/test/cbmc/proofs/ND/prvReturnICMP_IPv6/Makefile.json index cdc3a4f0a2..47de0cd15d 100644 --- a/test/cbmc/proofs/ND/prvReturnICMP_IPv6/Makefile.json +++ b/test/cbmc/proofs/ND/prvReturnICMP_IPv6/Makefile.json @@ -8,8 +8,11 @@ "OBJS": [ "$(ENTRY)_harness.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_ND.goto" - + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Timers.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_ND.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto" ], "INC": [ diff --git a/test/cbmc/proofs/ND/prvReturnICMP_IPv6/ReturnICMP_IPv6_harness.c b/test/cbmc/proofs/ND/prvReturnICMP_IPv6/ReturnICMP_IPv6_harness.c index b40437501a..e0340a76cd 100644 --- a/test/cbmc/proofs/ND/prvReturnICMP_IPv6/ReturnICMP_IPv6_harness.c +++ b/test/cbmc/proofs/ND/prvReturnICMP_IPv6/ReturnICMP_IPv6_harness.c @@ -37,7 +37,6 @@ #include "FreeRTOS_ND.h" /* CBMC includes. */ -#include "../../utility/memory_assignments.c" #include "cbmc.h" extern NDCacheRow_t xNDCache[ ipconfigND_CACHE_ENTRIES ]; @@ -72,6 +71,12 @@ void vReceiveNA( const NetworkBufferDescriptor_t * pxNetworkBuffer ) __CPROVER_assert( pxNetworkBuffer->pucEthernetBuffer != NULL, "The Ethernet buffer cannot be NULL." ); } +/* This function has been tested separately. Therefore, we assume that the implementation is correct. */ +void vReceiveRA( const NetworkBufferDescriptor_t * pxNetworkBuffer ) +{ + __CPROVER_assert( pxNetworkBuffer != NULL, "The network buffer descriptor cannot be NULL." ); +} + /* This function has been tested separately. Therefore, we assume that the implementation is correct. */ BaseType_t xSendEventStructToIPTask( const IPStackEvent_t * pxEvent, TickType_t uxTimeout ) @@ -106,7 +111,7 @@ NetworkEndPoint_t * FreeRTOS_InterfaceEPInSameSubnet_IPv6( const NetworkInterfac pxEndPoints = ( NetworkEndPoint_t * ) safeMalloc( sizeof( NetworkEndPoint_t ) ); - if( ensure_memory_is_valid( pxEndPoints, sizeof( NetworkEndPoint_t ) ) ) + if( ( pxEndPoints ) && __CPROVER_w_ok( pxEndPoints, sizeof( NetworkEndPoint_t ) ) ) { /* Interface init. */ pxEndPoints->pxNetworkInterface = ( NetworkInterface_t * ) safeMalloc( sizeof( NetworkInterface_t ) ); @@ -119,21 +124,33 @@ NetworkEndPoint_t * FreeRTOS_InterfaceEPInSameSubnet_IPv6( const NetworkInterfac return pxEndPoints; } +size_t uxIPHeaderSizePacket( const NetworkBufferDescriptor_t * pxNetworkBuffer ) +{ + size_t uxResult; + + __CPROVER_assume( ( uxResult == ipSIZE_OF_IPv4_HEADER ) || ( uxResult == ipSIZE_OF_IPv6_HEADER ) ); + + return uxResult; +} + void harness() { - NetworkBufferDescriptor_t * pxNetworkBuffer = ensure_FreeRTOS_NetworkBuffer_is_allocated(); + NetworkBufferDescriptor_t * pxNetworkBuffer; uint32_t ulLen; - NetworkBufferDescriptor_t xLocalBuffer; + NetworkBufferDescriptor_t * pxLocalARPWaitingNetworkBuffer; uint16_t usEthernetBufferSize; - /* The code does not expect both of these to be equal to NULL at the same time. */ - __CPROVER_assume( pxNetworkBuffer != NULL ); - __CPROVER_assume( ( ulLen >= sizeof( ICMPPacket_IPv6_t ) ) && ( ulLen < ipconfigNETWORK_MTU ) ); + pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( ulLen, 0 ); + + /* The code does not expect pxNetworkBuffer to be NULL. */ + __CPROVER_assume( pxNetworkBuffer != NULL ); + pxNetworkBuffer->xDataLength = ulLen; pxNetworkBuffer->pucEthernetBuffer = safeMalloc( ulLen ); - __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer ); + __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); + __CPROVER_havoc_slice( pxNetworkBuffer->pucEthernetBuffer, ulLen ); /* Add an end point to the network buffer present. Its assumed that the * network interface layer correctly assigns the end point to the generated buffer. */ @@ -149,19 +166,20 @@ void harness() /* The packet must at least be as big as an IPv6 Packet. The size is not * checked in the function as the pointer is stored by the IP-task itself * and therefore it will always be of the required size. */ - __CPROVER_assume( usEthernetBufferSize >= sizeof( IPPacket_IPv6_t ) ); - - /* Add matching data length to the network buffer descriptor. */ - __CPROVER_assume( xLocalBuffer.xDataLength == usEthernetBufferSize ); - - xLocalBuffer.pucEthernetBuffer = safeMalloc( usEthernetBufferSize ); + __CPROVER_assume( ( usEthernetBufferSize >= sizeof( IPPacket_IPv6_t ) ) && ( usEthernetBufferSize < ipconfigNETWORK_MTU ) ); + pxLocalARPWaitingNetworkBuffer = pxGetNetworkBufferWithDescriptor( usEthernetBufferSize, 0 ); /* Since this pointer is maintained by the IP-task, either the pointer - * pxARPWaitingNetworkBuffer will be NULL or xLocalBuffer.pucEthernetBuffer + * pxARPWaitingNetworkBuffer will be NULL or pxLocalARPWaitingNetworkBuffer.pucEthernetBuffer * will be non-NULL. */ - __CPROVER_assume( xLocalBuffer.pucEthernetBuffer != NULL ); + __CPROVER_assume( pxLocalARPWaitingNetworkBuffer != NULL ); + __CPROVER_assume( pxLocalARPWaitingNetworkBuffer->pucEthernetBuffer != NULL ); + __CPROVER_havoc_slice( pxLocalARPWaitingNetworkBuffer->pucEthernetBuffer, usEthernetBufferSize ); + + /* Add matching data length to the network buffer descriptor. */ + pxLocalARPWaitingNetworkBuffer->xDataLength = usEthernetBufferSize; - pxARPWaitingNetworkBuffer = &xLocalBuffer; + pxARPWaitingNetworkBuffer = pxLocalARPWaitingNetworkBuffer; prvProcessICMPMessage_IPv6( pxNetworkBuffer ); } diff --git a/test/cbmc/proofs/RA/vReceiveRA/Makefile.json b/test/cbmc/proofs/RA/vReceiveRA/Makefile.json index 8b995fc8d1..1a4edbd460 100644 --- a/test/cbmc/proofs/RA/vReceiveRA/Makefile.json +++ b/test/cbmc/proofs/RA/vReceiveRA/Makefile.json @@ -4,6 +4,7 @@ [ "--unwind 2", "--unwindset FreeRTOS_NextEndPoint.0:1", + "--unwindset FreeRTOS_CreateIPv6Address.0:5", "--nondet-static" ], "OPT": @@ -13,8 +14,13 @@ "OBJS": [ "$(ENTRY)_harness.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Timers.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_Routing.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_RA.goto" + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_RA.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_ND.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto" ], "INC": diff --git a/test/cbmc/proofs/RA/vReceiveRA/ReceiveRA_harness.c b/test/cbmc/proofs/RA/vReceiveRA/ReceiveRA_harness.c index e7f6cf5051..424c458326 100644 --- a/test/cbmc/proofs/RA/vReceiveRA/ReceiveRA_harness.c +++ b/test/cbmc/proofs/RA/vReceiveRA/ReceiveRA_harness.c @@ -37,7 +37,6 @@ #include "FreeRTOS_ND.h" /* CBMC includes. */ -#include "../../utility/memory_assignments.c" #include "cbmc.h" /* This function has been tested separately. Therefore, we assume that the implementation is correct. */ @@ -45,6 +44,11 @@ ICMPPrefixOption_IPv6_t * __CPROVER_file_local_FreeRTOS_RA_c_vReceiveRA_ReadRepl { ICMPPrefixOption_IPv6_t * pxPrefixOption = safeMalloc( sizeof( ICMPPrefixOption_IPv6_t ) ); + if( pxPrefixOption ) + { + __CPROVER_assume( ( pxPrefixOption->ucPrefixLength > 0U ) && ( pxPrefixOption->ucPrefixLength <= ( 8U * ipSIZE_OF_IPv6_ADDRESS ) ) ); + } + return pxPrefixOption; } @@ -75,30 +79,56 @@ void vNDSendRouterSolicitation( NetworkBufferDescriptor_t * pxNetworkBuffer, __CPROVER_assert( pxIPAddress != NULL, "The pxIPAddress cannot be NULL." ); } -void harness() +/* The checksum generation is stubbed out since the actual checksum + * does not matter. The stub will return an indeterminate value each time. */ +uint16_t usGenerateProtocolChecksum( const uint8_t * const pucEthernetBuffer, + size_t uxBufferLength, + BaseType_t xOutgoingPacket ) { - NetworkBufferDescriptor_t * pxNetworkBuffer = ensure_FreeRTOS_NetworkBuffer_is_allocated(); - NetworkInterface_t * pxInterface = ( NetworkInterface_t * ) safeMalloc( sizeof( NetworkInterface_t ) ); - uint32_t ulLen; + __CPROVER_assert( pucEthernetBuffer != NULL, "Ethernet buffer cannot be NULL" ); - /* The code does not expect pxNetworkBuffer to be NULL. */ - __CPROVER_assume( pxNetworkBuffer != NULL ); - - __CPROVER_assume( ( ulLen >= sizeof( ICMPPacket_IPv6_t ) ) && ( ulLen < ipconfigNETWORK_MTU ) ); - pxNetworkBuffer->pucEthernetBuffer = safeMalloc( ulLen ); - __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); + /* Return an indeterminate value. */ + return ( uint16_t ) nondet_uint32(); +} - pxNetworkBuffer->pxInterface = safeMalloc( sizeof( NetworkInterface_t ) ); - __CPROVER_assume( pxNetworkBuffer->pxInterface != NULL ); +/* vReturnEthernetFrame() is proved separately */ +void vReturnEthernetFrame( NetworkBufferDescriptor_t * pxNetworkBuffer, + BaseType_t xReleaseAfterSend ) +{ + __CPROVER_assert( pxNetworkBuffer != NULL, "xNetworkBuffer != NULL" ); + __CPROVER_assert( pxNetworkBuffer->pucEthernetBuffer != NULL, "pxNetworkBuffer->pucEthernetBuffer != NULL" ); + __CPROVER_assert( __CPROVER_r_ok( pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength ), "Data must be valid" ); +} - pxNetworkBuffer->pxEndPoint = safeMalloc( sizeof( NetworkEndPoint_t ) ); +void harness() +{ + NetworkBufferDescriptor_t * pxNetworkBuffer; + NetworkInterface_t * pxInterface = ( NetworkInterface_t * ) safeMalloc( sizeof( NetworkInterface_t ) ); + uint32_t ulLen; /* Initialize global Endpoint variable */ pxNetworkEndPoints = ( NetworkEndPoint_t * ) safeMalloc( sizeof( NetworkEndPoint_t ) ); __CPROVER_assume( pxNetworkEndPoints != NULL ); - pxNetworkEndPoints->pxNetworkInterface = pxNetworkBuffer->pxInterface; + pxNetworkEndPoints->pxNetworkInterface = safeMalloc( sizeof( NetworkInterface_t ) ); + __CPROVER_assume( pxNetworkEndPoints->pxNetworkInterface != NULL ); __CPROVER_assume( pxNetworkEndPoints->pxNetworkInterface != NULL ); pxNetworkEndPoints->pxNext = NULL; + /* Initialize network buffer. */ + __CPROVER_assume( ( ulLen >= sizeof( ICMPPacket_IPv6_t ) ) && ( ulLen < ipconfigNETWORK_MTU ) ); + + pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( ulLen, 0 ); + + /* The code does not expect pxNetworkBuffer to be NULL. */ + __CPROVER_assume( pxNetworkBuffer != NULL ); + __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); + __CPROVER_havoc_slice( pxNetworkBuffer->pucEthernetBuffer, ulLen ); + + pxNetworkBuffer->pxInterface = pxNetworkEndPoints->pxNetworkInterface; + pxNetworkBuffer->pxEndPoint = pxNetworkEndPoints; + + /* The prefix length must be equal to or less than 128 to avoid assertion in FreeRTOS_CreateIPv6Address(). */ + __CPROVER_assume( ( pxNetworkEndPoints->ipv6_settings.uxPrefixLength > 0U ) && ( pxNetworkEndPoints->ipv6_settings.uxPrefixLength <= ( 8U * ipSIZE_OF_IPv6_ADDRESS ) ) ); + vReceiveRA( pxNetworkBuffer ); } diff --git a/test/cbmc/proofs/RA/vReceiveRA_ReadReply/Makefile.json b/test/cbmc/proofs/RA/vReceiveRA_ReadReply/Makefile.json index 61d93b3d5d..91ff527323 100644 --- a/test/cbmc/proofs/RA/vReceiveRA_ReadReply/Makefile.json +++ b/test/cbmc/proofs/RA/vReceiveRA_ReadReply/Makefile.json @@ -12,6 +12,7 @@ "OBJS": [ "$(ENTRY)_harness.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Utils.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_RA.goto" ], diff --git a/test/cbmc/proofs/Routing/MatchingEndpoint/MatchingEndpoint_harness.c b/test/cbmc/proofs/Routing/MatchingEndpoint/MatchingEndpoint_harness.c index dbcde05c02..1496562b1b 100644 --- a/test/cbmc/proofs/Routing/MatchingEndpoint/MatchingEndpoint_harness.c +++ b/test/cbmc/proofs/Routing/MatchingEndpoint/MatchingEndpoint_harness.c @@ -39,6 +39,16 @@ #include "../../utility/memory_assignments.c" #include "cbmc.h" +/* Abstraction of xIsIPv6Loopback returns either true or false. */ +BaseType_t xIsIPv6Loopback( const IPv6_Address_t * pxAddress ) +{ + BaseType_t xReturn; + + __CPROVER_assume( xReturn == pdTRUE || xReturn == pdFALSE ); + + return xReturn; +} + void harness() { NetworkInterface_t * pxNetworkInterface = safeMalloc( sizeof( NetworkInterface_t ) ); diff --git a/test/cbmc/proofs/Socket/lTCPAddRxdata/TCPAddRxdata_harness.c b/test/cbmc/proofs/Socket/lTCPAddRxdata/TCPAddRxdata_harness.c index 6e0b9278a2..c8a7953453 100644 --- a/test/cbmc/proofs/Socket/lTCPAddRxdata/TCPAddRxdata_harness.c +++ b/test/cbmc/proofs/Socket/lTCPAddRxdata/TCPAddRxdata_harness.c @@ -34,11 +34,45 @@ void * pvPortMallocLarge( size_t xWantedSize ) return safeMalloc( xWantedSize ); } +size_t uxStreamBufferFrontSpace( const StreamBuffer_t * const pxBuffer ) +{ + size_t uxReturn; + + return uxReturn; +} + +BaseType_t xSendEventToIPTask( eIPEvent_t eEvent ) +{ + BaseType_t xReturn; + + __CPROVER_assume( ( xReturn == pdTRUE ) || ( xReturn == pdFALSE ) ); + + return xReturn; +} + +void vTCPStateChange( FreeRTOS_Socket_t * pxSocket, + enum eTCP_STATE eTCPState ) +{ +} + +size_t uxStreamBufferAdd( StreamBuffer_t * const pxBuffer, + size_t uxOffset, + const uint8_t * const pucData, + size_t uxByteCount ) +{ + size_t uxReturn; + + __CPROVER_assert( __CPROVER_r_ok( pucData, uxByteCount ), "Data pointer must be valid to read" ); + __CPROVER_assume( uxReturn <= uxByteCount ); + + return uxReturn; +} + void harness() { FreeRTOS_Socket_t * pxSocket = ensure_FreeRTOS_Socket_t_is_allocated(); size_t uxOffset; - const uint8_t * pcData; + const uint8_t * pcData = NULL; uint32_t ulByteCount; /* This function expect socket to be not NULL, as it has been validated previously */ @@ -48,7 +82,12 @@ void harness() __CPROVER_assume( pxSocket->u.xTCP.uxRxStreamSize >= 0 && pxSocket->u.xTCP.uxRxStreamSize < ipconfigTCP_RX_BUFFER_LENGTH ); __CPROVER_assume( pxSocket->u.xTCP.uxTxStreamSize >= 0 && pxSocket->u.xTCP.uxTxStreamSize < ipconfigTCP_TX_BUFFER_LENGTH ); + /* ipconfigTCP_MSS is guaranteed not less than tcpMINIMUM_SEGMENT_LENGTH by FreeRTOSIPConfigDefaults.h */ + __CPROVER_assume( pxSocket->u.xTCP.usMSS >= tcpMINIMUM_SEGMENT_LENGTH ); + + __CPROVER_assume( ulByteCount > 0U ); pcData = safeMalloc( ulByteCount ); + __CPROVER_assume( pcData != NULL ); lTCPAddRxdata( pxSocket, uxOffset, pcData, ulByteCount ); } diff --git a/test/cbmc/proofs/Socket/vSocketBind/ALLOW_ETHERNET_DRIVER_FILTERS_PACKETS/Makefile.json b/test/cbmc/proofs/Socket/vSocketBind/ALLOW_ETHERNET_DRIVER_FILTERS_PACKETS/Makefile.json index 379ae7a399..336e6d2ece 100644 --- a/test/cbmc/proofs/Socket/vSocketBind/ALLOW_ETHERNET_DRIVER_FILTERS_PACKETS/Makefile.json +++ b/test/cbmc/proofs/Socket/vSocketBind/ALLOW_ETHERNET_DRIVER_FILTERS_PACKETS/Makefile.json @@ -13,7 +13,8 @@ "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/list.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_Routing.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_Sockets.goto", - "$(ENTRY)_harness.goto" + "$(ENTRY)_harness.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto" ], "INSTFLAGS": [ diff --git a/test/cbmc/proofs/Socket/vSocketClose/Configurations.json b/test/cbmc/proofs/Socket/vSocketClose/Configurations.json index 50df094177..f36f3dc532 100644 --- a/test/cbmc/proofs/Socket/vSocketClose/Configurations.json +++ b/test/cbmc/proofs/Socket/vSocketClose/Configurations.json @@ -9,6 +9,7 @@ [ "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/list.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_Sockets.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", "$(ENTRY)_harness.goto" ], "DEF": diff --git a/test/cbmc/proofs/TCP/prvHandleListen/Makefile.json b/test/cbmc/proofs/TCP/prvHandleListen/Makefile.json index 856e50c30c..ab47b60c1b 100644 --- a/test/cbmc/proofs/TCP/prvHandleListen/Makefile.json +++ b/test/cbmc/proofs/TCP/prvHandleListen/Makefile.json @@ -9,6 +9,7 @@ [ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_State_Handling.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_State_Handling_IPv4.goto" ], @@ -19,7 +20,6 @@ ], "INSTFLAGS": [ - "--remove-function-body prvTCPSendReset" ], "INC": [ diff --git a/test/cbmc/proofs/TCP/prvHandleListen/prvHandleListen_harness.c b/test/cbmc/proofs/TCP/prvHandleListen/prvHandleListen_harness.c index a742293721..3fa5aadd81 100644 --- a/test/cbmc/proofs/TCP/prvHandleListen/prvHandleListen_harness.c +++ b/test/cbmc/proofs/TCP/prvHandleListen/prvHandleListen_harness.c @@ -53,6 +53,66 @@ Socket_t FreeRTOS_socket( BaseType_t xDomain, return ensure_FreeRTOS_Socket_t_is_allocated(); } +BaseType_t vSocketBind( FreeRTOS_Socket_t * pxSocket, + struct freertos_sockaddr * pxBindAddress, + size_t uxAddressLength, + BaseType_t xInternal ) +{ + BaseType_t xRet; + + __CPROVER_assert( pxSocket != NULL, + "FreeRTOS precondition: pxSocket != NULL" ); + __CPROVER_assert( pxBindAddress != NULL, + "FreeRTOS precondition: pxBindAddress != NULL" ); + + return xRet; +} + +void * vSocketClose( FreeRTOS_Socket_t * pxSocket ) +{ + __CPROVER_assert( pxSocket != NULL, "Closing socket cannot be NULL" ); + + return NULL; +} + +BaseType_t prvTCPSendReset( NetworkBufferDescriptor_t * pxNetworkBuffer ) +{ + BaseType_t xReturn; + + __CPROVER_assume( ( xReturn == pdTRUE ) || ( xReturn == pdFALSE ) ); + + return xReturn; +} + +void vTCPStateChange( FreeRTOS_Socket_t * pxSocket, + enum eTCP_STATE eTCPState ) +{ +} + +BaseType_t prvTCPCreateWindow( FreeRTOS_Socket_t * pxSocket ) +{ + BaseType_t xReturn; + + __CPROVER_assume( ( xReturn == pdTRUE ) || ( xReturn == pdFALSE ) ); + + return xReturn; +} + +void prvSocketSetMSS( FreeRTOS_Socket_t * pxSocket ) +{ + __CPROVER_assert( pxSocket != NULL, "pxSocket cannot be NULL" ); +} + +size_t FreeRTOS_GetLocalAddress( ConstSocket_t xSocket, + struct freertos_sockaddr * pxAddress ) +{ + size_t uxReturn; + + __CPROVER_assert( pxAddress != NULL, "pxAddress cannot be NULL" ); + + return uxReturn; +} + void harness() { size_t xDataLength; diff --git a/test/cbmc/proofs/TCP/prvHandleListen_IPv6/Makefile.json b/test/cbmc/proofs/TCP/prvHandleListen_IPv6/Makefile.json index aa1ee4f706..b824b9a396 100644 --- a/test/cbmc/proofs/TCP/prvHandleListen_IPv6/Makefile.json +++ b/test/cbmc/proofs/TCP/prvHandleListen_IPv6/Makefile.json @@ -11,6 +11,7 @@ [ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_State_Handling.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_State_Handling_IPv6.goto" ], @@ -21,7 +22,6 @@ ], "INSTFLAGS": [ - "--remove-function-body prvTCPSendReset" ], "INC": [ diff --git a/test/cbmc/proofs/TCP/prvHandleListen_IPv6/prvHandleListen_IPv6_harness.c b/test/cbmc/proofs/TCP/prvHandleListen_IPv6/prvHandleListen_IPv6_harness.c index 5134b5bca1..8be5891f9c 100644 --- a/test/cbmc/proofs/TCP/prvHandleListen_IPv6/prvHandleListen_IPv6_harness.c +++ b/test/cbmc/proofs/TCP/prvHandleListen_IPv6/prvHandleListen_IPv6_harness.c @@ -53,6 +53,66 @@ Socket_t FreeRTOS_socket( BaseType_t xDomain, return ensure_FreeRTOS_Socket_t_is_allocated(); } +BaseType_t vSocketBind( FreeRTOS_Socket_t * pxSocket, + struct freertos_sockaddr * pxBindAddress, + size_t uxAddressLength, + BaseType_t xInternal ) +{ + BaseType_t xRet; + + __CPROVER_assert( pxSocket != NULL, + "FreeRTOS precondition: pxSocket != NULL" ); + __CPROVER_assert( pxBindAddress != NULL, + "FreeRTOS precondition: pxBindAddress != NULL" ); + + return xRet; +} + +void * vSocketClose( FreeRTOS_Socket_t * pxSocket ) +{ + __CPROVER_assert( pxSocket != NULL, "Closing socket cannot be NULL" ); + + return NULL; +} + +void prvSocketSetMSS( FreeRTOS_Socket_t * pxSocket ) +{ + __CPROVER_assert( pxSocket != NULL, "pxSocket cannot be NULL" ); +} + +BaseType_t prvTCPSendReset( NetworkBufferDescriptor_t * pxNetworkBuffer ) +{ + BaseType_t xReturn; + + __CPROVER_assume( ( xReturn == pdTRUE ) || ( xReturn == pdFALSE ) ); + + return xReturn; +} + +void vTCPStateChange( FreeRTOS_Socket_t * pxSocket, + enum eTCP_STATE eTCPState ) +{ +} + +BaseType_t prvTCPCreateWindow( FreeRTOS_Socket_t * pxSocket ) +{ + BaseType_t xReturn; + + __CPROVER_assume( ( xReturn == pdTRUE ) || ( xReturn == pdFALSE ) ); + + return xReturn; +} + +size_t FreeRTOS_GetLocalAddress( ConstSocket_t xSocket, + struct freertos_sockaddr * pxAddress ) +{ + size_t uxReturn; + + __CPROVER_assert( pxAddress != NULL, "pxAddress cannot be NULL" ); + + return uxReturn; +} + void harness() { size_t xDataLength; diff --git a/test/cbmc/proofs/TCP/prvSendData/Makefile.json b/test/cbmc/proofs/TCP/prvSendData/Makefile.json index cfc73e67ea..f8b8a29f1d 100644 --- a/test/cbmc/proofs/TCP/prvSendData/Makefile.json +++ b/test/cbmc/proofs/TCP/prvSendData/Makefile.json @@ -8,7 +8,8 @@ "OBJS": [ "$(ENTRY)_harness.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_Transmission.goto" + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_Transmission.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto" ], "INC": [ diff --git a/test/cbmc/proofs/TCP/prvSendData/SendData_harness.c b/test/cbmc/proofs/TCP/prvSendData/SendData_harness.c index 83da8405bb..1f76a23fcd 100644 --- a/test/cbmc/proofs/TCP/prvSendData/SendData_harness.c +++ b/test/cbmc/proofs/TCP/prvSendData/SendData_harness.c @@ -36,7 +36,7 @@ #include "FreeRTOS_TCP_IP.h" /* CBMC includes. */ -#include "../../utility/memory_assignments.c" +#include "cbmc.h" /**************************************************************** * Declare the IP Header Size external to the harness so it can be @@ -52,15 +52,75 @@ size_t uxIPHeaderSizePacket( const NetworkBufferDescriptor_t * pxNetworkBuffer ) return uxIPHeaderSizePacket_uxResult; } +void prvTCPReturnPacket( FreeRTOS_Socket_t * pxSocket, + NetworkBufferDescriptor_t * pxDescriptor, + uint32_t ulLen, + BaseType_t xReleaseAfterSend ) +{ + __CPROVER_assert( pxSocket != NULL, "pxSocket should not be NULL" ); + __CPROVER_assert( pxDescriptor != NULL, "pxDescriptor should not be NULL" ); + __CPROVER_assert( pxDescriptor->pucEthernetBuffer != NULL, "pucEthernetBuffer should not be NULL" ); +} + +void prvTCPReturnPacket_IPV4( FreeRTOS_Socket_t * pxSocket, + NetworkBufferDescriptor_t * pxDescriptor, + uint32_t ulLen, + BaseType_t xReleaseAfterSend ) +{ + __CPROVER_assert( pxSocket != NULL, "pxSocket should not be NULL" ); + __CPROVER_assert( pxDescriptor != NULL, "pxDescriptor should not be NULL" ); + __CPROVER_assert( pxDescriptor->pucEthernetBuffer != NULL, "pucEthernetBuffer should not be NULL" ); +} + +/* Memory assignment for FreeRTOS_Socket_t */ +FreeRTOS_Socket_t * ensure_FreeRTOS_Socket_t_is_allocated() +{ + size_t buf_size; /* Give buffer_size an unconstrained value */ + FreeRTOS_Socket_t * pxSocket = safeMalloc( sizeof( FreeRTOS_Socket_t ) ); + + __CPROVER_assume( pxSocket != NULL ); + pxSocket->u.xTCP.rxStream = safeMalloc( sizeof( StreamBuffer_t ) ); + pxSocket->u.xTCP.txStream = safeMalloc( sizeof( StreamBuffer_t ) ); + pxSocket->u.xTCP.pxPeerSocket = safeMalloc( sizeof( FreeRTOS_Socket_t ) ); + pxSocket->pxEndPoint = safeMalloc( sizeof( NetworkEndPoint_t ) ); + pxSocket->u.xTCP.pxAckMessage = safeMalloc( sizeof( NetworkBufferDescriptor_t ) ); + + if( pxSocket->u.xTCP.pxAckMessage != NULL ) + { + __CPROVER_assume( ( buf_size > ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + sizeof( TCPHeader_t ) ) ) && ( buf_size < ipconfigNETWORK_MTU ) ); + pxSocket->u.xTCP.pxAckMessage->pucEthernetBuffer = safeMalloc( buf_size ); + __CPROVER_assume( pxSocket->u.xTCP.pxAckMessage->pucEthernetBuffer != NULL ); + } + + return pxSocket; +} + +/* + * In this function, it only allocates network buffer by harness. + */ +void vReleaseNetworkBufferAndDescriptor( NetworkBufferDescriptor_t * const pxNetworkBuffer ) +{ + __CPROVER_assert( pxNetworkBuffer != NULL, + "Precondition: pxNetworkBuffer != NULL" ); + + if( pxNetworkBuffer->pucEthernetBuffer != NULL ) + { + free( pxNetworkBuffer->pucEthernetBuffer ); + } + + free( pxNetworkBuffer ); +} + void harness() { FreeRTOS_Socket_t * pxSocket = ensure_FreeRTOS_Socket_t_is_allocated(); - NetworkBufferDescriptor_t * pxNetworkBuffer = ensure_FreeRTOS_NetworkBuffer_is_allocated(); + NetworkBufferDescriptor_t * pxNetworkBuffer; uint32_t ulReceiveLength; BaseType_t xByteCount; size_t buf_size; /* Give buffer_size an unconstrained value */ /* The code does not expect pxSocket/pxNetworkBuffer to be equal to NULL. */ + pxNetworkBuffer = safeMalloc( sizeof( NetworkBufferDescriptor_t ) ); __CPROVER_assume( pxSocket != NULL ); __CPROVER_assume( pxNetworkBuffer != NULL ); @@ -73,7 +133,7 @@ void harness() uxIPHeaderSizePacket_uxResult = ipSIZE_OF_IPv4_HEADER; } - __CPROVER_assume( buf_size > ( ipSIZE_OF_ETH_HEADER + uxIPHeaderSizePacket_uxResult + sizeof( TCPHeader_t ) ) ); + __CPROVER_assume( ( buf_size > ( ipSIZE_OF_ETH_HEADER + uxIPHeaderSizePacket_uxResult + sizeof( TCPHeader_t ) ) ) && ( buf_size < ipconfigNETWORK_MTU ) ); pxNetworkBuffer->pucEthernetBuffer = safeMalloc( buf_size ); __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); diff --git a/test/cbmc/proofs/TCP/prvTCPHandleState/Makefile.json b/test/cbmc/proofs/TCP/prvTCPHandleState/Makefile.json index c82fbddc3a..bc6f29b9c1 100644 --- a/test/cbmc/proofs/TCP/prvTCPHandleState/Makefile.json +++ b/test/cbmc/proofs/TCP/prvTCPHandleState/Makefile.json @@ -45,18 +45,21 @@ "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_Reception.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Utils.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Timers.goto" + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Timers.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto" ], "DEF": [ + "ipconfigUSE_TCP=1", "ipconfigZERO_COPY_TX_DRIVER={TX_DRIVER}", "ipconfigUSE_LINKED_RX_MESSAGES={RX_MESSAGES}", - "FREERTOS_TCP_ENABLE_VERIFICATION" + "FREERTOS_TCP_ENABLE_VERIFICATION", + "ipconfigNETWORK_MTU=586" ], "INSTFLAGS": [ - "--remove-function-body prvTCPPrepareSend", - "--remove-function-body prvTCPReturnPacket" ], "INC": [ diff --git a/test/cbmc/proofs/TCP/prvTCPHandleState/TCPHandleState_harness.c b/test/cbmc/proofs/TCP/prvTCPHandleState/TCPHandleState_harness.c index 1f5f99ea68..fddf816a3c 100644 --- a/test/cbmc/proofs/TCP/prvTCPHandleState/TCPHandleState_harness.c +++ b/test/cbmc/proofs/TCP/prvTCPHandleState/TCPHandleState_harness.c @@ -35,7 +35,8 @@ #include "FreeRTOS_IP_Private.h" #include "FreeRTOS_TCP_IP.h" -#include "../../utility/memory_assignments.c" +/* CBMC includes. */ +#include "cbmc.h" extern FreeRTOS_Socket_t * xSocketToListen; @@ -61,32 +62,211 @@ TaskHandle_t xTaskGetCurrentTaskHandle( void ) BaseType_t publicTCPHandleState( FreeRTOS_Socket_t * pxSocket, NetworkBufferDescriptor_t ** ppxNetworkBuffer ); +void * vSocketClose( FreeRTOS_Socket_t * pxSocket ) +{ + __CPROVER_assert( pxSocket != NULL, "Closing socket cannot be NULL." ); + + return NULL; +} + +void vSocketWakeUpUser( FreeRTOS_Socket_t * pxSocket ) +{ + __CPROVER_assert( pxSocket != NULL, "Closing socket cannot be NULL." ); + + return NULL; +} + +/* Memory assignment for FreeRTOS_Socket_t */ +FreeRTOS_Socket_t * ensure_FreeRTOS_Socket_t_is_allocated() +{ + size_t buf_size; /* Give buffer_size an unconstrained value */ + FreeRTOS_Socket_t * pxSocket = safeMalloc( sizeof( FreeRTOS_Socket_t ) ); + + __CPROVER_assume( pxSocket != NULL ); + pxSocket->u.xTCP.rxStream = safeMalloc( sizeof( StreamBuffer_t ) ); + pxSocket->u.xTCP.txStream = safeMalloc( sizeof( StreamBuffer_t ) ); + pxSocket->u.xTCP.pxPeerSocket = safeMalloc( sizeof( FreeRTOS_Socket_t ) ); + pxSocket->pxEndPoint = safeMalloc( sizeof( NetworkEndPoint_t ) ); + pxSocket->u.xTCP.pxAckMessage = safeMalloc( sizeof( NetworkBufferDescriptor_t ) ); + + if( pxSocket->u.xTCP.pxAckMessage != NULL ) + { + __CPROVER_assume( ( buf_size > ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + sizeof( TCPHeader_t ) ) ) && ( buf_size < ipconfigNETWORK_MTU ) ); + pxSocket->u.xTCP.pxAckMessage->pucEthernetBuffer = safeMalloc( buf_size ); + __CPROVER_assume( pxSocket->u.xTCP.pxAckMessage->pucEthernetBuffer != NULL ); + } + + return pxSocket; +} + +/* lTCPAddRxdata is proven separately. */ +int32_t lTCPAddRxdata( FreeRTOS_Socket_t * pxSocket, + size_t uxOffset, + const uint8_t * pcData, + uint32_t ulByteCount ) +{ + return nondet_int32(); +} + +/* prvSendData is proven separately. */ +BaseType_t prvSendData( FreeRTOS_Socket_t * pxSocket, + NetworkBufferDescriptor_t ** ppxNetworkBuffer, + uint32_t ulReceiveLength, + BaseType_t xByteCount ) +{ + __CPROVER_assert( pxSocket != NULL, "pxSocket cannot be NULL" ); + __CPROVER_assert( *ppxNetworkBuffer != NULL, "*ppxNetworkBuffer cannot be NULL" ); + + return nondet_BaseType(); +} + +/* prvTCPPrepareSend is proven separately. */ +int32_t prvTCPPrepareSend( FreeRTOS_Socket_t * pxSocket, + NetworkBufferDescriptor_t ** ppxNetworkBuffer, + UBaseType_t uxOptionsLength ) +{ + __CPROVER_assert( pxSocket != NULL, "pxSocket cannot be NULL" ); + __CPROVER_assert( *ppxNetworkBuffer != NULL, "*ppxNetworkBuffer cannot be NULL" ); + + return nondet_int32(); +} + +/* Mock all window APIs */ +int32_t lTCPWindowRxCheck( TCPWindow_t * pxWindow, + uint32_t ulSequenceNumber, + uint32_t ulLength, + uint32_t ulSpace, + uint32_t * pulSkipCount ) +{ + __CPROVER_assert( pxWindow != NULL, "pxWindow cannot be NULL" ); + __CPROVER_assert( __CPROVER_r_ok( pxWindow, sizeof( TCPWindow_t ) ), "pxWindow must be readable" ); + *pulSkipCount = nondet_uint32(); + + return nondet_int32(); +} + +uint32_t ulTCPWindowTxAck( TCPWindow_t * pxWindow, + uint32_t ulSequenceNumber ) +{ + __CPROVER_assert( pxWindow != NULL, "pxWindow cannot be NULL" ); + __CPROVER_assert( __CPROVER_r_ok( pxWindow, sizeof( TCPWindow_t ) ), "pxWindow must be readable" ); + + return nondet_uint32(); +} + +void vTCPWindowInit( TCPWindow_t * pxWindow, + uint32_t ulAckNumber, + uint32_t ulSequenceNumber, + uint32_t ulMSS ) +{ + __CPROVER_assert( pxWindow != NULL, "pxWindow cannot be NULL" ); + __CPROVER_assert( __CPROVER_r_ok( pxWindow, sizeof( TCPWindow_t ) ), "pxWindow must be readable" ); +} + +BaseType_t xTCPWindowRxEmpty( const TCPWindow_t * pxWindow ) +{ + __CPROVER_assert( pxWindow != NULL, "pxWindow cannot be NULL" ); + __CPROVER_assert( __CPROVER_r_ok( pxWindow, sizeof( TCPWindow_t ) ), "pxWindow must be readable" ); + + return nondet_BaseType(); +} + +BaseType_t xTCPWindowTxDone( const TCPWindow_t * pxWindow ) +{ + __CPROVER_assert( pxWindow != NULL, "pxWindow cannot be NULL" ); + __CPROVER_assert( __CPROVER_r_ok( pxWindow, sizeof( TCPWindow_t ) ), "pxWindow must be readable" ); + + return nondet_BaseType(); +} + +/* Mock all stream buffer APIs */ +size_t uxStreamBufferGet( StreamBuffer_t * const pxBuffer, + size_t uxOffset, + uint8_t * const pucData, + size_t uxMaxCount, + BaseType_t xPeek ) +{ + __CPROVER_assert( pxBuffer != NULL, "pxBuffer cannot be NULL" ); + + return nondet_sizet(); +} + +size_t uxStreamBufferGetSpace( const StreamBuffer_t * const pxBuffer ) +{ + __CPROVER_assert( pxBuffer != NULL, "pxBuffer cannot be NULL" ); + + return nondet_sizet(); +} + +/* Mock all transmission APIs. */ +UBaseType_t prvSetOptions( FreeRTOS_Socket_t * pxSocket, + const NetworkBufferDescriptor_t * pxNetworkBuffer ) +{ + __CPROVER_assert( pxSocket != NULL, "pxSocket cannot be NULL" ); + __CPROVER_assert( pxNetworkBuffer != NULL, "pxNetworkBuffer cannot be NULL" ); + + return nondet_ubasetype(); +} + +UBaseType_t prvSetSynAckOptions( FreeRTOS_Socket_t * pxSocket, + TCPHeader_t * pxTCPHeader ) +{ + __CPROVER_assert( pxSocket != NULL, "pxSocket cannot be NULL" ); + __CPROVER_assert( pxTCPHeader != NULL, "pxTCPHeader cannot be NULL" ); + + return nondet_ubasetype(); +} + +void prvTCPAddTxData( FreeRTOS_Socket_t * pxSocket ) +{ + __CPROVER_assert( pxSocket != NULL, "pxSocket cannot be NULL" ); +} + +BaseType_t prvTCPSendReset( NetworkBufferDescriptor_t * pxNetworkBuffer ) +{ + __CPROVER_assert( pxNetworkBuffer != NULL, "pxNetworkBuffer cannot be NULL" ); + + return nondet_BaseType(); +} + +const char * FreeRTOS_inet_ntop( BaseType_t xAddressFamily, + const void * pvSource, + char * pcDestination, + socklen_t uxSize ) +{ + __CPROVER_assert( __CPROVER_r_ok( pcDestination, uxSize ), "input buffer must be available" ); + + __CPROVER_assert( ( xAddressFamily == FREERTOS_AF_INET6 && __CPROVER_r_ok( pvSource, 16 ) ) || + ( xAddressFamily == FREERTOS_AF_INET && __CPROVER_r_ok( pvSource, 4 ) ), + "input address must be available" ); +} + void harness() { FreeRTOS_Socket_t * pxSocket = ensure_FreeRTOS_Socket_t_is_allocated(); - size_t socketSize = sizeof( FreeRTOS_Socket_t ); - if( ensure_memory_is_valid( pxSocket, socketSize ) ) + __CPROVER_assume( pxSocket != NULL ); + + /* ucOptionLength is the number of valid bytes in ulOptionsData[]. + * ulOptionsData[] is initialized as uint32_t ulOptionsData[ipSIZE_TCP_OPTIONS/sizeof(uint32_t)]. + * This assumption is required for a memcpy function that copies uxOptionsLength + * data from pxTCPHeader->ucOptdata to pxTCPWindow->ulOptionsData.*/ + __CPROVER_assume( pxSocket->u.xTCP.xTCPWindow.ucOptionLength == sizeof( uint32_t ) * ipSIZE_TCP_OPTIONS / sizeof( uint32_t ) ); + /* uxRxWinSize is initialized as size_t. This assumption is required to terminate `while(uxWinSize > 0xfffful)` loop.*/ + __CPROVER_assume( pxSocket->u.xTCP.uxRxWinSize >= 0 && pxSocket->u.xTCP.uxRxWinSize <= sizeof( size_t ) ); + /* uxRxWinSize is initialized as uint16_t. This assumption is required to terminate `while(uxWinSize > 0xfffful)` loop.*/ + __CPROVER_assume( pxSocket->u.xTCP.usMSS == sizeof( uint16_t ) ); + /* ucPeerWinScaleFactor is limited in range [0,14]. */ + __CPROVER_assume( pxSocket->u.xTCP.ucPeerWinScaleFactor <= tcpTCP_OPT_WSOPT_MAXIMUM_VALUE ); + + if( xIsCallingFromIPTask() == pdFALSE ) { - /* ucOptionLength is the number of valid bytes in ulOptionsData[]. - * ulOptionsData[] is initialized as uint32_t ulOptionsData[ipSIZE_TCP_OPTIONS/sizeof(uint32_t)]. - * This assumption is required for a memcpy function that copies uxOptionsLength - * data from pxTCPHeader->ucOptdata to pxTCPWindow->ulOptionsData.*/ - __CPROVER_assume( pxSocket->u.xTCP.xTCPWindow.ucOptionLength == sizeof( uint32_t ) * ipSIZE_TCP_OPTIONS / sizeof( uint32_t ) ); - /* uxRxWinSize is initialized as size_t. This assumption is required to terminate `while(uxWinSize > 0xfffful)` loop.*/ - __CPROVER_assume( pxSocket->u.xTCP.uxRxWinSize >= 0 && pxSocket->u.xTCP.uxRxWinSize <= sizeof( size_t ) ); - /* uxRxWinSize is initialized as uint16_t. This assumption is required to terminate `while(uxWinSize > 0xfffful)` loop.*/ - __CPROVER_assume( pxSocket->u.xTCP.usMSS == sizeof( uint16_t ) ); - - if( xIsCallingFromIPTask() == pdFALSE ) - { - __CPROVER_assume( pxSocket->u.xTCP.bits.bPassQueued == pdFALSE_UNSIGNED ); - __CPROVER_assume( pxSocket->u.xTCP.bits.bPassAccept == pdFALSE_UNSIGNED ); - } + __CPROVER_assume( pxSocket->u.xTCP.bits.bPassQueued == pdFALSE_UNSIGNED ); + __CPROVER_assume( pxSocket->u.xTCP.bits.bPassAccept == pdFALSE_UNSIGNED ); } - NetworkBufferDescriptor_t * pxNetworkBuffer = ensure_FreeRTOS_NetworkBuffer_is_allocated(); - size_t bufferSize = sizeof( NetworkBufferDescriptor_t ); + NetworkBufferDescriptor_t * pxNetworkBuffer = safeMalloc( sizeof( NetworkBufferDescriptor_t ) ); + __CPROVER_assume( pxNetworkBuffer != NULL ); FreeRTOS_Socket_t xSck; xSocketToListen = &xSck; @@ -94,17 +274,16 @@ void harness() /* Call to init the socket list. */ vListInitialise( &xBoundTCPSocketsList ); - if( ensure_memory_is_valid( pxNetworkBuffer, bufferSize ) ) - { - /* Allocates min. buffer size required for the proof */ - pxNetworkBuffer->pucEthernetBuffer = safeMalloc( sizeof( TCPPacket_t ) + uxIPHeaderSizeSocket( pxSocket ) ); - } + /* Allocates min. buffer size required for the proof */ + pxNetworkBuffer->pucEthernetBuffer = safeMalloc( sizeof( TCPPacket_t ) + uxIPHeaderSizeSocket( pxSocket ) ); + __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); + pxNetworkBuffer->xDataLength = sizeof( TCPPacket_t ) + uxIPHeaderSizeSocket( pxSocket ); - if( ensure_memory_is_valid( pxSocket, socketSize ) && - ensure_memory_is_valid( pxNetworkBuffer, bufferSize ) && - ensure_memory_is_valid( pxNetworkBuffer->pucEthernetBuffer, sizeof( TCPPacket_t ) ) && - ensure_memory_is_valid( pxSocket->u.xTCP.pxPeerSocket, socketSize ) ) + if( pxSocket->u.xTCP.bits.bReuseSocket == pdFALSE ) { - publicTCPHandleState( pxSocket, &pxNetworkBuffer ); + /* Make sure we have parent socket if reuse is set to FALSE to avoid assertion in vTCPStateChange(). */ + __CPROVER_assume( pxSocket->u.xTCP.pxPeerSocket != NULL ); } + + publicTCPHandleState( pxSocket, &pxNetworkBuffer ); } diff --git a/test/cbmc/proofs/TCP/prvTCPPrepareSend/Makefile.json b/test/cbmc/proofs/TCP/prvTCPPrepareSend/Makefile.json index df1df0a680..e1dd2fdf05 100644 --- a/test/cbmc/proofs/TCP/prvTCPPrepareSend/Makefile.json +++ b/test/cbmc/proofs/TCP/prvTCPPrepareSend/Makefile.json @@ -40,7 +40,10 @@ "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/list.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_IP.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_Transmission.goto" + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_Transmission.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto" ], "OPT": [ @@ -48,7 +51,8 @@ ], "DEF": [ - "FREERTOS_TCP_ENABLE_VERIFICATION" + "FREERTOS_TCP_ENABLE_VERIFICATION", + "CBMC_REQUIRE_NETWORKBUFFER_ETHERNETBUFFER_NONNULL" ], "INC": [ diff --git a/test/cbmc/proofs/TCP/prvTCPPrepareSend/TCPPrepareSend_harness.c b/test/cbmc/proofs/TCP/prvTCPPrepareSend/TCPPrepareSend_harness.c index d889e16382..63bfac2799 100644 --- a/test/cbmc/proofs/TCP/prvTCPPrepareSend/TCPPrepareSend_harness.c +++ b/test/cbmc/proofs/TCP/prvTCPPrepareSend/TCPPrepareSend_harness.c @@ -36,30 +36,35 @@ #include "FreeRTOS_TCP_IP.h" #include "FreeRTOS_Stream_Buffer.h" -#include "../../utility/memory_assignments.c" +/* CBMC includes. */ +#include "cbmc.h" /* This proof assumes that pxGetNetworkBufferWithDescriptor is implemented correctly. */ int32_t publicTCPPrepareSend( FreeRTOS_Socket_t * pxSocket, NetworkBufferDescriptor_t ** ppxNetworkBuffer, UBaseType_t uxOptionsLength ); -/* Abstraction of pxGetNetworkBufferWithDescriptor. It creates a buffer. */ -NetworkBufferDescriptor_t * pxGetNetworkBufferWithDescriptor( size_t xRequestedSizeBytes, - TickType_t xBlockTimeTicks ) +/* Memory assignment for FreeRTOS_Socket_t */ +FreeRTOS_Socket_t * ensure_FreeRTOS_Socket_t_is_allocated() { - NetworkBufferDescriptor_t * pxBuffer = ensure_FreeRTOS_NetworkBuffer_is_allocated(); - size_t bufferSize = sizeof( NetworkBufferDescriptor_t ); + size_t buf_size; /* Give buffer_size an unconstrained value */ + FreeRTOS_Socket_t * pxSocket = safeMalloc( sizeof( FreeRTOS_Socket_t ) + sizeof( IPTCPSocket_t ) ); - if( ensure_memory_is_valid( pxBuffer, bufferSize ) ) + __CPROVER_assume( pxSocket != NULL ); + pxSocket->u.xTCP.rxStream = safeMalloc( sizeof( StreamBuffer_t ) ); + pxSocket->u.xTCP.txStream = safeMalloc( sizeof( StreamBuffer_t ) ); + pxSocket->u.xTCP.pxPeerSocket = safeMalloc( sizeof( FreeRTOS_Socket_t ) ); + pxSocket->pxEndPoint = safeMalloc( sizeof( NetworkEndPoint_t ) ); + pxSocket->u.xTCP.pxAckMessage = safeMalloc( sizeof( NetworkBufferDescriptor_t ) ); + + if( pxSocket->u.xTCP.pxAckMessage != NULL ) { - /* The code does not expect pucEthernetBuffer to be equal to NULL if - * pxBuffer is not NULL. */ - pxBuffer->pucEthernetBuffer = malloc( xRequestedSizeBytes ); - __CPROVER_assume( pxBuffer->pucEthernetBuffer != NULL ); - pxBuffer->xDataLength = xRequestedSizeBytes; + __CPROVER_assume( ( buf_size > ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + sizeof( TCPHeader_t ) ) ) && ( buf_size < ipconfigNETWORK_MTU ) ); + pxSocket->u.xTCP.pxAckMessage->pucEthernetBuffer = safeMalloc( buf_size ); + __CPROVER_assume( pxSocket->u.xTCP.pxAckMessage->pucEthernetBuffer != NULL ); } - return pxBuffer; + return pxSocket; } /* Get rid of configASSERT in FreeRTOS_TCP_IP.c */ @@ -68,37 +73,94 @@ BaseType_t xIsCallingFromIPTask( void ) return pdTRUE; } -void harness() +/* Mock FreeRTOS_TCP_State_Handling.h APIs */ +BaseType_t prvTCPSocketIsActive( eIPTCPState_t eStatus ) +{ + return nondet_BaseType(); +} + +/* Mock FreeRTOS_TCP_WIN.h APIs */ +BaseType_t xTCPWindowTxDone( const TCPWindow_t * pxWindow ) { - FreeRTOS_Socket_t * pxSocket = malloc( sizeof( FreeRTOS_Socket_t ) ); + __CPROVER_assert( pxWindow != NULL, "pxWindow cannot be NULL" ); + return nondet_uint32(); +} - __CPROVER_assume( pxSocket != NULL ); - pxSocket->u.xTCP.rxStream = malloc( sizeof( StreamBuffer_t ) ); - pxSocket->u.xTCP.txStream = malloc( sizeof( StreamBuffer_t ) ); - pxSocket->u.xTCP.pxPeerSocket = malloc( sizeof( FreeRTOS_Socket_t ) ); +uint32_t ulTCPWindowTxGet( TCPWindow_t * pxWindow, + uint32_t ulWindowSize, + int32_t * plPosition ) +{ + uint32_t ulReturn = nondet_uint32(); + + __CPROVER_assert( pxWindow != NULL, "pxWindow cannot be NULL" ); + __CPROVER_assert( plPosition != NULL, "plPosition cannot be NULL" ); + + /* This function returns the data length of next sending window, which is never larger than network MTU. */ + __CPROVER_assume( ulReturn < ipconfigNETWORK_MTU ); + return ulReturn; +} + +/* Mock FreeRTOS_Stream_Buffers.h APIs */ +size_t uxStreamBufferDistance( const StreamBuffer_t * const pxBuffer, + size_t uxLower, + size_t uxUpper ) +{ + __CPROVER_assert( pxBuffer != NULL, "pxBuffer cannot be NULL" ); + return nondet_sizet(); +} + +size_t uxStreamBufferGet( StreamBuffer_t * const pxBuffer, + size_t uxOffset, + uint8_t * const pucData, + size_t uxMaxCount, + BaseType_t xPeek ) +{ + __CPROVER_assert( pxBuffer != NULL, "pxBuffer cannot be NULL" ); + return nondet_sizet(); +} + +void * vSocketClose( FreeRTOS_Socket_t * pxSocket ) +{ + __CPROVER_assert( pxSocket != NULL, "Closing socket cannot be NULL." ); + + return NULL; +} + +void vSocketWakeUpUser( FreeRTOS_Socket_t * pxSocket ) +{ + __CPROVER_assert( pxSocket != NULL, "Closing socket cannot be NULL." ); - NetworkBufferDescriptor_t * pxNetworkBuffer = ensure_FreeRTOS_NetworkBuffer_is_allocated(); + return NULL; +} + +void harness() +{ + NetworkBufferDescriptor_t * pxNetworkBuffer; + FreeRTOS_Socket_t * pxSocket; size_t socketSize = sizeof( FreeRTOS_Socket_t ); /* Allocates min. buffer size required for the proof */ - size_t bufferSize = sizeof( TCPPacket_t ) + uxIPHeaderSizeSocket( pxSocket ); + size_t bufferSize; - if( ensure_memory_is_valid( pxNetworkBuffer, sizeof( *pxNetworkBuffer ) ) ) - { - pxNetworkBuffer->xDataLength = bufferSize; + pxSocket = ensure_FreeRTOS_Socket_t_is_allocated(); + __CPROVER_assume( pxSocket != NULL ); - /* The code does not expect pucEthernetBuffer to be equal to NULL if - * pxNetworkBuffer is not NULL. */ - pxNetworkBuffer->pucEthernetBuffer = malloc( bufferSize ); - __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); + if( pxSocket->u.xTCP.bits.bReuseSocket == pdFALSE ) + { + /* Make sure we have parent socket if reuse is set to FALSE to avoid assertion in vTCPStateChange(). */ + __CPROVER_assume( pxSocket->u.xTCP.pxPeerSocket != NULL ); } - UBaseType_t uxOptionsLength; + bufferSize = sizeof( TCPPacket_t ) + ipSIZE_OF_IPv6_HEADER; + + pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( bufferSize, 0 ); + __CPROVER_assume( pxNetworkBuffer != NULL ); + __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); /* Call to init the socket list. */ vListInitialise( &xBoundTCPSocketsList ); if( pxSocket ) { - publicTCPPrepareSend( pxSocket, &pxNetworkBuffer, uxOptionsLength ); + publicTCPPrepareSend( pxSocket, &pxNetworkBuffer, 0 ); } } diff --git a/test/cbmc/proofs/TCP/prvTCPReturnPacket/Makefile.json b/test/cbmc/proofs/TCP/prvTCPReturnPacket/Makefile.json index 1b67f5a076..12a17ef309 100644 --- a/test/cbmc/proofs/TCP/prvTCPReturnPacket/Makefile.json +++ b/test/cbmc/proofs/TCP/prvTCPReturnPacket/Makefile.json @@ -39,14 +39,19 @@ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_Stream_Buffer.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Utils.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_IP.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_Transmission_IPv4.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_Transmission.goto" + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_Transmission.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto" ], "DEF": [ "ipconfigUSE_LINKED_RX_MESSAGES={RX_MESSAGES}", - "FREERTOS_TCP_ENABLE_VERIFICATION" + "FREERTOS_TCP_ENABLE_VERIFICATION", + "CBMC_REQUIRE_NETWORKBUFFER_ETHERNETBUFFER_NONNULL" ], "INC": [ diff --git a/test/cbmc/proofs/TCP/prvTCPReturnPacket/TCPReturnPacket_harness.c b/test/cbmc/proofs/TCP/prvTCPReturnPacket/TCPReturnPacket_harness.c index 786d10cfd2..9f03585c39 100644 --- a/test/cbmc/proofs/TCP/prvTCPReturnPacket/TCPReturnPacket_harness.c +++ b/test/cbmc/proofs/TCP/prvTCPReturnPacket/TCPReturnPacket_harness.c @@ -37,10 +37,42 @@ #include "FreeRTOS_TCP_IP.h" #include "FreeRTOS_TCP_Transmission.h" -#include "../../utility/memory_assignments.c" - +/* CBMC includes */ #include "cbmc.h" +/* prvTCPReturnPacket_IPV6 is proven separately. */ +void prvTCPReturnPacket_IPV6( FreeRTOS_Socket_t * pxSocket, + NetworkBufferDescriptor_t * pxDescriptor, + uint32_t ulLen, + BaseType_t xReleaseAfterSend ) +{ + __CPROVER_assert( pxSocket != NULL, "pxSocket cannot be NULL" ); + __CPROVER_assert( pxDescriptor != NULL, "pxDescriptor cannot be NULL" ); +} + +/* Memory assignment for FreeRTOS_Socket_t */ +FreeRTOS_Socket_t * ensure_FreeRTOS_Socket_t_is_allocated() +{ + size_t buf_size; /* Give buffer_size an unconstrained value */ + FreeRTOS_Socket_t * pxSocket = safeMalloc( sizeof( FreeRTOS_Socket_t ) + sizeof( IPTCPSocket_t ) ); + + __CPROVER_assume( pxSocket != NULL ); + pxSocket->u.xTCP.rxStream = safeMalloc( sizeof( StreamBuffer_t ) ); + pxSocket->u.xTCP.txStream = safeMalloc( sizeof( StreamBuffer_t ) ); + pxSocket->u.xTCP.pxPeerSocket = safeMalloc( sizeof( FreeRTOS_Socket_t ) ); + pxSocket->pxEndPoint = safeMalloc( sizeof( NetworkEndPoint_t ) ); + pxSocket->u.xTCP.pxAckMessage = safeMalloc( sizeof( NetworkBufferDescriptor_t ) ); + + if( pxSocket->u.xTCP.pxAckMessage != NULL ) + { + __CPROVER_assume( ( buf_size > ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + sizeof( TCPHeader_t ) ) ) && ( buf_size < ipconfigNETWORK_MTU ) ); + pxSocket->u.xTCP.pxAckMessage->pucEthernetBuffer = safeMalloc( buf_size ); + __CPROVER_assume( pxSocket->u.xTCP.pxAckMessage->pucEthernetBuffer != NULL ); + } + + return pxSocket; +} + /* * This function is implemented by a third party. * After looking through a couple of samples in the demos folder, it seems @@ -89,27 +121,31 @@ void prvTCPReturn_SetEndPoint( const FreeRTOS_Socket_t * pxSocket, NetworkBufferDescriptor_t * pxDuplicateNetworkBufferWithDescriptor( const NetworkBufferDescriptor_t * const pxNetworkBuffer, size_t xNewLength ) { - NetworkBufferDescriptor_t * pxNetworkBuffer = safeMalloc( xNewLength ); + NetworkBufferDescriptor_t * pxLocalNetworkBuffer; + EthernetHeader_t * pxHeader; + + pxLocalNetworkBuffer = pxGetNetworkBufferWithDescriptor( xNewLength, 0 ); - if( ensure_memory_is_valid( pxNetworkBuffer, xNewLength ) ) + if( pxLocalNetworkBuffer != NULL ) { - pxNetworkBuffer->pucEthernetBuffer = safeMalloc( sizeof( TCPPacket_t ) ); - __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer ); + /* In this test case, we only focus on IPv4. */ + pxHeader = ( ( const EthernetHeader_t * ) pxNetworkBuffer->pucEthernetBuffer ); + __CPROVER_assume( pxHeader->usFrameType != ipIPv6_FRAME_TYPE ); /* Add an end point to the network buffer present. Its assumed that the * network interface layer correctly assigns the end point to the generated buffer. */ - pxNetworkBuffer->pxEndPoint = ( NetworkEndPoint_t * ) safeMalloc( sizeof( NetworkEndPoint_t ) ); - __CPROVER_assume( pxNetworkBuffer->pxEndPoint != NULL ); - pxNetworkBuffer->pxEndPoint->pxNext = NULL; + pxLocalNetworkBuffer->pxEndPoint = ( NetworkEndPoint_t * ) safeMalloc( sizeof( NetworkEndPoint_t ) ); + __CPROVER_assume( pxLocalNetworkBuffer->pxEndPoint != NULL ); + pxLocalNetworkBuffer->pxEndPoint->pxNext = NULL; /* Add an interface */ - pxNetworkBuffer->pxEndPoint->pxNetworkInterface = ( NetworkInterface_t * ) safeMalloc( sizeof( NetworkInterface_t ) ); - __CPROVER_assume( pxNetworkBuffer->pxEndPoint->pxNetworkInterface != NULL ); + pxLocalNetworkBuffer->pxEndPoint->pxNetworkInterface = ( NetworkInterface_t * ) safeMalloc( sizeof( NetworkInterface_t ) ); + __CPROVER_assume( pxLocalNetworkBuffer->pxEndPoint->pxNetworkInterface != NULL ); - pxNetworkBuffer->pxEndPoint->pxNetworkInterface->pfOutput = NetworkInterfaceOutputFunction_Stub; + pxLocalNetworkBuffer->pxEndPoint->pxNetworkInterface->pfOutput = NetworkInterfaceOutputFunction_Stub; } - return pxNetworkBuffer; + return pxLocalNetworkBuffer; } uint16_t usGenerateProtocolChecksum( const uint8_t * const pucEthernetBuffer, @@ -169,29 +205,40 @@ eARPLookupResult_t eARPGetCacheEntry( uint32_t * pulIPAddress, void harness() { - FreeRTOS_Socket_t * pxSocket = ensure_FreeRTOS_Socket_t_is_allocated(); - NetworkBufferDescriptor_t * pxNetworkBuffer = ensure_FreeRTOS_NetworkBuffer_is_allocated(); + FreeRTOS_Socket_t * pxSocket; + NetworkBufferDescriptor_t * pxNetworkBuffer; BaseType_t xReleaseAfterSend; uint32_t ulLen; + EthernetHeader_t * pxHeader; + + pxSocket = ensure_FreeRTOS_Socket_t_is_allocated(); + + if( pxSocket != NULL ) + { + /* In this test case, we only focus on IPv4. */ + __CPROVER_assume( pxSocket->bits.bIsIPv6 == pdFALSE_UNSIGNED ); + } + + __CPROVER_assume( ( ulLen >= sizeof( TCPPacket_t ) ) && ( ulLen < ipconfigNETWORK_MTU - ipSIZE_OF_ETH_HEADER ) ); + pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( ulLen + ipSIZE_OF_ETH_HEADER, 0 ); /* The code does not expect both of these to be equal to NULL at the same time. */ __CPROVER_assume( pxSocket != NULL || pxNetworkBuffer != NULL ); + /* ucPeerWinScaleFactor is limited in range [0,14]. */ + __CPROVER_assume( pxSocket->u.xTCP.ucMyWinScaleFactor <= tcpTCP_OPT_WSOPT_MAXIMUM_VALUE ); /* If network buffer is properly created. */ - if( ensure_memory_is_valid( pxNetworkBuffer, sizeof( *pxNetworkBuffer ) ) ) + if( pxNetworkBuffer != NULL ) { - /* Assume that the length is proper. */ - __CPROVER_assume( ( ulLen >= sizeof( TCPPacket_t ) ) && ( ulLen < ipconfigNETWORK_MTU ) ); - pxNetworkBuffer->pucEthernetBuffer = safeMalloc( ulLen + ipSIZE_OF_ETH_HEADER ); - __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer ); - - pxNetworkBuffer->xDataLength = ( size_t ) ulLen; + /* In this test case, we only focus on IPv4. */ + pxHeader = ( ( const EthernetHeader_t * ) pxNetworkBuffer->pucEthernetBuffer ); + __CPROVER_assume( pxHeader->usFrameType != ipIPv6_FRAME_TYPE ); /* Add an end point to the network buffer present. Its assumed that the * network interface layer correctly assigns the end point to the generated buffer. */ pxNetworkBuffer->pxEndPoint = ( NetworkEndPoint_t * ) safeMalloc( sizeof( NetworkEndPoint_t ) ); - if( ensure_memory_is_valid( pxNetworkBuffer->pxEndPoint, sizeof( NetworkEndPoint_t ) ) ) + if( pxNetworkBuffer->pxEndPoint != NULL ) { /* Add an interface */ pxNetworkBuffer->pxEndPoint->pxNetworkInterface = ( NetworkInterface_t * ) safeMalloc( sizeof( NetworkInterface_t ) ); diff --git a/test/cbmc/proofs/TCP/prvTCPReturnPacket_IPv6/Makefile.json b/test/cbmc/proofs/TCP/prvTCPReturnPacket_IPv6/Makefile.json index 9b28c3b345..629ef713d4 100644 --- a/test/cbmc/proofs/TCP/prvTCPReturnPacket_IPv6/Makefile.json +++ b/test/cbmc/proofs/TCP/prvTCPReturnPacket_IPv6/Makefile.json @@ -11,14 +11,19 @@ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_Stream_Buffer.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Utils.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_IP.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_Transmission_IPv6.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_Transmission.goto" + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_Transmission.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto" ], "DEF": [ "ipconfigUSE_LINKED_RX_MESSAGES={RX_MESSAGES}", - "FREERTOS_TCP_ENABLE_VERIFICATION" + "FREERTOS_TCP_ENABLE_VERIFICATION", + "CBMC_REQUIRE_NETWORKBUFFER_ETHERNETBUFFER_NONNULL" ], "INC": [ diff --git a/test/cbmc/proofs/TCP/prvTCPReturnPacket_IPv6/TCPReturnPacket_IPv6_harness.c b/test/cbmc/proofs/TCP/prvTCPReturnPacket_IPv6/TCPReturnPacket_IPv6_harness.c index ea2e87b2fd..d768af7c38 100644 --- a/test/cbmc/proofs/TCP/prvTCPReturnPacket_IPv6/TCPReturnPacket_IPv6_harness.c +++ b/test/cbmc/proofs/TCP/prvTCPReturnPacket_IPv6/TCPReturnPacket_IPv6_harness.c @@ -35,10 +35,9 @@ #include "FreeRTOS_IP_Private.h" #include "FreeRTOS_TCP_IP.h" #include "FreeRTOS_TCP_Transmission.h" +#include "FreeRTOS_ND.h" /* CBMC includes. */ -#include "../../utility/memory_assignments.c" - #include "cbmc.h" /* @@ -64,6 +63,51 @@ BaseType_t NetworkInterfaceOutputFunction_Stub( struct xNetworkInterface * pxDes return 0; } +/* Memory assignment for FreeRTOS_Socket_t */ +FreeRTOS_Socket_t * ensure_FreeRTOS_Socket_t_is_allocated() +{ + size_t buf_size; /* Give buffer_size an unconstrained value */ + FreeRTOS_Socket_t * pxSocket = safeMalloc( sizeof( FreeRTOS_Socket_t ) + sizeof( IPTCPSocket_t ) ); + + __CPROVER_assume( pxSocket != NULL ); + pxSocket->u.xTCP.rxStream = safeMalloc( sizeof( StreamBuffer_t ) ); + pxSocket->u.xTCP.txStream = safeMalloc( sizeof( StreamBuffer_t ) ); + pxSocket->u.xTCP.pxPeerSocket = safeMalloc( sizeof( FreeRTOS_Socket_t ) ); + pxSocket->pxEndPoint = safeMalloc( sizeof( NetworkEndPoint_t ) ); + pxSocket->u.xTCP.pxAckMessage = safeMalloc( sizeof( NetworkBufferDescriptor_t ) ); + + if( pxSocket->u.xTCP.pxAckMessage != NULL ) + { + __CPROVER_assume( ( buf_size > ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + sizeof( TCPHeader_t ) ) ) && ( buf_size < ipconfigNETWORK_MTU ) ); + pxSocket->u.xTCP.pxAckMessage->pucEthernetBuffer = safeMalloc( buf_size ); + __CPROVER_assume( pxSocket->u.xTCP.pxAckMessage->pucEthernetBuffer != NULL ); + } + + return pxSocket; +} + +void prvTCPReturnPacket_IPV4( FreeRTOS_Socket_t * pxSocket, + NetworkBufferDescriptor_t * pxDescriptor, + uint32_t ulLen, + BaseType_t xReleaseAfterSend ) +{ + __CPROVER_assert( pxSocket != NULL, "pxSocket cannot be NULL" ); + __CPROVER_assert( pxDescriptor != NULL, "pxDescriptor cannot be NULL" ); +} + +/* Abstraction of eNDGetCacheEntry. */ +eARPLookupResult_t eNDGetCacheEntry( IPv6_Address_t * pxIPAddress, + MACAddress_t * const pxMACAddress, + struct xNetworkEndPoint ** ppxEndPoint ) +{ + eARPLookupResult_t xReturn; + + __CPROVER_assert( __CPROVER_r_ok( pxIPAddress, sizeof( IPv6_Address_t ) ), "pxIPAddress must be readable" ); + __CPROVER_assert( __CPROVER_w_ok( pxMACAddress, sizeof( MACAddress_t ) ), "pxMACAddress must be writeable" ); + + return xReturn; +} + /* Abstraction of this functions creates an endpoint and assign it to network interface * endpoint, real endpoint doesn't matter in this test. */ void prvTCPReturn_SetEndPoint( const FreeRTOS_Socket_t * pxSocket, @@ -87,27 +131,31 @@ void prvTCPReturn_SetEndPoint( const FreeRTOS_Socket_t * pxSocket, NetworkBufferDescriptor_t * pxDuplicateNetworkBufferWithDescriptor( const NetworkBufferDescriptor_t * const pxNetworkBuffer, size_t xNewLength ) { - NetworkBufferDescriptor_t * pxNetworkBuffer = safeMalloc( xNewLength ); + NetworkBufferDescriptor_t * pxLocalNetworkBuffer; + EthernetHeader_t * pxHeader; + + pxLocalNetworkBuffer = pxGetNetworkBufferWithDescriptor( xNewLength, 0 ); - if( ensure_memory_is_valid( pxNetworkBuffer, xNewLength ) ) + if( pxLocalNetworkBuffer != NULL ) { - pxNetworkBuffer->pucEthernetBuffer = safeMalloc( sizeof( TCPPacket_t ) ); - __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer ); + /* In this test case, we only focus on IPv6. */ + pxHeader = ( ( const EthernetHeader_t * ) pxNetworkBuffer->pucEthernetBuffer ); + __CPROVER_assume( pxHeader->usFrameType == ipIPv6_FRAME_TYPE ); /* Add an end point to the network buffer present. Its assumed that the * network interface layer correctly assigns the end point to the generated buffer. */ - pxNetworkBuffer->pxEndPoint = ( NetworkEndPoint_t * ) safeMalloc( sizeof( NetworkEndPoint_t ) ); - __CPROVER_assume( pxNetworkBuffer->pxEndPoint != NULL ); - pxNetworkBuffer->pxEndPoint->pxNext = NULL; + pxLocalNetworkBuffer->pxEndPoint = ( NetworkEndPoint_t * ) safeMalloc( sizeof( NetworkEndPoint_t ) ); + __CPROVER_assume( pxLocalNetworkBuffer->pxEndPoint != NULL ); + pxLocalNetworkBuffer->pxEndPoint->pxNext = NULL; /* Add an interface */ - pxNetworkBuffer->pxEndPoint->pxNetworkInterface = ( NetworkInterface_t * ) safeMalloc( sizeof( NetworkInterface_t ) ); - __CPROVER_assume( pxNetworkBuffer->pxEndPoint->pxNetworkInterface != NULL ); + pxLocalNetworkBuffer->pxEndPoint->pxNetworkInterface = ( NetworkInterface_t * ) safeMalloc( sizeof( NetworkInterface_t ) ); + __CPROVER_assume( pxLocalNetworkBuffer->pxEndPoint->pxNetworkInterface != NULL ); - pxNetworkBuffer->pxEndPoint->pxNetworkInterface->pfOutput = NetworkInterfaceOutputFunction_Stub; + pxLocalNetworkBuffer->pxEndPoint->pxNetworkInterface->pfOutput = NetworkInterfaceOutputFunction_Stub; } - return pxNetworkBuffer; + return pxLocalNetworkBuffer; } uint16_t usGenerateProtocolChecksum( const uint8_t * const pucEthernetBuffer, @@ -136,29 +184,40 @@ uint16_t usGenerateChecksum( uint16_t usSum, void harness() { - FreeRTOS_Socket_t * pxSocket = ensure_FreeRTOS_Socket_t_is_allocated(); - NetworkBufferDescriptor_t * pxNetworkBuffer = ensure_FreeRTOS_NetworkBuffer_is_allocated(); + FreeRTOS_Socket_t * pxSocket; + NetworkBufferDescriptor_t * pxNetworkBuffer; BaseType_t xReleaseAfterSend; uint32_t ulLen; + EthernetHeader_t * pxHeader; + + pxSocket = ensure_FreeRTOS_Socket_t_is_allocated(); + + if( pxSocket != NULL ) + { + /* In this test case, we only focus on IPv6. */ + __CPROVER_assume( pxSocket->bits.bIsIPv6 != pdFALSE_UNSIGNED ); + } + + __CPROVER_assume( ( ulLen >= sizeof( TCPPacket_IPv6_t ) ) && ( ulLen < ipconfigNETWORK_MTU - ipSIZE_OF_ETH_HEADER ) ); + pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( ulLen + ipSIZE_OF_ETH_HEADER, 0 ); /* The code does not expect both of these to be equal to NULL at the same time. */ __CPROVER_assume( pxSocket != NULL || pxNetworkBuffer != NULL ); + /* ucPeerWinScaleFactor is limited in range [0,14]. */ + __CPROVER_assume( pxSocket->u.xTCP.ucMyWinScaleFactor <= tcpTCP_OPT_WSOPT_MAXIMUM_VALUE ); /* If network buffer is properly created. */ - if( ensure_memory_is_valid( pxNetworkBuffer, sizeof( *pxNetworkBuffer ) ) ) + if( pxNetworkBuffer != NULL ) { - /* Assume that the length is proper. */ - __CPROVER_assume( ( ulLen >= sizeof( TCPPacket_IPv6_t ) ) && ( ulLen < ipconfigNETWORK_MTU ) ); - pxNetworkBuffer->pucEthernetBuffer = safeMalloc( ulLen + ipSIZE_OF_ETH_HEADER ); - __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); - - pxNetworkBuffer->xDataLength = ( size_t ) ( ulLen + ipSIZE_OF_ETH_HEADER ); + /* In this test case, we only focus on IPv6. */ + pxHeader = ( ( const EthernetHeader_t * ) pxNetworkBuffer->pucEthernetBuffer ); + __CPROVER_assume( pxHeader->usFrameType == ipIPv6_FRAME_TYPE ); /* Add an end point to the network buffer present. Its assumed that the * network interface layer correctly assigns the end point to the generated buffer. */ pxNetworkBuffer->pxEndPoint = ( NetworkEndPoint_t * ) safeMalloc( sizeof( NetworkEndPoint_t ) ); - if( ensure_memory_is_valid( pxNetworkBuffer->pxEndPoint, sizeof( NetworkEndPoint_t ) ) ) + if( pxNetworkBuffer->pxEndPoint != NULL ) { /* Add an interface */ pxNetworkBuffer->pxEndPoint->pxNetworkInterface = ( NetworkInterface_t * ) safeMalloc( sizeof( NetworkInterface_t ) ); diff --git a/test/cbmc/proofs/UDP/vProcessGeneratedUDPPacket/Makefile.json b/test/cbmc/proofs/UDP/vProcessGeneratedUDPPacket/Makefile.json index f7ef2a84df..b5abd6f010 100644 --- a/test/cbmc/proofs/UDP/vProcessGeneratedUDPPacket/Makefile.json +++ b/test/cbmc/proofs/UDP/vProcessGeneratedUDPPacket/Makefile.json @@ -2,6 +2,9 @@ "ENTRY": "vProcessGeneratedUDPPacket", "CBMCFLAGS": [ + "--unwind 1", + "--unwindset FreeRTOS_InterfaceEndPointOnNetMask.0:3", + "--nondet-static" ], "OBJS": [ diff --git a/test/cbmc/proofs/UDP/vProcessGeneratedUDPPacket/vProcessGeneratedUDPPacket_harness.c b/test/cbmc/proofs/UDP/vProcessGeneratedUDPPacket/vProcessGeneratedUDPPacket_harness.c index b56bc475bd..5d8239d8a4 100644 --- a/test/cbmc/proofs/UDP/vProcessGeneratedUDPPacket/vProcessGeneratedUDPPacket_harness.c +++ b/test/cbmc/proofs/UDP/vProcessGeneratedUDPPacket/vProcessGeneratedUDPPacket_harness.c @@ -19,6 +19,12 @@ #include "memory_assignments.c" #include "freertos_api.c" +/* vProcessGeneratedUDPPacket_IPv6 is proven separately. */ +void vProcessGeneratedUDPPacket_IPv6( NetworkBufferDescriptor_t * const pxNetworkBuffer ) +{ + __CPROVER_assert( pxNetworkBuffer != NULL, "pxNetworkBuffer cannot be NULL" ); +} + /* We do not need to calculate the actual checksum for the proof to be complete. * Neither does the checksum matter for completeness. */ uint16_t usGenerateChecksum( uint16_t usSum, @@ -33,7 +39,6 @@ uint16_t usGenerateChecksum( uint16_t usSum, return usChecksum; } - /* We do not need to calculate the actual checksum for the proof to be complete. * Neither does the checksum matter for completeness. */ uint16_t usGenerateProtocolChecksum( const uint8_t * const pucEthernetBuffer, diff --git a/test/cbmc/proofs/parsing/ProcessIPPacket/ProcessIPPacket_harness.c b/test/cbmc/proofs/parsing/ProcessIPPacket/ProcessIPPacket_harness.c index a1c0c80b03..e8c498ac9f 100644 --- a/test/cbmc/proofs/parsing/ProcessIPPacket/ProcessIPPacket_harness.c +++ b/test/cbmc/proofs/parsing/ProcessIPPacket/ProcessIPPacket_harness.c @@ -9,9 +9,97 @@ /* CBMC includes. */ #include "cbmc.h" +NetworkEndPoint_t xEndpoint; + eFrameProcessingResult_t __CPROVER_file_local_FreeRTOS_IP_c_prvProcessIPPacket( const IPPacket_t * pxIPPacket, NetworkBufferDescriptor_t * const pxNetworkBuffer ); +/* Check if input is a valid extension header ID. */ +BaseType_t xIsExtensionHeader( uint8_t ucCurrentHeader ) +{ + BaseType_t xReturn = pdFALSE; + + switch( ucCurrentHeader ) + { + case ipIPv6_EXT_HEADER_HOP_BY_HOP: + case ipIPv6_EXT_HEADER_DESTINATION_OPTIONS: + case ipIPv6_EXT_HEADER_ROUTING_HEADER: + case ipIPv6_EXT_HEADER_FRAGMENT_HEADER: + case ipIPv6_EXT_HEADER_AUTHEN_HEADER: + case ipIPv6_EXT_HEADER_SECURE_PAYLOAD: + case ipIPv6_EXT_HEADER_MOBILITY_HEADER: + xReturn = pdTRUE; + break; + } + + return xReturn; +} + +/* Abstraction of xGetExtensionOrder. To ensure the result of prepared extension headers is same. */ +BaseType_t xGetExtensionOrder( uint8_t ucProtocol, + uint8_t ucNextHeader ) +{ + return xIsExtensionHeader( ucProtocol ); +} + +BaseType_t xCheckRequiresARPResolution( const NetworkBufferDescriptor_t * pxNetworkBuffer ) +{ + BaseType_t xReturn; + + __CPROVER_assert( pxNetworkBuffer != NULL, "pxNetworkBuffer cannot be NULL" ); + __CPROVER_assert( __CPROVER_r_ok( pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength ), "Data in pxNetworkBuffer must be readable" ); +} + +void vARPRefreshCacheEntryAge( const MACAddress_t * pxMACAddress, + const uint32_t ulIPAddress ) +{ + __CPROVER_assert( pxMACAddress != NULL, "pxMACAddress cannot be NULL" ); +} + +void vNDRefreshCacheEntry( const MACAddress_t * pxMACAddress, + const IPv6_Address_t * pxIPAddress, + NetworkEndPoint_t * pxEndPoint ) +{ + __CPROVER_assert( pxMACAddress != NULL, "pxMACAddress cannot be NULL" ); + __CPROVER_assert( pxIPAddress != NULL, "pxIPAddress cannot be NULL" ); + __CPROVER_assert( pxEndPoint != NULL, "pxEndPoint cannot be NULL" ); +} + +NetworkEndPoint_t * FreeRTOS_FindEndPointOnIP_IPv4( uint32_t ulIPAddress, + uint32_t ulWhere ) +{ + NetworkEndPoint_t * pxEndpoint = NULL; + + if( nondet_bool() ) + { + pxEndpoint = pxNetworkEndPoints; + } + + return pxEndpoint; +} + +/* proof is done separately */ +eFrameProcessingResult_t ProcessICMPPacket( const NetworkBufferDescriptor_t * const pxNetworkBuffer ) +{ + eFrameProcessingResult_t xReturn; + + __CPROVER_assert( pxNetworkBuffer != NULL, "pxEndPoint cannot be NULL" ); + __CPROVER_assert( __CPROVER_r_ok( pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength ), "Data in pxNetworkBuffer must be readable" ); + + return xReturn; +} + +/* proof is done separately */ +eFrameProcessingResult_t prvProcessICMPMessage_IPv6( NetworkBufferDescriptor_t * const pxNetworkBuffer ) +{ + eFrameProcessingResult_t xReturn; + + __CPROVER_assert( pxNetworkBuffer != NULL, "pxEndPoint cannot be NULL" ); + __CPROVER_assert( __CPROVER_r_ok( pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength ), "Data in pxNetworkBuffer must be readable" ); + + return xReturn; +} + /* proof is done separately */ BaseType_t xProcessReceivedTCPPacket( NetworkBufferDescriptor_t * pxNetworkBuffer ) { @@ -67,6 +155,7 @@ void harness() { NetworkBufferDescriptor_t * const pxNetworkBuffer = safeMalloc( sizeof( NetworkBufferDescriptor_t ) ); uint8_t * pucEthernetBuffer = ( uint8_t * ) safeMalloc( ipTOTAL_ETHERNET_FRAME_SIZE + ipIP_TYPE_OFFSET ); + EthernetHeader_t * pxHeader; __CPROVER_assume( pxNetworkBuffer != NULL ); __CPROVER_assume( pucEthernetBuffer != NULL ); @@ -83,7 +172,10 @@ void harness() __CPROVER_assume( pxNetworkEndPoints != NULL ); __CPROVER_assume( pxNetworkEndPoints->pxNext == NULL ); - IPPacket_t * const pxIPPacket = ( IPPacket_t * ) pxNetworkBuffer->pucEthernetBuffer; + /* In this test case, we only focus on IPv4. */ + pxHeader = ( ( const EthernetHeader_t * ) pxNetworkBuffer->pucEthernetBuffer ); + __CPROVER_assume( pxHeader->usFrameType != ipIPv6_FRAME_TYPE ); + IPPacket_t * const pxIPPacket = ( IPPacket_t * ) pxNetworkBuffer->pucEthernetBuffer; __CPROVER_file_local_FreeRTOS_IP_c_prvProcessIPPacket( pxIPPacket, pxNetworkBuffer ); } diff --git a/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket/Makefile.json b/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket/Makefile.json index f2643c9b98..bb142d42a4 100644 --- a/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket/Makefile.json +++ b/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket/Makefile.json @@ -10,6 +10,8 @@ [ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Utils.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IP_Timers.goto", @@ -23,16 +25,11 @@ ], "INSTFLAGS": [ - "--remove-function-body prvSingleStepTCPHeaderOptions", - "--remove-function-body prvCheckOptions", - "--remove-function-body prvTCPPrepareSend", - "--remove-function-body prvTCPReturnPacket", - "--remove-function-body prvTCPHandleState", - "--remove-function-body vTCPStateChange" ], "DEF": [ - "FREERTOS_TCP_ENABLE_VERIFICATION" + "FREERTOS_TCP_ENABLE_VERIFICATION", + "CBMC_GETNETWORKBUFFER_FAILURE_BOUND" ], "INC": [ diff --git a/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket/ProcessReceivedTCPPacket_harness.c b/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket/ProcessReceivedTCPPacket_harness.c index 00f6e8014c..d60cdd6bc9 100644 --- a/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket/ProcessReceivedTCPPacket_harness.c +++ b/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket/ProcessReceivedTCPPacket_harness.c @@ -35,6 +35,83 @@ TaskHandle_t xTaskGetCurrentTaskHandle( void ) return pxCurrentTCB; } +/* Abstraction of vTCPStateChange */ +void vTCPStateChange( FreeRTOS_Socket_t * pxSocket, + enum eTCP_STATE eTCPState ) +{ +} + +/* prvTCPReturnPacket is proven separately */ +void prvTCPReturnPacket( FreeRTOS_Socket_t * pxSocket, + NetworkBufferDescriptor_t * pxDescriptor, + uint32_t ulLen, + BaseType_t xReleaseAfterSend ) +{ + __CPROVER_assert( pxSocket != NULL || pxDescriptor != NULL, "Either pxSocket or pxDescriptor must be non-NULL" ); + __CPROVER_assert( pxDescriptor->pucEthernetBuffer != NULL, "pucEthernetBuffer should not be NULL" ); +} + +/* prvTCPPrepareSend is proven separately. */ +int32_t prvTCPPrepareSend( FreeRTOS_Socket_t * pxSocket, + NetworkBufferDescriptor_t ** ppxNetworkBuffer, + UBaseType_t uxOptionsLength ) +{ + int32_t ret = nondet_int32(); + + __CPROVER_assert( pxSocket != NULL, "pxSocket cannot be NULL" ); + __CPROVER_assert( *ppxNetworkBuffer != NULL, "*ppxNetworkBuffer cannot be NULL" ); + __CPROVER_assert( __CPROVER_r_ok( ( *ppxNetworkBuffer )->pucEthernetBuffer, ( *ppxNetworkBuffer )->xDataLength ), "Data in *ppxNetworkBuffer must be readable" ); + + __CPROVER_assume( ret >= 0 && ret <= ipconfigNETWORK_MTU ); + return ret; +} + +/* prvTCPHandleState is proven separately. */ +BaseType_t prvTCPHandleState( FreeRTOS_Socket_t * pxSocket, + NetworkBufferDescriptor_t ** ppxNetworkBuffer ) +{ + __CPROVER_assert( pxSocket != NULL, "pxSocket cannot be NULL" ); + __CPROVER_assert( *ppxNetworkBuffer != NULL, "*ppxNetworkBuffer cannot be NULL" ); + __CPROVER_assert( __CPROVER_r_ok( ( *ppxNetworkBuffer )->pucEthernetBuffer, ( *ppxNetworkBuffer )->xDataLength ), "Data in *ppxNetworkBuffer must be readable" ); + + return nondet_basetype(); +} + +/* prvCheckOptions is proven separately. */ +BaseType_t prvCheckOptions( FreeRTOS_Socket_t * pxSocket, + const NetworkBufferDescriptor_t * pxNetworkBuffer ) +{ + __CPROVER_assert( pxSocket != NULL, "pxSocket cannot be NULL" ); + __CPROVER_assert( pxNetworkBuffer != NULL, "*ppxNetworkBuffer cannot be NULL" ); + __CPROVER_assert( __CPROVER_r_ok( pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength ), "Data in *ppxNetworkBuffer must be readable" ); + + return nondet_basetype(); +} + +BaseType_t xTCPWindowTxHasData( TCPWindow_t const * pxWindow, + uint32_t ulWindowSize, + TickType_t * pulDelay ) +{ + __CPROVER_assert( pxWindow != NULL, "pxWindow cannot be NULL" ); + __CPROVER_assert( pulDelay != NULL, "pulDelay cannot be NULL" ); + + return nondet_basetype(); +} + +/* Abstraction of xSequenceLessThan */ +BaseType_t xSequenceLessThan( uint32_t a, + uint32_t b ) +{ + return nondet_basetype(); +} + +/* Abstraction of xSequenceGreaterThan */ +BaseType_t xSequenceGreaterThan( uint32_t a, + uint32_t b ) +{ + return nondet_basetype(); +} + /* Abstraction of prvHandleListen_IPV4 */ FreeRTOS_Socket_t * prvHandleListen_IPV4( FreeRTOS_Socket_t * pxSocket, NetworkBufferDescriptor_t * pxNetworkBuffer ) @@ -62,6 +139,7 @@ FreeRTOS_Socket_t * pxTCPSocketLookup( uint32_t ulLocalIP, { /* This test case is for IPv4. */ __CPROVER_assume( xRetSocket->bits.bIsIPv6 == pdFALSE ); + __CPROVER_assume( xRetSocket->u.xTCP.ucPeerWinScaleFactor <= tcpTCP_OPT_WSOPT_MAXIMUM_VALUE ); } return xRetSocket; @@ -76,7 +154,7 @@ NetworkBufferDescriptor_t * pxGetNetworkBufferWithDescriptor( size_t xRequestedS if( pxNetworkBuffer ) { pxNetworkBuffer->pucEthernetBuffer = safeMalloc( xRequestedSizeBytes ); - __CPROVER_assume( pxNetworkBuffer->xDataLength == ipSIZE_OF_ETH_HEADER + sizeof( int32_t ) ); + pxNetworkBuffer->xDataLength = xRequestedSizeBytes; } return pxNetworkBuffer; @@ -98,14 +176,16 @@ size_t uxIPHeaderSizeSocket( const FreeRTOS_Socket_t * pxSocket ) void harness() { - NetworkBufferDescriptor_t * pxNetworkBuffer = safeMalloc( sizeof( NetworkBufferDescriptor_t ) ); + NetworkBufferDescriptor_t * pxNetworkBuffer; + size_t tcpPacketSize; - /* To avoid asserting on the network buffer being NULL. */ - __CPROVER_assume( pxNetworkBuffer != NULL ); + __CPROVER_assume( tcpPacketSize >= ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv4_HEADER + sizeof( TCPHeader_t ) ) ); + + pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( tcpPacketSize, 0 ); - pxNetworkBuffer->pucEthernetBuffer = safeMalloc( sizeof( TCPPacket_t ) ); - /* To avoid asserting on the ethernet buffer being NULL. */ + /* To avoid asserting on the network buffer being NULL. */ + __CPROVER_assume( pxNetworkBuffer != NULL ); __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); xProcessReceivedTCPPacket( pxNetworkBuffer ); diff --git a/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket_IPv6/Makefile.json b/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket_IPv6/Makefile.json index 53a28f7332..c37bc279d3 100644 --- a/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket_IPv6/Makefile.json +++ b/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket_IPv6/Makefile.json @@ -10,23 +10,17 @@ [ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_IP.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_IP_IPv6.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_Transmission.goto", - "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_Transmission_IPv6.goto" + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_TCP_IP.goto" ], "INSTFLAGS": [ - "--remove-function-body prvSingleStepTCPHeaderOptions", - "--remove-function-body prvCheckOptions", - "--remove-function-body prvTCPPrepareSend", - "--remove-function-body prvTCPReturnPacket", - "--remove-function-body prvTCPHandleState", - "--remove-function-body vTCPStateChange" ], "DEF": [ - "FREERTOS_TCP_ENABLE_VERIFICATION" + "FREERTOS_TCP_ENABLE_VERIFICATION", + "CBMC_GETNETWORKBUFFER_FAILURE_BOUND" ], "INC": [ diff --git a/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket_IPv6/ProcessReceivedTCPPacket_IPv6_harness.c b/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket_IPv6/ProcessReceivedTCPPacket_IPv6_harness.c index c2be060cee..204d404e44 100644 --- a/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket_IPv6/ProcessReceivedTCPPacket_IPv6_harness.c +++ b/test/cbmc/proofs/parsing/ProcessReceivedTCPPacket_IPv6/ProcessReceivedTCPPacket_IPv6_harness.c @@ -63,6 +63,7 @@ FreeRTOS_Socket_t * pxTCPSocketLookup( uint32_t ulLocalIP, { /* This test case is for IPv6. */ __CPROVER_assume( xRetSocket->bits.bIsIPv6 == pdTRUE ); + __CPROVER_assume( xRetSocket->u.xTCP.ucPeerWinScaleFactor <= tcpTCP_OPT_WSOPT_MAXIMUM_VALUE ); } return xRetSocket; @@ -99,20 +100,21 @@ size_t uxIPHeaderSizeSocket( const FreeRTOS_Socket_t * pxSocket ) void harness() { - NetworkBufferDescriptor_t * pxNetworkBuffer = safeMalloc( sizeof( NetworkBufferDescriptor_t ) ); + NetworkBufferDescriptor_t * pxNetworkBuffer; EthernetHeader_t * pxEthernetHeader; + size_t tcpPacketSize; - /* To avoid asserting on the network buffer being NULL. */ - __CPROVER_assume( pxNetworkBuffer != NULL ); + __CPROVER_assume( tcpPacketSize >= ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + sizeof( TCPHeader_t ) ) ); - pxNetworkBuffer->pucEthernetBuffer = safeMalloc( sizeof( TCPPacket_IPv6_t ) ); + pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( tcpPacketSize, 0 ); /* To avoid asserting on the ethernet buffer being NULL. */ + __CPROVER_assume( pxNetworkBuffer != NULL ); __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); - /* Ethernet frame type is checked before calling xProcessReceivedTCPPacket_IPV6. */ + /* In this test case, we focus on IPv6 packets. */ pxEthernetHeader = ( EthernetHeader_t * ) pxNetworkBuffer->pucEthernetBuffer; __CPROVER_assume( pxEthernetHeader->usFrameType == ipIPv6_FRAME_TYPE ); - xProcessReceivedTCPPacket_IPV6( pxNetworkBuffer ); + xProcessReceivedTCPPacket( pxNetworkBuffer ); } diff --git a/test/cbmc/proofs/parsing/ProcessReceivedUDPPacket/Makefile.json b/test/cbmc/proofs/parsing/ProcessReceivedUDPPacket/Makefile.json index bc0bc61db1..8c6859f4b8 100644 --- a/test/cbmc/proofs/parsing/ProcessReceivedUDPPacket/Makefile.json +++ b/test/cbmc/proofs/parsing/ProcessReceivedUDPPacket/Makefile.json @@ -11,6 +11,8 @@ "OBJS": [ "$(ENTRY)_harness.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", + "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_kernel_api.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_UDP_IP.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_UDP_IPv4.goto", diff --git a/test/cbmc/proofs/parsing/ProcessReceivedUDPPacket/ProcessReceivedUDPPacket_harness.c b/test/cbmc/proofs/parsing/ProcessReceivedUDPPacket/ProcessReceivedUDPPacket_harness.c index 6d282aca97..0b2b8c14c5 100644 --- a/test/cbmc/proofs/parsing/ProcessReceivedUDPPacket/ProcessReceivedUDPPacket_harness.c +++ b/test/cbmc/proofs/parsing/ProcessReceivedUDPPacket/ProcessReceivedUDPPacket_harness.c @@ -9,6 +9,9 @@ #include "FreeRTOS_UDP_IP.h" #include "FreeRTOS_TCP_IP.h" +/* CBMC includes. */ +#include "cbmc.h" + /*This proof assumes that pxUDPSocketLookup is implemented correctly. */ /* This proof was done before. Hence we assume it to be correct here. */ @@ -17,6 +20,12 @@ void vARPRefreshCacheEntry( const MACAddress_t * pxMACAddress, { } +void vARPRefreshCacheEntryAge( const MACAddress_t * pxMACAddress, + const uint32_t ulIPAddress ) +{ + __CPROVER_assert( pxMACAddress != NULL, "pxMACAddress cannot be NULL" ); +} + /* This proof was done before. Hence we assume it to be correct here. */ BaseType_t xIsDHCPSocket( Socket_t xSocket ) { @@ -68,19 +77,6 @@ BaseType_t xProcessReceivedUDPPacket_IPv6( NetworkBufferDescriptor_t * pxNetwork return xReturn; } -/* Implementation of safe malloc */ -void * safeMalloc( size_t xWantedSize ) -{ - if( xWantedSize == 0 ) - { - return NULL; - } - - uint8_t byte; - - return byte ? malloc( xWantedSize ) : NULL; -} - /* Abstraction of pxUDPSocketLookup */ FreeRTOS_Socket_t * pxUDPSocketLookup( UBaseType_t uxLocalPort ) { @@ -89,26 +85,23 @@ FreeRTOS_Socket_t * pxUDPSocketLookup( UBaseType_t uxLocalPort ) void harness() { - NetworkBufferDescriptor_t * pxNetworkBuffer = safeMalloc( sizeof( NetworkBufferDescriptor_t ) ); - BaseType_t * pxIsWaitingForARPResolution; + NetworkBufferDescriptor_t * pxNetworkBuffer; + BaseType_t xIsWaitingForARPResolution; NetworkEndPoint_t xEndpoint; uint16_t usPort; + EthernetHeader_t * pxHeader; - pxIsWaitingForARPResolution = safeMalloc( sizeof( BaseType_t ) ); - - /* The function under test is only called by the IP-task. The below pointer is an - * address of a local variable which is being passed to the function under test. - * Thus, it cannot ever be NULL. */ - __CPROVER_assume( pxIsWaitingForARPResolution != NULL ); - + pxNetworkBuffer = pxGetNetworkBufferWithDescriptor( sizeof( UDPPacket_t ), 0 ); /* The network buffer must not be NULL, checked in prvProcessEthernetPacket. */ __CPROVER_assume( pxNetworkBuffer != NULL ); + __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); - pxNetworkBuffer->pucEthernetBuffer = safeMalloc( sizeof( UDPPacket_t ) ); pxNetworkBuffer->pxEndPoint = &xEndpoint; - /* The ethernet buffer must be valid. */ - __CPROVER_assume( pxNetworkBuffer->pucEthernetBuffer != NULL ); + /* In this test case, we only focus on IPv4. */ + pxHeader = ( ( const EthernetHeader_t * ) pxNetworkBuffer->pucEthernetBuffer ); + __CPROVER_assume( pxHeader->usFrameType != ipIPv6_FRAME_TYPE ); - xProcessReceivedUDPPacket( pxNetworkBuffer, usPort, pxIsWaitingForARPResolution ); + xIsWaitingForARPResolution = nondet_BaseType(); + xProcessReceivedUDPPacket( pxNetworkBuffer, usPort, &xIsWaitingForARPResolution ); } diff --git a/test/cbmc/proofs/prvChecksumIPv6Checks/Makefile.json b/test/cbmc/proofs/prvChecksumIPv6Checks/Makefile.json index 9645ee00a4..7d84cfceee 100644 --- a/test/cbmc/proofs/prvChecksumIPv6Checks/Makefile.json +++ b/test/cbmc/proofs/prvChecksumIPv6Checks/Makefile.json @@ -13,6 +13,7 @@ [ "$(ENTRY)_harness.goto", "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", + "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IPv6.goto", "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_IPv6_Utils.goto" ], "INSTFLAGS": diff --git a/test/cbmc/proofs/prvChecksumIPv6Checks/prvChecksumIPv6Checks_harness.c b/test/cbmc/proofs/prvChecksumIPv6Checks/prvChecksumIPv6Checks_harness.c index bcb8d4a12f..e43f2db645 100644 --- a/test/cbmc/proofs/prvChecksumIPv6Checks/prvChecksumIPv6Checks_harness.c +++ b/test/cbmc/proofs/prvChecksumIPv6Checks/prvChecksumIPv6Checks_harness.c @@ -21,6 +21,7 @@ void harness() size_t uxBufferSize; uint8_t * pucEthernetBuffer; struct xPacketSummary xSet; + BaseType_t xReturn; /* We must have ethernet header to get frame type. */ __CPROVER_assume( uxBufferSize >= sizeof( IPPacket_IPv6_t ) && uxBufferSize <= ipconfigNETWORK_MTU ); @@ -28,12 +29,18 @@ void harness() /* Ethernet buffer is not possible to be NULL. */ pucEthernetBuffer = ( uint8_t * ) safeMalloc( uxBufferSize ); __CPROVER_assume( pucEthernetBuffer != NULL ); + __CPROVER_havoc_object( pucEthernetBuffer ); /* This is set before calling prvChecksumIPv6Checks. */ xSet.pxIPPacket = ( const IPPacket_t * ) pucEthernetBuffer; xSet.pxIPPacket_IPv6 = ( const IPHeader_IPv6_t * ) ( pucEthernetBuffer + ipSIZE_OF_ETH_HEADER ); - prvChecksumIPv6Checks( pucEthernetBuffer, - uxBufferSize, - &xSet ); + xReturn = prvChecksumIPv6Checks( pucEthernetBuffer, + uxBufferSize, + &xSet ); + + if( xReturn == 0 ) + { + __CPROVER_assert( ( xSet.usProtocolBytes <= FreeRTOS_ntohs( xSet.pxIPPacket_IPv6->usPayloadLength ) ), "xSet.usProtocolBytes shouldn't be greater than IPv6 usPayloadLength" ); + } } diff --git a/test/cbmc/proofs/run-cbmc-proofs.py b/test/cbmc/proofs/run-cbmc-proofs.py index 429d787342..af7bad7ca0 100755 --- a/test/cbmc/proofs/run-cbmc-proofs.py +++ b/test/cbmc/proofs/run-cbmc-proofs.py @@ -186,7 +186,7 @@ def add_proof_jobs(proof_directory, proof_root): # Run 3 CBMC tasks - cbmc_out = str(proof_directory / "cbmc.txt") + cbmc_out = str(proof_directory / "cbmc.xml") run_cmd([ "litani", "add-job", "--command", "make cbmc", @@ -301,12 +301,12 @@ def main(): if not args.no_standalone: run_build(args.parallel_jobs) - out_sym = pathlib.Path("/tmp")/"litani"/"runs"/"latest" - out_dir = out_sym.resolve() + out_sym = pathlib.Path("/tmp")/"litani"/"runs"/"latest" + out_dir = out_sym.resolve() - local_copy = pathlib.Path("output")/"latest" - local_copy.parent.mkdir(exist_ok=True) - local_copy.symlink_to(out_dir) + local_copy = pathlib.Path("output")/"latest" + local_copy.parent.mkdir(exist_ok=True) + local_copy.symlink_to(out_dir) if __name__ == "__main__": diff --git a/test/cbmc/stubs/freertos_api.c b/test/cbmc/stubs/freertos_api.c index d541aa07a7..7534c34b8a 100644 --- a/test/cbmc/stubs/freertos_api.c +++ b/test/cbmc/stubs/freertos_api.c @@ -49,6 +49,21 @@ Socket_t FreeRTOS_socket( BaseType_t xDomain, } } +/**************************************************************** +* Abstract FreeRTOS_socket. +* https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/API/socket.html +* +* We stub out this function to do nothing but allocate space for a +* socket containing unconstrained data or return an error. +****************************************************************/ + +BaseType_t FreeRTOS_listen( Socket_t xSocket, + BaseType_t xBacklog ) +{ + __CPROVER_assert( xSocket != NULL, "Socket cannot be NULL" ); + return nondet_BaseType(); +} + /**************************************************************** * Abstract FreeRTOS_setsockopt. * https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/API/setsockopt.html @@ -185,7 +200,7 @@ int32_t FreeRTOS_sendto( Socket_t xSocket, /**************************************************************** * Abstract FreeRTOS_GetUDPPayloadBuffer -* https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/FreeRTOS_GetUDPPayloadBuffer.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/34-FreeRTOS_GetUDPPayloadBuffer * * We stub out this function to do nothing but allocate a buffer of * unconstrained size containing unconstrained data and return a @@ -314,7 +329,7 @@ void vReleaseNetworkBufferAndDescriptor( NetworkBufferDescriptor_t * const pxNet /**************************************************************** * Abstract FreeRTOS_GetAddressConfiguration -* https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/API/FreeRTOS_GetAddressConfiguration.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/32-FreeRTOS_GetAddressConfiguration ****************************************************************/ void FreeRTOS_GetAddressConfiguration( uint32_t * pulIPAddress, @@ -374,7 +389,6 @@ const char * pcApplicationHostnameHook( void ) /**************************************************************** * Abstract xNetworkInterfaceOutput -* https://www.freertos.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Ethernet_Porting.html#xNetworkInterfaceOutput ****************************************************************/ BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkBuffer, BaseType_t bReleaseAfterSend ) @@ -388,3 +402,42 @@ BaseType_t xNetworkInterfaceOutput( NetworkBufferDescriptor_t * const pxNetworkB } /****************************************************************/ + +/**************************************************************** +* Abstract vIPSetARPResolutionTimerEnableState +****************************************************************/ +void vIPSetARPResolutionTimerEnableState( BaseType_t xEnableState ) +{ +} + +/****************************************************************/ + +/**************************************************************** +* Abstract vIPSetARPResolutionTimerEnableState +****************************************************************/ +BaseType_t xApplicationGetRandomNumber( uint32_t * pulNumber ) +{ + __CPROVER_assert( pulNumber != NULL, "The input number cannot be NULL" ); + + BaseType_t xReturn; + + *pulNumber = nondet_uint32(); + + /* Return some random value. */ + return xReturn; +} + +/****************************************************************/ + +/**************************************************************** +* Abstract vIPSetARPResolutionTimerEnableState +****************************************************************/ +uint32_t ulApplicationGetNextSequenceNumber( uint32_t ulSourceAddress, + uint16_t usSourcePort, + uint32_t ulDestinationAddress, + uint16_t usDestinationPort ) +{ + return nondet_uint32(); +} + +/****************************************************************/ diff --git a/test/cbmc/stubs/freertos_kernel_api.c b/test/cbmc/stubs/freertos_kernel_api.c index b74b4ec09c..79fd0ff822 100644 --- a/test/cbmc/stubs/freertos_kernel_api.c +++ b/test/cbmc/stubs/freertos_kernel_api.c @@ -80,3 +80,91 @@ EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, } /****************************************************************/ + +/**************************************************************** +* Abstract xEventGroupSetBits +****************************************************************/ +void vEventGroupDelete( EventGroupHandle_t xEventGroup ) +{ +} + +/****************************************************************/ + +/**************************************************************** +* Abstract xEventGroupSetBits +****************************************************************/ +EventGroupHandle_t xEventGroupCreate( void ) +{ + EventGroupHandle_t xReturn; + + return xReturn; +} + +/****************************************************************/ + +/**************************************************************** +* Abstract xQueueGenericSend +****************************************************************/ +BaseType_t xQueueGenericSend( QueueHandle_t xQueue, + const void * const pvItemToQueue, + TickType_t xTicksToWait, + const BaseType_t xCopyPosition ) +{ + BaseType_t xReturn; + + __CPROVER_assume( ( xReturn == pdTRUE ) || ( xReturn == pdFALSE ) ); + + return xReturn; +} + +/****************************************************************/ + +/**************************************************************** +* Abstract uxQueueMessagesWaiting +****************************************************************/ +UBaseType_t uxQueueMessagesWaiting( const QueueHandle_t xQueue ) +{ + UBaseType_t uxReturn; + + __CPROVER_assume( uxReturn <= 2 ); + + return uxReturn; +} + +/****************************************************************/ + +/**************************************************************** +* Abstract vTaskSetTimeOutState +****************************************************************/ +void vTaskSetTimeOutState( TimeOut_t * const pxTimeOut ) +{ +} + +/****************************************************************/ + +/**************************************************************** +* Abstract xTaskCheckForTimeOut +****************************************************************/ +BaseType_t xTaskCheckForTimeOut( TimeOut_t * const pxTimeOut, + TickType_t * const pxTicksToWait ) +{ + BaseType_t xReturn; + + __CPROVER_assume( ( xReturn == pdTRUE ) || ( xReturn == pdFALSE ) ); + + return xReturn; +} + +/****************************************************************/ + +/**************************************************************** +* Abstract xTaskGetTickCount +****************************************************************/ +TickType_t xTaskGetTickCount( void ) +{ + TickType_t xReturn; + + return xReturn; +} + +/****************************************************************/ diff --git a/test/unit-test/ConfigFiles/FreeRTOSConfig.h b/test/unit-test/ConfigFiles/FreeRTOSConfig.h index b0ba377dbb..9ad010521d 100644 --- a/test/unit-test/ConfigFiles/FreeRTOSConfig.h +++ b/test/unit-test/ConfigFiles/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/unit-test/ConfigFiles/FreeRTOSIPConfig.h b/test/unit-test/ConfigFiles/FreeRTOSIPConfig.h index 09ddb181c6..84258640df 100644 --- a/test/unit-test/ConfigFiles/FreeRTOSIPConfig.h +++ b/test/unit-test/ConfigFiles/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -109,7 +109,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/ConfigFiles/pack_struct_end.h b/test/unit-test/ConfigFiles/pack_struct_end.h index 4f4b2f904b..5208f0015c 100644 --- a/test/unit-test/ConfigFiles/pack_struct_end.h +++ b/test/unit-test/ConfigFiles/pack_struct_end.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ __attribute__( ( packed ) ); diff --git a/test/unit-test/ConfigFiles/pack_struct_start.h b/test/unit-test/ConfigFiles/pack_struct_start.h index 5da2689d39..ef2e7ba1d5 100644 --- a/test/unit-test/ConfigFiles/pack_struct_start.h +++ b/test/unit-test/ConfigFiles/pack_struct_start.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -28,7 +28,7 @@ /***************************************************************************** * * See the following URL for an explanation of this file: -* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_TCP/Embedded_Compiler_Porting.html +* https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/10-Porting/02-Embedded_Compiler_Porting * *****************************************************************************/ diff --git a/test/unit-test/ConfigFiles/portmacro.h b/test/unit-test/ConfigFiles/portmacro.h index e57917690c..ec8ed5f327 100644 --- a/test/unit-test/ConfigFiles/portmacro.h +++ b/test/unit-test/ConfigFiles/portmacro.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_ARP_DataLenLessThanMinPacket/ARP_DataLenLessThanMinPacket_list_macros.h b/test/unit-test/FreeRTOS_ARP_DataLenLessThanMinPacket/ARP_DataLenLessThanMinPacket_list_macros.h index b40ec2d73a..017c7bf825 100644 --- a/test/unit-test/FreeRTOS_ARP_DataLenLessThanMinPacket/ARP_DataLenLessThanMinPacket_list_macros.h +++ b/test/unit-test/FreeRTOS_ARP_DataLenLessThanMinPacket/ARP_DataLenLessThanMinPacket_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_ARP_DataLenLessThanMinPacket/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_ARP_DataLenLessThanMinPacket/FreeRTOSIPConfig.h index e8f5d6755d..e614a8c99e 100644 --- a/test/unit-test/FreeRTOS_ARP_DataLenLessThanMinPacket/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_ARP_DataLenLessThanMinPacket/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -103,7 +103,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_BitConfig/FreeRTOS_BitConfig_utest.c b/test/unit-test/FreeRTOS_BitConfig/FreeRTOS_BitConfig_utest.c index e7321b3dda..4d6497eff8 100644 --- a/test/unit-test/FreeRTOS_BitConfig/FreeRTOS_BitConfig_utest.c +++ b/test/unit-test/FreeRTOS_BitConfig/FreeRTOS_BitConfig_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_DHCPv6/FreeRTOSConfig.h b/test/unit-test/FreeRTOS_DHCPv6/FreeRTOSConfig.h index 1a4f663455..43dc1b60e8 100644 --- a/test/unit-test/FreeRTOS_DHCPv6/FreeRTOSConfig.h +++ b/test/unit-test/FreeRTOS_DHCPv6/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/unit-test/FreeRTOS_DHCPv6/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_DHCPv6/FreeRTOSIPConfig.h index d7e6fab6a8..365c83ac49 100644 --- a/test/unit-test/FreeRTOS_DHCPv6/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_DHCPv6/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -107,7 +107,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_stubs.c b/test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_stubs.c index 1e3a4e3830..13e5fe287a 100644 --- a/test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_stubs.c +++ b/test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_utest.c b/test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_utest.c index 29a0492331..b89b43df89 100644 --- a/test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_utest.c +++ b/test/unit-test/FreeRTOS_DHCPv6/FreeRTOS_DHCPv6_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -729,6 +729,34 @@ static void prvPrepareAdvertiseNoServerID() prvAddOptionPreference( pdFALSE ); } +/** + * @brief Prepare buffer content as DHCPv6 advertise with extra option value 32. + */ +static void prvPrepareAdvertiseExtraOptionValue32() +{ + /* We hard code the option sequence in advertise message. + * 1. Client ID + * 2. Server ID + * 3. IA_NA + * - Sub-option IA Address + * - Sub-option IA Prefix + * - Sub-option Status Code + * 4. Status Code + * 5. Preference + * 6. Extra Option 32 + */ + uint16_t usVal; + + prvPrepareAdvertise(); + /* Add extra option with value 32. */ + usVal = 32; + vAddBitOperation( eTestDHCPv6BitOperationRead16, &usVal, 2, "ExtraOption32" ); + usVal = 2U; + vAddBitOperation( eTestDHCPv6BitOperationRead16, &usVal, 2, "ExtraOption32Length" ); + usVal = 0U; + vAddBitOperation( eTestDHCPv6BitOperationReadCustom, &usVal, 2, "ExtraOptionStatusValue" ); +} + /** * @brief Prepare buffer content as DHCPv6 advertise. */ @@ -2046,6 +2074,54 @@ void test_vDHCPv6Process_prvDHCPv6Analyse_LackServerID() TEST_ASSERT_EQUAL( eWaitingOffer, xEndPoint.xDHCPData.eDHCPState ); } +/** + * @brief Check if vDHCPv6Process can skip setting bit map when the option value is 32. + */ +void test_vDHCPv6Process_prvDHCPv6Analyse_ExtraOptionValue32() +{ + NetworkEndPoint_t xEndPoint; + DHCPMessage_IPv6_t xDHCPMessage; + struct xSOCKET xLocalDHCPv6Socket; + + memset( &xEndPoint, 0, sizeof( NetworkEndPoint_t ) ); + memset( &xLocalDHCPv6Socket, 0, sizeof( struct xSOCKET ) ); + memset( &xDHCPMessage, 0, sizeof( DHCPMessage_IPv6_t ) ); + + pxNetworkEndPoints = &xEndPoint; + + memcpy( xEndPoint.xMACAddress.ucBytes, ucDefaultMACAddress, sizeof( ucDefaultMACAddress ) ); + memcpy( xEndPoint.ipv6_settings.xPrefix.ucBytes, &xDefaultNetPrefix.ucBytes, sizeof( IPv6_Address_t ) ); + xEndPoint.ipv6_settings.uxPrefixLength = 64; + xEndPoint.bits.bIPv6 = pdTRUE; + xEndPoint.bits.bWantDHCP = pdTRUE; + + xEndPoint.xDHCPData.eDHCPState = eWaitingOffer; + xEndPoint.xDHCPData.eExpectedState = eWaitingOffer; + xEndPoint.xDHCPData.ulTransactionId = TEST_DHCPV6_TRANSACTION_ID; + xEndPoint.xDHCPData.xDHCPSocket = &xLocalDHCPv6Socket; + memcpy( xEndPoint.xDHCPData.ucClientDUID, ucTestDHCPv6OptionClientID, sizeof( ucTestDHCPv6OptionClientID ) ); + + xEndPoint.pxDHCPMessage = &xDHCPMessage; + + FreeRTOS_recvfrom_IgnoreAndReturn( 150 ); + FreeRTOS_recvfrom_IgnoreAndReturn( 0 ); + xTaskGetTickCount_IgnoreAndReturn( 0 ); + + prvPrepareAdvertiseExtraOptionValue32(); + + xApplicationGetRandomNumber_Stub( xStubxApplicationGetRandomNumber ); + FreeRTOS_inet_pton6_IgnoreAndReturn( pdTRUE ); + FreeRTOS_sendto_IgnoreAndReturn( 0 ); + + prvPrepareRequest(); + + vDHCPv6Process( pdFALSE, &xEndPoint ); + + /* The endpoint receives the DHCPv6 Advertise message from DHCPv6 server. + * Then change the state to eWaitingAcknowledge. */ + TEST_ASSERT_EQUAL( eWaitingAcknowledge, xEndPoint.xDHCPData.eDHCPState ); +} + /** * @brief Check if vDHCPv6Process can drop packets while failing on initialization of bit configuration. */ diff --git a/test/unit-test/FreeRTOS_DNS/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_DNS/FreeRTOSIPConfig.h index 6596cb1e0e..ad556c9f7d 100644 --- a/test/unit-test/FreeRTOS_DNS/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_DNS/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -108,7 +108,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_DNS/FreeRTOS_DNS_stubs.c b/test/unit-test/FreeRTOS_DNS/FreeRTOS_DNS_stubs.c index e5fc06fbb5..0a515152f9 100644 --- a/test/unit-test/FreeRTOS_DNS/FreeRTOS_DNS_stubs.c +++ b/test/unit-test/FreeRTOS_DNS/FreeRTOS_DNS_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_DNS/FreeRTOS_DNS_utest.c b/test/unit-test/FreeRTOS_DNS/FreeRTOS_DNS_utest.c index 69ef050dfe..16d9d9fbfc 100644 --- a/test/unit-test/FreeRTOS_DNS/FreeRTOS_DNS_utest.c +++ b/test/unit-test/FreeRTOS_DNS/FreeRTOS_DNS_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_DNS_Cache/FreeRTOS_DNS_Cache_stubs.c b/test/unit-test/FreeRTOS_DNS_Cache/FreeRTOS_DNS_Cache_stubs.c index 3ff0cf2260..1a7d9c457a 100644 --- a/test/unit-test/FreeRTOS_DNS_Cache/FreeRTOS_DNS_Cache_stubs.c +++ b/test/unit-test/FreeRTOS_DNS_Cache/FreeRTOS_DNS_Cache_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_DNS_Cache/FreeRTOS_DNS_Cache_utest.c b/test/unit-test/FreeRTOS_DNS_Cache/FreeRTOS_DNS_Cache_utest.c index 89c9aeb4f4..31525fb73e 100644 --- a/test/unit-test/FreeRTOS_DNS_Cache/FreeRTOS_DNS_Cache_utest.c +++ b/test/unit-test/FreeRTOS_DNS_Cache/FreeRTOS_DNS_Cache_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_DNS_Callback/FreeRTOS_DNS_Callback_stubs.c b/test/unit-test/FreeRTOS_DNS_Callback/FreeRTOS_DNS_Callback_stubs.c index b7ad3e2d0d..f2840bc4be 100644 --- a/test/unit-test/FreeRTOS_DNS_Callback/FreeRTOS_DNS_Callback_stubs.c +++ b/test/unit-test/FreeRTOS_DNS_Callback/FreeRTOS_DNS_Callback_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_DNS_Callback/FreeRTOS_DNS_Callback_utest.c b/test/unit-test/FreeRTOS_DNS_Callback/FreeRTOS_DNS_Callback_utest.c index a23ee1ba6d..7dfbd9ea19 100644 --- a/test/unit-test/FreeRTOS_DNS_Callback/FreeRTOS_DNS_Callback_utest.c +++ b/test/unit-test/FreeRTOS_DNS_Callback/FreeRTOS_DNS_Callback_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_DNS_ConfigNoCallback/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_DNS_ConfigNoCallback/FreeRTOSIPConfig.h index d80e178ffa..34965d293d 100644 --- a/test/unit-test/FreeRTOS_DNS_ConfigNoCallback/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_DNS_ConfigNoCallback/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -108,7 +108,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_DNS_ConfigNoCallback/FreeRTOS_DNS_ConfigNoCallback_stubs.c b/test/unit-test/FreeRTOS_DNS_ConfigNoCallback/FreeRTOS_DNS_ConfigNoCallback_stubs.c index 8f3e20ef1b..4388c135f8 100644 --- a/test/unit-test/FreeRTOS_DNS_ConfigNoCallback/FreeRTOS_DNS_ConfigNoCallback_stubs.c +++ b/test/unit-test/FreeRTOS_DNS_ConfigNoCallback/FreeRTOS_DNS_ConfigNoCallback_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_DNS_ConfigNoCallback/FreeRTOS_DNS_ConfigNoCallback_utest.c b/test/unit-test/FreeRTOS_DNS_ConfigNoCallback/FreeRTOS_DNS_ConfigNoCallback_utest.c index b00f4970ec..a3df49d2e4 100644 --- a/test/unit-test/FreeRTOS_DNS_ConfigNoCallback/FreeRTOS_DNS_ConfigNoCallback_utest.c +++ b/test/unit-test/FreeRTOS_DNS_ConfigNoCallback/FreeRTOS_DNS_ConfigNoCallback_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_DNS_Networking/FreeRTOS_DNS_Networking_stubs.c b/test/unit-test/FreeRTOS_DNS_Networking/FreeRTOS_DNS_Networking_stubs.c index f65fde89e5..7bac7198e0 100644 --- a/test/unit-test/FreeRTOS_DNS_Networking/FreeRTOS_DNS_Networking_stubs.c +++ b/test/unit-test/FreeRTOS_DNS_Networking/FreeRTOS_DNS_Networking_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_DNS_Networking/FreeRTOS_DNS_Networking_utest.c b/test/unit-test/FreeRTOS_DNS_Networking/FreeRTOS_DNS_Networking_utest.c index f109cd6629..a98472a57d 100644 --- a/test/unit-test/FreeRTOS_DNS_Networking/FreeRTOS_DNS_Networking_utest.c +++ b/test/unit-test/FreeRTOS_DNS_Networking/FreeRTOS_DNS_Networking_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_DNS_Parser/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_DNS_Parser/FreeRTOSIPConfig.h index 18b5be367c..3d6ea8df28 100644 --- a/test/unit-test/FreeRTOS_DNS_Parser/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_DNS_Parser/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -107,7 +107,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_DNS_Parser/FreeRTOS_DNS_Parser_stubs.c b/test/unit-test/FreeRTOS_DNS_Parser/FreeRTOS_DNS_Parser_stubs.c index 63926601e7..80e856be3f 100644 --- a/test/unit-test/FreeRTOS_DNS_Parser/FreeRTOS_DNS_Parser_stubs.c +++ b/test/unit-test/FreeRTOS_DNS_Parser/FreeRTOS_DNS_Parser_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_DNS_Parser/FreeRTOS_DNS_Parser_utest.c b/test/unit-test/FreeRTOS_DNS_Parser/FreeRTOS_DNS_Parser_utest.c index cee6d148a6..e75043c1f1 100644 --- a/test/unit-test/FreeRTOS_DNS_Parser/FreeRTOS_DNS_Parser_utest.c +++ b/test/unit-test/FreeRTOS_DNS_Parser/FreeRTOS_DNS_Parser_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -997,7 +997,7 @@ void test_DNS_TreatNBNS_Fail_BufferAllocation1( void ) usChar2u16_ExpectAnyArgsAndReturn( dnsNBNS_TYPE_NET_BIOS ); /* usType */ usChar2u16_ExpectAnyArgsAndReturn( dnsNBNS_FLAGS_OPCODE_QUERY ); - catch_assert( DNS_TreatNBNS( pucPayload, uxBufferLength, 1234 ) ); + DNS_TreatNBNS( pucPayload, uxBufferLength, 1234 ); ASSERT_DNS_QUERY_HOOK_CALLED(); } @@ -2855,6 +2855,275 @@ void test_DNS_ParseDNSReply_answer_lmmnr_reply_valid_new_netbuffer3( void ) ASSERT_DNS_QUERY_HOOK_CALLED(); } +/** + * @brief ensures that when the re-use network buffer is reused when xBufferAllocFixedSize + * is set, then packet is sent over the network. + */ +void test_DNS_ParseDNSReply_answer_lmmnr_reply_valid_fixed_buffer( void ) +{ + uint32_t ret; + uint8_t udp_buffer[ ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ] = { 0 }; + uint8_t * pucUDPPayloadBuffer = ( ( uint8_t * ) udp_buffer ) + ipUDP_PAYLOAD_OFFSET_IPv4; + size_t uxBufferLength = 250; + struct freertos_addrinfo * pxAddressInfo; + uint16_t usPort = 80; + NetworkEndPoint_t xEndPoint = { 0 }; + + memset( pucUDPPayloadBuffer, 0x00, uxBufferLength ); + + xBufferAllocFixedSize = pdTRUE; + + NetworkBufferDescriptor_t pxNetworkBuffer = { 0 }; + xEndPoint.ipv4_settings.ulIPAddress = 0xABCD1234; + pxNetworkBuffer.pucEthernetBuffer = udp_buffer; + pxNetworkBuffer.xDataLength = uxBufferLength; + pxNetworkBuffer.pxEndPoint = &xEndPoint; + + UDPPacket_t * pxUDPPacket; + IPHeader_t * pxIPHeader; + UDPHeader_t * pxUDPHeader; + + pxUDPPacket = ( ( UDPPacket_t * ) + pxNetworkBuffer.pucEthernetBuffer ); + pxIPHeader = &pxUDPPacket->xIPHeader; + pxIPHeader->ucVersionHeaderLength = 0x0; + pxUDPHeader = &pxUDPPacket->xUDPHeader; + IPPacket_t * xIPPacket = ( ( IPPacket_t * ) pxNetworkBuffer.pucEthernetBuffer ); + + pxIPHeader->ulSourceIPAddress = 1234; + + NetworkBufferDescriptor_t pxNewBuffer; + pxNewBuffer.pucEthernetBuffer = udp_buffer; + pxNewBuffer.xDataLength = uxBufferLength; + + BaseType_t xExpected = pdFALSE; + size_t beg = sizeof( DNSMessage_t ); + + DNSMessage_t * dns_header; + + dns_header = ( DNSMessage_t * ) pucUDPPayloadBuffer; + + dns_header->usQuestions = FreeRTOS_htons( 1 ); + dns_header->usAnswers = FreeRTOS_htons( 2 ); + dns_header->usFlags = dnsDNS_PORT; + + pucUDPPayloadBuffer[ beg ] = 38; + beg++; + strcpy( pucUDPPayloadBuffer + beg, "FreeRTOSbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" ); + beg += 38; + + beg += sizeof( uint32_t ); + + pucUDPPayloadBuffer[ beg ] = 38; + beg++; + strcpy( pucUDPPayloadBuffer + beg, "FreeRTOSbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" ); + beg += 38; + + pucUDPPayloadBuffer[ beg ] = 38; + beg++; + strcpy( pucUDPPayloadBuffer + beg, "FreeRTOSbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" ); + beg += 38; + + uxIPHeaderSizePacket_IgnoreAndReturn( ipSIZE_OF_IPv4_HEADER ); + usChar2u16_ExpectAnyArgsAndReturn( dnsTYPE_AAAA_HOST ); /* usType */ + usChar2u16_ExpectAnyArgsAndReturn( dnsCLASS_IN ); /* usClass */ + hook_return = pdTRUE; + pxUDPPayloadBuffer_to_NetworkBuffer_ExpectAnyArgsAndReturn( &pxNetworkBuffer ); + + usGenerateChecksum_ExpectAnyArgsAndReturn( 555 ); + usGenerateProtocolChecksum_ExpectAnyArgsAndReturn( 444 ); + vReturnEthernetFrame_Expect( &pxNetworkBuffer, pdFALSE ); + + ret = DNS_ParseDNSReply( pucUDPPayloadBuffer, + uxBufferLength, + &pxAddressInfo, + xExpected, + usPort ); + + TEST_ASSERT_EQUAL( pdFALSE, ret ); + ASSERT_DNS_QUERY_HOOK_CALLED(); +} + +/** + * @brief ensures that when the re-use network buffer is reused when xBufferAllocFixedSize + * is set, but packet is not sent over the network due to buffer overflow. + */ +void test_DNS_ParseDNSReply_answer_lmmnr_reply_fixed_buffer_full_content( void ) +{ + uint32_t ret; + uint8_t udp_buffer[ ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER ] = { 0 }; + uint8_t * pucUDPPayloadBuffer = ( ( uint8_t * ) udp_buffer ) + ipUDP_PAYLOAD_OFFSET_IPv4; + /* Maximum UDP payload length is 1500 + 14 - 42 = 1472. */ + size_t uxBufferLength = ipconfigNETWORK_MTU + ipSIZE_OF_ETH_HEADER - ipUDP_PAYLOAD_OFFSET_IPv4; + struct freertos_addrinfo * pxAddressInfo; + uint16_t usPort = 80; + NetworkEndPoint_t xEndPoint = { 0 }; + int i; + + memset( pucUDPPayloadBuffer, 0x00, uxBufferLength ); + + xBufferAllocFixedSize = pdTRUE; + + NetworkBufferDescriptor_t pxNetworkBuffer = { 0 }; + xEndPoint.ipv4_settings.ulIPAddress = 0xABCD1234; + pxNetworkBuffer.pucEthernetBuffer = udp_buffer; + pxNetworkBuffer.xDataLength = uxBufferLength; + pxNetworkBuffer.pxEndPoint = &xEndPoint; + + UDPPacket_t * pxUDPPacket; + IPHeader_t * pxIPHeader; + UDPHeader_t * pxUDPHeader; + + pxUDPPacket = ( ( UDPPacket_t * ) + pxNetworkBuffer.pucEthernetBuffer ); + pxIPHeader = &pxUDPPacket->xIPHeader; + pxIPHeader->ucVersionHeaderLength = 0x0; + pxUDPHeader = &pxUDPPacket->xUDPHeader; + IPPacket_t * xIPPacket = ( ( IPPacket_t * ) pxNetworkBuffer.pucEthernetBuffer ); + + pxIPHeader->ulSourceIPAddress = 1234; + + NetworkBufferDescriptor_t pxNewBuffer; + pxNewBuffer.pucEthernetBuffer = udp_buffer; + pxNewBuffer.xDataLength = uxBufferLength; + + BaseType_t xExpected = pdFALSE; + size_t beg = sizeof( DNSMessage_t ); + + DNSMessage_t * dns_header; + + dns_header = ( DNSMessage_t * ) pucUDPPayloadBuffer; + + dns_header->usQuestions = FreeRTOS_htons( 6 ); + dns_header->usAnswers = FreeRTOS_htons( 0 ); + dns_header->usFlags = dnsDNS_PORT; + + /* First 5 queries have maximum length. */ + + /* DNS name field format requirements: + * - First two bits must be zero to indicate real length + * - Maximum length of a single label is 63 bytes (due to first two bits requirement) + * - Total DNS name is set to 254 bytes to match ipconfigDNS_CACHE_NAME_LENGTH + * + * Format breakdown: + * [label1].[label2].[label3].[label4][\0] + * where: + * - label1, label2, label3: 63 bytes each + * - label4: 61 bytes + * - Total: 63 + 63 + 63 + 61 + 4 (length) + 1 (null terminator) = 255 bytes + */ + for( i = 0; i < 5; i++ ) + { + pucUDPPayloadBuffer[ beg ] = 63; + beg++; + strcpy( pucUDPPayloadBuffer + beg, + "FreeRTOSFreeRTOSFree" /* 20 */ + "FreeRTOSFreeRTOSFree" /* 40 */ + "FreeRTOSFreeRTOSFree" /* 60 */ + "Fre" ); /* 63 */ + beg += 63; + pucUDPPayloadBuffer[ beg ] = 63; + beg++; + strcpy( pucUDPPayloadBuffer + beg, + "FreeRTOSFreeRTOSFree" /* 20 */ + "FreeRTOSFreeRTOSFree" /* 40 */ + "FreeRTOSFreeRTOSFree" /* 60 */ + "Fre" ); /* 63 */ + beg += 63; + pucUDPPayloadBuffer[ beg ] = 63; + beg++; + strcpy( pucUDPPayloadBuffer + beg, + "FreeRTOSFreeRTOSFree" /* 20 */ + "FreeRTOSFreeRTOSFree" /* 40 */ + "FreeRTOSFreeRTOSFree" /* 60 */ + "Fre" ); /* 63 */ + beg += 63; + pucUDPPayloadBuffer[ beg ] = 61; + beg++; + strcpy( pucUDPPayloadBuffer + beg, + "FreeRTOSFreeRTOSFree" /* 20 */ + "FreeRTOSFreeRTOSFree" /* 40 */ + "FreeRTOSFreeRTOSFree" /* 60 */ + "F" ); /* 61 */ + beg += 61; + pucUDPPayloadBuffer[ beg++ ] = '\0'; + + /* Skip query's type and class. */ + beg += sizeof( uint32_t ); + } + + /* Memory layout of DNS message till here: + * - Header: 12 bytes + * - Query section: (255 + 4) * 5 bytes = 1295 bytes + * - Total used: 1307 bytes + * + * Available space in UDP payload: + * - Total UDP payload: 1472 bytes + * - Used space: 1307 bytes + * - Remaining space: 165 bytes + */ + + /* Last query to fill the remaining 165 bytes. Reserve 4 bytes for type and class fields. + * + * Format breakdown: + * [label1].[label2].[label3][\0] + * where: + * - label1, label2: 63 bytes each + * - label3: 31 bytes + * - Total: 63 + 63 + 31 + 3 (length) + 1 (null terminator) = 161 bytes */ + pucUDPPayloadBuffer[ beg ] = 63; + beg++; + strcpy( pucUDPPayloadBuffer + beg, + "FreeRTOSFreeRTOSFree" /* 20 */ + "FreeRTOSFreeRTOSFree" /* 40 */ + "FreeRTOSFreeRTOSFree" /* 60 */ + "Fre" ); /* 63 */ + beg += 63; + pucUDPPayloadBuffer[ beg ] = 63; + beg++; + strcpy( pucUDPPayloadBuffer + beg, + "FreeRTOSFreeRTOSFree" /* 20 */ + "FreeRTOSFreeRTOSFree" /* 40 */ + "FreeRTOSFreeRTOSFree" /* 60 */ + "Fre" ); /* 63 */ + beg += 63; + pucUDPPayloadBuffer[ beg ] = 31; + beg++; + strcpy( pucUDPPayloadBuffer + beg, + "FreeRTOSFreeRTOSFree" /* 20 */ + "FreeRTOSFre" ); /* 31 */ + beg += 31; + pucUDPPayloadBuffer[ beg++ ] = '\0'; + + /* Skip query's type and class. */ + beg += sizeof( uint32_t ); + + usChar2u16_ExpectAnyArgsAndReturn( dnsTYPE_AAAA_HOST ); /* usType */ + usChar2u16_ExpectAnyArgsAndReturn( dnsCLASS_IN ); /* usClass */ + usChar2u16_ExpectAnyArgsAndReturn( dnsTYPE_AAAA_HOST ); /* usType */ + usChar2u16_ExpectAnyArgsAndReturn( dnsCLASS_IN ); /* usClass */ + usChar2u16_ExpectAnyArgsAndReturn( dnsTYPE_AAAA_HOST ); /* usType */ + usChar2u16_ExpectAnyArgsAndReturn( dnsCLASS_IN ); /* usClass */ + usChar2u16_ExpectAnyArgsAndReturn( dnsTYPE_AAAA_HOST ); /* usType */ + usChar2u16_ExpectAnyArgsAndReturn( dnsCLASS_IN ); /* usClass */ + usChar2u16_ExpectAnyArgsAndReturn( dnsTYPE_AAAA_HOST ); /* usType */ + usChar2u16_ExpectAnyArgsAndReturn( dnsCLASS_IN ); /* usClass */ + usChar2u16_ExpectAnyArgsAndReturn( dnsTYPE_AAAA_HOST ); /* usType */ + usChar2u16_ExpectAnyArgsAndReturn( dnsCLASS_IN ); /* usClass */ + uxIPHeaderSizePacket_IgnoreAndReturn( ipSIZE_OF_IPv4_HEADER ); + hook_return = pdTRUE; + pxUDPPayloadBuffer_to_NetworkBuffer_ExpectAnyArgsAndReturn( &pxNetworkBuffer ); + + ret = DNS_ParseDNSReply( pucUDPPayloadBuffer, + uxBufferLength, + &pxAddressInfo, + xExpected, + usPort ); + + TEST_ASSERT_EQUAL( pdFALSE, ret ); + ASSERT_DNS_QUERY_HOOK_CALLED(); +} + /** * @brief ensures that when the number of answers is zero no packet is sent over * the network diff --git a/test/unit-test/FreeRTOS_ICMP/FreeRTOS_ICMP_stubs.c b/test/unit-test/FreeRTOS_ICMP/FreeRTOS_ICMP_stubs.c index 102afab0a5..bab9118241 100644 --- a/test/unit-test/FreeRTOS_ICMP/FreeRTOS_ICMP_stubs.c +++ b/test/unit-test/FreeRTOS_ICMP/FreeRTOS_ICMP_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_ICMP/FreeRTOS_ICMP_utest.c b/test/unit-test/FreeRTOS_ICMP/FreeRTOS_ICMP_utest.c index b51b26a220..27ce62db9e 100644 --- a/test/unit-test/FreeRTOS_ICMP/FreeRTOS_ICMP_utest.c +++ b/test/unit-test/FreeRTOS_ICMP/FreeRTOS_ICMP_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_ICMP/ICMP_list_macros.h b/test/unit-test/FreeRTOS_ICMP/ICMP_list_macros.h index a4d9ab6401..0106c2fa83 100644 --- a/test/unit-test/FreeRTOS_ICMP/ICMP_list_macros.h +++ b/test/unit-test/FreeRTOS_ICMP/ICMP_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_ICMP_wo_assert/FreeRTOSConfig.h b/test/unit-test/FreeRTOS_ICMP_wo_assert/FreeRTOSConfig.h index acbe4822de..8c002500ad 100644 --- a/test/unit-test/FreeRTOS_ICMP_wo_assert/FreeRTOSConfig.h +++ b/test/unit-test/FreeRTOS_ICMP_wo_assert/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/unit-test/FreeRTOS_ICMP_wo_assert/FreeRTOS_ICMP_wo_assert_stubs.c b/test/unit-test/FreeRTOS_ICMP_wo_assert/FreeRTOS_ICMP_wo_assert_stubs.c index e792908f52..7bf8caf2cb 100644 --- a/test/unit-test/FreeRTOS_ICMP_wo_assert/FreeRTOS_ICMP_wo_assert_stubs.c +++ b/test/unit-test/FreeRTOS_ICMP_wo_assert/FreeRTOS_ICMP_wo_assert_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_ICMP_wo_assert/FreeRTOS_ICMP_wo_assert_utest.c b/test/unit-test/FreeRTOS_ICMP_wo_assert/FreeRTOS_ICMP_wo_assert_utest.c index abe55e10c7..fe1a291686 100644 --- a/test/unit-test/FreeRTOS_ICMP_wo_assert/FreeRTOS_ICMP_wo_assert_utest.c +++ b/test/unit-test/FreeRTOS_ICMP_wo_assert/FreeRTOS_ICMP_wo_assert_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP/FreeRTOS_IP_stubs.c b/test/unit-test/FreeRTOS_IP/FreeRTOS_IP_stubs.c index f25be869e9..f679f67845 100644 --- a/test/unit-test/FreeRTOS_IP/FreeRTOS_IP_stubs.c +++ b/test/unit-test/FreeRTOS_IP/FreeRTOS_IP_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP/FreeRTOS_IP_utest.c b/test/unit-test/FreeRTOS_IP/FreeRTOS_IP_utest.c index 2bc281d810..2b6beb7f63 100644 --- a/test/unit-test/FreeRTOS_IP/FreeRTOS_IP_utest.c +++ b/test/unit-test/FreeRTOS_IP/FreeRTOS_IP_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP/IP_list_macros.h b/test/unit-test/FreeRTOS_IP/IP_list_macros.h index cc7e4a53e9..e2eeb2b68b 100644 --- a/test/unit-test/FreeRTOS_IP/IP_list_macros.h +++ b/test/unit-test/FreeRTOS_IP/IP_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig/FreeRTOSConfig.h b/test/unit-test/FreeRTOS_IP_DiffConfig/FreeRTOSConfig.h index cb963647ed..9565b83e72 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig/FreeRTOSConfig.h +++ b/test/unit-test/FreeRTOS_IP_DiffConfig/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_IP_DiffConfig/FreeRTOSIPConfig.h index 942f0f7c49..f4232c4206 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_IP_DiffConfig/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -106,7 +106,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig/FreeRTOS_IP_DiffConfig_stubs.c b/test/unit-test/FreeRTOS_IP_DiffConfig/FreeRTOS_IP_DiffConfig_stubs.c index 3b13966be3..57869bc967 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig/FreeRTOS_IP_DiffConfig_stubs.c +++ b/test/unit-test/FreeRTOS_IP_DiffConfig/FreeRTOS_IP_DiffConfig_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig/FreeRTOS_IP_DiffConfig_utest.c b/test/unit-test/FreeRTOS_IP_DiffConfig/FreeRTOS_IP_DiffConfig_utest.c index 9a530d1ec8..f58499e74d 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig/FreeRTOS_IP_DiffConfig_utest.c +++ b/test/unit-test/FreeRTOS_IP_DiffConfig/FreeRTOS_IP_DiffConfig_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig/IP_DiffConfig_list_macros.h b/test/unit-test/FreeRTOS_IP_DiffConfig/IP_DiffConfig_list_macros.h index 610158737c..c765687596 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig/IP_DiffConfig_list_macros.h +++ b/test/unit-test/FreeRTOS_IP_DiffConfig/IP_DiffConfig_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig1/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_IP_DiffConfig1/FreeRTOSIPConfig.h index 90642ae7f3..14597bfabd 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig1/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_IP_DiffConfig1/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -106,7 +106,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig1/FreeRTOS_IP_DiffConfig1_stubs.c b/test/unit-test/FreeRTOS_IP_DiffConfig1/FreeRTOS_IP_DiffConfig1_stubs.c index 5968e321ca..a9b12ac0b6 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig1/FreeRTOS_IP_DiffConfig1_stubs.c +++ b/test/unit-test/FreeRTOS_IP_DiffConfig1/FreeRTOS_IP_DiffConfig1_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig1/FreeRTOS_IP_DiffConfig1_utest.c b/test/unit-test/FreeRTOS_IP_DiffConfig1/FreeRTOS_IP_DiffConfig1_utest.c index c103cd2649..e325ca514e 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig1/FreeRTOS_IP_DiffConfig1_utest.c +++ b/test/unit-test/FreeRTOS_IP_DiffConfig1/FreeRTOS_IP_DiffConfig1_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig1/IP_DiffConfig1_list_macros.h b/test/unit-test/FreeRTOS_IP_DiffConfig1/IP_DiffConfig1_list_macros.h index 7196bb7ce0..c9413c464b 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig1/IP_DiffConfig1_list_macros.h +++ b/test/unit-test/FreeRTOS_IP_DiffConfig1/IP_DiffConfig1_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig2/FreeRTOSConfig.h b/test/unit-test/FreeRTOS_IP_DiffConfig2/FreeRTOSConfig.h index cb963647ed..9565b83e72 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig2/FreeRTOSConfig.h +++ b/test/unit-test/FreeRTOS_IP_DiffConfig2/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig2/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_IP_DiffConfig2/FreeRTOSIPConfig.h index cbcbc93853..9c013078dd 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig2/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_IP_DiffConfig2/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -106,7 +106,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig2/FreeRTOS_IP_DiffConfig2_stubs.c b/test/unit-test/FreeRTOS_IP_DiffConfig2/FreeRTOS_IP_DiffConfig2_stubs.c index f35bef3063..61d2adb986 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig2/FreeRTOS_IP_DiffConfig2_stubs.c +++ b/test/unit-test/FreeRTOS_IP_DiffConfig2/FreeRTOS_IP_DiffConfig2_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig2/FreeRTOS_IP_DiffConfig2_utest.c b/test/unit-test/FreeRTOS_IP_DiffConfig2/FreeRTOS_IP_DiffConfig2_utest.c index 15bfe29cc9..5e1fa7554e 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig2/FreeRTOS_IP_DiffConfig2_utest.c +++ b/test/unit-test/FreeRTOS_IP_DiffConfig2/FreeRTOS_IP_DiffConfig2_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig2/IP_DiffConfig2_list_macros.h b/test/unit-test/FreeRTOS_IP_DiffConfig2/IP_DiffConfig2_list_macros.h index 7ea81ca87c..0c4edf4f35 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig2/IP_DiffConfig2_list_macros.h +++ b/test/unit-test/FreeRTOS_IP_DiffConfig2/IP_DiffConfig2_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig3/FreeRTOSConfig.h b/test/unit-test/FreeRTOS_IP_DiffConfig3/FreeRTOSConfig.h index cb963647ed..9565b83e72 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig3/FreeRTOSConfig.h +++ b/test/unit-test/FreeRTOS_IP_DiffConfig3/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig3/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_IP_DiffConfig3/FreeRTOSIPConfig.h index 97898f2f11..b4b8aba70a 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig3/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_IP_DiffConfig3/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -108,7 +108,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig3/FreeRTOS_IP_DiffConfig3_stubs.c b/test/unit-test/FreeRTOS_IP_DiffConfig3/FreeRTOS_IP_DiffConfig3_stubs.c index ddaffbd0a7..07ad008d86 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig3/FreeRTOS_IP_DiffConfig3_stubs.c +++ b/test/unit-test/FreeRTOS_IP_DiffConfig3/FreeRTOS_IP_DiffConfig3_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig3/FreeRTOS_IP_DiffConfig3_utest.c b/test/unit-test/FreeRTOS_IP_DiffConfig3/FreeRTOS_IP_DiffConfig3_utest.c index 8fac597cf6..2cf1df9b4f 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig3/FreeRTOS_IP_DiffConfig3_utest.c +++ b/test/unit-test/FreeRTOS_IP_DiffConfig3/FreeRTOS_IP_DiffConfig3_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_DiffConfig3/IP_DiffConfig3_list_macros.h b/test/unit-test/FreeRTOS_IP_DiffConfig3/IP_DiffConfig3_list_macros.h index 89bd5c16a5..73d10f35b7 100644 --- a/test/unit-test/FreeRTOS_IP_DiffConfig3/IP_DiffConfig3_list_macros.h +++ b/test/unit-test/FreeRTOS_IP_DiffConfig3/IP_DiffConfig3_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_Timers/FreeRTOS_IP_Timers_stubs.c b/test/unit-test/FreeRTOS_IP_Timers/FreeRTOS_IP_Timers_stubs.c index 2674e64080..ab5d6565b5 100644 --- a/test/unit-test/FreeRTOS_IP_Timers/FreeRTOS_IP_Timers_stubs.c +++ b/test/unit-test/FreeRTOS_IP_Timers/FreeRTOS_IP_Timers_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_Timers/FreeRTOS_IP_Timers_utest.c b/test/unit-test/FreeRTOS_IP_Timers/FreeRTOS_IP_Timers_utest.c index 789cf3fc3c..5619e1bc93 100644 --- a/test/unit-test/FreeRTOS_IP_Timers/FreeRTOS_IP_Timers_utest.c +++ b/test/unit-test/FreeRTOS_IP_Timers/FreeRTOS_IP_Timers_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_Timers/IP_Timers_list_macros.h b/test/unit-test/FreeRTOS_IP_Timers/IP_Timers_list_macros.h index 97d8b2136e..cb4df8a69f 100644 --- a/test/unit-test/FreeRTOS_IP_Timers/IP_Timers_list_macros.h +++ b/test/unit-test/FreeRTOS_IP_Timers/IP_Timers_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_Utils/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_IP_Utils/FreeRTOSIPConfig.h index 0370baf987..66df422a0e 100644 --- a/test/unit-test/FreeRTOS_IP_Utils/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_IP_Utils/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -108,7 +108,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_stubs.c b/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_stubs.c index 36bc696f2b..5bc029cf74 100644 --- a/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_stubs.c +++ b/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c b/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c index aac452fcab..f5fc822fd0 100644 --- a/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c +++ b/test/unit-test/FreeRTOS_IP_Utils/FreeRTOS_IP_Utils_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -2908,6 +2908,65 @@ void test_FreeRTOS_min_size_t( void ) } } +/** + * @brief test_FreeRTOS_add_int32 + * To validate FreeRTOS_add_int32. + */ +void test_FreeRTOS_add_int32( void ) +{ + int32_t lResult; + + lResult = FreeRTOS_add_int32( 1, 2 ); + TEST_ASSERT_EQUAL( 3, lResult ); + + lResult = FreeRTOS_add_int32( ipINT32_MAX_VALUE, 1 ); + TEST_ASSERT_EQUAL( ipINT32_MAX_VALUE, lResult ); + + lResult = FreeRTOS_add_int32( ipINT32_MIN_VALUE, -1 ); + TEST_ASSERT_EQUAL( ipINT32_MIN_VALUE, lResult ); + + lResult = FreeRTOS_add_int32( -1, 1 ); + TEST_ASSERT_EQUAL( 0, lResult ); +} + +/** + * @brief test_FreeRTOS_multiply_int32 + * To validate FreeRTOS_multiply_int32. + */ +void test_FreeRTOS_multiply_int32( void ) +{ + int32_t lResult; + + /* a > 0 */ + lResult = FreeRTOS_multiply_int32( ipINT32_MAX_VALUE, ipINT32_MAX_VALUE ); + TEST_ASSERT_EQUAL( ipINT32_MAX_VALUE, lResult ); + + lResult = FreeRTOS_multiply_int32( 10, ipINT32_MIN_VALUE ); + TEST_ASSERT_EQUAL( ipINT32_MIN_VALUE, lResult ); + + lResult = FreeRTOS_multiply_int32( 10, 10 ); + TEST_ASSERT_EQUAL( 100, lResult ); + + lResult = FreeRTOS_multiply_int32( 10, -1 ); + TEST_ASSERT_EQUAL( -10, lResult ); + + lResult = FreeRTOS_multiply_int32( 10, 0 ); + TEST_ASSERT_EQUAL( 0, lResult ); + + /* a <= 0 */ + lResult = FreeRTOS_multiply_int32( ipINT32_MIN_VALUE, 10 ); + TEST_ASSERT_EQUAL( ipINT32_MIN_VALUE, lResult ); + + lResult = FreeRTOS_multiply_int32( ipINT32_MIN_VALUE, ipINT32_MIN_VALUE ); + TEST_ASSERT_EQUAL( ipINT32_MAX_VALUE, lResult ); + + lResult = FreeRTOS_multiply_int32( -1, 10 ); + TEST_ASSERT_EQUAL( -10, lResult ); + + lResult = FreeRTOS_multiply_int32( -2, -2 ); + TEST_ASSERT_EQUAL( 4, lResult ); +} + /** * @brief test_FreeRTOS_round_up * To validate FreeRTOS_round_up. diff --git a/test/unit-test/FreeRTOS_IP_Utils/IP_Utils_list_macros.h b/test/unit-test/FreeRTOS_IP_Utils/IP_Utils_list_macros.h index 97d8b2136e..cb4df8a69f 100644 --- a/test/unit-test/FreeRTOS_IP_Utils/IP_Utils_list_macros.h +++ b/test/unit-test/FreeRTOS_IP_Utils/IP_Utils_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOSConfig.h b/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOSConfig.h index acbe4822de..8c002500ad 100644 --- a/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOSConfig.h +++ b/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOSIPConfig.h index 8fba7f3905..e051153cd0 100644 --- a/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -106,7 +106,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOS_IP_Utils_DiffConfig_stubs.c b/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOS_IP_Utils_DiffConfig_stubs.c index 9415d64743..3bfafc9299 100644 --- a/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOS_IP_Utils_DiffConfig_stubs.c +++ b/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOS_IP_Utils_DiffConfig_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOS_IP_Utils_DiffConfig_utest.c b/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOS_IP_Utils_DiffConfig_utest.c index 8d2ff7080e..b65156382d 100644 --- a/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOS_IP_Utils_DiffConfig_utest.c +++ b/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/FreeRTOS_IP_Utils_DiffConfig_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/IP_Utils_DiffConfig_list_macros.h b/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/IP_Utils_DiffConfig_list_macros.h index cdfb1e7224..1a77b1ede5 100644 --- a/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/IP_Utils_DiffConfig_list_macros.h +++ b/test/unit-test/FreeRTOS_IP_Utils_DiffConfig/IP_Utils_DiffConfig_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IPv4/FreeRTOS_IPv4_utest.c b/test/unit-test/FreeRTOS_IPv4/FreeRTOS_IPv4_utest.c index d758655ef5..721bee4b39 100644 --- a/test/unit-test/FreeRTOS_IPv4/FreeRTOS_IPv4_utest.c +++ b/test/unit-test/FreeRTOS_IPv4/FreeRTOS_IPv4_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IPv4/IPv4_list_macros.h b/test/unit-test/FreeRTOS_IPv4/IPv4_list_macros.h index f4abfd314c..3281262121 100644 --- a/test/unit-test/FreeRTOS_IPv4/IPv4_list_macros.h +++ b/test/unit-test/FreeRTOS_IPv4/IPv4_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IPv4_DiffConfig/FreeRTOSConfig.h b/test/unit-test/FreeRTOS_IPv4_DiffConfig/FreeRTOSConfig.h index cb963647ed..9565b83e72 100644 --- a/test/unit-test/FreeRTOS_IPv4_DiffConfig/FreeRTOSConfig.h +++ b/test/unit-test/FreeRTOS_IPv4_DiffConfig/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/unit-test/FreeRTOS_IPv4_DiffConfig/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_IPv4_DiffConfig/FreeRTOSIPConfig.h index 2e5e2f7b40..26a4e1839f 100644 --- a/test/unit-test/FreeRTOS_IPv4_DiffConfig/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_IPv4_DiffConfig/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -106,7 +106,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_IPv4_DiffConfig/FreeRTOS_IPv4_DiffConfig_utest.c b/test/unit-test/FreeRTOS_IPv4_DiffConfig/FreeRTOS_IPv4_DiffConfig_utest.c index 412ba9d5fb..dd6e178264 100644 --- a/test/unit-test/FreeRTOS_IPv4_DiffConfig/FreeRTOS_IPv4_DiffConfig_utest.c +++ b/test/unit-test/FreeRTOS_IPv4_DiffConfig/FreeRTOS_IPv4_DiffConfig_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IPv4_DiffConfig/IPv4_DiffConfig_list_macros.h b/test/unit-test/FreeRTOS_IPv4_DiffConfig/IPv4_DiffConfig_list_macros.h index 6b1356a4c1..d13e051613 100644 --- a/test/unit-test/FreeRTOS_IPv4_DiffConfig/IPv4_DiffConfig_list_macros.h +++ b/test/unit-test/FreeRTOS_IPv4_DiffConfig/IPv4_DiffConfig_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IPv4_DiffConfig1/FreeRTOSConfig.h b/test/unit-test/FreeRTOS_IPv4_DiffConfig1/FreeRTOSConfig.h index f28d75ade7..93a9945122 100644 --- a/test/unit-test/FreeRTOS_IPv4_DiffConfig1/FreeRTOSConfig.h +++ b/test/unit-test/FreeRTOS_IPv4_DiffConfig1/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/unit-test/FreeRTOS_IPv4_DiffConfig1/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_IPv4_DiffConfig1/FreeRTOSIPConfig.h index a81bd93862..f16e91f52f 100644 --- a/test/unit-test/FreeRTOS_IPv4_DiffConfig1/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_IPv4_DiffConfig1/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -106,7 +106,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_IPv4_DiffConfig1/FreeRTOS_IPv4_DiffConfig1_utest.c b/test/unit-test/FreeRTOS_IPv4_DiffConfig1/FreeRTOS_IPv4_DiffConfig1_utest.c index 76a9254e5d..09b0c2cc25 100644 --- a/test/unit-test/FreeRTOS_IPv4_DiffConfig1/FreeRTOS_IPv4_DiffConfig1_utest.c +++ b/test/unit-test/FreeRTOS_IPv4_DiffConfig1/FreeRTOS_IPv4_DiffConfig1_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IPv4_DiffConfig1/IPv4_DiffConfig1_list_macros.h b/test/unit-test/FreeRTOS_IPv4_DiffConfig1/IPv4_DiffConfig1_list_macros.h index 4176f018b5..4518e255af 100644 --- a/test/unit-test/FreeRTOS_IPv4_DiffConfig1/IPv4_DiffConfig1_list_macros.h +++ b/test/unit-test/FreeRTOS_IPv4_DiffConfig1/IPv4_DiffConfig1_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IPv4_Sockets/FreeRTOS_IPv4_Sockets_stubs.c b/test/unit-test/FreeRTOS_IPv4_Sockets/FreeRTOS_IPv4_Sockets_stubs.c index e73550c1a7..814e52fde1 100644 --- a/test/unit-test/FreeRTOS_IPv4_Sockets/FreeRTOS_IPv4_Sockets_stubs.c +++ b/test/unit-test/FreeRTOS_IPv4_Sockets/FreeRTOS_IPv4_Sockets_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IPv4_Sockets/FreeRTOS_IPv4_Sockets_utest.c b/test/unit-test/FreeRTOS_IPv4_Sockets/FreeRTOS_IPv4_Sockets_utest.c index c81179ba8b..fb656ca6fb 100644 --- a/test/unit-test/FreeRTOS_IPv4_Sockets/FreeRTOS_IPv4_Sockets_utest.c +++ b/test/unit-test/FreeRTOS_IPv4_Sockets/FreeRTOS_IPv4_Sockets_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IPv4_Utils/FreeRTOS_IPv4_Utils_utest.c b/test/unit-test/FreeRTOS_IPv4_Utils/FreeRTOS_IPv4_Utils_utest.c index 6d01b4435b..0deca633f9 100644 --- a/test/unit-test/FreeRTOS_IPv4_Utils/FreeRTOS_IPv4_Utils_utest.c +++ b/test/unit-test/FreeRTOS_IPv4_Utils/FreeRTOS_IPv4_Utils_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IPv6/FreeRTOSConfig.h b/test/unit-test/FreeRTOS_IPv6/FreeRTOSConfig.h index c9dcbd2206..439f9d838c 100644 --- a/test/unit-test/FreeRTOS_IPv6/FreeRTOSConfig.h +++ b/test/unit-test/FreeRTOS_IPv6/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/unit-test/FreeRTOS_IPv6/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_IPv6/FreeRTOSIPConfig.h index 31ca857ddf..6a04b2ab60 100644 --- a/test/unit-test/FreeRTOS_IPv6/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_IPv6/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -106,7 +106,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_IPv6/FreeRTOS_IPv6_stubs.c b/test/unit-test/FreeRTOS_IPv6/FreeRTOS_IPv6_stubs.c index 5767d82acb..2982c88206 100644 --- a/test/unit-test/FreeRTOS_IPv6/FreeRTOS_IPv6_stubs.c +++ b/test/unit-test/FreeRTOS_IPv6/FreeRTOS_IPv6_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IPv6/FreeRTOS_IPv6_utest.c b/test/unit-test/FreeRTOS_IPv6/FreeRTOS_IPv6_utest.c index edcfab7656..cfbb743f16 100644 --- a/test/unit-test/FreeRTOS_IPv6/FreeRTOS_IPv6_utest.c +++ b/test/unit-test/FreeRTOS_IPv6/FreeRTOS_IPv6_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -68,6 +68,7 @@ void test_prvAllowIPPacketIPv6_SourceUnspecifiedAddress() memset( &xIPv6Address, 0, sizeof( xIPv6Address ) ); memcpy( xIPv6Address.xDestinationAddress.ucBytes, xIPAddressFive.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); memcpy( xIPv6Address.xSourceAddress.ucBytes, FreeRTOS_in6addr_any.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); + xIPv6Address.ucVersionTrafficClass = 0x60U; eResult = prvAllowIPPacketIPv6( &xIPv6Address, NULL, 0U ); TEST_ASSERT_EQUAL( eReleaseBuffer, eResult ); @@ -85,6 +86,7 @@ void test_prvAllowIPPacketIPv6_DestinationUnspecifiedAddress() memset( &xIPv6Address, 0, sizeof( xIPv6Address ) ); memcpy( xIPv6Address.xDestinationAddress.ucBytes, FreeRTOS_in6addr_any.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); memcpy( xIPv6Address.xSourceAddress.ucBytes, xIPAddressFive.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); + xIPv6Address.ucVersionTrafficClass = 0x60U; eResult = prvAllowIPPacketIPv6( &xIPv6Address, NULL, 0U ); TEST_ASSERT_EQUAL( eReleaseBuffer, eResult ); @@ -100,6 +102,8 @@ void test_prvAllowIPPacketIPv6_HappyPath() NetworkBufferDescriptor_t * pxNetworkBuffer = prvInitializeNetworkDescriptor(); TCPPacket_IPv6_t * pxTCPPacket = ( TCPPacket_IPv6_t * ) pxNetworkBuffer->pucEthernetBuffer; + pxTCPPacket->xIPHeader.ucVersionTrafficClass = 0x60U; + FreeRTOS_FindEndPointOnMAC_ExpectAndReturn( &pxTCPPacket->xEthernetHeader.xSourceAddress, NULL, NULL ); usGenerateProtocolChecksum_ExpectAndReturn( pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength, pdFALSE, ipCORRECT_CRC ); @@ -118,6 +122,7 @@ void test_prvAllowIPPacketIPv6_MulticastAddress() /* Multicast IPv6 address is FF02::1 */ IPv6_Address_t xMCIPAddress = { 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }; + pxTCPPacket->xIPHeader.ucVersionTrafficClass = 0x60U; memcpy( pxTCPPacket->xIPHeader.xDestinationAddress.ucBytes, xMCIPAddress.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); FreeRTOS_FindEndPointOnIP_IPv6_ExpectAndReturn( &( pxTCPPacket->xIPHeader.xSourceAddress ), pxNetworkBuffer->pxEndPoint ); @@ -139,6 +144,7 @@ void test_prvAllowIPPacketIPv6_LoopbackAddress() TCPPacket_IPv6_t * pxTCPPacket = ( TCPPacket_IPv6_t * ) pxNetworkBuffer->pucEthernetBuffer; NetworkEndPoint_t xEndPoint; + pxTCPPacket->xIPHeader.ucVersionTrafficClass = 0x60U; memcpy( pxTCPPacket->xIPHeader.xSourceAddress.ucBytes, FreeRTOS_in6addr_loopback.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); memcpy( pxTCPPacket->xIPHeader.xDestinationAddress.ucBytes, FreeRTOS_in6addr_loopback.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); @@ -163,6 +169,7 @@ void test_prvAllowIPPacketIPv6_LoopbackNotMatchDest() NetworkBufferDescriptor_t * pxNetworkBuffer = prvInitializeNetworkDescriptor(); TCPPacket_IPv6_t * pxTCPPacket = ( TCPPacket_IPv6_t * ) pxNetworkBuffer->pucEthernetBuffer; + pxTCPPacket->xIPHeader.ucVersionTrafficClass = 0x60U; pxTCPPacket->xIPHeader.xDestinationAddress.ucBytes[ 15 ] = 0x11; FreeRTOS_FindEndPointOnIP_IPv6_ExpectAndReturn( &pxTCPPacket->xIPHeader.xSourceAddress, pxNetworkBuffer->pxEndPoint ); @@ -185,6 +192,7 @@ void test_prvAllowIPPacketIPv6_LoopbackNotMatchSrc() TCPPacket_IPv6_t * pxTCPPacket = ( TCPPacket_IPv6_t * ) pxNetworkBuffer->pucEthernetBuffer; NetworkEndPoint_t xEndPoint; + pxTCPPacket->xIPHeader.ucVersionTrafficClass = 0x60U; memcpy( pxTCPPacket->xIPHeader.xDestinationAddress.ucBytes, FreeRTOS_in6addr_loopback.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); FreeRTOS_FindEndPointOnIP_IPv6_ExpectAndReturn( &pxTCPPacket->xIPHeader.xSourceAddress, &xEndPoint ); @@ -206,6 +214,8 @@ void test_prvAllowIPPacketIPv6_NetworkDown() pxNetworkBuffer->pxEndPoint = NULL; + pxTCPPacket->xIPHeader.ucVersionTrafficClass = 0x60U; + FreeRTOS_FindEndPointOnIP_IPv6_ExpectAndReturn( &pxTCPPacket->xIPHeader.xSourceAddress, NULL ); FreeRTOS_IsNetworkUp_IgnoreAndReturn( 0 ); FreeRTOS_FindEndPointOnMAC_ExpectAndReturn( &pxTCPPacket->xEthernetHeader.xSourceAddress, NULL, NULL ); @@ -225,6 +235,8 @@ void test_prvAllowIPPacketIPv6_SelfSend() NetworkBufferDescriptor_t * pxNetworkBuffer = prvInitializeNetworkDescriptor(); TCPPacket_IPv6_t * pxTCPPacket = ( TCPPacket_IPv6_t * ) pxNetworkBuffer->pucEthernetBuffer; + pxTCPPacket->xIPHeader.ucVersionTrafficClass = 0x60U; + FreeRTOS_FindEndPointOnMAC_ExpectAndReturn( &pxTCPPacket->xEthernetHeader.xSourceAddress, NULL, pxNetworkBuffer->pxEndPoint ); eResult = prvAllowIPPacketIPv6( &pxTCPPacket->xIPHeader, pxNetworkBuffer, 0U ); @@ -241,6 +253,8 @@ void test_prvAllowIPPacketIPv6_ChecksumError() NetworkBufferDescriptor_t * pxNetworkBuffer = prvInitializeNetworkDescriptor(); TCPPacket_IPv6_t * pxTCPPacket = ( TCPPacket_IPv6_t * ) pxNetworkBuffer->pucEthernetBuffer; + pxTCPPacket->xIPHeader.ucVersionTrafficClass = 0x60U; + FreeRTOS_FindEndPointOnMAC_ExpectAndReturn( &pxTCPPacket->xEthernetHeader.xSourceAddress, NULL, NULL ); usGenerateProtocolChecksum_ExpectAndReturn( pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength, pdFALSE, ipWRONG_CRC ); @@ -260,6 +274,8 @@ void test_prvAllowIPPacketIPv6_InvalidPacket() pxNetworkBuffer->pxEndPoint = NULL; + pxTCPPacket->xIPHeader.ucVersionTrafficClass = 0x60U; + FreeRTOS_FindEndPointOnIP_IPv6_ExpectAndReturn( &pxTCPPacket->xIPHeader.xSourceAddress, NULL ); FreeRTOS_IsNetworkUp_IgnoreAndReturn( 1 ); @@ -285,6 +301,8 @@ void test_prvAllowIPPacketIPv6_EndpointDifferentAddress() memcpy( xEndpoint.ipv6_settings.xIPAddress.ucBytes, xDiffIPAddress.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); pxNetworkBuffer->pxEndPoint = &xEndpoint; + pxTCPPacket->xIPHeader.ucVersionTrafficClass = 0x60U; + FreeRTOS_FindEndPointOnIP_IPv6_ExpectAndReturn( &( pxTCPPacket->xIPHeader.xSourceAddress ), NULL ); FreeRTOS_IsNetworkUp_IgnoreAndReturn( 1 ); diff --git a/test/unit-test/FreeRTOS_IPv6_ConfigDriverCheckChecksum/FreeRTOSConfig.h b/test/unit-test/FreeRTOS_IPv6_ConfigDriverCheckChecksum/FreeRTOSConfig.h index c9dcbd2206..439f9d838c 100644 --- a/test/unit-test/FreeRTOS_IPv6_ConfigDriverCheckChecksum/FreeRTOSConfig.h +++ b/test/unit-test/FreeRTOS_IPv6_ConfigDriverCheckChecksum/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/unit-test/FreeRTOS_IPv6_ConfigDriverCheckChecksum/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_IPv6_ConfigDriverCheckChecksum/FreeRTOSIPConfig.h index fa3d350d06..9c315395f4 100644 --- a/test/unit-test/FreeRTOS_IPv6_ConfigDriverCheckChecksum/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_IPv6_ConfigDriverCheckChecksum/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -106,7 +106,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_IPv6_ConfigDriverCheckChecksum/FreeRTOS_IPv6_ConfigDriverCheckChecksum_stubs.c b/test/unit-test/FreeRTOS_IPv6_ConfigDriverCheckChecksum/FreeRTOS_IPv6_ConfigDriverCheckChecksum_stubs.c index 4001eb25ed..5085bf60dd 100644 --- a/test/unit-test/FreeRTOS_IPv6_ConfigDriverCheckChecksum/FreeRTOS_IPv6_ConfigDriverCheckChecksum_stubs.c +++ b/test/unit-test/FreeRTOS_IPv6_ConfigDriverCheckChecksum/FreeRTOS_IPv6_ConfigDriverCheckChecksum_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IPv6_ConfigDriverCheckChecksum/FreeRTOS_IPv6_ConfigDriverCheckChecksum_utest.c b/test/unit-test/FreeRTOS_IPv6_ConfigDriverCheckChecksum/FreeRTOS_IPv6_ConfigDriverCheckChecksum_utest.c index 7bc71efce0..bb54021fa0 100644 --- a/test/unit-test/FreeRTOS_IPv6_ConfigDriverCheckChecksum/FreeRTOS_IPv6_ConfigDriverCheckChecksum_utest.c +++ b/test/unit-test/FreeRTOS_IPv6_ConfigDriverCheckChecksum/FreeRTOS_IPv6_ConfigDriverCheckChecksum_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IPv6_Utils/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_IPv6_Utils/FreeRTOSIPConfig.h index 95b087a475..39671b1efc 100644 --- a/test/unit-test/FreeRTOS_IPv6_Utils/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_IPv6_Utils/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -105,7 +105,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_IPv6_Utils/FreeRTOS_IPv6_Utils_stubs.c b/test/unit-test/FreeRTOS_IPv6_Utils/FreeRTOS_IPv6_Utils_stubs.c index d5da988477..a8b17123b2 100644 --- a/test/unit-test/FreeRTOS_IPv6_Utils/FreeRTOS_IPv6_Utils_stubs.c +++ b/test/unit-test/FreeRTOS_IPv6_Utils/FreeRTOS_IPv6_Utils_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_IPv6_Utils/FreeRTOS_IPv6_Utils_utest.c b/test/unit-test/FreeRTOS_IPv6_Utils/FreeRTOS_IPv6_Utils_utest.c index 12b731ab07..059b3a38d8 100644 --- a/test/unit-test/FreeRTOS_IPv6_Utils/FreeRTOS_IPv6_Utils_utest.c +++ b/test/unit-test/FreeRTOS_IPv6_Utils/FreeRTOS_IPv6_Utils_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -131,7 +131,7 @@ void test_prvChecksumIPv6Checks_IncompleteIPv6Packet( void ) BaseType_t usReturn; uint8_t pucEthernetBuffer[ ipconfigTCPv6_MSS ]; IPHeader_IPv6_t * pxIPv6Packet; - size_t uxBufferLength = ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER; + size_t uxBufferLength = ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + 4; struct xPacketSummary xSet; memset( pucEthernetBuffer, 0, ipconfigTCPv6_MSS ); @@ -205,6 +205,46 @@ void test_prvChecksumIPv6Checks_LargeExtensionHeader( void ) TEST_ASSERT_EQUAL( 3, usReturn ); } +/** + * @brief Prepare a packet with large extension header length. + * - ipIPv6_EXT_HEADER_ROUTING_HEADER + * - ipIPv6_EXT_HEADER_HOP_BY_HOP + * - ipPROTOCOL_TCP + */ +void test_prvChecksumIPv6Checks_IncorrectPayloadLength( void ) +{ + BaseType_t usReturn; + struct xPacketSummary xSet; + NetworkBufferDescriptor_t * pxNetworkBuffer = prvInitializeNetworkDescriptorWithExtensionHeader( ipPROTOCOL_TCP ); + IPHeader_IPv6_t * pxIPv6Header = ( IPHeader_IPv6_t * ) &( pxNetworkBuffer->pucEthernetBuffer[ ipSIZE_OF_ETH_HEADER ] ); + size_t uxIndex = ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER; + + /* Modify the extension header */ + pxIPv6Header->ucNextHeader = ipIPv6_EXT_HEADER_HOP_BY_HOP; + pxNetworkBuffer->pucEthernetBuffer[ uxIndex ] = ipIPv6_EXT_HEADER_ROUTING_HEADER; + pxNetworkBuffer->pucEthernetBuffer[ uxIndex + 1 ] = 5U; /* Extension header length is set to 200*8 + 8, which is larger than buffer size. */ + uxIndex += 8; + pxNetworkBuffer->pucEthernetBuffer[ uxIndex ] = ipPROTOCOL_TCP; + pxNetworkBuffer->pucEthernetBuffer[ uxIndex + 1 ] = 0; + uxIndex += 8; + + xSet.pxIPPacket_IPv6 = ( ( const IPHeader_IPv6_t * ) pxNetworkBuffer->pucEthernetBuffer ); + IPHeader_IPv6_t * pxIPPacket_IPv6 = ( IPHeader_IPv6_t * ) pxNetworkBuffer->pucEthernetBuffer; + + /* Incorrect payload length */ + pxIPPacket_IPv6->usPayloadLength = FreeRTOS_ntohs( 20 ); + + xGetExtensionOrder_ExpectAndReturn( ipIPv6_EXT_HEADER_HOP_BY_HOP, 0U, 1 ); + xGetExtensionOrder_ExpectAndReturn( ipIPv6_EXT_HEADER_HOP_BY_HOP, ipIPv6_EXT_HEADER_ROUTING_HEADER, 1 ); + xGetExtensionOrder_ExpectAndReturn( ipIPv6_EXT_HEADER_ROUTING_HEADER, ipPROTOCOL_TCP, 2 ); + xGetExtensionOrder_ExpectAndReturn( ipIPv6_EXT_HEADER_ROUTING_HEADER, ipPROTOCOL_TCP, 2 ); + + usReturn = prvChecksumIPv6Checks( pxNetworkBuffer->pucEthernetBuffer, pxNetworkBuffer->xDataLength, &xSet ); + + TEST_ASSERT_EQUAL( 4, usReturn ); +} + + /** * @brief Prepare a packet have extension with following order. * - ipIPv6_EXT_HEADER_ROUTING_HEADER diff --git a/test/unit-test/FreeRTOS_ND/FreeRTOS_ND_utest.c b/test/unit-test/FreeRTOS_ND/FreeRTOS_ND_utest.c index 2bd43461ba..ed2c356487 100644 --- a/test/unit-test/FreeRTOS_ND/FreeRTOS_ND_utest.c +++ b/test/unit-test/FreeRTOS_ND/FreeRTOS_ND_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -115,18 +115,53 @@ void test_eNDGetCacheEntry_MulticastEndPoint( void ) IPv6_Address_t xIPAddress; NetworkEndPoint_t xEndPoint, * pxEndPoint = &xEndPoint; + xEndPoint.bits.bIPv6 = pdTRUE_UNSIGNED; ( void ) memcpy( xIPAddress.ucBytes, xMultiCastIPAddress.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); xIsIPv6AllowedMulticast_ExpectAnyArgsAndReturn( pdTRUE ); vSetMultiCastIPv6MacAddress_ExpectAnyArgs(); - FreeRTOS_FirstEndPoint_ExpectAnyArgsAndReturn( NULL ); + FreeRTOS_FirstEndPoint_ExpectAnyArgsAndReturn( &xEndPoint ); + xIPv6_GetIPType_ExpectAnyArgsAndReturn( eIPv6_LinkLocal ); eResult = eNDGetCacheEntry( &xIPAddress, &xMACAddress, &pxEndPoint ); TEST_ASSERT_EQUAL( eARPCacheHit, eResult ); } + +/** + * @brief This function find the MAC-address of a multicast IPv6 address + * with a multiple endpoints endpoint. + */ +void test_eNDGetCacheEntry_MulticastEndPoint_NoEP( void ) +{ + eARPLookupResult_t eResult; + MACAddress_t xMACAddress; + IPv6_Address_t xIPAddress; + NetworkEndPoint_t xEndPoint, xEndPoint2, * pxEndPoint = &xEndPoint; + + xEndPoint.bits.bIPv6 = pdTRUE_UNSIGNED; + xEndPoint2.bits.bIPv6 = pdFALSE_UNSIGNED; + ( void ) memcpy( xIPAddress.ucBytes, xMultiCastIPAddress.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); + + xIsIPv6AllowedMulticast_ExpectAnyArgsAndReturn( pdTRUE ); + vSetMultiCastIPv6MacAddress_ExpectAnyArgs(); + + FreeRTOS_FirstEndPoint_ExpectAnyArgsAndReturn( NULL ); + xIPv6_GetIPType_ExpectAnyArgsAndReturn( eIPv6_LinkLocal ); + + FreeRTOS_FindEndPointOnIP_IPv6_ExpectAnyArgsAndReturn( NULL ); + + FreeRTOS_FirstEndPoint_ExpectAnyArgsAndReturn( pxEndPoint ); + xIPv6_GetIPType_ExpectAnyArgsAndReturn( eIPv6_Global ); + FreeRTOS_NextEndPoint_ExpectAnyArgsAndReturn( NULL ); + + eResult = eNDGetCacheEntry( &xIPAddress, &xMACAddress, &pxEndPoint ); + + TEST_ASSERT_EQUAL( eARPCacheMiss, eResult ); +} + /** * @brief This function find the MAC-address of a multicast IPv6 address * with a valid endpoint. @@ -167,15 +202,45 @@ void test_eNDGetCacheEntry_Multicast_InvalidEndPoint( void ) eARPLookupResult_t eResult; MACAddress_t xMACAddress; IPv6_Address_t xIPAddress; + NetworkEndPoint_t xEndPoint, * pxEndPoint = &xEndPoint; + + ( void ) memcpy( xIPAddress.ucBytes, xMultiCastIPAddress.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); + + xIsIPv6AllowedMulticast_ExpectAnyArgsAndReturn( pdTRUE ); + vSetMultiCastIPv6MacAddress_ExpectAnyArgs(); + + xIPv6_GetIPType_ExpectAnyArgsAndReturn( eIPv6_Multicast ); + FreeRTOS_FindEndPointOnIP_IPv6_ExpectAnyArgsAndReturn( pxEndPoint ); + + eResult = eNDGetCacheEntry( &xIPAddress, &xMACAddress, ppxEndPoint ); + + TEST_ASSERT_EQUAL( eARPCacheMiss, eResult ); +} + +/** + * @brief This function find the MAC-address of a multicast IPv6 address + * with a NULL endpoint, but no active IPv6 endpoints. + */ +void test_eNDGetCacheEntry_Multicast_InvalidEndPoint_NoEP( void ) +{ + NetworkEndPoint_t ** ppxEndPoint = NULL; + eARPLookupResult_t eResult; + MACAddress_t xMACAddress; + IPv6_Address_t xIPAddress; + NetworkEndPoint_t xEndPoint, * pxEndPoint = &xEndPoint, xEndPoint1; ( void ) memcpy( xIPAddress.ucBytes, xMultiCastIPAddress.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); xIsIPv6AllowedMulticast_ExpectAnyArgsAndReturn( pdTRUE ); vSetMultiCastIPv6MacAddress_ExpectAnyArgs(); + xIPv6_GetIPType_ExpectAnyArgsAndReturn( eIPv6_Multicast ); + FreeRTOS_FindEndPointOnIP_IPv6_ExpectAnyArgsAndReturn( NULL ); + FreeRTOS_FindGateWay_ExpectAnyArgsAndReturn( &xEndPoint1 ); + eResult = eNDGetCacheEntry( &xIPAddress, &xMACAddress, ppxEndPoint ); - TEST_ASSERT_EQUAL( eARPCacheHit, eResult ); + TEST_ASSERT_EQUAL( eARPCacheMiss, eResult ); } /** @@ -1155,12 +1220,36 @@ void test_prvProcessICMPMessage_IPv6_EP( void ) pxNetworkBuffer->pxEndPoint = &xEndPoint; xEndPoint.bits.bIPv6 = pdFALSE_UNSIGNED; pxNetworkBuffer->pucEthernetBuffer = ( uint8_t * ) &xICMPPacket; + pxNetworkBuffer->xDataLength = sizeof( ICMPPacket_IPv6_t ); + + eReturn = prvProcessICMPMessage_IPv6( pxNetworkBuffer ); + + TEST_ASSERT_EQUAL( eReturn, eReleaseBuffer ); +} + +/** + * @brief This function process ICMP message when message has size + * less than ICMPv6 header size + */ +void test_prvProcessICMPMessage_IPv6_PacketSizeBelowHeaderSize( void ) +{ + NetworkBufferDescriptor_t xNetworkBuffer, * pxNetworkBuffer = &xNetworkBuffer; + ICMPPacket_IPv6_t xICMPPacket; + NetworkEndPoint_t xEndPoint; + eFrameProcessingResult_t eReturn; + + xEndPoint.bits.bIPv6 = pdTRUE_UNSIGNED; + xICMPPacket.xICMPHeaderIPv6.ucTypeOfMessage = ipICMP_DEST_UNREACHABLE_IPv6; + pxNetworkBuffer->pxEndPoint = &xEndPoint; + pxNetworkBuffer->pucEthernetBuffer = ( uint8_t * ) &xICMPPacket; + pxNetworkBuffer->xDataLength = ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + 2U; eReturn = prvProcessICMPMessage_IPv6( pxNetworkBuffer ); TEST_ASSERT_EQUAL( eReturn, eReleaseBuffer ); } + /** * @brief This function process ICMP message when message type is * ipICMP_DEST_UNREACHABLE_IPv6. @@ -1176,6 +1265,7 @@ void test_prvProcessICMPMessage_IPv6_ipICMP_DEST_UNREACHABLE_IPv6( void ) xICMPPacket.xICMPHeaderIPv6.ucTypeOfMessage = ipICMP_DEST_UNREACHABLE_IPv6; pxNetworkBuffer->pxEndPoint = &xEndPoint; pxNetworkBuffer->pucEthernetBuffer = ( uint8_t * ) &xICMPPacket; + pxNetworkBuffer->xDataLength = sizeof( ICMPPacket_IPv6_t ); eReturn = prvProcessICMPMessage_IPv6( pxNetworkBuffer ); @@ -1404,7 +1494,7 @@ void test_prvProcessICMPMessage_IPv6_ipICMP_PING_REPLY_IPv6_eInvalidData( void ) uxICMPSize = ( size_t ) usICMPSize; uxNeededSize = ( size_t ) ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + uxICMPSize ); /* Assign less size than expected */ - pxNetworkBuffer->xDataLength = uxICMPSize; + pxNetworkBuffer->xDataLength = ( size_t ) ( ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + uxICMPSize ); pxNetworkBuffer->pxEndPoint = &xEndPoint; pxNetworkBuffer->pucEthernetBuffer = ( uint8_t * ) &xICMPPacket; @@ -1415,6 +1505,47 @@ void test_prvProcessICMPMessage_IPv6_ipICMP_PING_REPLY_IPv6_eInvalidData( void ) TEST_ASSERT_EQUAL( eReturn, eReleaseBuffer ); } +/** + * @brief This function process ICMP message when message type is + * ipICMP_PING_REPLY_IPv6. + * It handles case where A reply was received to an outgoing + * ping but the payload of the reply was not correct. + */ +void test_prvProcessICMPMessage_IPv6_ipICMP_PING_REPLY_IPv6_IncorrectSize( void ) +{ + NetworkBufferDescriptor_t xNetworkBuffer, * pxNetworkBuffer = &xNetworkBuffer; + ICMPPacket_IPv6_t * pxICMPPacket; + ICMPHeader_IPv6_t * pxICMPHeader_IPv6; + ICMPEcho_IPv6_t * pxICMPEchoHeader; + uint8_t ucBuffer[ sizeof( ICMPPacket_IPv6_t ) + ipBUFFER_PADDING ], * pucByte; + NetworkEndPoint_t xEndPoint; + size_t uxDataLength; + eFrameProcessingResult_t eReturn; + + pxNetworkBuffer->pxEndPoint = &xEndPoint; + pxNetworkBuffer->pucEthernetBuffer = ( uint8_t * ) &ucBuffer; + pxNetworkBuffer->xDataLength = ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + 5; + pxICMPPacket = ( ( ICMPPacket_IPv6_t * ) pxNetworkBuffer->pucEthernetBuffer ); + pxICMPPacket->xICMPHeaderIPv6.ucTypeOfMessage = ipICMP_PING_REPLY_IPv6; + pxICMPPacket->xIPHeader.usPayloadLength = FreeRTOS_ntohs( ipBUFFER_PADDING ); + pxICMPHeader_IPv6 = ( ( ICMPHeader_IPv6_t * ) &( pxICMPPacket->xICMPHeaderIPv6 ) ); + pxICMPEchoHeader = ( ( ICMPEcho_IPv6_t * ) pxICMPHeader_IPv6 ); + xEndPoint.bits.bIPv6 = pdTRUE_UNSIGNED; + + uxDataLength = ipNUMERIC_CAST( size_t, FreeRTOS_ntohs( pxICMPPacket->xIPHeader.usPayloadLength ) ); + uxDataLength = uxDataLength - sizeof( ICMPEcho_IPv6_t ); + + pucByte = ( ucBuffer + sizeof( EthernetHeader_t ) + sizeof( IPHeader_IPv6_t ) + sizeof( ICMPEcho_IPv6_t ) ); + + ( void ) memset( pucByte, ipECHO_DATA_FILL_BYTE, uxDataLength ); + + /* vApplicationPingReplyHook_Expect( eSuccess, pxICMPEchoHeader->usIdentifier ); */ + + eReturn = prvProcessICMPMessage_IPv6( pxNetworkBuffer ); + + TEST_ASSERT_EQUAL( eReturn, eReleaseBuffer ); +} + /** * @brief This function process ICMP message when message type is * ipICMP_PING_REPLY_IPv6. @@ -1434,6 +1565,7 @@ void test_prvProcessICMPMessage_IPv6_ipICMP_PING_REPLY_IPv6_eSuccess( void ) pxNetworkBuffer->pxEndPoint = &xEndPoint; pxNetworkBuffer->pucEthernetBuffer = ( uint8_t * ) &ucBuffer; + pxNetworkBuffer->xDataLength = sizeof( ucBuffer ); pxICMPPacket = ( ( ICMPPacket_IPv6_t * ) pxNetworkBuffer->pucEthernetBuffer ); pxICMPPacket->xICMPHeaderIPv6.ucTypeOfMessage = ipICMP_PING_REPLY_IPv6; pxICMPPacket->xIPHeader.usPayloadLength = FreeRTOS_ntohs( ipBUFFER_PADDING ); @@ -1498,7 +1630,7 @@ void test_prvProcessICMPMessage_IPv6_NeighborSolicitationIncorrectLen( void ) xICMPPacket.xICMPHeaderIPv6.ucTypeOfMessage = ipICMP_NEIGHBOR_SOLICITATION_IPv6; pxNetworkBuffer->pxEndPoint = &xEndPoint; pxNetworkBuffer->pucEthernetBuffer = ( uint8_t * ) &xICMPPacket; - pxNetworkBuffer->xDataLength = 0; + pxNetworkBuffer->xDataLength = ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + 5; FreeRTOS_InterfaceEPInSameSubnet_IPv6_ExpectAnyArgsAndReturn( &xEndPoint ); @@ -1543,6 +1675,32 @@ void test_prvProcessICMPMessage_IPv6_NeighborSolicitation( void ) TEST_ASSERT_EQUAL( xICMPPacket.xIPHeader.ucHopLimit, 255U ); } +/** + * @brief This function process ICMP message when message type is + * ipICMP_NEIGHBOR_ADVERTISEMENT_IPv6. + * It handles case buffer size is less than expected. + */ +void test_prvProcessICMPMessage_IPv6_NeighborAdvertisement0( void ) +{ + NetworkBufferDescriptor_t xNetworkBuffer, * pxNetworkBuffer = &xNetworkBuffer; + ICMPPacket_IPv6_t xICMPPacket; + ICMPHeader_IPv6_t * pxICMPHeader_IPv6 = ( ( ICMPHeader_IPv6_t * ) &( xICMPPacket.xICMPHeaderIPv6 ) ); + NetworkEndPoint_t xEndPoint; + eFrameProcessingResult_t eReturn; + + xEndPoint.bits.bIPv6 = pdTRUE_UNSIGNED; + pxNetworkBuffer->pucEthernetBuffer = ( uint8_t * ) &xICMPPacket; + pxNetworkBuffer->pxEndPoint = &xEndPoint; + pxNetworkBuffer->xDataLength = ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv6_HEADER + 5; + xICMPPacket.xICMPHeaderIPv6.ucTypeOfMessage = ipICMP_NEIGHBOR_ADVERTISEMENT_IPv6; + pxARPWaitingNetworkBuffer = NULL; + + + eReturn = prvProcessICMPMessage_IPv6( pxNetworkBuffer ); + + TEST_ASSERT_EQUAL( eReturn, eReleaseBuffer ); +} + /** * @brief This function process ICMP message when message type is * ipICMP_NEIGHBOR_ADVERTISEMENT_IPv6. @@ -1559,6 +1717,7 @@ void test_prvProcessICMPMessage_IPv6_NeighborAdvertisement1( void ) xEndPoint.bits.bIPv6 = pdTRUE_UNSIGNED; pxNetworkBuffer->pucEthernetBuffer = ( uint8_t * ) &xICMPPacket; pxNetworkBuffer->pxEndPoint = &xEndPoint; + pxNetworkBuffer->xDataLength = sizeof( ICMPPacket_IPv6_t ); xICMPPacket.xICMPHeaderIPv6.ucTypeOfMessage = ipICMP_NEIGHBOR_ADVERTISEMENT_IPv6; pxARPWaitingNetworkBuffer = NULL; @@ -1585,6 +1744,7 @@ void test_prvProcessICMPMessage_IPv6_NeighborAdvertisement2( void ) xEndPoint.bits.bIPv6 = pdTRUE_UNSIGNED; pxNetworkBuffer->pucEthernetBuffer = ( uint8_t * ) &xICMPPacket; pxNetworkBuffer->pxEndPoint = &xEndPoint; + pxNetworkBuffer->xDataLength = sizeof( ICMPPacket_IPv6_t ); xICMPPacket.xICMPHeaderIPv6.ucTypeOfMessage = ipICMP_NEIGHBOR_ADVERTISEMENT_IPv6; pxARPWaitingNetworkBuffer = &xARPWaitingNetworkBuffer; @@ -1651,6 +1811,7 @@ void test_prvProcessICMPMessage_IPv6_NeighborAdvertisement4( void ) xEndPoint.bits.bIPv6 = pdTRUE_UNSIGNED; pxNetworkBuffer->pucEthernetBuffer = ( uint8_t * ) &xICMPPacket; pxNetworkBuffer->pxEndPoint = &xEndPoint; + pxNetworkBuffer->xDataLength = sizeof( ICMPPacket_IPv6_t ); xICMPPacket.xICMPHeaderIPv6.ucTypeOfMessage = ipICMP_NEIGHBOR_ADVERTISEMENT_IPv6; ( void ) memcpy( pxICMPHeader_IPv6->xIPv6Address.ucBytes, xDefaultIPAddress.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); ( void ) memcpy( pxIPHeader->xSourceAddress.ucBytes, xDefaultIPAddress.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); @@ -1691,6 +1852,7 @@ void test_prvProcessICMPMessage_IPv6_NeighborAdvertisement5( void ) xEndPoint.bits.bIPv6 = pdTRUE_UNSIGNED; pxNetworkBuffer->pucEthernetBuffer = ( uint8_t * ) &xICMPPacket; pxNetworkBuffer->pxEndPoint = &xEndPoint; + pxNetworkBuffer->xDataLength = sizeof( ICMPPacket_IPv6_t ); xICMPPacket.xICMPHeaderIPv6.ucTypeOfMessage = ipICMP_NEIGHBOR_ADVERTISEMENT_IPv6; ( void ) memcpy( pxICMPHeader_IPv6->xIPv6Address.ucBytes, xDefaultIPAddress.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); ( void ) memcpy( pxIPHeader->xSourceAddress.ucBytes, xDefaultIPAddress.ucBytes, ipSIZE_OF_IPv6_ADDRESS ); diff --git a/test/unit-test/FreeRTOS_RA/FreeRTOS_RA_utest.c b/test/unit-test/FreeRTOS_RA/FreeRTOS_RA_utest.c index b82ae59832..0ab03c5eda 100644 --- a/test/unit-test/FreeRTOS_RA/FreeRTOS_RA_utest.c +++ b/test/unit-test/FreeRTOS_RA/FreeRTOS_RA_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Routing/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_Routing/FreeRTOSIPConfig.h index 317cc58abc..ac7e6842fc 100644 --- a/test/unit-test/FreeRTOS_Routing/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_Routing/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -111,7 +111,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_Routing/FreeRTOS_Routing_stubs.c b/test/unit-test/FreeRTOS_Routing/FreeRTOS_Routing_stubs.c index cd7b72136e..ed940fff75 100644 --- a/test/unit-test/FreeRTOS_Routing/FreeRTOS_Routing_stubs.c +++ b/test/unit-test/FreeRTOS_Routing/FreeRTOS_Routing_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Routing/FreeRTOS_Routing_utest.c b/test/unit-test/FreeRTOS_Routing/FreeRTOS_Routing_utest.c index 4275506bf8..e80c4969a9 100644 --- a/test/unit-test/FreeRTOS_Routing/FreeRTOS_Routing_utest.c +++ b/test/unit-test/FreeRTOS_Routing/FreeRTOS_Routing_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Routing_ConfigCompatibleWithSingle/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_Routing_ConfigCompatibleWithSingle/FreeRTOSIPConfig.h index 9d550f5d2e..3090474c25 100644 --- a/test/unit-test/FreeRTOS_Routing_ConfigCompatibleWithSingle/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_Routing_ConfigCompatibleWithSingle/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -115,7 +115,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_Routing_ConfigCompatibleWithSingle/FreeRTOS_Routing_ConfigCompatibleWithSingle_utest.c b/test/unit-test/FreeRTOS_Routing_ConfigCompatibleWithSingle/FreeRTOS_Routing_ConfigCompatibleWithSingle_utest.c index 4b3145f32c..5a77654b7c 100644 --- a/test/unit-test/FreeRTOS_Routing_ConfigCompatibleWithSingle/FreeRTOS_Routing_ConfigCompatibleWithSingle_utest.c +++ b/test/unit-test/FreeRTOS_Routing_ConfigCompatibleWithSingle/FreeRTOS_Routing_ConfigCompatibleWithSingle_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Routing_ConfigV4Only/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_Routing_ConfigV4Only/FreeRTOSIPConfig.h index 47838e9c67..4810b27fec 100644 --- a/test/unit-test/FreeRTOS_Routing_ConfigV4Only/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_Routing_ConfigV4Only/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -117,7 +117,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_Routing_ConfigV4Only/FreeRTOS_Routing_ConfigV4Only_utest.c b/test/unit-test/FreeRTOS_Routing_ConfigV4Only/FreeRTOS_Routing_ConfigV4Only_utest.c index ef5c802bbb..69c0ac20c6 100644 --- a/test/unit-test/FreeRTOS_Routing_ConfigV4Only/FreeRTOS_Routing_ConfigV4Only_utest.c +++ b/test/unit-test/FreeRTOS_Routing_ConfigV4Only/FreeRTOS_Routing_ConfigV4Only_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_GenericAPI_utest.c b/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_GenericAPI_utest.c index 7a21b22590..c0020c4cdb 100644 --- a/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_GenericAPI_utest.c +++ b/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_GenericAPI_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_TCP_API_utest.c b/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_TCP_API_utest.c index 5880a45430..ef69b9b9f5 100644 --- a/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_TCP_API_utest.c +++ b/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_TCP_API_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_UDP_API_utest.c b/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_UDP_API_utest.c index d321d49993..db5522e9b5 100644 --- a/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_UDP_API_utest.c +++ b/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_UDP_API_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_privates_utest.c b/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_privates_utest.c index ad2e9754fc..73c7ec3eef 100644 --- a/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_privates_utest.c +++ b/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_privates_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_stubs.c b/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_stubs.c index 2ac4847522..8a30fea9e3 100644 --- a/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_stubs.c +++ b/test/unit-test/FreeRTOS_Sockets/FreeRTOS_Sockets_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets/Sockets_list_macros.h b/test/unit-test/FreeRTOS_Sockets/Sockets_list_macros.h index 14e390baf4..aafc8d775f 100644 --- a/test/unit-test/FreeRTOS_Sockets/Sockets_list_macros.h +++ b/test/unit-test/FreeRTOS_Sockets/Sockets_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets_DiffConfig/FreeRTOSConfig.h b/test/unit-test/FreeRTOS_Sockets_DiffConfig/FreeRTOSConfig.h index acbe4822de..8c002500ad 100644 --- a/test/unit-test/FreeRTOS_Sockets_DiffConfig/FreeRTOSConfig.h +++ b/test/unit-test/FreeRTOS_Sockets_DiffConfig/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/unit-test/FreeRTOS_Sockets_DiffConfig/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_Sockets_DiffConfig/FreeRTOSIPConfig.h index b86e87136d..d1420f749f 100644 --- a/test/unit-test/FreeRTOS_Sockets_DiffConfig/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_Sockets_DiffConfig/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -103,7 +103,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_Sockets_DiffConfig/FreeRTOS_Sockets_DiffConfig_privates_utest.c b/test/unit-test/FreeRTOS_Sockets_DiffConfig/FreeRTOS_Sockets_DiffConfig_privates_utest.c index 0c61574b04..dbd335ca1b 100644 --- a/test/unit-test/FreeRTOS_Sockets_DiffConfig/FreeRTOS_Sockets_DiffConfig_privates_utest.c +++ b/test/unit-test/FreeRTOS_Sockets_DiffConfig/FreeRTOS_Sockets_DiffConfig_privates_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets_DiffConfig/FreeRTOS_Sockets_DiffConfig_stubs.c b/test/unit-test/FreeRTOS_Sockets_DiffConfig/FreeRTOS_Sockets_DiffConfig_stubs.c index 5cb3093084..202e4bf6c7 100644 --- a/test/unit-test/FreeRTOS_Sockets_DiffConfig/FreeRTOS_Sockets_DiffConfig_stubs.c +++ b/test/unit-test/FreeRTOS_Sockets_DiffConfig/FreeRTOS_Sockets_DiffConfig_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets_DiffConfig/Sockets_DiffConfig_list_macros.h b/test/unit-test/FreeRTOS_Sockets_DiffConfig/Sockets_DiffConfig_list_macros.h index c976883918..2dba1e8a52 100644 --- a/test/unit-test/FreeRTOS_Sockets_DiffConfig/Sockets_DiffConfig_list_macros.h +++ b/test/unit-test/FreeRTOS_Sockets_DiffConfig/Sockets_DiffConfig_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOSConfig.h b/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOSConfig.h index b0ba377dbb..9ad010521d 100644 --- a/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOSConfig.h +++ b/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOSIPConfig.h index 0f60a4da27..511dad94dd 100644 --- a/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -105,7 +105,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOS_Sockets_DiffConfig1_GenericAPI_utest.c b/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOS_Sockets_DiffConfig1_GenericAPI_utest.c index 9b43c4c6e1..df4ec4d900 100644 --- a/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOS_Sockets_DiffConfig1_GenericAPI_utest.c +++ b/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOS_Sockets_DiffConfig1_GenericAPI_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOS_Sockets_DiffConfig1_TCP_API_utest.c b/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOS_Sockets_DiffConfig1_TCP_API_utest.c index 03b3687521..75a74da86a 100644 --- a/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOS_Sockets_DiffConfig1_TCP_API_utest.c +++ b/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOS_Sockets_DiffConfig1_TCP_API_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOS_Sockets_DiffConfig1_UDP_API_utest.c b/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOS_Sockets_DiffConfig1_UDP_API_utest.c index af3ee7d8fc..4b4e019d7b 100644 --- a/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOS_Sockets_DiffConfig1_UDP_API_utest.c +++ b/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOS_Sockets_DiffConfig1_UDP_API_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOS_Sockets_DiffConfig1_privates_utest.c b/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOS_Sockets_DiffConfig1_privates_utest.c index 752aef9c01..c5bf91fe15 100644 --- a/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOS_Sockets_DiffConfig1_privates_utest.c +++ b/test/unit-test/FreeRTOS_Sockets_DiffConfig1/FreeRTOS_Sockets_DiffConfig1_privates_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets_DiffConfig1/Sockets_DiffConfig1_list_macros.h b/test/unit-test/FreeRTOS_Sockets_DiffConfig1/Sockets_DiffConfig1_list_macros.h index f05b2c60e7..d6ca791dd3 100644 --- a/test/unit-test/FreeRTOS_Sockets_DiffConfig1/Sockets_DiffConfig1_list_macros.h +++ b/test/unit-test/FreeRTOS_Sockets_DiffConfig1/Sockets_DiffConfig1_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets_IPv6/FreeRTOS_Sockets_IPv6_stubs.c b/test/unit-test/FreeRTOS_Sockets_IPv6/FreeRTOS_Sockets_IPv6_stubs.c index 4f7ffe493c..9b674223a9 100644 --- a/test/unit-test/FreeRTOS_Sockets_IPv6/FreeRTOS_Sockets_IPv6_stubs.c +++ b/test/unit-test/FreeRTOS_Sockets_IPv6/FreeRTOS_Sockets_IPv6_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets_IPv6/FreeRTOS_Sockets_IPv6_utest.c b/test/unit-test/FreeRTOS_Sockets_IPv6/FreeRTOS_Sockets_IPv6_utest.c index 8a3c26f5b6..dc8b4e793d 100644 --- a/test/unit-test/FreeRTOS_Sockets_IPv6/FreeRTOS_Sockets_IPv6_utest.c +++ b/test/unit-test/FreeRTOS_Sockets_IPv6/FreeRTOS_Sockets_IPv6_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Sockets_IPv6/Sockets_IPv6_list_macros.h b/test/unit-test/FreeRTOS_Sockets_IPv6/Sockets_IPv6_list_macros.h index daa0513025..67bbb33ec3 100644 --- a/test/unit-test/FreeRTOS_Sockets_IPv6/Sockets_IPv6_list_macros.h +++ b/test/unit-test/FreeRTOS_Sockets_IPv6/Sockets_IPv6_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Stream_Buffer/FreeRTOS_Stream_Buffer_utest.c b/test/unit-test/FreeRTOS_Stream_Buffer/FreeRTOS_Stream_Buffer_utest.c index b4e6c3d29f..a3bb7a3081 100644 --- a/test/unit-test/FreeRTOS_Stream_Buffer/FreeRTOS_Stream_Buffer_utest.c +++ b/test/unit-test/FreeRTOS_Stream_Buffer/FreeRTOS_Stream_Buffer_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_Stream_Buffer/list_macros.h b/test/unit-test/FreeRTOS_Stream_Buffer/list_macros.h index a4d9ab6401..0106c2fa83 100644 --- a/test/unit-test/FreeRTOS_Stream_Buffer/list_macros.h +++ b/test/unit-test/FreeRTOS_Stream_Buffer/list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_IP/FreeRTOS_TCP_IP_stubs.c b/test/unit-test/FreeRTOS_TCP_IP/FreeRTOS_TCP_IP_stubs.c index e86827d7a4..09a2dcd248 100644 --- a/test/unit-test/FreeRTOS_TCP_IP/FreeRTOS_TCP_IP_stubs.c +++ b/test/unit-test/FreeRTOS_TCP_IP/FreeRTOS_TCP_IP_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_IP/FreeRTOS_TCP_IP_utest.c b/test/unit-test/FreeRTOS_TCP_IP/FreeRTOS_TCP_IP_utest.c index 7eee3348c6..afe4da8af9 100644 --- a/test/unit-test/FreeRTOS_TCP_IP/FreeRTOS_TCP_IP_utest.c +++ b/test/unit-test/FreeRTOS_TCP_IP/FreeRTOS_TCP_IP_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_IP/TCP_IP_list_macros.h b/test/unit-test/FreeRTOS_TCP_IP/TCP_IP_list_macros.h index 0ed60a2064..990ead09f7 100644 --- a/test/unit-test/FreeRTOS_TCP_IP/TCP_IP_list_macros.h +++ b/test/unit-test/FreeRTOS_TCP_IP/TCP_IP_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/FreeRTOSConfig.h b/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/FreeRTOSConfig.h index acbe4822de..8c002500ad 100644 --- a/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/FreeRTOSConfig.h +++ b/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/FreeRTOSConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy of diff --git a/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/FreeRTOSIPConfig.h index dbd4141e2f..6e0a78dd56 100644 --- a/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -103,7 +103,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/FreeRTOS_TCP_IP_DiffConfig_stubs.c b/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/FreeRTOS_TCP_IP_DiffConfig_stubs.c index 2bbc655912..1a0a13e67f 100644 --- a/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/FreeRTOS_TCP_IP_DiffConfig_stubs.c +++ b/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/FreeRTOS_TCP_IP_DiffConfig_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/FreeRTOS_TCP_IP_DiffConfig_utest.c b/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/FreeRTOS_TCP_IP_DiffConfig_utest.c index 04fb0d9069..f3ab829181 100644 --- a/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/FreeRTOS_TCP_IP_DiffConfig_utest.c +++ b/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/FreeRTOS_TCP_IP_DiffConfig_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/TCP_IP_DiffConfig_list_macros.h b/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/TCP_IP_DiffConfig_list_macros.h index 8fe9c43060..ef2b44633e 100644 --- a/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/TCP_IP_DiffConfig_list_macros.h +++ b/test/unit-test/FreeRTOS_TCP_IP_DiffConfig/TCP_IP_DiffConfig_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_Reception/FreeRTOS_TCP_Reception_stubs.c b/test/unit-test/FreeRTOS_TCP_Reception/FreeRTOS_TCP_Reception_stubs.c index d47b7317de..93f8cd8b57 100644 --- a/test/unit-test/FreeRTOS_TCP_Reception/FreeRTOS_TCP_Reception_stubs.c +++ b/test/unit-test/FreeRTOS_TCP_Reception/FreeRTOS_TCP_Reception_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_Reception/FreeRTOS_TCP_Reception_utest.c b/test/unit-test/FreeRTOS_TCP_Reception/FreeRTOS_TCP_Reception_utest.c index c626a522c1..c074c26809 100644 --- a/test/unit-test/FreeRTOS_TCP_Reception/FreeRTOS_TCP_Reception_utest.c +++ b/test/unit-test/FreeRTOS_TCP_Reception/FreeRTOS_TCP_Reception_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -557,6 +557,36 @@ void test_prvSingleStepTCPHeaderOptions_Invalid_Length_WS( void ) TEST_ASSERT_EQUAL( -1, result ); } +/* Test for prvSingleStepTCPHeaderOptions function with valid WSopt value. */ +void test_prvSingleStepTCPHeaderOptions_Valid_WS( void ) +{ + int32_t result; + + /* Setup TCP option for tests */ + pxNetworkBuffer = &xNetworkBuffer; + pxNetworkBuffer->pucEthernetBuffer = ucEthernetBuffer; + size_t uxTCPHeaderOffset = ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv4_HEADER; + + ProtocolHeaders_t * pxProtocolHeader = ( ( ProtocolHeaders_t * ) + &( pxNetworkBuffer->pucEthernetBuffer[ ( size_t ) ipSIZE_OF_ETH_HEADER + ipSIZE_OF_IPv4_HEADER ] ) ); + TCPHeader_t * pxTCPHeader = &( pxProtocolHeader->xTCPHeader ); + + pxTCPHeader->ucTCPOffset = 0x80; + pxNetworkBuffer->xDataLength = 0x50; + /* Input TCP option is tcpTCP_OPT_WSOPT, length 3 bytes, and the value is 6. */ + uint8_t ucTCPOptions[] = { 0x03, 0x03, 0x06 }; + memcpy( ( void * ) pxTCPHeader->ucOptdata, ( void * ) &ucTCPOptions, sizeof( ucTCPOptions ) ); + + result = prvSingleStepTCPHeaderOptions( + pxTCPHeader->ucOptdata, + 3, + pxSocket, + pdTRUE ); + + TEST_ASSERT_EQUAL( 3, result ); + TEST_ASSERT_EQUAL( 6, pxSocket->u.xTCP.ucPeerWinScaleFactor ); +} + static uint32_t ulCalled = 0; static void xLocalFunctionPointer( Socket_t xSocket, size_t xLength ) diff --git a/test/unit-test/FreeRTOS_TCP_State_Handling/FreeRTOS_TCP_State_Handling_stubs.c b/test/unit-test/FreeRTOS_TCP_State_Handling/FreeRTOS_TCP_State_Handling_stubs.c index a7d68bca12..a8b6b6e7e6 100644 --- a/test/unit-test/FreeRTOS_TCP_State_Handling/FreeRTOS_TCP_State_Handling_stubs.c +++ b/test/unit-test/FreeRTOS_TCP_State_Handling/FreeRTOS_TCP_State_Handling_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_State_Handling/FreeRTOS_TCP_State_Handling_utest.c b/test/unit-test/FreeRTOS_TCP_State_Handling/FreeRTOS_TCP_State_Handling_utest.c index b65fb12698..ffdec73b5c 100644 --- a/test/unit-test/FreeRTOS_TCP_State_Handling/FreeRTOS_TCP_State_Handling_utest.c +++ b/test/unit-test/FreeRTOS_TCP_State_Handling/FreeRTOS_TCP_State_Handling_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_State_Handling/TCP_State_Handling_list_macros.h b/test/unit-test/FreeRTOS_TCP_State_Handling/TCP_State_Handling_list_macros.h index 5916a24a20..9aa22a03f1 100644 --- a/test/unit-test/FreeRTOS_TCP_State_Handling/TCP_State_Handling_list_macros.h +++ b/test/unit-test/FreeRTOS_TCP_State_Handling/TCP_State_Handling_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_State_Handling_IPv4/FreeRTOS_TCP_State_Handling_IPv4_utest.c b/test/unit-test/FreeRTOS_TCP_State_Handling_IPv4/FreeRTOS_TCP_State_Handling_IPv4_utest.c index 03d81f9f32..90417cb3e4 100644 --- a/test/unit-test/FreeRTOS_TCP_State_Handling_IPv4/FreeRTOS_TCP_State_Handling_IPv4_utest.c +++ b/test/unit-test/FreeRTOS_TCP_State_Handling_IPv4/FreeRTOS_TCP_State_Handling_IPv4_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_State_Handling_IPv4/TCP_State_Handling_IPv4_list_macros.h b/test/unit-test/FreeRTOS_TCP_State_Handling_IPv4/TCP_State_Handling_IPv4_list_macros.h index 018281ae4b..7ce2b5469b 100644 --- a/test/unit-test/FreeRTOS_TCP_State_Handling_IPv4/TCP_State_Handling_IPv4_list_macros.h +++ b/test/unit-test/FreeRTOS_TCP_State_Handling_IPv4/TCP_State_Handling_IPv4_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_State_Handling_IPv6/FreeRTOS_TCP_State_Handling_IPv6_utest.c b/test/unit-test/FreeRTOS_TCP_State_Handling_IPv6/FreeRTOS_TCP_State_Handling_IPv6_utest.c index 2c7b2499db..5022556b89 100644 --- a/test/unit-test/FreeRTOS_TCP_State_Handling_IPv6/FreeRTOS_TCP_State_Handling_IPv6_utest.c +++ b/test/unit-test/FreeRTOS_TCP_State_Handling_IPv6/FreeRTOS_TCP_State_Handling_IPv6_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_State_Handling_IPv6/TCP_State_Handling_IPv6_list_macros.h b/test/unit-test/FreeRTOS_TCP_State_Handling_IPv6/TCP_State_Handling_IPv6_list_macros.h index 546c128447..c7e38c0303 100644 --- a/test/unit-test/FreeRTOS_TCP_State_Handling_IPv6/TCP_State_Handling_IPv6_list_macros.h +++ b/test/unit-test/FreeRTOS_TCP_State_Handling_IPv6/TCP_State_Handling_IPv6_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_Transmission/FreeRTOS_TCP_Transmission_stubs.c b/test/unit-test/FreeRTOS_TCP_Transmission/FreeRTOS_TCP_Transmission_stubs.c index 14958490f5..a37a7120aa 100644 --- a/test/unit-test/FreeRTOS_TCP_Transmission/FreeRTOS_TCP_Transmission_stubs.c +++ b/test/unit-test/FreeRTOS_TCP_Transmission/FreeRTOS_TCP_Transmission_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_Transmission/FreeRTOS_TCP_Transmission_utest.c b/test/unit-test/FreeRTOS_TCP_Transmission/FreeRTOS_TCP_Transmission_utest.c index 24ceff7369..7228ccf8d7 100644 --- a/test/unit-test/FreeRTOS_TCP_Transmission/FreeRTOS_TCP_Transmission_utest.c +++ b/test/unit-test/FreeRTOS_TCP_Transmission/FreeRTOS_TCP_Transmission_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_Transmission/TCP_Transmission_list_macros.h b/test/unit-test/FreeRTOS_TCP_Transmission/TCP_Transmission_list_macros.h index b59f487a75..3bafe5724c 100644 --- a/test/unit-test/FreeRTOS_TCP_Transmission/TCP_Transmission_list_macros.h +++ b/test/unit-test/FreeRTOS_TCP_Transmission/TCP_Transmission_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_Transmission_IPv6/FreeRTOS_TCP_Transmission_IPv6_utest.c b/test/unit-test/FreeRTOS_TCP_Transmission_IPv6/FreeRTOS_TCP_Transmission_IPv6_utest.c index 243e9a1451..899edbf3bb 100644 --- a/test/unit-test/FreeRTOS_TCP_Transmission_IPv6/FreeRTOS_TCP_Transmission_IPv6_utest.c +++ b/test/unit-test/FreeRTOS_TCP_Transmission_IPv6/FreeRTOS_TCP_Transmission_IPv6_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_Transmission_IPv6/TCP_Transmission_IPv6_list_macros.h b/test/unit-test/FreeRTOS_TCP_Transmission_IPv6/TCP_Transmission_IPv6_list_macros.h index e721f55b85..748f2e8f6b 100644 --- a/test/unit-test/FreeRTOS_TCP_Transmission_IPv6/TCP_Transmission_IPv6_list_macros.h +++ b/test/unit-test/FreeRTOS_TCP_Transmission_IPv6/TCP_Transmission_IPv6_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_Utils/FreeRTOS_TCP_Utils_stubs.c b/test/unit-test/FreeRTOS_TCP_Utils/FreeRTOS_TCP_Utils_stubs.c index 816cb0bf1d..dbe21f4c14 100644 --- a/test/unit-test/FreeRTOS_TCP_Utils/FreeRTOS_TCP_Utils_stubs.c +++ b/test/unit-test/FreeRTOS_TCP_Utils/FreeRTOS_TCP_Utils_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_Utils/FreeRTOS_TCP_Utils_utest.c b/test/unit-test/FreeRTOS_TCP_Utils/FreeRTOS_TCP_Utils_utest.c index d8fb9b61a1..3f13ace64e 100644 --- a/test/unit-test/FreeRTOS_TCP_Utils/FreeRTOS_TCP_Utils_utest.c +++ b/test/unit-test/FreeRTOS_TCP_Utils/FreeRTOS_TCP_Utils_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_Utils/TCP_Utils_list_macros.h b/test/unit-test/FreeRTOS_TCP_Utils/TCP_Utils_list_macros.h index ab0d234c8b..cbdadcb790 100644 --- a/test/unit-test/FreeRTOS_TCP_Utils/TCP_Utils_list_macros.h +++ b/test/unit-test/FreeRTOS_TCP_Utils/TCP_Utils_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_Utils_IPv6/FreeRTOS_TCP_Utils_IPv6_utest.c b/test/unit-test/FreeRTOS_TCP_Utils_IPv6/FreeRTOS_TCP_Utils_IPv6_utest.c index 991bbcbd45..fcbf6312cd 100644 --- a/test/unit-test/FreeRTOS_TCP_Utils_IPv6/FreeRTOS_TCP_Utils_IPv6_utest.c +++ b/test/unit-test/FreeRTOS_TCP_Utils_IPv6/FreeRTOS_TCP_Utils_IPv6_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_WIN/FreeRTOS_TCP_WIN_list_macros.h b/test/unit-test/FreeRTOS_TCP_WIN/FreeRTOS_TCP_WIN_list_macros.h index bbeddc4e56..7b0c795a92 100644 --- a/test/unit-test/FreeRTOS_TCP_WIN/FreeRTOS_TCP_WIN_list_macros.h +++ b/test/unit-test/FreeRTOS_TCP_WIN/FreeRTOS_TCP_WIN_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_TCP_WIN/FreeRTOS_TCP_WIN_utest.c b/test/unit-test/FreeRTOS_TCP_WIN/FreeRTOS_TCP_WIN_utest.c index 365f450201..e47aea97e1 100644 --- a/test/unit-test/FreeRTOS_TCP_WIN/FreeRTOS_TCP_WIN_utest.c +++ b/test/unit-test/FreeRTOS_TCP_WIN/FreeRTOS_TCP_WIN_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT @@ -49,6 +49,10 @@ #include "mock_FreeRTOS_IP.h" #include "mock_task.h" +#define winSRTT_INCREMENT_NEW 2 /**< New increment for the smoothed RTT. */ +#define winSRTT_INCREMENT_CURRENT 6 /**< Current increment for the smoothed RTT. */ +#define winSRTT_DECREMENT_NEW 1 /**< New decrement for the smoothed RTT. */ +#define winSRTT_DECREMENT_CURRENT 7 /**< Current decrement for the smoothed RTT. */ static void initializeList( List_t * const pxList ); @@ -2477,6 +2481,9 @@ void test_ulTCPWindowTxSack( void ) /* --->ulTimerGetAge */ xTaskGetTickCount_ExpectAndReturn( 23 ); /* -->prvTCPWindowTxCheckAck_CalcSRTT */ + FreeRTOS_multiply_int32_ExpectAndReturn( 23, winSRTT_DECREMENT_NEW, 23 * winSRTT_DECREMENT_NEW ); + FreeRTOS_multiply_int32_ExpectAndReturn( xWindow.lSRTT, winSRTT_DECREMENT_CURRENT, xWindow.lSRTT * winSRTT_DECREMENT_CURRENT ); + FreeRTOS_add_int32_ExpectAndReturn( xWindow.lSRTT * winSRTT_DECREMENT_CURRENT, 23 * winSRTT_DECREMENT_NEW, xWindow.lSRTT * winSRTT_DECREMENT_CURRENT + 23 * winSRTT_DECREMENT_NEW ); /* ->prvTCPWindowTxCheckAck */ uxListRemove_ExpectAnyArgsAndReturn( pdTRUE ); /* ulTCPWindowTxSack */ @@ -2521,6 +2528,10 @@ void test_ulTCPWindowTxSack_prvTCPWindowFastRetransmit_1( void ) /* -->prvTCPWindowTxCheckAck_CalcSRTT */ /* --->ulTimerGetAge */ xTaskGetTickCount_ExpectAndReturn( 69 ); + FreeRTOS_multiply_int32_ExpectAndReturn( 69, winSRTT_INCREMENT_NEW, 69 * winSRTT_INCREMENT_NEW ); + FreeRTOS_multiply_int32_ExpectAndReturn( xWindow.lSRTT, winSRTT_INCREMENT_CURRENT, xWindow.lSRTT * winSRTT_INCREMENT_CURRENT ); + FreeRTOS_add_int32_ExpectAndReturn( xWindow.lSRTT * winSRTT_INCREMENT_CURRENT, 69 * winSRTT_INCREMENT_NEW, xWindow.lSRTT * winSRTT_INCREMENT_CURRENT + 69 * winSRTT_INCREMENT_NEW ); + /* <--prvTCPWindowTxCheckAck_CalcSRTT */ /* <-prvTCPWindowTxCheckAck */ /* ulTCPWindowTxSack */ @@ -2701,3 +2712,54 @@ void test_ulTCPWindowTxSack_prvTCPWindowFastRetransmit_4_LoggingLTZero( void ) xTCPWindowLoggingLevel = xBackup; } + + +void test_ulTCPWindowTxSack_prvTCPWindowFastRetransmit_5_ulTimerGetAgeReturnNegative( void ) +{ + uint32_t ulAckCount; + TCPWindow_t xWindow; + uint32_t ulFirst = 33; + uint32_t ulLast = 63; + TCPSegment_t mockSegment; + ListItem_t mockListItem; + + initializeListItem( &mockListItem ); + + xWindow.tx.ulCurrentSequenceNumber = 32; + xWindow.lSRTT = ipconfigTCP_SRTT_MINIMUM_VALUE_MS + 30; + mockSegment.u.bits.bAcked = pdFALSE_UNSIGNED; + mockSegment.lDataLength = 30; + + mockSegment.u.bits.ucTransmitCount = 1U; + mockSegment.ulSequenceNumber = 33; + mockListItem.pxContainer = &xWindow.xPriorityQueue; + mockSegment.xQueueItem = mockListItem; + mockSegment.xQueueItem.pxContainer = NULL; + mockSegment.u.bits.ucDupAckCount = 1U; + + /* ->prvTCPWindowTxCheckAck */ + listGET_NEXT_ExpectAnyArgsAndReturn( ( ListItem_t * ) &mockListItem ); + listGET_LIST_ITEM_OWNER_ExpectAnyArgsAndReturn( &mockSegment ); + listGET_NEXT_ExpectAnyArgsAndReturn( ( ListItem_t * ) &xWindow.xTxSegments.xListEnd ); + /* -->prvTCPWindowTxCheckAck_CalcSRTT */ + /* --->ulTimerGetAge */ + xTaskGetTickCount_ExpectAndReturn( 0xFFFFFFFF ); /* prvTCPWindowTxCheckAck_CalcSRTT replaces negative value with ipINT32_MAX_VALUE. */ + FreeRTOS_multiply_int32_ExpectAndReturn( ipINT32_MAX_VALUE, winSRTT_INCREMENT_NEW, ipINT32_MAX_VALUE ); + FreeRTOS_multiply_int32_ExpectAndReturn( xWindow.lSRTT, winSRTT_INCREMENT_CURRENT, xWindow.lSRTT * winSRTT_INCREMENT_CURRENT ); + FreeRTOS_add_int32_ExpectAndReturn( xWindow.lSRTT * winSRTT_INCREMENT_CURRENT, ipINT32_MAX_VALUE, ipINT32_MAX_VALUE ); + + /* <--prvTCPWindowTxCheckAck_CalcSRTT */ + /* <-prvTCPWindowTxCheckAck */ + /* ulTCPWindowTxSack */ + /* ->prvTCPWindowFastRetransmit */ + listGET_NEXT_ExpectAnyArgsAndReturn( ( ListItem_t * ) &mockListItem ); + listGET_LIST_ITEM_OWNER_ExpectAnyArgsAndReturn( &mockSegment ); + /* exit the loop */ + listGET_NEXT_ExpectAnyArgsAndReturn( ( ListItem_t * ) &xWindow.xWaitQueue.xListEnd ); + + ulAckCount = ulTCPWindowTxSack( &xWindow, + ulFirst, + ulLast ); + TEST_ASSERT_EQUAL( 0, ulAckCount ); + TEST_ASSERT_EQUAL( 268435455, xWindow.lSRTT ); /* Expected result is: ( 0x7FFFFFFF / 8 ). */ +} diff --git a/test/unit-test/FreeRTOS_Tiny_TCP/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_Tiny_TCP/FreeRTOSIPConfig.h index f04738b64d..cfd30c4d32 100644 --- a/test/unit-test/FreeRTOS_Tiny_TCP/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_Tiny_TCP/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -103,7 +103,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_Tiny_TCP/FreeRTOS_Tiny_TCP_utest.c b/test/unit-test/FreeRTOS_Tiny_TCP/FreeRTOS_Tiny_TCP_utest.c index addc3aa41f..d14742fec1 100644 --- a/test/unit-test/FreeRTOS_Tiny_TCP/FreeRTOS_Tiny_TCP_utest.c +++ b/test/unit-test/FreeRTOS_Tiny_TCP/FreeRTOS_Tiny_TCP_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_UDP_IP/FreeRTOS_UDP_IP_list_macros.h b/test/unit-test/FreeRTOS_UDP_IP/FreeRTOS_UDP_IP_list_macros.h index a520eec33c..f3a9f151ec 100644 --- a/test/unit-test/FreeRTOS_UDP_IP/FreeRTOS_UDP_IP_list_macros.h +++ b/test/unit-test/FreeRTOS_UDP_IP/FreeRTOS_UDP_IP_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_UDP_IP/FreeRTOS_UDP_IP_utest.c b/test/unit-test/FreeRTOS_UDP_IP/FreeRTOS_UDP_IP_utest.c index 1a03e51db2..4527182fc0 100644 --- a/test/unit-test/FreeRTOS_UDP_IP/FreeRTOS_UDP_IP_utest.c +++ b/test/unit-test/FreeRTOS_UDP_IP/FreeRTOS_UDP_IP_utest.c @@ -1,5 +1,5 @@ /** - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_UDP_IPv4/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_UDP_IPv4/FreeRTOSIPConfig.h index 6596cb1e0e..ad556c9f7d 100644 --- a/test/unit-test/FreeRTOS_UDP_IPv4/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_UDP_IPv4/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -108,7 +108,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_UDP_IPv4/FreeRTOS_UDP_IPv4_list_macros.h b/test/unit-test/FreeRTOS_UDP_IPv4/FreeRTOS_UDP_IPv4_list_macros.h index eb4901c77a..a0074c5bff 100644 --- a/test/unit-test/FreeRTOS_UDP_IPv4/FreeRTOS_UDP_IPv4_list_macros.h +++ b/test/unit-test/FreeRTOS_UDP_IPv4/FreeRTOS_UDP_IPv4_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_UDP_IPv4/FreeRTOS_UDP_IPv4_stubs.c b/test/unit-test/FreeRTOS_UDP_IPv4/FreeRTOS_UDP_IPv4_stubs.c index 1d6010e669..208314e10f 100644 --- a/test/unit-test/FreeRTOS_UDP_IPv4/FreeRTOS_UDP_IPv4_stubs.c +++ b/test/unit-test/FreeRTOS_UDP_IPv4/FreeRTOS_UDP_IPv4_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_UDP_IPv4/FreeRTOS_UDP_IPv4_utest.c b/test/unit-test/FreeRTOS_UDP_IPv4/FreeRTOS_UDP_IPv4_utest.c index 04e860be84..3897681153 100644 --- a/test/unit-test/FreeRTOS_UDP_IPv4/FreeRTOS_UDP_IPv4_utest.c +++ b/test/unit-test/FreeRTOS_UDP_IPv4/FreeRTOS_UDP_IPv4_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_UDP_IPv6/FreeRTOSIPConfig.h b/test/unit-test/FreeRTOS_UDP_IPv6/FreeRTOSIPConfig.h index f8c258778d..7ac1d7b959 100644 --- a/test/unit-test/FreeRTOS_UDP_IPv6/FreeRTOSIPConfig.h +++ b/test/unit-test/FreeRTOS_UDP_IPv6/FreeRTOSIPConfig.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in @@ -107,7 +107,7 @@ /* If ipconfigUSE_NETWORK_EVENT_HOOK is set to 1 then FreeRTOS+TCP will call the * network event hook at the appropriate times. If ipconfigUSE_NETWORK_EVENT_HOOK * is not set to 1 then the network event hook will never be called. See: - * http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_UDP/API/vApplicationIPNetworkEventHook.shtml. + * https://freertos.org/Documentation/03-Libraries/02-FreeRTOS-plus/02-FreeRTOS-plus-TCP/09-API-reference/57-vApplicationIPNetworkEventHook. */ #define ipconfigUSE_NETWORK_EVENT_HOOK 1 diff --git a/test/unit-test/FreeRTOS_UDP_IPv6/FreeRTOS_UDP_IPv6_list_macros.h b/test/unit-test/FreeRTOS_UDP_IPv6/FreeRTOS_UDP_IPv6_list_macros.h index 0f89f24675..db8debf258 100644 --- a/test/unit-test/FreeRTOS_UDP_IPv6/FreeRTOS_UDP_IPv6_list_macros.h +++ b/test/unit-test/FreeRTOS_UDP_IPv6/FreeRTOS_UDP_IPv6_list_macros.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_UDP_IPv6/FreeRTOS_UDP_IPv6_stubs.c b/test/unit-test/FreeRTOS_UDP_IPv6/FreeRTOS_UDP_IPv6_stubs.c index b7583260f0..4102a3d5c5 100644 --- a/test/unit-test/FreeRTOS_UDP_IPv6/FreeRTOS_UDP_IPv6_stubs.c +++ b/test/unit-test/FreeRTOS_UDP_IPv6/FreeRTOS_UDP_IPv6_stubs.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/test/unit-test/FreeRTOS_UDP_IPv6/FreeRTOS_UDP_IPv6_utest.c b/test/unit-test/FreeRTOS_UDP_IPv6/FreeRTOS_UDP_IPv6_utest.c index ec887f2e3e..d4ba97ded6 100644 --- a/test/unit-test/FreeRTOS_UDP_IPv6/FreeRTOS_UDP_IPv6_utest.c +++ b/test/unit-test/FreeRTOS_UDP_IPv6/FreeRTOS_UDP_IPv6_utest.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/tools/tcp_utilities/NTPDemo.c b/tools/tcp_utilities/NTPDemo.c index 5d8b5d17e3..ff5ccdde97 100644 --- a/tools/tcp_utilities/NTPDemo.c +++ b/tools/tcp_utilities/NTPDemo.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/tools/tcp_utilities/date_and_time.c b/tools/tcp_utilities/date_and_time.c index 2d08557e8a..3813de20fe 100644 --- a/tools/tcp_utilities/date_and_time.c +++ b/tools/tcp_utilities/date_and_time.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/tools/tcp_utilities/http_client_test.c b/tools/tcp_utilities/http_client_test.c index 1cfb00662a..b355ceb9f9 100644 --- a/tools/tcp_utilities/http_client_test.c +++ b/tools/tcp_utilities/http_client_test.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/tools/tcp_utilities/include/NTPDemo.h b/tools/tcp_utilities/include/NTPDemo.h index cb4f13db4b..aa79b3b02b 100644 --- a/tools/tcp_utilities/include/NTPDemo.h +++ b/tools/tcp_utilities/include/NTPDemo.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/tools/tcp_utilities/include/date_and_time.h b/tools/tcp_utilities/include/date_and_time.h index 299afb47b9..66181527d4 100644 --- a/tools/tcp_utilities/include/date_and_time.h +++ b/tools/tcp_utilities/include/date_and_time.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/tools/tcp_utilities/include/http_client_test.h b/tools/tcp_utilities/include/http_client_test.h index db367ceb77..ef6035c629 100644 --- a/tools/tcp_utilities/include/http_client_test.h +++ b/tools/tcp_utilities/include/http_client_test.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/tools/tcp_utilities/include/ntpClient.h b/tools/tcp_utilities/include/ntpClient.h index 437723400e..4ec1da406b 100644 --- a/tools/tcp_utilities/include/ntpClient.h +++ b/tools/tcp_utilities/include/ntpClient.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/tools/tcp_utilities/include/plus_tcp_demo_cli.h b/tools/tcp_utilities/include/plus_tcp_demo_cli.h index 0982532ba9..8f32ab8c44 100644 --- a/tools/tcp_utilities/include/plus_tcp_demo_cli.h +++ b/tools/tcp_utilities/include/plus_tcp_demo_cli.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/tools/tcp_utilities/include/tcp_dump_packets.h b/tools/tcp_utilities/include/tcp_dump_packets.h index 0f58a81dd8..9ae7002e77 100644 --- a/tools/tcp_utilities/include/tcp_dump_packets.h +++ b/tools/tcp_utilities/include/tcp_dump_packets.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/tools/tcp_utilities/include/tcp_mem_stats.h b/tools/tcp_utilities/include/tcp_mem_stats.h index ec0d5bd69b..501e162162 100644 --- a/tools/tcp_utilities/include/tcp_mem_stats.h +++ b/tools/tcp_utilities/include/tcp_mem_stats.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/tools/tcp_utilities/include/tcp_netstat.h b/tools/tcp_utilities/include/tcp_netstat.h index 85171543e7..c51cd9eb9a 100644 --- a/tools/tcp_utilities/include/tcp_netstat.h +++ b/tools/tcp_utilities/include/tcp_netstat.h @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/tools/tcp_utilities/plus_tcp_demo_cli.c b/tools/tcp_utilities/plus_tcp_demo_cli.c index 278ba0e7a3..a8a5f7db91 100644 --- a/tools/tcp_utilities/plus_tcp_demo_cli.c +++ b/tools/tcp_utilities/plus_tcp_demo_cli.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/tools/tcp_utilities/tcp_dump_packets.c b/tools/tcp_utilities/tcp_dump_packets.c index 5819eec647..9aacb8c583 100644 --- a/tools/tcp_utilities/tcp_dump_packets.c +++ b/tools/tcp_utilities/tcp_dump_packets.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/tools/tcp_utilities/tcp_mem_stats.c b/tools/tcp_utilities/tcp_mem_stats.c index 90c921e078..d4a266b066 100644 --- a/tools/tcp_utilities/tcp_mem_stats.c +++ b/tools/tcp_utilities/tcp_mem_stats.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT diff --git a/tools/tcp_utilities/tcp_netstat.c b/tools/tcp_utilities/tcp_netstat.c index c0db5f0008..bf24a2c0bb 100644 --- a/tools/tcp_utilities/tcp_netstat.c +++ b/tools/tcp_utilities/tcp_netstat.c @@ -1,5 +1,5 @@ /* - * FreeRTOS+TCP + * FreeRTOS+TCP V4.2.4 * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * SPDX-License-Identifier: MIT