diff --git a/.github/ISSUE_TEMPLATE/middleware_change_request.yml b/.github/ISSUE_TEMPLATE/middleware_change_request.yml new file mode 100644 index 000000000..e90cc05b0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/middleware_change_request.yml @@ -0,0 +1,81 @@ +name: RDK-E Middleware Change Request +description: Change Request for RDK-E Middleware +title: ": " +labels: ["MW Change Request"] +body: + - type: markdown + attributes: + value: | + Change Request for RDK-E Middleware + + - type: textarea + id: description + attributes: + label: Description + description: Provide a clear and concise description of the feature or bug ticket + placeholder: Describe the changes you are bringing + validations: + required: true + + - type: textarea + id: additional-context + attributes: + label: Additional Context + description: Add any other context, screenshots, or examples about the feature request + placeholder: Any other relevant information + validations: + required: false + + - type: textarea + id: dod-checklist + attributes: + label: Definition of Done (DoD) + description: Mark items with [x] and replace the placeholder text on Details lines with actual information. + value: | + Please complete the following Middleware Layer Integration checklist items to ensure all requirements for changes to be merged. + + **IMPORTANT:** Do NOT provide any proprietary information including: + - Links to internal Automatics/CI builds + - Links to internal Confluence pages + - Any other Comcast/Sky proprietary or confidential information + - Development Build/Setup Details + + Only provide publicly accessible information and links. All proprietary information should be added to JIRA Ticket. + + --- + + - [ ] **Middleware component tags with changelog** + - Details: For instance https://github.com/rdkcentral/hdmicec/blob/1.0.7/CHANGELOG.md. Include all components that need to go together for Builds to work. + + - [ ] **Tested on STBs** + + - [ ] **Tested on TVs** + + - [ ] **Dependent Layer tags (App Layer, OSS, Product, Halif Headers, Vendor Layers)** + - Details: (e.g. https://github.com/rdk-e/meta-image-support/blob/4.1.1/CHANGELOG.md) + + - [ ] **Do Widgets Need Publishing** + - Details: (Provide context if widgets are involved) + + - [ ] **Copilot review for Components** + - Details: (Any comments on the review) + + - [ ] **Component Test** + - Details: Share Testing done as part of components release + + - [ ] **Integration Testing** + - Details: Provide details on Integration testing done within Middleware layer + + - [ ] **E2E Testing** + - Details: Provide details on end to end testing done across all layers + + - [ ] **Performance Testing** + - Details: Provide details on performance testing done + + - [ ] **Static code analysis/Coverity** + - Details: Share Coverity runs for components affected + + - [ ] **Manual Functional Test** + + validations: + required: true \ No newline at end of file diff --git a/.github/workflows/auto_pr_creation_target_repo_caller.yml b/.github/workflows/auto_pr_creation_target_repo_caller.yml index 8d3c010b9..e6c21a327 100644 --- a/.github/workflows/auto_pr_creation_target_repo_caller.yml +++ b/.github/workflows/auto_pr_creation_target_repo_caller.yml @@ -6,6 +6,8 @@ on: branches: - develop - support/dunfell + - 'support/*.*.*' + - 'support/*.*.*.*' jobs: call_auto_pr_workflow: diff --git a/.github/workflows/auto_pr_creation_target_repo_caller_broadband_community.yml b/.github/workflows/auto_pr_creation_target_repo_caller_broadband_community.yml new file mode 100644 index 000000000..9783c7ed7 --- /dev/null +++ b/.github/workflows/auto_pr_creation_target_repo_caller_broadband_community.yml @@ -0,0 +1,20 @@ +name: Auto PR Creation Caller - Broadband Community + +permissions: + contents: read + pull-requests: write + +on: + pull_request: + types: [closed] + branches: + - develop + - support/dunfell + - 'support/*.*.*' + +jobs: + call_auto_pr_workflow: + if: github.event.pull_request.merged == true + uses: rdkcentral/build_tools_workflows/.github/workflows/auto_pr_creation_rdkb_manifest.yml@develop + secrets: + RDKCM_RDKE: ${{ secrets.RDKCM_RDKE }} diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml new file mode 100644 index 000000000..c58b1b0b1 --- /dev/null +++ b/.github/workflows/cla.yml @@ -0,0 +1,20 @@ +name: "CLA" + +permissions: + contents: read + pull-requests: write + actions: write + statuses: write + +on: + issue_comment: + types: [created] + pull_request_target: + types: [opened, closed, synchronize] + +jobs: + CLA-Lite: + name: "Signature" + uses: rdkcentral/cmf-actions/.github/workflows/cla.yml@v1 + secrets: + PERSONAL_ACCESS_TOKEN: ${{ secrets.CLA_ASSISTANT }} diff --git a/.github/workflows/fossid_integration_stateless_diffscan_target_repo.yml b/.github/workflows/fossid_integration_stateless_diffscan_target_repo.yml new file mode 100644 index 000000000..7b8c1cba1 --- /dev/null +++ b/.github/workflows/fossid_integration_stateless_diffscan_target_repo.yml @@ -0,0 +1,19 @@ +name: Fossid Stateless Diff Scan + +on: + pull_request: + types: [opened, synchronize, reopened] + +permissions: + contents: read + pull-requests: read + +jobs: + call-fossid-workflow: + if: ${{ ! github.event.pull_request.head.repo.fork }} + uses: rdkcentral/build_tools_workflows/.github/workflows/fossid_integration_stateless_diffscan.yml@1.0.0 + secrets: + FOSSID_CONTAINER_USERNAME: ${{ secrets.FOSSID_CONTAINER_USERNAME }} + FOSSID_CONTAINER_PASSWORD: ${{ secrets.FOSSID_CONTAINER_PASSWORD }} + FOSSID_HOST_USERNAME: ${{ secrets.FOSSID_HOST_USERNAME }} + FOSSID_HOST_TOKEN: ${{ secrets.FOSSID_HOST_TOKEN }} diff --git a/.github/workflows/validate_pr_title.yml b/.github/workflows/validate_pr_title.yml new file mode 100644 index 000000000..8fca03dd5 --- /dev/null +++ b/.github/workflows/validate_pr_title.yml @@ -0,0 +1,126 @@ +name: PR Title Validation + +on: + pull_request: + branches: [develop] + types: [opened, edited, synchronize] + +jobs: + validate-pr-title: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Validate PR Title + env: + PR_TITLE: ${{ github.event.pull_request.title }} + PR_BODY: ${{ github.event.pull_request.body }} + run: | + # Define valid ticket IDs + VALID_TICKET_IDS=("RDKEMW" "RDKEVD" "IMMUI" "RDK" "RDKMVE" "RDKDEV") + + # Function to validate ticket format and ID(s) + validate_ticket() { + local text="$1" + local field_name="$2" + + echo "Validating $field_name: $text" + + # Check if text matches the pattern -[, -] : + if [[ ! "$text" =~ ^([A-Z0-9]+-[0-9]+)([[:space:]]*,[[:space:]]*[A-Z0-9]+-[0-9]+)*[[:space:]]*:[[:space:]]*.+ ]]; then + echo "ERROR: $field_name format is invalid." + echo "Expected format: -[, -] : " + echo "Example (single): RDKEMW-123 : Fix playbook issue" + echo "Example (multiple): RDKEMW-123, RDKDEV-45 : Fix playbook issue" + echo "" + echo "Valid ticket IDs are:" + printf "%s\n" "${VALID_TICKET_IDS[@]}" + return 1 + fi + + # Extract only the ticket list (before ':') + local ticket_list="${text%%:*}" + + # Extract all ticket IDs from the ticket list + mapfile -t tickets < <(echo "$ticket_list" | grep -oE '[A-Z0-9]+-[0-9]+') + + if [ "${#tickets[@]}" -eq 0 ]; then + echo "ERROR: Could not extract ticket ID(s) from $field_name." + echo "Expected format: -[, -] : " + echo "Example (single): RDKEMW-123 : Fix playbook issue" + echo "Example (multiple): RDKEMW-123, RDKDEV-45 : Fix playbook issue" + echo "" + echo "Valid ticket IDs are:" + printf "%s\n" "${VALID_TICKET_IDS[@]}" + return 1 + fi + + # Check for duplicate ticket IDs + declare -A ticket_count=() + local duplicates=() + for ticket in "${tickets[@]}"; do + if [ -n "${ticket_count[$ticket]}" ]; then + duplicates+=("$ticket") + fi + ticket_count["$ticket"]=1 + done + + if [ "${#duplicates[@]}" -ne 0 ]; then + echo "ERROR: Duplicate ticket ID(s) found in $field_name: ${duplicates[*]}" + echo "Each ticket ID should appear only once." + echo "Example (single): RDKEMW-123 : Fix playbook issue" + echo "Example (multiple): RDKEMW-123, RDKDEV-45 : Fix playbook issue" + return 1 + fi + + # Check if extracted ticket IDs are in the valid list + declare -A invalid_prefix_set=() + declare -A invalid_token_set=() + for ticket in "${tickets[@]}"; do + local ticket_prefix="${ticket%%-*}" + local valid=false + for valid_id in "${VALID_TICKET_IDS[@]}"; do + if [ "$ticket_prefix" = "$valid_id" ]; then + valid=true + break + fi + done + if [ "$valid" = false ]; then + invalid_prefix_set["$ticket_prefix"]=1 + invalid_token_set["$ticket"]=1 + fi + done + + if [ "${#invalid_prefix_set[@]}" -ne 0 ]; then + local invalid_prefixes=("${!invalid_prefix_set[@]}") + local invalid_tokens=("${!invalid_token_set[@]}") + echo "ERROR: Invalid ticket ID(s) in $field_name: ${invalid_prefixes[*]}" + echo "Invalid ticket token(s): ${invalid_tokens[*]}" + echo "" + echo "Valid ticket IDs are:" + printf "%s\n" "${VALID_TICKET_IDS[@]}" + echo "" + echo "Your $field_name should start with one of the above ticket IDs followed by a number." + echo "Example (single): RDKEMW-123 : Fix playbook issue" + echo "Example (multiple): RDKEMW-123, RDKDEV-45 : Fix playbook issue" + return 1 + fi + + echo "$field_name validation passed! Ticket ID(s): ${tickets[*]}" + return 0 + } + + # Validate PR Title (always required) + echo "=== Validating PR Title ===" + if ! validate_ticket "$PR_TITLE" "PR title"; then + echo "" + echo "VALIDATION FAILED: PR title must contain a valid ticket ID from the approved list: ${VALID_TICKET_IDS[@]}" + exit 1 + fi + + echo "" + echo "=== PR Title Validation PASSED ===" + echo "Ticket ID found in PR title." + echo "" + echo "ALL VALIDATIONS PASSED! PR title contains a valid ticket ID." diff --git a/CHANGELOG.md b/CHANGELOG.md index 407bf0934..d4d266ff3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,13 +4,510 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [1.20.0](https://github.com/rdkcentral/meta-rdk/compare/1.19.0...1.20.0) + +- RDKEMW-18000:Enriching RootFS Manifest with source uri [`#970`](https://github.com/rdkcentral/meta-rdk/pull/970) +- RDKEMW-19967: Update rdk.conf for OSS 4.13 Changes [`#985`](https://github.com/rdkcentral/meta-rdk/pull/985) +- RDKEMW-20100: [release/8.6.3.0] Dobby 3.19.1 Release Integration [`#960`](https://github.com/rdkcentral/meta-rdk/pull/960) +- RDKEMW-17757: Update 98-sysctl-mw.conf to bring changes of RDKEMW-16967 [`#811`](https://github.com/rdkcentral/meta-rdk/pull/811) +- Rebase [`#951`](https://github.com/rdkcentral/meta-rdk/pull/951) +- RDKEMW-17573 : Triggering a issue type with more than 35 chars in RRD is leading RDM crash [`#938`](https://github.com/rdkcentral/meta-rdk/pull/938) +- RDKEMW-18818: Configure NTP servers with pool directive [`#924`](https://github.com/rdkcentral/meta-rdk/pull/924) +- RDKEMW-18155: Update Dobby to v3.19.0 [`#928`](https://github.com/rdkcentral/meta-rdk/pull/928) +- RDKEMW-18996 : [develop]Unknown reboot observed while waking the TV from deep sleep [`#931`](https://github.com/rdkcentral/meta-rdk/pull/931) +- RDKEMW-15526 : If all certificates are exhausted, provide the last available certificate. [`#905`](https://github.com/rdkcentral/meta-rdk/pull/905) +- rebase [`#937`](https://github.com/rdkcentral/meta-rdk/pull/937) +- rebase [`#923`](https://github.com/rdkcentral/meta-rdk/pull/923) +- RDKEMW-19238 : [develop] -Device Logs tar file available in logbackup folders. [`#917`](https://github.com/rdkcentral/meta-rdk/pull/917) +- Rebase [`#921`](https://github.com/rdkcentral/meta-rdk/pull/921) +- RDKEMW-18858: Back merge Release branch to develop for 8.6.2.0 Release [`#907`](https://github.com/rdkcentral/meta-rdk/pull/907) +- Rebase [`#913`](https://github.com/rdkcentral/meta-rdk/pull/913) +- RDKEMW-19370 : Integrate RFC 1.2.6 Release for RDKE Devices [`#903`](https://github.com/rdkcentral/meta-rdk/pull/903) +- Rebase [`#909`](https://github.com/rdkcentral/meta-rdk/pull/909) +- RDKEMW-18230: Create vdevice manifest with middleware compontents [`#900`](https://github.com/rdkcentral/meta-rdk/pull/900) +- RDKEMW-19074 : Meminsight csv files fail to get uploaded at configure [`#891`](https://github.com/rdkcentral/meta-rdk/pull/891) +- RDKEMW-18969: Update bluetooth components to latest for gaming change… [`#883`](https://github.com/rdkcentral/meta-rdk/pull/883) +- RDKB-64769, RDKEMW-18610: Update MAC address logic and CPU_TIME for config mode [`#889`](https://github.com/rdkcentral/meta-rdk/pull/889) +- RDKEMW-15246 : Chrony Enhancements [`#878`](https://github.com/rdkcentral/meta-rdk/pull/878) +- Update dcmd.bb [`#869`](https://github.com/rdkcentral/meta-rdk/pull/869) +- RDKEMW-18410: Integrate Telemetry release 1.9.4 [`#863`](https://github.com/rdkcentral/meta-rdk/pull/863) +- RDKEMW-18087 : Build Meminsight in RDKE with latest 1.1.0 changes [`#839`](https://github.com/rdkcentral/meta-rdk/pull/839) +- Rebase [`#875`](https://github.com/rdkcentral/meta-rdk/pull/875) +- RDKEMW-17757: sysctl configurations has to be ported from RDKV to RDKE [`2b6022e`](https://github.com/rdkcentral/meta-rdk/commit/2b6022e315043f8f2afd9ff8086bcfa2cd7804cc) +- RDKEMW-19074 : Meminsight csv files fail to get uploaded at configured intervals [`7b31d41`](https://github.com/rdkcentral/meta-rdk/commit/7b31d41cc1996e4159896a3998db312e1de75476) +- RDKEMW-18969: Update bluetooth components to latest for gaming changes 1.0.11 [`cfc2f2d`](https://github.com/rdkcentral/meta-rdk/commit/cfc2f2d81b840534c5d4da83e2e129ef55f80f32) + +#### [1.19.0](https://github.com/rdkcentral/meta-rdk/compare/1.18.0...1.19.0) + +> 31 May 2026 + +- RDKEMW-17978 : Update rfc_git.bb - change PV from 1.2.4 to 1.2.5 [`#849`](https://github.com/rdkcentral/meta-rdk/pull/849) +- RDKEMW-17479: Update SRCREV for crashupload [`#823`](https://github.com/rdkcentral/meta-rdk/pull/823) +- RDKEMW-15246 : Chrony Enhancements [`#853`](https://github.com/rdkcentral/meta-rdk/pull/853) +- RDKEMW-17764: Update Dobby to v3.18.0 [`#859`](https://github.com/rdkcentral/meta-rdk/pull/859) +- RDKEMW-12824: Update dobby SRCREV [`#858`](https://github.com/rdkcentral/meta-rdk/pull/858) +- RDKEMW-16534: Update dobby SRCREV to set swap unlimited by default [`#857`](https://github.com/rdkcentral/meta-rdk/pull/857) +- RDK-60236 : Remote Debugger Supports UUID Information in Debug Report File [`#852`](https://github.com/rdkcentral/meta-rdk/pull/852) +- RDKEMW-15246 : Chrony Enhancements [`#834`](https://github.com/rdkcentral/meta-rdk/pull/834) +- RDKEMW-16534: make swap limit configurable for containers [`#842`](https://github.com/rdkcentral/meta-rdk/pull/842) +- RDKEMW-15199: Integrate telemetry release 1.9.2 [`#827`](https://github.com/rdkcentral/meta-rdk/pull/827) +- RDKEMW-16701: Update SRCREV for common_utilities [`#770`](https://github.com/rdkcentral/meta-rdk/pull/770) +- Update dcmd.bb [`#816`](https://github.com/rdkcentral/meta-rdk/pull/816) +- RDKEMW-17480: Back merge MW 8.6.1.0 release branch to develop [`#813`](https://github.com/rdkcentral/meta-rdk/pull/813) +- RDKEMW-16851: Integrate telemetry release 1.9.1 [`#804`](https://github.com/rdkcentral/meta-rdk/pull/804) +- RDKEMW-15490- Migrate reboot-checker into reboot-manager and eliminate shell/rbus dependencies [`#794`](https://github.com/rdkcentral/meta-rdk/pull/794) +- Update rfc_git.bb - change PV from 1.2.3 to 1.2.4 [`#792`](https://github.com/rdkcentral/meta-rdk/pull/792) +- Update remotedebugger.bb [`#791`](https://github.com/rdkcentral/meta-rdk/pull/791) +- Adding changelog [`b93cbef`](https://github.com/rdkcentral/meta-rdk/commit/b93cbef4d4328c6e44ac0f1bafd38b6b86b55aba) +- Update dobby.inc [`18c20db`](https://github.com/rdkcentral/meta-rdk/commit/18c20db0d06ef30729e136afc4b970a12e20b183) +- RDKEMW-17764: Update Dobby v3.18.0 [`4e1ad50`](https://github.com/rdkcentral/meta-rdk/commit/4e1ad50c65ff27e358776d3b2d8e0a5fce613af3) + +#### [1.18.0](https://github.com/rdkcentral/meta-rdk/compare/1.17.4...1.18.0) + +> 28 April 2026 + +- RDKEMW-15317: ensure proper shutdown order of ctrlm-main [`#783`](https://github.com/rdkcentral/meta-rdk/pull/783) +- rebase [`#788`](https://github.com/rdkcentral/meta-rdk/pull/788) +- RDKEMW-13941: Update Dobby to v3.17.0 [`#767`](https://github.com/rdkcentral/meta-rdk/pull/767) +- RDKEMW-15490: Relocated script from sysint to reboot-manager [`#755`](https://github.com/rdkcentral/meta-rdk/pull/755) +- RDKEMW-15944: Update bluetooth components to latest for gaming change… [`#687`](https://github.com/rdkcentral/meta-rdk/pull/687) +- RDKEMW-16447: Update vm.dirty_ratio and vm.dirty_background_ratio [`#743`](https://github.com/rdkcentral/meta-rdk/pull/743) +- RDKEMW-15218: Update validate_pr_title.yml [`#648`](https://github.com/rdkcentral/meta-rdk/pull/648) +- RDK-60291 : [Telemetry] Fix and Document Coverity Issues in Telemetry [`#772`](https://github.com/rdkcentral/meta-rdk/pull/772) +- Update commonutilities_git.bb [`#759`](https://github.com/rdkcentral/meta-rdk/pull/759) +- RDKEMW-14022: Update crashupload_git.bb with SRCREV [`#720`](https://github.com/rdkcentral/meta-rdk/pull/720) +- RDKEMW-16430 : RDM - Download on demand rdm packages are downloading when the rfc value is not found [`#769`](https://github.com/rdkcentral/meta-rdk/pull/769) +- RDKEMW-14594: Update Dobby to v3.17.0 [`#751`](https://github.com/rdkcentral/meta-rdk/pull/751) +- RDKEMW-16758: [RDKEMW][Alpaca DE]Box boot up time is extended post reboot - Merge To develop [`#746`](https://github.com/rdkcentral/meta-rdk/pull/746) +- Rebased develop [`#753`](https://github.com/rdkcentral/meta-rdk/pull/753) +- RDKEMW-15567: Backmerge release branch to develop for MW 8.5.3.0 [`#744`](https://github.com/rdkcentral/meta-rdk/pull/744) +- RDKEMW-14720 : Unify Reboot Manager Codebase with >90% L1/L2 Coverage [`#708`](https://github.com/rdkcentral/meta-rdk/pull/708) +- RDKEMW-14646: Add meminsight and processmoniter tool [`#636`](https://github.com/rdkcentral/meta-rdk/pull/636) +- RDKEMW-15263: command injection via /lib/rdk/getRFC.sh [`#738`](https://github.com/rdkcentral/meta-rdk/pull/738) +- RDKEMW-14121 : Added Mediatek Platform support in Memcapture Code Base [`#626`](https://github.com/rdkcentral/meta-rdk/pull/626) +- RDKEMW-16478:Middleware Builds fail to upload IPKS [`#730`](https://github.com/rdkcentral/meta-rdk/pull/730) +- RDKEMW-12450 : Move platform components to github [`#686`](https://github.com/rdkcentral/meta-rdk/pull/686) +- RDKEMW-16410: Enable rm_work in middleware [`#718`](https://github.com/rdkcentral/meta-rdk/pull/718) +- RDK-61009: Port Log Backup Scripts to Source code [`#712`](https://github.com/rdkcentral/meta-rdk/pull/712) +- RDK-60558 : RDK Coverity Defect Resolution for RDM Agent [`#710`](https://github.com/rdkcentral/meta-rdk/pull/710) +- RDKEMW-15233: Integrate Telemetry Release 1.8.5 [`#692`](https://github.com/rdkcentral/meta-rdk/pull/692) +- Update rfc_git.bb [`#570`](https://github.com/rdkcentral/meta-rdk/pull/570) +- Rebased develop [`#691`](https://github.com/rdkcentral/meta-rdk/pull/691) +- RDKEMW-15263: command injection via /lib/rdk/getRFC.sh [`#689`](https://github.com/rdkcentral/meta-rdk/pull/689) +- RDK-60307 [RRD] RDK Coverity Defect Resolution for Device Management [`#585`](https://github.com/rdkcentral/meta-rdk/pull/585) +- RDKEMW-15467 : do_populate_sdk task fails for MW test image with reboot-manager-dev [`#662`](https://github.com/rdkcentral/meta-rdk/pull/662) +- Rebased develop [`#682`](https://github.com/rdkcentral/meta-rdk/pull/682) +- RDKEMW-15664 : handle deepsleep in chrony [`#671`](https://github.com/rdkcentral/meta-rdk/pull/671) +- RDKEMW-15263: command injection via /lib/rdk/getRFC.sh [`#672`](https://github.com/rdkcentral/meta-rdk/pull/672) +- RDKEMW-15233: Integrate 0.0.1 release for reboot-manager [`#659`](https://github.com/rdkcentral/meta-rdk/pull/659) +- RDKEMW-14726 : Implement Chrony runtime selection for Time Sync (#632) [`#649`](https://github.com/rdkcentral/meta-rdk/pull/649) +- Rebased develop [`#642`](https://github.com/rdkcentral/meta-rdk/pull/642) +- rebase develop [`#631`](https://github.com/rdkcentral/meta-rdk/pull/631) +- Adding changelog [`5b310d5`](https://github.com/rdkcentral/meta-rdk/commit/5b310d55740ec11501df042a5cb280e1b5ac5a1e) +- update to official release tag [`99ab48b`](https://github.com/rdkcentral/meta-rdk/commit/99ab48bc4c1c1fe13a9e5ef5bb673851d7d68c16) +- RDKEMW-15317: [meta-rdk TEST] ensure proper shutdown order of ctrlm-main [`ac6ee43`](https://github.com/rdkcentral/meta-rdk/commit/ac6ee43d93d10574be8de0b41e5dc3dbcafa2bb5) + +#### [1.17.4](https://github.com/rdkcentral/meta-rdk/compare/1.17.3...1.17.4) + +> 11 June 2026 + +- RDKEMW-19237 : [support/8.5] -Device Logs tar file available in logbackup folders. [`#912`](https://github.com/rdkcentral/meta-rdk/pull/912) +- RDKEMW-19218 : [8.5]Add missing Logs in Log Upload C module Logs [`#895`](https://github.com/rdkcentral/meta-rdk/pull/895) +- RDKEMW-18351 : [8.5.3]Log upload success logs not observed after scheduled reboot [`#848`](https://github.com/rdkcentral/meta-rdk/pull/848) +- Adding changelog [`603d3b1`](https://github.com/rdkcentral/meta-rdk/commit/603d3b19744d9e153b5bea9fbfab50c592894763) +- Update SRCREV and PV for dcmd recipe [`83c67d4`](https://github.com/rdkcentral/meta-rdk/commit/83c67d4b9f0c3ba8ca84d0f550beee2a7f93ab2d) + +#### [1.17.3](https://github.com/rdkcentral/meta-rdk/compare/1.17.2...1.17.3) + +> 21 May 2026 + +- RDKEMW-17756: Update all common kernel settings for RTK, RTK-ES1, BCO… [`#846`](https://github.com/rdkcentral/meta-rdk/pull/846) +- RDKEMW-17756: Update all common kernel settings for RTK, RTK-ES1, BCOM-XIONE, AML-EU platforms in parity with RDKV for RDKE8.5 [`d7edf08`](https://github.com/rdkcentral/meta-rdk/commit/d7edf08e8ee54a19c28b623a9e12bf51892d0a4d) +- Adding changelog [`c1029fe`](https://github.com/rdkcentral/meta-rdk/commit/c1029fe881cdca1cfbf5c6f56bc6955550bc016d) +- RDKEMW-17756: Update 98-sysctl-mw.conf based on review comments [`3bdcf69`](https://github.com/rdkcentral/meta-rdk/commit/3bdcf6947c01dcf4d9bdddfe7993634b5fe635b3) + +#### [1.17.2](https://github.com/rdkcentral/meta-rdk/compare/1.17.1...1.17.2) + +> 11 May 2026 + +- RDKEMW-17725: [support/8.5] [ALPACA IT] Device not Going to Deepsleep. [`#815`](https://github.com/rdkcentral/meta-rdk/pull/815) +- Adding changelog [`9983439`](https://github.com/rdkcentral/meta-rdk/commit/9983439e7c776885c7b2372cbe47a13eb55386aa) + +#### [1.17.1](https://github.com/rdkcentral/meta-rdk/compare/1.17.0...1.17.1) + +> 20 April 2026 + +- RDKEMW-15949, RDKEMW-17075:Update bluetooth components to latest v1.0.10 [`#775`](https://github.com/rdkcentral/meta-rdk/pull/775) +- RDKEMW-16183 : Add 500MB as extra swap for app container [`#758`](https://github.com/rdkcentral/meta-rdk/pull/758) +- RDKEMW-15927: [Alpaca DE]Box boot up time is extended post reboot - Merge To 8.5 [`#747`](https://github.com/rdkcentral/meta-rdk/pull/747) +- RDKEMW-16448: Update vm.dirty_ratio and vm.dirty_background_ratio [`#749`](https://github.com/rdkcentral/meta-rdk/pull/749) +- Adding changelog [`c26de3d`](https://github.com/rdkcentral/meta-rdk/commit/c26de3d923aa29be49a5eca0ffb75db4fc430b07) + +#### [1.17.0](https://github.com/rdkcentral/meta-rdk/compare/1.16.0...1.17.0) + +> 3 April 2026 + +- RDKEMW-15815: [8.5.3.0] stop ctrlm-main service before bluez for graceful reboot [`#679`](https://github.com/rdkcentral/meta-rdk/pull/679) +- RDKEMW-15233: Integrate Telemetry Release 1.8.5 [`#694`](https://github.com/rdkcentral/meta-rdk/pull/694) +- RDKEMW-15233: Integrate 0.0.1 release for reboot-manager [`#693`](https://github.com/rdkcentral/meta-rdk/pull/693) +- RDKEMW-15783: Handle deepsleep case with chronyd [`#677`](https://github.com/rdkcentral/meta-rdk/pull/677) +- RDKEMW-15176: added dobby patch for increased swap limit for containers [`#660`](https://github.com/rdkcentral/meta-rdk/pull/660) +- RDKEMW-15178: Update Dobby to v3.16.2 [`#650`](https://github.com/rdkcentral/meta-rdk/pull/650) +- RDKEMW-14752: Update bluetooth components to latest 1.0.9 [`#623`](https://github.com/rdkcentral/meta-rdk/pull/623) +- RDKEMW-15175: Update Dobby to v3.16.2 [`#640`](https://github.com/rdkcentral/meta-rdk/pull/640) +- RDKEMW-14726 : Implement Chrony runtime selection for Time Sync [`#632`](https://github.com/rdkcentral/meta-rdk/pull/632) +- Update commonutilities_git.bb [`#634`](https://github.com/rdkcentral/meta-rdk/pull/634) +- RDKEMW-14005: Fix Coverity issues [`#571`](https://github.com/rdkcentral/meta-rdk/pull/571) +- RDK-60621 : Data Collection Through T2 Events For Components Logging To btmgrlog.txt [`#621`](https://github.com/rdkcentral/meta-rdk/pull/621) +- RDK-60312: Telemetry Release 1.8.1 [`#624`](https://github.com/rdkcentral/meta-rdk/pull/624) +- RDK-60607: Coverity fix for rtMessage [`#597`](https://github.com/rdkcentral/meta-rdk/pull/597) +- CPESP-7964 : Tch Xi6 initial bringup [`#467`](https://github.com/rdkcentral/meta-rdk/pull/467) +- RDK-59974 : Migrate rebootNow script to C - Implementation [`#564`](https://github.com/rdkcentral/meta-rdk/pull/564) +- RDKEMW-14025: Back-merge Release Branch to 'develop' for MW 8.5.2.0 Monthly Release [`#611`](https://github.com/rdkcentral/meta-rdk/pull/611) +- RDKEMW-14300 : Pull RDKLogger latest to get all features of v3.1.0 [`#601`](https://github.com/rdkcentral/meta-rdk/pull/601) +- RDKEMW-4941 : bcm bb/bbappend analysis for bluetooth-mgr [`#566`](https://github.com/rdkcentral/meta-rdk/pull/566) +- RDKEMW-13417 : Update SRCREV for crashupload v2.0.1 [`#529`](https://github.com/rdkcentral/meta-rdk/pull/529) +- RDKEMW-14095: Extend the allowed JIRA buckets list in commit messages [`#572`](https://github.com/rdkcentral/meta-rdk/pull/572) +- Adding changelog [`2a49dfa`](https://github.com/rdkcentral/meta-rdk/commit/2a49dfac017d7bcbcdaadb1b7f73c27c2bc74d06) +- Update chrony-sync-notify.sh [`154ecae`](https://github.com/rdkcentral/meta-rdk/commit/154ecaeeeec841835d44f33f37c3e5e3b24f364b) +- RDKEMW-15175: Fix copilot comments [`71ac0e1`](https://github.com/rdkcentral/meta-rdk/commit/71ac0e17cec73a5060d1a7a07086d84ef6de3dd9) + +#### [1.16.0](https://github.com/rdkcentral/meta-rdk/compare/1.15.0...1.16.0) + +> 25 February 2026 + +- RDKEMW-13682: Update memcr rev with FD close fix [`#558`](https://github.com/rdkcentral/meta-rdk/pull/558) +- RDKEMW-13838: Dobby 3.16.1 Release Integration [`#557`](https://github.com/rdkcentral/meta-rdk/pull/557) +- Update dcmd.bb [`#546`](https://github.com/rdkcentral/meta-rdk/pull/546) +- RDK-59919 : [RDKE] Port Ops Support Upload Scripts to Source code [`#541`](https://github.com/rdkcentral/meta-rdk/pull/541) +- RDK-60065:Implement Firmware Download & Install API for Event-Driven Firmware Updates [`#512`](https://github.com/rdkcentral/meta-rdk/pull/512) +- Update rfc_git.bb [`#534`](https://github.com/rdkcentral/meta-rdk/pull/534) +- RDK-60312: Telemetry Release 1.8.0 [`#533`](https://github.com/rdkcentral/meta-rdk/pull/533) +- RDK-59955: Migrate Upload Dumps Functionality from Shell Script to C [develop] [`#517`](https://github.com/rdkcentral/meta-rdk/pull/517) +- RDKEMW-12842: Include meta-clang needed for secclient-rs [`#494`](https://github.com/rdkcentral/meta-rdk/pull/494) +- RDK-60607: Upgrade RBUS to 2.11.0 [`#513`](https://github.com/rdkcentral/meta-rdk/pull/513) +- RDK-57502 : Migrate Operation Support Log Upload Related Scripts To C [`#519`](https://github.com/rdkcentral/meta-rdk/pull/519) +- RDKEMW-12613: Backmerge release branch to 'develop' for MW 8.5.1.0 Release [`#500`](https://github.com/rdkcentral/meta-rdk/pull/500) +- RDK-57502 : Migrate Operation Support Log Upload Related Scripts To C [`#481`](https://github.com/rdkcentral/meta-rdk/pull/481) +- Rebase [`#501`](https://github.com/rdkcentral/meta-rdk/pull/501) +- Revert "RDKEMW-12842: Include meta-clang needed for secclient-rs" [`#493`](https://github.com/rdkcentral/meta-rdk/pull/493) +- RDKEMW-12842: Include meta-clang needed for secclient-rs [`#424`](https://github.com/rdkcentral/meta-rdk/pull/424) +- RDKEMW-12659:Update bluetooth components to latest for gaming changes 1.0.8 [`#475`](https://github.com/rdkcentral/meta-rdk/pull/475) +- RDKEMW-12201: Telemery 1.7.4 version integration [`#470`](https://github.com/rdkcentral/meta-rdk/pull/470) +- RDK-60393: Memcapture as a downloadable app [`#465`](https://github.com/rdkcentral/meta-rdk/pull/465) +- Adding changelog [`2df7308`](https://github.com/rdkcentral/meta-rdk/commit/2df7308a8f9296227afd6a64ea92fa9070fe5461) +- RDKEMW-13838: Dobby 3.16.1 release [`57bf982`](https://github.com/rdkcentral/meta-rdk/commit/57bf9826c1b05d9421bfb557a8d3a8de34ca3644) +- Update dobby.inc [`35a25dd`](https://github.com/rdkcentral/meta-rdk/commit/35a25dd77ef014cabdcbfaa11f00440c6888571e) + +#### [1.15.0](https://github.com/rdkcentral/meta-rdk/compare/1.14.5...1.15.0) + +> 28 January 2026 + +- RDKEMW-10792: Use syslog supported version of RDKLogger [`#462`](https://github.com/rdkcentral/meta-rdk/pull/462) +- Update rfc_git.bb [`#461`](https://github.com/rdkcentral/meta-rdk/pull/461) +- RDK-60393 : Add CertSelector Flag for RDKE [`#453`](https://github.com/rdkcentral/meta-rdk/pull/453) +- RDKEMW-11621: Backmerge Release branch into Develop for MW 8.4.4.0 Release [`#443`](https://github.com/rdkcentral/meta-rdk/pull/443) +- RDKEMW-11971: Update bluetooth components to latest for gaming changes [`#433`](https://github.com/rdkcentral/meta-rdk/pull/433) +- RDK-60130: Enable RDM Support on RDKE Builds [`#430`](https://github.com/rdkcentral/meta-rdk/pull/430) +- Update rfc_git.bb (#446) [`#449`](https://github.com/rdkcentral/meta-rdk/pull/449) +- Update rfc_git.bb [`#446`](https://github.com/rdkcentral/meta-rdk/pull/446) +- rebase [`#441`](https://github.com/rdkcentral/meta-rdk/pull/441) +- RDKEMW-11615 : RFC Release 1.2.0 Updates to MW [`#440`](https://github.com/rdkcentral/meta-rdk/pull/440) +- rebase [`#438`](https://github.com/rdkcentral/meta-rdk/pull/438) +- RDKEMW-11201: Include meta-lts-mixin layer [`#431`](https://github.com/rdkcentral/meta-rdk/pull/431) +- RDKEMW-10656: Move SRCREV, PV, PR to individual recipes [`#400`](https://github.com/rdkcentral/meta-rdk/pull/400) +- Adding changelog [`85e423f`](https://github.com/rdkcentral/meta-rdk/commit/85e423f171c16ac5785c6de9df03a9dd62256655) +- Update rdmagent.bb [`f302c98`](https://github.com/rdkcentral/meta-rdk/commit/f302c98b36c2a5e41b98fbbd800df9f2a11b1367) +- Update memcapture_git.bb [`668d81b`](https://github.com/rdkcentral/meta-rdk/commit/668d81bf19812679c7df7307491c25ad5a26cc22) + +#### [1.14.5](https://github.com/rdkcentral/meta-rdk/compare/1.14.4...1.14.5) + +> 5 May 2026 + +- RDKEMW-17755: Update RTK specific kernel settings with defaults and o… [`#820`](https://github.com/rdkcentral/meta-rdk/pull/820) +- RDKEMW-17755: Update 98-sysctl-mw.conf for configurations [`#808`](https://github.com/rdkcentral/meta-rdk/pull/808) +- Adding changelog [`1cdd471`](https://github.com/rdkcentral/meta-rdk/commit/1cdd4716ae5821ab711779c06f28cbd5ce512537) +- RDKEMW-17755: Update all common kernel settings for RTK, RTK-ES1, BCOM-XIONE in parity with RDKV [`74eff37`](https://github.com/rdkcentral/meta-rdk/commit/74eff377668b236b146816c3abda4607b2a6969e) +- RDKEMW-17755: Update RTK specific kernel settings with defaults and over-ride settings. [`0d0aa15`](https://github.com/rdkcentral/meta-rdk/commit/0d0aa15592939267063d8b23fbde6137b7a7be02) + +#### [1.14.4](https://github.com/rdkcentral/meta-rdk/compare/1.14.3...1.14.4) + +> 7 April 2026 + +- RDKEMW-16167: Update vm.dirty_ratio and vm.dirty_background_ratio [`#728`](https://github.com/rdkcentral/meta-rdk/pull/728) +- RDKEMW-16179: Dobby patch to remove swap limit from containers [`#707`](https://github.com/rdkcentral/meta-rdk/pull/707) +- RDKEMW-15166: [support/8.4.4.0] Dobby Patch release v3.16.2 [`#646`](https://github.com/rdkcentral/meta-rdk/pull/646) +- Revert "RDKEMW-16167: Update vm.dirty_ratio and vm.dirty_background_ratio" [`#704`](https://github.com/rdkcentral/meta-rdk/pull/704) +- RDKEMW-16167: Update vm.dirty_ratio and vm.dirty_background_ratio [`#703`](https://github.com/rdkcentral/meta-rdk/pull/703) +- Adding changelog [`fa7afbe`](https://github.com/rdkcentral/meta-rdk/commit/fa7afbe3916ca738bf7dba6fc0d8963b9ce62fff) + +#### [1.14.3](https://github.com/rdkcentral/meta-rdk/compare/1.14.2...1.14.3) + +> 13 March 2026 + +- RDKEMW-15200 : Post Activation telemetry report upload failed with curl 58 SSL Errors [`#639`](https://github.com/rdkcentral/meta-rdk/pull/639) +- RDKEMW-15176: added dobby patch for increased swap limit for containers [support/8.4.4.0] [`#637`](https://github.com/rdkcentral/meta-rdk/pull/637) +- RDKEMW-15176: added dobby patch for increased swap limit for containers [`8f505af`](https://github.com/rdkcentral/meta-rdk/commit/8f505afede2267d08935e92997d0305666b19017) +- Adding changelog [`16a13a8`](https://github.com/rdkcentral/meta-rdk/commit/16a13a86c0970c7cc6dd7e7c842d59cfbc46b5c1) +- converted swap limit extra bytes to a constant [`6062ba0`](https://github.com/rdkcentral/meta-rdk/commit/6062ba0b3a931f35795a1b897d8cde93f50e7ff5) + +#### [1.14.2](https://github.com/rdkcentral/meta-rdk/compare/1.14.1...1.14.2) + +> 16 February 2026 + +- RDKEMW-13837, RDKEMW-13672, RDKEMW-10995: Update Dobby to v3.16.1 [`#544`](https://github.com/rdkcentral/meta-rdk/pull/544) +- RDKEMW-13681: Update memcr rev with FD close fix [`#537`](https://github.com/rdkcentral/meta-rdk/pull/537) +- Adding changelog [`28c80b6`](https://github.com/rdkcentral/meta-rdk/commit/28c80b60a3d7b3a75e6c480fe4783d4b69b8f487) +- RDKEMW-13837: Update Dobby to v3.16.1 [`54fe1e2`](https://github.com/rdkcentral/meta-rdk/commit/54fe1e2f2bb6db9bca1634fc4ceb968424c87af3) +- Added new support branch format [`07f2b45`](https://github.com/rdkcentral/meta-rdk/commit/07f2b454b9eef66e4e5e4799e7ab4b19c041cbb0) + +#### [1.14.1](https://github.com/rdkcentral/meta-rdk/compare/1.14.0...1.14.1) + +> 13 January 2026 + +- RDKEMW-12064: Default all products bt autoconnect feature to on in RDKE [`#439`](https://github.com/rdkcentral/meta-rdk/pull/439) +- Adding changelog [`ec482c5`](https://github.com/rdkcentral/meta-rdk/commit/ec482c587972ec49d5d6c57439072b1bd297efcb) + +#### [1.14.0](https://github.com/rdkcentral/meta-rdk/compare/1.13.0...1.14.0) + +> 22 December 2025 + +- RDKEMW-11201: Include meta-lts-mixin layer [`#422`](https://github.com/rdkcentral/meta-rdk/pull/422) +- RDKEMW-9060: Sync with RDKV to support new game controllers [`#311`](https://github.com/rdkcentral/meta-rdk/pull/311) +- RDKEMW-11201:Integrating VL and OSS into develop for X3 and A4k [`#416`](https://github.com/rdkcentral/meta-rdk/pull/416) +- RDKEMW-9298:Log files update [ Don't add merge ] [`#375`](https://github.com/rdkcentral/meta-rdk/pull/375) +- RDKEMW-9065: Update and rename validate_pr_desc.yml to validate_pr_title.yml [`#408`](https://github.com/rdkcentral/meta-rdk/pull/408) +- RDKEMW-10396: Update RDKE Dobby recipe with v3.16 release [`#336`](https://github.com/rdkcentral/meta-rdk/pull/336) +- Update middleware change request template with improved checklist items [`#411`](https://github.com/rdkcentral/meta-rdk/pull/411) +- Rebase [`#407`](https://github.com/rdkcentral/meta-rdk/pull/407) +- CMFSUPPORT-3454 : Add auto_pr_creation github workflow for broadband community manifests [`#395`](https://github.com/rdkcentral/meta-rdk/pull/395) +- RDKEMW-10596: Backmerge Release branch to develop for MW 8.4.2.0 Q4 Release [`#402`](https://github.com/rdkcentral/meta-rdk/pull/402) +- RDKEMW-10417 : Move common_utils recipe to meta-rdk layer [`#340`](https://github.com/rdkcentral/meta-rdk/pull/340) +- RDKEMW-10710 : Move breakpad recipe to meta-rdk layer [`#352`](https://github.com/rdkcentral/meta-rdk/pull/352) +- RDKEMW-10214 : Integrate CertSelector API for RDKE [`#338`](https://github.com/rdkcentral/meta-rdk/pull/338) +- Fix: Update middleware change request template with textarea-based DoD checklist [`#387`](https://github.com/rdkcentral/meta-rdk/pull/387) +- Fix: Update middleware change request template labels and add DoD guidance [`#385`](https://github.com/rdkcentral/meta-rdk/pull/385) +- Fix: Update middleware change request template labels to pass GitHub validation [`#383`](https://github.com/rdkcentral/meta-rdk/pull/383) +- Simplify DoD checklist in middleware change request template [`#380`](https://github.com/rdkcentral/meta-rdk/pull/380) +- Simplify DoD checklist in middleware change request template [`#379`](https://github.com/rdkcentral/meta-rdk/pull/379) +- Simplify status fields in middleware change request template [`#377`](https://github.com/rdkcentral/meta-rdk/pull/377) +- Simplify status dropdown in middleware change request template [`#374`](https://github.com/rdkcentral/meta-rdk/pull/374) +- Simplify middleware status dropdown [`#368`](https://github.com/rdkcentral/meta-rdk/pull/368) +- Add GitHub Issue Template with Definition of Done Checklist [`#363`](https://github.com/rdkcentral/meta-rdk/pull/363) +- RDK-59966 : Bring the required changes to build RDKB stack [`#331`](https://github.com/rdkcentral/meta-rdk/pull/331) +- RDKEMW-10241:Add new meta-layer for appmanagers (#341) [`#358`](https://github.com/rdkcentral/meta-rdk/pull/358) +- RDKEMW-10241:Add new meta-layer for appmanagers [`#341`](https://github.com/rdkcentral/meta-rdk/pull/341) +- CMFSUPPORT-3454 Banana Pi changes required for meta-rdk [`#339`](https://github.com/rdkcentral/meta-rdk/pull/339) +- Rebase [`#335`](https://github.com/rdkcentral/meta-rdk/pull/335) +- RDK-59966:Bring the required MW components fr RDKB stack [`9e6d2db`](https://github.com/rdkcentral/meta-rdk/commit/9e6d2db63deeb16b8b675aaf98f6476d7b7f56ad) +- RDKOSS-443:Bring the required changes to build RDKB stack [`5736273`](https://github.com/rdkcentral/meta-rdk/commit/573627391a3c1335e079311e2591bbf886cd2f53) +- CMFSUPPORT-3454 Add dsm recipe [`0c9cd64`](https://github.com/rdkcentral/meta-rdk/commit/0c9cd640f8246e569fc24264656389f3a8056485) + +#### [1.13.0](https://github.com/rdkcentral/meta-rdk/compare/1.12.0...1.13.0) + +> 28 November 2025 + +- RDKEMW-8825 : App Not Killed by Dobby OOM at Max Memory Limit [`#285`](https://github.com/rdkcentral/meta-rdk/pull/285) +- RDKEMW-6710 : Rdklogger L1 code coverage addition [`#326`](https://github.com/rdkcentral/meta-rdk/pull/326) +- RDKEMW-9859 : Cleanup of xre-receiver code [`#324`](https://github.com/rdkcentral/meta-rdk/pull/324) +- RDKEMW-9849: Move memcapture to middleware layer [`#321`](https://github.com/rdkcentral/meta-rdk/pull/321) +- RDKEMW-9590: Backmerge Release Branch to 'develop' for MW 8.4.1.0 [`#316`](https://github.com/rdkcentral/meta-rdk/pull/316) +- RDKEMW-9590: Rebase branch with 'develop' [`#318`](https://github.com/rdkcentral/meta-rdk/pull/318) +- RDKEMW-9590: Rebase branch with 'develop' [`#317`](https://github.com/rdkcentral/meta-rdk/pull/317) +- RDKEMW-6715: [RDKE]AUTOREV in Middleware layer components [`#262`](https://github.com/rdkcentral/meta-rdk/pull/262) +- RDKE-900: Default to MTLS connection on all endpoints [`#276`](https://github.com/rdkcentral/meta-rdk/pull/276) +- RDKEMW-3485: Add validate_pr_desc.ym; [`#301`](https://github.com/rdkcentral/meta-rdk/pull/301) +- Revert "RDKEMW-8528: Remove logMilestone.sh installation from rdk-logger" [`#306`](https://github.com/rdkcentral/meta-rdk/pull/306) +- RDKEMW-8528 : Remove logMilestone.sh installation from rdk-logger [`#304`](https://github.com/rdkcentral/meta-rdk/pull/304) +- Adding changelog [`a252dcb`](https://github.com/rdkcentral/meta-rdk/commit/a252dcb4894055510980e6398d95b645da8aa665) +- Update memcapture_git.bb [`461823f`](https://github.com/rdkcentral/meta-rdk/commit/461823f13c2f5bb2a19911196ed8088c58c2b8e3) + +#### [1.12.0](https://github.com/rdkcentral/meta-rdk/compare/1.11.5...1.12.0) + +> 28 October 2025 + +- RDKEMW-9549 : Revert "RDKEMW-8528: Remove logMilestone.sh & use Binary implementation (#268)" [`#309`](https://github.com/rdkcentral/meta-rdk/pull/309) +- RDKEMW-8528: Avoiding cimplog to install onboarding_log bin [`#297`](https://github.com/rdkcentral/meta-rdk/pull/297) +- RDKEMW-8528: Remove logMilestone.sh & use Binary implementation [`#268`](https://github.com/rdkcentral/meta-rdk/pull/268) +- RDKEMW-8494: Back-merge release branch to develop [`#290`](https://github.com/rdkcentral/meta-rdk/pull/290) +- RDKOSS-484 Remove unused distro feature - ${DISTRO_FEATURES_LIBC} [`#269`](https://github.com/rdkcentral/meta-rdk/pull/269) +- Deploy fossid_integration_stateless_diffscan_target_repo action [`#278`](https://github.com/rdkcentral/meta-rdk/pull/278) +- RDK-58433: Add meminsight Recipe [`#174`](https://github.com/rdkcentral/meta-rdk/pull/174) +- Deploy cla action [`#135`](https://github.com/rdkcentral/meta-rdk/pull/135) +- RDKEMW-7734: Update dobby.inc [`#239`](https://github.com/rdkcentral/meta-rdk/pull/239) +- Rebase [`#254`](https://github.com/rdkcentral/meta-rdk/pull/254) +- Adding changelog [`719e11f`](https://github.com/rdkcentral/meta-rdk/commit/719e11f47a604549830800925485f37d783c5945) +- Update dobby.inc [`9afb276`](https://github.com/rdkcentral/meta-rdk/commit/9afb2760a9e083870673f5dd67dbd08cfdf79d5d) +- RDK-58045 : Upgrade rbus that contains low priority coverity fixes(#275) [`adfb54c`](https://github.com/rdkcentral/meta-rdk/commit/adfb54c7871456ddf224a86163a54e494c7868f7) + +#### [1.11.5](https://github.com/rdkcentral/meta-rdk/compare/1.11.4...1.11.5) + +> 7 July 2026 + +- RDKEMW-20435:sysctl configurations has to be ported from RDKV to RDKE [`#975`](https://github.com/rdkcentral/meta-rdk/pull/975) +- Adding changelog [`07a9c64`](https://github.com/rdkcentral/meta-rdk/commit/07a9c6437b5a8e90550a008be7b4c77658fefbc7) + +#### [1.11.4](https://github.com/rdkcentral/meta-rdk/compare/1.11.3...1.11.4) + +> 17 April 2026 + +- RDKEMW-16181: remove swap limit from containers [`#706`](https://github.com/rdkcentral/meta-rdk/pull/706) +- Adding changelog [`ae75ec0`](https://github.com/rdkcentral/meta-rdk/commit/ae75ec02f21e246946dbc6f287b3d02e3c8fb633) + +#### [1.11.3](https://github.com/rdkcentral/meta-rdk/compare/1.11.2...1.11.3) + +> 24 March 2026 + +- RDKEMW-12359: [support/8.3.4.0] Dobby Patch release v3.14.2 [`#653`](https://github.com/rdkcentral/meta-rdk/pull/653) +- [8.3.4] RDKEMW-15230: increase swap limit for containers [`#638`](https://github.com/rdkcentral/meta-rdk/pull/638) +- Adding changelog [`03ad704`](https://github.com/rdkcentral/meta-rdk/commit/03ad704acf4ccf97511d9844679b21134e035192) +- RDKEMW-15176: increase swap limit for containers [`1c1c225`](https://github.com/rdkcentral/meta-rdk/commit/1c1c225f4cbd41246cb37ddbe83ed433aa9974fe) +- Update dobby.inc [`8874e56`](https://github.com/rdkcentral/meta-rdk/commit/8874e56b9bc8f17e73f4b7cd44007dd3d75a744d) + +#### [1.11.2](https://github.com/rdkcentral/meta-rdk/compare/1.11.1...1.11.2) + +> 17 February 2026 + +- RDKEMW-13782 : Telemetry upload issue [`#550`](https://github.com/rdkcentral/meta-rdk/pull/550) +- Adding changelog [`c708818`](https://github.com/rdkcentral/meta-rdk/commit/c708818ef45baf203b2a108630d2eeb2ddd57407) +- Update telemetry_git.bb [`eeaf687`](https://github.com/rdkcentral/meta-rdk/commit/eeaf687a750ff69b745ecf749d3369c9574ba976) + +#### [1.11.1](https://github.com/rdkcentral/meta-rdk/compare/1.11.0...1.11.1) + +> 3 December 2025 + +- RDKEMW-9060: Sync with RDKV to support new game controllers [`#329`](https://github.com/rdkcentral/meta-rdk/pull/329) +- RDKEMW-8825 : App Not Killed by Dobby OOM at Max Memory Limit [`#333`](https://github.com/rdkcentral/meta-rdk/pull/333) +- Adding changelog [`5919e3d`](https://github.com/rdkcentral/meta-rdk/commit/5919e3dd3f61ef408d87b9d4463c7e8144c2cdae) +- Update auto_pr_creation_target_repo_caller.yml [`9ebc0d4`](https://github.com/rdkcentral/meta-rdk/commit/9ebc0d4528218c13f3de7a457d1d000db15068b7) + +#### [1.11.0](https://github.com/rdkcentral/meta-rdk/compare/1.10.0...1.11.0) + +> 8 October 2025 + +- RDK-59118: Integrate CertSelector API into RFCMGR [`#256`](https://github.com/rdkcentral/meta-rdk/pull/256) +- RDKEMW-7699: Merge release branch into develop for MW 8.3.3.0 Q3 Bi-Weekly Release [`#238`](https://github.com/rdkcentral/meta-rdk/pull/238) +- RDKB-60919: Port Optimized RFCMGR source code to RDKB [`#225`](https://github.com/rdkcentral/meta-rdk/pull/225) +- rebase [`#235`](https://github.com/rdkcentral/meta-rdk/pull/235) +- Adding changelog [`b2cb998`](https://github.com/rdkcentral/meta-rdk/commit/b2cb998d8b4ba065484d2ef272a65f51fc97e36e) +- Update rfc_git.bb [`d060ff3`](https://github.com/rdkcentral/meta-rdk/commit/d060ff3d5f8584b613e9057ead673c6c7b1f4e55) +- Update rfc_git.bb [`1e63e68`](https://github.com/rdkcentral/meta-rdk/commit/1e63e68f5e47d41ebd45b980374ee1ce5ca98d7d) + +#### [1.10.0](https://github.com/rdkcentral/meta-rdk/compare/1.9.0...1.10.0) + +> 5 September 2025 + +- Revert "Revert "DELIA-68646: Synchronize the Bluetooth updates between RDK-V and RDK-E"" [`#226`](https://github.com/rdkcentral/meta-rdk/pull/226) +- Revert "DELIA-68646: Synchronize the Bluetooth updates between RDK-V and RDK-E" [`#223`](https://github.com/rdkcentral/meta-rdk/pull/223) +- DELIA-68646: Synchronize the Bluetooth updates between RDK-V and RDK-E [`#217`](https://github.com/rdkcentral/meta-rdk/pull/217) +- RDK-58744: Move dependency to service that needs it [`#220`](https://github.com/rdkcentral/meta-rdk/pull/220) +- RDKEMW-5995 - Addressing Coverity issues reported [`#214`](https://github.com/rdkcentral/meta-rdk/pull/214) +- RDKEMW-5995 - Addressing Coverity issues reported [`#212`](https://github.com/rdkcentral/meta-rdk/pull/212) +- RDKEMW-6709: RDKLogger Migration [`#199`](https://github.com/rdkcentral/meta-rdk/pull/199) +- RDKEMW-6378: Update libsyswrapper.bb [`#195`](https://github.com/rdkcentral/meta-rdk/pull/195) +- RDKEMW-6378 : rebase [`#206`](https://github.com/rdkcentral/meta-rdk/pull/206) +- RDKEMW-6829 : RDK-E : Remove oss rdkperf mw override [`#202`](https://github.com/rdkcentral/meta-rdk/pull/202) +- RDKEMW-3750 : Upgrade Thunder to Version R4.4.3 [`#112`](https://github.com/rdkcentral/meta-rdk/pull/112) +- RDKEMW-6672: Memcr ver from 22.07.2025, checksum enabled [`#192`](https://github.com/rdkcentral/meta-rdk/pull/192) +- Adding changelog [`2a46735`](https://github.com/rdkcentral/meta-rdk/commit/2a467353eea437142affa6f98d68351af187b19c) + +#### [1.9.0](https://github.com/rdkcentral/meta-rdk/compare/1.8.3...1.9.0) + +> 7 August 2025 + +- Update rdkcertconfig.bb [`#123`](https://github.com/rdkcentral/meta-rdk/pull/123) +- RDKEMW-6474 : Update the rbus branch [`#183`](https://github.com/rdkcentral/meta-rdk/pull/183) +- RDK-57964 : Integrate Telemetry T2 for systimemgr [`#156`](https://github.com/rdkcentral/meta-rdk/pull/156) +- RDKEMW-3037: Middleware CI manifests with the common us tv config [`#167`](https://github.com/rdkcentral/meta-rdk/pull/167) +- RDKEMW-3037 : Develop sync [`#168`](https://github.com/rdkcentral/meta-rdk/pull/168) +- RDKEMW-5971 Review and cleanup RFC scripts [`#165`](https://github.com/rdkcentral/meta-rdk/pull/165) +- rebase [`#166`](https://github.com/rdkcentral/meta-rdk/pull/166) +- RDKEMW-4807: Fix bitbake parse error [`#164`](https://github.com/rdkcentral/meta-rdk/pull/164) +- rebase [`#163`](https://github.com/rdkcentral/meta-rdk/pull/163) +- Update rbus to v2.6.0 [`#162`](https://github.com/rdkcentral/meta-rdk/pull/162) +- RDKEVD-1986: Bring autoconnect to develop [`#153`](https://github.com/rdkcentral/meta-rdk/pull/153) +- RDKEMW-749: add libmanette changes to middleware [`#94`](https://github.com/rdkcentral/meta-rdk/pull/94) +- RDKTV-34129: [WebKitBrowser] Use SIGHUP for suspended web process [`#143`](https://github.com/rdkcentral/meta-rdk/pull/143) +- RDK-57917 Update T2 Events for rdm_status.log [`#111`](https://github.com/rdkcentral/meta-rdk/pull/111) +- rebase [`#139`](https://github.com/rdkcentral/meta-rdk/pull/139) +- RDKEMW-5066: Install RBUS Test binaries only when RBUS_ENABLE_TEST_APPS distro enabled [`#130`](https://github.com/rdkcentral/meta-rdk/pull/130) +- rebase [`#137`](https://github.com/rdkcentral/meta-rdk/pull/137) +- Adding changelog [`a5c04cc`](https://github.com/rdkcentral/meta-rdk/commit/a5c04cc8ecc11acb34bf78d51102979cc5d55f72) +- Update rdmagent.bb [`1785f6c`](https://github.com/rdkcentral/meta-rdk/commit/1785f6c97dbe8da8d12778ae93a7a93588fc16a6) +- Update rdmagent.bb [`c3d2d01`](https://github.com/rdkcentral/meta-rdk/commit/c3d2d018be002be7fc590e0875f4dbb26dd96cab) + +#### [1.8.3](https://github.com/rdkcentral/meta-rdk/compare/1.8.2...1.8.3) + +> 25 November 2025 + +- RDKEMW-9910: Sync with RDKV to support new game controllers - backport to RDKE8.2 [`#328`](https://github.com/rdkcentral/meta-rdk/pull/328) +- Adding changelog [`99f2dd6`](https://github.com/rdkcentral/meta-rdk/commit/99f2dd6ac54bb193fd391426e18150506f1ae88b) + +#### [1.8.2](https://github.com/rdkcentral/meta-rdk/compare/1.8.1...1.8.2) + +> 20 October 2025 + +- RDKEMW-9460: Bringing the fix of "btr_enable_auto_connect" to support/2.16.0 branch (RDKE8.2) (Delia 68442) [`#303`](https://github.com/rdkcentral/meta-rdk/pull/303) +- RDKEMW-8825 : App Not Killed by Dobby OOM at Max Memory Limit [`#294`](https://github.com/rdkcentral/meta-rdk/pull/294) +- Adding changelog [`a4cbebe`](https://github.com/rdkcentral/meta-rdk/commit/a4cbebea55fdb312290e52ef0646c4c899a09ba6) +- DELIA-68442 : Auto-connect not working. [`ebc052f`](https://github.com/rdkcentral/meta-rdk/commit/ebc052fdee80c1f821473ebc733c5952c3c69e01) +- Update bluetooth-mgr_git.bb [`9d7d0c5`](https://github.com/rdkcentral/meta-rdk/commit/9d7d0c5178ddf656f3ca23b88b66a4727b626384) + +#### [1.8.1](https://github.com/rdkcentral/meta-rdk/compare/1.8.0...1.8.1) + +> 1 August 2025 + +- Adding changelog [`3a895a6`](https://github.com/rdkcentral/meta-rdk/commit/3a895a6148d9b78c3a6b9150f2e3205de429a915) +- RDKEMW-6476: Merge pull request #178 from rdkcentral/topic/RDKEMW-6467 [`4ef4347`](https://github.com/rdkcentral/meta-rdk/commit/4ef4347540ac9a67b373751e23570cd3b96428de) +- Release of RBus-2.4.0 [`19b2f6c`](https://github.com/rdkcentral/meta-rdk/commit/19b2f6cf855aa71a46b5c2deb01d16ca8521ecde) + +#### [1.8.0](https://github.com/rdkcentral/meta-rdk/compare/1.7.1...1.8.0) + +> 30 June 2025 + +- Adding changelog [`13169a4`](https://github.com/rdkcentral/meta-rdk/commit/13169a48dca7d9434ebe7a4c73e1d298e47fab71) + +#### [1.7.1](https://github.com/rdkcentral/meta-rdk/compare/1.6.0...1.7.1) + +> 27 June 2025 + +- RDKEMW-2278: Removal of WPEFrameworkSecurity Agent Utility [`#122`](https://github.com/rdkcentral/meta-rdk/pull/122) +- Update rbus to v2.5.0 [`#128`](https://github.com/rdkcentral/meta-rdk/pull/128) +- RDKEMW-5066: Avoid installation of files when prod distro_features enabled [`#126`](https://github.com/rdkcentral/meta-rdk/pull/126) +- Update rdk-logger_git.bb [`#124`](https://github.com/rdkcentral/meta-rdk/pull/124) +- RDKEMW-4044: [Dobby] Fix coverity identified issues [`#116`](https://github.com/rdkcentral/meta-rdk/pull/116) +- Adding changelog [`766cde4`](https://github.com/rdkcentral/meta-rdk/commit/766cde410342480b86bc02d489b3af7e268f79be) +- Update dobby.inc [`5d6ecc8`](https://github.com/rdkcentral/meta-rdk/commit/5d6ecc8799ab056a7c5d89131e8c069b384fbf0d) + +#### [1.6.0](https://github.com/rdkcentral/meta-rdk/compare/1.5.0...1.6.0) + +> 11 June 2025 + +- Adding changelog [`9d53b58`](https://github.com/rdkcentral/meta-rdk/commit/9d53b58537434475dcf1b6daebcf946675acbc6c) + +#### [1.5.0](https://github.com/rdkcentral/meta-rdk/compare/1.4.0...1.5.0) + +> 3 June 2025 + +- RDK-57692: Federated RDM Agent [`#98`](https://github.com/rdkcentral/meta-rdk/pull/98) +- RDKEMW-4428: bringup meta-sharp-m120 layer [`#97`](https://github.com/rdkcentral/meta-rdk/pull/97) +- RDK-56852 [RDKE] Analyze and remove Unmapped/unused Telemetry binaries [`#96`](https://github.com/rdkcentral/meta-rdk/pull/96) +- RDKEMW-3586 : Replace mount with systemd mount service and remove any unused configurations. [`#76`](https://github.com/rdkcentral/meta-rdk/pull/76) +- Adding changelog [`#92`](https://github.com/rdkcentral/meta-rdk/pull/92) +- RdmAgent : Systemd Mount [`faa0e48`](https://github.com/rdkcentral/meta-rdk/commit/faa0e48b3be496598913ea7635c025944a538143) +- RDM System Mount [`761f9c6`](https://github.com/rdkcentral/meta-rdk/commit/761f9c6e209a92eda560453de4192c241941c785) +- RDKEMW-3586 : Replacing mount with systemdMount - Removal of apps_prerdm.sh [`9e788f8`](https://github.com/rdkcentral/meta-rdk/commit/9e788f8459762c21401bf2017415dbb573f83fd9) + #### [1.4.0](https://github.com/rdkcentral/meta-rdk/compare/1.3.0...1.4.0) +> 15 May 2025 + - RDKEMW-3974: Enable "maintenance_journal_logging" DISTRO [`#84`](https://github.com/rdkcentral/meta-rdk/pull/84) - RDKEMW-4017: Updated Dobby version to 3.14.0 [`#86`](https://github.com/rdkcentral/meta-rdk/pull/86) - rebase [`#89`](https://github.com/rdkcentral/meta-rdk/pull/89) - RDK-56904: System time mgr include config changes [`#49`](https://github.com/rdkcentral/meta-rdk/pull/49) - RDKEMW-3121:Update BTmgr client to use Power manager Plugin [`#80`](https://github.com/rdkcentral/meta-rdk/pull/80) +- Adding changelog [`4ff2136`](https://github.com/rdkcentral/meta-rdk/commit/4ff2136879a7a9b061068f95ae1d3a863ff1c269) - RDK-57550: Updated Dobby version to 3.14.0 [`ac74367`](https://github.com/rdkcentral/meta-rdk/commit/ac74367027503865b3e921c5bae6f948d33a94ec) #### [1.3.0](https://github.com/rdkcentral/meta-rdk/compare/1.2.0...1.3.0) diff --git a/conf/bblayers.conf.sample b/conf/bblayers.conf.sample index 134400bcd..81417f62d 100644 --- a/conf/bblayers.conf.sample +++ b/conf/bblayers.conf.sample @@ -17,14 +17,16 @@ BBLAYERS ?= " \ ${RDKROOT}/meta-openembedded/meta-filesystems \ ${RDKROOT}/meta-openembedded/meta-oe \ ${RDKROOT}/meta-openembedded/meta-networking \ - ${@'' if os.path.isfile('${RDKROOT}/openembedded-core/meta/recipes-devtools/ruby/ruby.inc') else '${RDKROOT}/meta-openembedded/meta-ruby'} \ + ${@'${RDKROOT}/meta-openembedded/meta-ruby' if os.path.isfile('${RDKROOT}/meta-openembedded/meta-ruby/conf/layer.conf') else ''} \ ${@'${RDKROOT}/meta-linaro/meta-linaro' if os.path.isfile('${RDKROOT}/meta-linaro/meta-linaro/conf/layer.conf') else ''} \ ${@'${RDKROOT}/meta-linaro/meta-linaro-toolchain' if os.path.isfile('${RDKROOT}/meta-linaro/meta-linaro-toolchain/conf/layer.conf') else ''} \ - ${RDKROOT}/openembedded-core/meta \ - ${@'${RDKROOT}/meta-rust' if os.path.isfile('${RDKROOT}/meta-rust/conf/layer.conf') else ''} \ + ${@'${RDKROOT}/openembedded-core/meta' if os.path.isfile('${RDKROOT}/openembedded-core/meta/conf/layer.conf') else '${RDKROOT}/poky/meta'} \ ${@'${RDKROOT}/meta-clang' if os.path.isfile('${RDKROOT}/meta-clang/conf/layer.conf') else ''} \ ${@'${RDKROOT}/meta-gplv2' if os.path.isfile('${RDKROOT}/meta-gplv2/conf/layer.conf') else ''} \ ${@'${RDKROOT}/meta-python2' if os.path.isfile('${RDKROOT}/meta-python2/conf/layer.conf') else ''} \ + ${@'${RDKROOT}/meta-rdk-auxiliary' if os.path.isfile('${RDKROOT}/meta-rdk-auxiliary/conf/layer.conf') else ''} \ + ${@'${RDKROOT}/meta-rdk-oss-reference' if os.path.isfile('${RDKROOT}/meta-rdk-oss-reference/conf/layer.conf') else ''} \ + ${@'${RDKROOT}/meta-rdk-oss-ext' if os.path.isfile('${RDKROOT}/meta-rdk-oss-ext/conf/layer.conf') else ''} \ " # CPC requires dedicated licenses, we need to support build when CPC is not @@ -38,7 +40,6 @@ BBLAYERS += "${@'${RDKROOT}/meta-rdk-broadband' if os.path.isfile('${RDKROOT}/me BBLAYERS =+ "${@'${RDKROOT}/meta-rdk-comcast-video' if os.path.isfile('${RDKROOT}/meta-rdk-comcast-video/conf/layer.conf') else ''}" BBLAYERS += "${@'${RDKROOT}/meta-rdk-video' if os.path.isfile('${RDKROOT}/meta-rdk-video/conf/layer.conf') else ''}" BBLAYERS += "${@'${RDKROOT}/meta-rdk-voice' if os.path.isfile('${RDKROOT}/meta-rdk-voice/conf/layer.conf') else ''}" -BBLAYERS += "${@'${RDKROOT}/meta-rdk-ext' if os.path.isfile('${RDKROOT}/meta-rdk-ext/conf/layer.conf') else ''}" BBLAYERS += "${@'${RDKROOT}/meta-openembedded/meta-python' if os.path.isfile('${RDKROOT}/meta-openembedded/meta-python/conf/layer.conf') else ''}" BBLAYERS =+ "${@'${RDKROOT}/meta-rdk-broadband-cmf-restricted' if os.path.isfile('${RDKROOT}/meta-rdk-broadband-cmf-restricted/conf/layer.conf') else ''}" BBLAYERS =+ "${@'${RDKROOT}/meta-rtlwifi' if os.path.isfile('${RDKROOT}/meta-rtlwifi/conf/layer.conf') else ''}" @@ -47,3 +48,5 @@ BBLAYERS =+ "${@'${RDKROOT}/meta-rdk-amazon' if os.path.isfile('${RDKROOT}/meta- BBLAYERS += "${@'${RDKROOT}/meta-rdk-cujo' if os.path.isfile('${RDKROOT}/meta-rdk-cujo/conf/layer.conf') else ''}" BBLAYERS += "${@'${RDKROOT}/meta-rdk-broadband-cmf-poc' if os.path.isfile('${RDKROOT}/meta-rdk-broadband-cmf-poc/conf/layer.conf') else ''}" BBLAYERS += "${@'${RDKROOT}/meta-rdk-cognitive/meta-rdk-cognitive' if os.path.isfile('${RDKROOT}/meta-rdk-cognitive/meta-rdk-cognitive/conf/layer.conf') else ''}" +BBLAYERS += "${@'${RDKROOT}/meta-rdk-wan' if os.path.isfile('${RDKROOT}/meta-rdk-wan/conf/layer.conf') else ''}" +BBLAYERS += "${@'${RDKROOT}/meta-rdk-iot' if os.path.isfile('${RDKROOT}/meta-rdk-iot/conf/layer.conf') else ''}" diff --git a/conf/distro/include/embed-source-metadata.inc b/conf/distro/include/embed-source-metadata.inc new file mode 100644 index 000000000..704eae26c --- /dev/null +++ b/conf/distro/include/embed-source-metadata.inc @@ -0,0 +1 @@ +INHERIT += "embed-source-metadata" diff --git a/conf/distro/include/rdk_security_flags.inc b/conf/distro/include/rdk_security_flags.inc index 58997058f..361bee952 100644 --- a/conf/distro/include/rdk_security_flags.inc +++ b/conf/distro/include/rdk_security_flags.inc @@ -9,7 +9,6 @@ ASLR:pn-docsis = "n" # ASLR:pn-hal-wifi = "n" ASLR:pn-mesh-agent = "n" ASLR:pn-tr69hostif = "n" -ASLR:pn-xre-receiver-default = "n" ASLR:pn-qtbase = "n" ASLR:pn-ccsp-xconf = "n" ASLR:pn-qtn-csmd-logic = "n" diff --git a/conf/distro/include/rdkb.inc b/conf/distro/include/rdkb.inc index ae8b510c7..b49389a77 100644 --- a/conf/distro/include/rdkb.inc +++ b/conf/distro/include/rdkb.inc @@ -2,6 +2,7 @@ SPLASH = "" DISTRO_FEATURES:append:dunfell = " virtualization" +PREFERRED_VERSION_systemd = "1:250%" PREFERRED_VERSION_lighttpd = "1.4.53" PREFERRED_VERSION_libupnp = "1.6.22" @@ -82,6 +83,7 @@ BBMASK .= "|.meta-rdk-ext/recipes-extended|.meta-rdk-ext/recipes-multimedia|.met BBMASK .= "|.meta-rdk-comcast/recipes-common/nvm-sqlite/nvm-sqlite.bb|.meta-rdk-comcast/recipes-common/rdkversion/rdkversion_1.0.bb" BBMASK .= "|.meta-rdk-soc-intel-gw/meta-intelce-arm/recipes-gateway/miniupnpd/miniupnpd.bb" BBMASK .= "|.meta-rdk/recipes-core/packagegroups/packagegroup-rdk-qt5.bb" +BBMASK .= "|.meta-rdk-comcast/recipes-core/packagegroups/packagegroup-rdk-qt5.bb" VOIP_MASK ?= "|.meta-rdk-broadband/recipes-ccsp/ccsp/ccsp-telcovoip-agent.bb" BBMASK .= "${VOIP_MASK}" WAN_MASK ?= "|.meta-rdk-broadband/recipes-ccsp/ccsp/ccsp-wanagent.bb" @@ -147,3 +149,65 @@ DISTRO_FEATURES:append = " webui_jst" #DISTRO_FEATURES:append = " gtestapp" DISTRO_FEATURES:append = " redrecovery" OPTIMIZE_DEFAULT = "-Os" + + + +include conf/include/oss-config.inc +PREFERRED_VERSION_gettext-native = "0.21" +PREFERRED_PROVIDER_ca-certificates-trust-store = "ca-certificates-trust-store" + +BBMASK .= "|meta-rdk-comcast/recipes-core/systemd/systemd_250.5.bbappend" +BBMASK .= "|meta-rdk-comcast-broadband/recipes-core/systemd/systemd_%.bbappend" +BBMASK .= "|meta-rdk/recipes-common/safec/safec_%.bbappend" +BBMASK .= "|meta-rdk-comcast/recipes-connectivity/ndisc6/ndisc6_%.bbappend" +BBMASK .= "|meta-rdk-comcast/recipes-support/ca-certificates/ca-certificates_%.bbappend" +BBMASK .= "|meta-rdk-comcast/recipes-connectivity/dibbler/dibbler_git.bbappend" +BBMASK .= "|meta-rdk-comcast/recipes-common/lighttpd/lighttpd_%.bbappend" +BBMASK .= "|meta-rdk-comcast-broadband/recipes-common/bash/bash_%.bbappend" +BBMASK .= "|meta-rdk-comcast/recipes-devtools/breakpad/breakpad_git.bbappend" +BBMASK .= "|meta-rdk-comcast/recipes-tweaks/breakpad/breakpad_git.bbappend" +BBMASK .= "|meta-rdk-comcast/recipes-core/glib-2.0/glib-2.0_2.7%.bbappend" +BBMASK .= "|meta-rdk-broadband/recipes-support/libsoup/libsoup-2.4_2.74.2.bbappend" +BBMASK .= "|meta-rdk-comcast/recipes-support/stunnel/stunnel_%.bbappend" +BBMASK .= "|meta-rdk/recipes-extended/rpcbind/rpcbind_1.2.%.bbappend" +BBMASK .= "|meta-rdk-comcast/recipes-connectivity/bind/bind_%.bbappend" +BBMASK .= "|meta-rdk-comcast-broadband/recipes-core/dropbear/dropbear_2020.81.bbappend" +BBMASK .= "|meta-rdk-comcast/recipes-protocols/net-snmp/*" +BBMASK .= "|meta-rdk-comcast-broadband/recipes-common/rfc/rfc_git.bbappend" + +PREFERRED_VERSION_jsoncpp = "1:1.9.5" +PREFERRED_VERSION_dnsmasq = "2.83" +PREFERRED_VERSION_msgpack-c = "2.1.1" + +DISTRO_FEATURES:append = " rdkb_configurable_wan_interface " +DISTRO_FEATURES:append = " unified_mapt " + +BBMASK .= "|meta-rdk-oem-tch-brcm-xb6/meta-tchxb6/recipes-bsp/broadcom-thread/broadcom-thread.bb|.meta-rdk-oem-tch-brcm-xb6/meta-tchxb6/recipes-bsp/broadcom-thread/broadcom-thread_17.2.bb|.meta-rdk-oem-tch-brcm-xb6/meta-tchxb6/recipes-bsp/broadcom-thread/broadcom-thread_18.1.bb|.meta-rdk-oem-tch-brcm-xb6/meta-tchxb6/recipes-bsp/broadcom-thread/broadcom-thread_18.3.bb|.meta-rdk-oem-tch-brcm-xb6/meta-tchxb6/recipes-bsp/broadcom-thread/broadcom-thread_19.3.bb|.meta-rdk-oem-tch-brcm-xb6/meta-tchxb6/recipes-bsp/broadcom-thread/broadcom-thread-bin_17.2.bb|.meta-rdk-oem-tch-broadcom-wifi/meta-tchbcm/recipes-bsp/broadcom-wifi/broadcom-wifi_19.3.bb" +MIDDLEWARE_ARCH = "cortexa15hf-neon" +#This should be reviewed and added it back. +#OSS_LAYER_ARCH = "cortexa15hf-neon" +IMAGE_CLASSES:remove = " post-rootfs-hooks " + + +#srcrev for opensourced components + + +SRCREV:pn-libsyswrapper = "5143ba5b92f5dc77b436837d51f2f612d5846b7b" +SRCREV_rdk-libunpriv = "a0dbea7d368a630158abf56ef8bd7f3855910ec5" +SRCREV:pn-telemetry = "0d73470cc038f1e47ffee483a7d05e51bf88751e" +SRCREV:pn-crashupload = "8e7e22d2cb988ea58b9ba9d85b8b0812c6dc77d2" +SRCREV:pn-commonutilities = "071361f284ba9049bf7d8cb9a75b583b9b1e353b" +SRCREV:pn-rfc = "b6da366e704a006394b33759f144c0a4256fd335" +SRCREV:pn-rdkcertconfig = "e0e35743f7e96ad0595ac25b11d829b766f7062b" +SRCREV_caupdate = "9859720a8748331038e5476321cf039e7d17c5f1" +#topic branch - rdk-ca-store +SRCREV_rdk-ca-store = "378b7d149a0a0c71be7eb41c0ac0fc79a3ca1cf9" +SRCREV:pn-sslcerts = "2d3ef2f7c1b54c7552cac2ab1e41f1ce3871c3d6" +#topic branch - ssacpc +SRCREV_ssacpc = "f238816d57f9956d1ddcd6754b170eafec0ec47e" +#topic branch -cedmcpc +SRCREV_cedmcpc = "a82a07c5c2639a81d4bcd2e2d665ce06c999019c" +SRCREV_ecfsgeneric= "822d726d14e575ec9c73198ce939733abd0d365b" +SRCREV:pn-remotedebugger = "300d29e105f6a7244bff81fa0357dac914dd8913" +SRCREV_sshkeys = "3a1c7d6a07586117bd992fe72ae3365fdd7ef2f3" +SRCREV_mount-utils = "c1aeb29c8e1f236babdd6a1a4538c5b451c7b8c1" diff --git a/conf/distro/include/rdkv.inc b/conf/distro/include/rdkv.inc index 45ae61fdd..af18e2e4c 100644 --- a/conf/distro/include/rdkv.inc +++ b/conf/distro/include/rdkv.inc @@ -138,3 +138,6 @@ include conf/distro/include/rdkv-cpc.inc # Distro feature for NetworkManager DISTRO_FEATURES:append = " ENABLE_NETWORKMANAGER" + +#Distro feature for WPEFramework SecurityUtility Disable +DISTRO_FEATURES:append = " wpe_security_util_disable" diff --git a/conf/distro/include/rm_work.inc b/conf/distro/include/rm_work.inc new file mode 100644 index 000000000..27803e6d6 --- /dev/null +++ b/conf/distro/include/rm_work.inc @@ -0,0 +1,20 @@ +# Enable the rm_work class so the build system automatically removes per-recipe work directories once they are no longer needed (typically after the recipe has successfully produced packages). + +# Key Risk / Developer Impact : Enabling rm_work can delete recipe work directories that developers sometimes use for: +# - editing sources directly under ${TMPDIR}/work/... +# - manual debugging of build output +# - post-failure investigation using intermediate artifacts + +# Risk: If developers modify/build source code directly in a recipe's work directory, those changes can be lost when rm_work cleans that recipe. + +# Mitigation / Exclusions : Exclude selected recipes from cleanup using RM_WORK_EXCLUDE in local.conf (e.g., recipes actively being developed/debugged): +# example: RM_WORK_EXCLUDE += "busybox glibc" + +# This allows active development/debug recipes to retain their work directories while the rest of the build benefits from cleanup. +INHERIT += "rm_work" + +# Excluding rm_work for middleware-test-image and rdk-fullstack-image as some oem tasks might need the full stack image's packages after do_rootfs. +RM_WORK_EXCLUDE += "${MLPREFIX}middleware-test-image ${MLPREFIX}rdk-fullstack-image" + +# Excluding rm_work for opkg-utils-native as build scripts use "opkg-make-index" to upload the packages. +RM_WORK_EXCLUDE += " opkg-utils-native" diff --git a/conf/distro/rdk.conf b/conf/distro/rdk.conf index 2c1729353..07a23646e 100755 --- a/conf/distro/rdk.conf +++ b/conf/distro/rdk.conf @@ -64,7 +64,7 @@ DISTRO_FEATURES_BACKFILL_CONSIDERED += "ldconfig" DISTRO_FEATURES_RDK ?= "rdk-dlna" -DISTRO_FEATURES = "alsa argp logbacktrace directfb ext2 ipv4 ipv6 largefile multiarch nfs opengl pam systemd usbhost wayland xattr zeroconf directfb wayland pam opencdm ${DISTRO_FEATURES_LIBC} ${DISTRO_FEATURES_RDK}" +DISTRO_FEATURES = "alsa argp logbacktrace directfb ext2 ipv4 ipv6 largefile multiarch nfs opengl pam systemd usbhost wayland xattr zeroconf directfb wayland pam opencdm ${DISTRO_FEATURES_RDK}" DISTRO_FEATURES:remove_rpi = "directfb" @@ -113,7 +113,7 @@ PREFERRED_VERSION_gupnp_dunfell = "0.20.10%" PREFERRED_VERSION_gupnp-av:kirkstone = "0.14.0%" PREFERRED_VERSION_elfutils ?= "${@bb.utils.contains('DISTRO_FEATURES', 'benchmark_enable', '0.148', '', d)}" -PREFERRED_VERSION_glib-networking:kirkstone = "2.72.2" +PREFERRED_VERSION_glib-networking:kirkstone = "2.74.0" PREFERRED_VERSION_gssdp:kirkstone = "1.4.0.1" # Set GPTFDISK version for Morty and Dunfell devices @@ -139,6 +139,9 @@ PREFERRED_PROVIDER_virtual/ea-games-provider ?= "ea-games-provider-dummy" # RDK component versions require include/rdk-versions.inc +# Enriching Rootfs manifest with src uri details +require include/embed-source-metadata.inc + # RDK still uses QT 5.1 require include/qt5-versions.inc @@ -241,6 +244,7 @@ VOLATILE_BINDS:append = "/var/volatile/asound.conf /etc/asound.conf\n" VOLATILE_BINDS:append = "/var/volatile/resolv.dnsmasq /etc/resolv.dnsmasq\n" VOLATILE_BINDS:append = "/var/volatile/hosts /etc/hosts\n" VOLATILE_BINDS:append = "/var/volatile/hostname /etc/hostname\n" +VOLATILE_BINDS:append = "/var/volatile/rdk_chrony.conf /etc/rdk_chrony.conf\n" VOLATILE_BINDS:append = "/var/volatile/dhcp_static_hosts /etc/dhcp_static_hosts\n" VOLATILE_BINDS:append = "/var/volatile/cron /var/spool/cron\n" VOLATILE_BINDS:append:hybrid = "/tmp/snmpd.conf /etc/snmp/snmpd.conf\n" @@ -257,6 +261,7 @@ VOLATILE_BINDS:append = "/tmp/stunnel.conf /etc/stunnel.conf\n" XZ_COMPRESSION_LEVEL ?= "-e -M 50% -9" include include/rdk-external-src.inc +include include/rm_work.inc DISTRO_FEATURES:append = " netflix_wayland_client" #DISTRO_FEATURES:append = " netflix_essos_client" @@ -284,7 +289,7 @@ PREFERRED_VERSION_msgpack-c ?= "2.1.1%" PREFERRED_VERSION_systemd_pyro = "1:232%" PREFERRED_VERSION_systemd_rocko = "1:234%" PREFERRED_VERSION_systemd_thud = "1:239%" -PREFERRED_VERSION_systemd:kirkstone ?= "1:230%" +PREFERRED_VERSION_systemd:kirkstone:client ?= "1:230%" PREFERRED_VERSION_xfsprogs ?= "3.1%" #PREFERRED_VERSION_xfsprogs_morty ?= "3.1.11" #PREFERRED_VERSION_xfsprogs_dunfell = "5.2.1" @@ -378,14 +383,14 @@ PACKAGE_EXCLUDE += "kernel-image*" PREFERRED_VERSION_meson-native = "0.61.3" PREFERRED_VERSION_nghttp2 = "${@bb.utils.contains('DISTRO_FEATURES', 'enable_libsoup3', "1.48.0", "", d)}" -PREFERRED_VERSION_glib-2.0 = "${@bb.utils.contains('DISTRO_FEATURES', 'enable_libsoup3', "2.72.3", "", d)}" -PREFERRED_VERSION_glib-2.0-native = "${@bb.utils.contains('DISTRO_FEATURES', 'enable_libsoup3', "2.72.3", "", d)}" +PREFERRED_VERSION_glib-2.0 = "${@bb.utils.contains('DISTRO_FEATURES', 'enable_libsoup3', "2.74.6", "", d)}" +PREFERRED_VERSION_glib-2.0-native = "${@bb.utils.contains('DISTRO_FEATURES', 'enable_libsoup3', "2.74.6", "", d)}" PREFERRED_VERSION_libpsl = "${@bb.utils.contains('DISTRO_FEATURES', 'enable_libsoup3', "0.21.1", "", d)}" -PREFERRED_VERSION_nativesdk-glib-2.0 = "${@bb.utils.contains('DISTRO_FEATURES', 'enable_libsoup3', "2.72.3", "", d)}" +PREFERRED_VERSION_nativesdk-glib-2.0 = "${@bb.utils.contains('DISTRO_FEATURES', 'enable_libsoup3', "2.74.6", "", d)}" PACKAGE_DEBUG_SPLIT_STYLE:kirkstone = "debug-without-src" -PREFERRED_PROVIDER_virtual/ca-certificates-trust-store ?= "ca-certificates-trust-store" +#PREFERRED_PROVIDER_virtual/ca-certificates-trust-store:client ?= "ca-certificates-trust-store" PREFERRED_PROVIDER_virtual/firebolt ?= "ripple" include conf/distro/rdk-cpc.conf diff --git a/conf/layer.conf b/conf/layer.conf index a454f6a89..525e53ae1 100644 --- a/conf/layer.conf +++ b/conf/layer.conf @@ -22,4 +22,5 @@ LAYERDEPENDS_rdk = "multimedia-layer" # add BBMASK .= "!" # in your layer BBMASK =. "recipes-gnome/gnome-settings-daemon" +BBMASK .= "|.meta-rdk-oss-reference/recipes-rdk/breakpad_wrapper/breakpad-wrapper.bb" require ${@bb.utils.contains_any('DISTRO_FEATURES','morty daisy','include/hashbase_whitelist.inc','include/basehash_ignore_vars.inc',d)} diff --git a/conf/template/bblayers.conf.sample b/conf/template/bblayers.conf.sample index 750fdf031..ee5f1630e 100644 --- a/conf/template/bblayers.conf.sample +++ b/conf/template/bblayers.conf.sample @@ -19,16 +19,17 @@ BBLAYERS ?= " \ " # Common layers -BBLAYERS =+ "${@'${MANIFEST_PATH_COMMON_OSS_REFERENCE}' if os.path.isfile('${MANIFEST_PATH_COMMON_OSS_REFERENCE}/conf/layer.conf') else ''}" -BBLAYERS =+ "${@'${MANIFEST_PATH_STACK_LAYERING_SUPPORT}' if os.path.isfile('${MANIFEST_PATH_STACK_LAYERING_SUPPORT}/conf/layer.conf') else ''}" -BBLAYERS =+ "${@'${MANIFEST_PATH_RDK_HALIF_HEADERS}' if os.path.isfile('${MANIFEST_PATH_RDK_HALIF_HEADERS}/conf/layer.conf') else ''}" +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_COMMON_OSS_REFERENCE') if d.getVar('MANIFEST_PATH_COMMON_OSS_REFERENCE') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_COMMON_OSS_REFERENCE') + '/conf/layer.conf') else ''}" +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_STACK_LAYERING_SUPPORT') if d.getVar('MANIFEST_PATH_STACK_LAYERING_SUPPORT') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_STACK_LAYERING_SUPPORT') + '/conf/layer.conf') else ''}" +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_RDK_HALIF_HEADERS') if d.getVar('MANIFEST_PATH_RDK_HALIF_HEADERS') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_RDK_HALIF_HEADERS') + '/conf/layer.conf') else ''}" BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_OSS_EXT') if d.getVar('MANIFEST_PATH_OSS_EXT') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_OSS_EXT') + '/conf/layer.conf') else ''}" # Common layers: optional BBLAYERS =+ " ${@d.getVar('MANIFEST_PATH_IMAGE_SUPPORT') if d.getVar('MANIFEST_PATH_IMAGE_SUPPORT') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_IMAGE_SUPPORT') + '/conf/layer.conf') else ''}" +BBLAYERS =+ " ${@d.getVar('MANIFEST_PATH_VENDOR_IMAGE_PACKAGER') if d.getVar('MANIFEST_PATH_VENDOR_IMAGE_PACKAGER') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_VENDOR_IMAGE_PACKAGER') + '/conf/layer.conf') else ''}" # Release layers: generic -BBLAYERS =+ "${@'${MANIFEST_PATH_OSS_RELEASE}' if os.path.isfile('${MANIFEST_PATH_OSS_RELEASE}/conf/layer.conf') else ''}" +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_OSS_RELEASE') if d.getVar('MANIFEST_PATH_OSS_RELEASE') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_OSS_RELEASE') + '/conf/layer.conf') else ''}" BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_VENDOR_RELEASE') if d.getVar('MANIFEST_PATH_VENDOR_RELEASE') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_VENDOR_RELEASE') + '/conf/layer.conf') else ''}" BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_CSPC_SECURITY_RELEASE') if d.getVar('MANIFEST_PATH_CSPC_SECURITY_RELEASE') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_CSPC_SECURITY_RELEASE') + '/conf/layer.conf') else ''}" @@ -40,12 +41,12 @@ BBLAYERS =+ " \ # Middleware layers: generic BBLAYERS =+ " ${@d.getVar('MANIFEST_PATH_MIDDLEWARE_DEV_CSPC') if d.getVar('MANIFEST_PATH_MIDDLEWARE_DEV_CSPC') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_MIDDLEWARE_DEV_CSPC') + '/conf/layer.conf') else ''}" BBLAYERS =+ " ${@d.getVar('MANIFEST_PATH_MIDDLEWARE_DEV_RESTRICTED') if d.getVar('MANIFEST_PATH_MIDDLEWARE_DEV_RESTRICTED') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_MIDDLEWARE_DEV_RESTRICTED') + '/conf/layer.conf') else ''}" -BBLAYERS =+ "${@'${MANIFEST_PATH_MIDDLEWARE_DEV_GENERIC}' if os.path.isfile('${MANIFEST_PATH_MIDDLEWARE_DEV_GENERIC}/conf/layer.conf') else ''}" +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_MIDDLEWARE_DEV_GENERIC') if d.getVar('MANIFEST_PATH_MIDDLEWARE_DEV_GENERIC') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_MIDDLEWARE_DEV_GENERIC') + '/conf/layer.conf') else ''}" BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_MIDDLEWARE_DEV') if d.getVar('MANIFEST_PATH_MIDDLEWARE_DEV') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_MIDDLEWARE_DEV') + '/conf/layer.conf') else ''}" -BBLAYERS =+ "${@'${MANIFEST_PATH_META_RDK}' if os.path.isfile('${MANIFEST_PATH_META_RDK}/conf/layer.conf') else ''}" +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_META_RDK') if d.getVar('MANIFEST_PATH_META_RDK') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_META_RDK') + '/conf/layer.conf') else ''}" BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_RDK_RESTRICTED') if d.getVar('MANIFEST_PATH_RDK_RESTRICTED') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_RDK_RESTRICTED') + '/conf/layer.conf') else ''}" -BBLAYERS =+ "${@'${MANIFEST_PATH_RDK_VIDEO}' if os.path.isfile('${MANIFEST_PATH_RDK_VIDEO}/conf/layer.conf') else ''}" -BBLAYERS =+ "${@'${MANIFEST_PATH_META_PYTHON2}' if os.path.isfile('${MANIFEST_PATH_META_PYTHON2}/conf/layer.conf') else ''}" +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_RDK_VIDEO') if d.getVar('MANIFEST_PATH_RDK_VIDEO') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_RDK_VIDEO') + '/conf/layer.conf') else ''}" +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_META_PYTHON2') if d.getVar('MANIFEST_PATH_META_PYTHON2') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_META_PYTHON2') + '/conf/layer.conf') else ''}" BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_PRODUCT_LAYER') if d.getVar('MANIFEST_PATH_PRODUCT_LAYER') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_PRODUCT_LAYER') + '/conf/layer.conf') else ''}" BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_RDK_SKY') if d.getVar('MANIFEST_PATH_RDK_SKY') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_RDK_SKY') + '/conf/layer.conf') else ''}" @@ -53,19 +54,39 @@ BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_RDK_SKY') if d.getVar('MANIFEST_PATH_RDK BBLAYERS =+ " \ ${@d.getVar('MANIFEST_PATH_RDK_COMCAST') if d.getVar('MANIFEST_PATH_RDK_COMCAST') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_RDK_COMCAST') + '/conf/layer.conf') else ''} \ ${@d.getVar('MANIFEST_PATH_COMCAST_VIDEO') if d.getVar('MANIFEST_PATH_COMCAST_VIDEO') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_COMCAST_VIDEO') + '/conf/layer.conf') else ''} \ + ${@d.getVar('MANIFEST_PATH_APPMANAGERS_TEST') if d.getVar('ENABLE_RDK_APPMANAGERS') == "true" and d.getVar('MANIFEST_PATH_APPMANAGERS_TEST') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_APPMANAGERS_TEST') + '/conf/layer.conf') else ''} \ ${@d.getVar('MANIFEST_PATH_COMCAST_VOICE_SDK') if d.getVar('MANIFEST_PATH_COMCAST_VOICE_SDK') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_COMCAST_VOICE_SDK') + '/conf/layer.conf') else ''} \ ${@d.getVar('MANIFEST_PATH_META_QT5') if d.getVar('MANIFEST_PATH_META_QT5') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_META_QT5') + '/conf/layer.conf') else ''} \ ${@d.getVar('MANIFEST_PATH_MEDIARITE') if d.getVar('MANIFEST_PATH_MEDIARITE') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_MEDIARITE') + '/conf/layer.conf') else ''} \ ${@d.getVar('MANIFEST_PATH_RDK_CPC_HALIF_HEADERS') if d.getVar('MANIFEST_PATH_RDK_CPC_HALIF_HEADERS') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_RDK_CPC_HALIF_HEADERS') + '/conf/layer.conf') else ''} \ ${@d.getVar('MANIFEST_PATH_RDK_TOOLS') if d.getVar('MANIFEST_PATH_RDK_TOOLS') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_RDK_TOOLS') + '/conf/layer.conf') else ''} \ ${@d.getVar('MANIFEST_PATH_MIDDLEWARE_BRINGUP') if d.getVar('MANIFEST_PATH_MIDDLEWARE_BRINGUP') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_MIDDLEWARE_BRINGUP') + '/conf/layer.conf') else ''} \ + ${@d.getVar('MANIFEST_PATH_RDK_IMAGES') if d.getVar('MANIFEST_PATH_RDK_IMAGES') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_RDK_IMAGES') + '/conf/layer.conf') else ''} \ + ${@d.getVar('MANIFEST_PATH_CSPC_IMAGES') if d.getVar('MANIFEST_PATH_CSPC_IMAGES') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_CSPC_IMAGES') + '/conf/layer.conf') else ''} \ " # Config layers: generic -BBLAYERS =+ "${@'${MANIFEST_PATH_COMMON_CONFIG}' if os.path.isfile('${MANIFEST_PATH_COMMON_CONFIG}/conf/layer.conf') else ''}" -BBLAYERS =+ "${@'${MANIFEST_PATH_PROFILE_CONFIG}' if os.path.isfile('${MANIFEST_PATH_PROFILE_CONFIG}/conf/layer.conf') else ''}" +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_COMMON_CONFIG') if d.getVar('MANIFEST_PATH_COMMON_CONFIG') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_COMMON_CONFIG') + '/conf/layer.conf') else ''}" +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_PROFILE_CONFIG') if d.getVar('MANIFEST_PATH_PROFILE_CONFIG') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_PROFILE_CONFIG') + '/conf/layer.conf') else ''}" # Config layers: restricted/proprietary/optional BBLAYERS =+ " \ ${@d.getVar('MANIFEST_PATH_REGION_CONFIG') if d.getVar('MANIFEST_PATH_REGION_CONFIG') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_REGION_CONFIG') + '/conf/layer.conf') else ''} \ " +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_META_MIXIN') if d.getVar('MANIFEST_PATH_META_MIXIN') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_META_MIXIN') + '/conf/layer.conf') else ''}" +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_META_CLANG') if d.getVar('MANIFEST_PATH_META_CLANG') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_META_CLANG') + '/conf/layer.conf') else ''}" + +# vdevice_x86-64 specific layers +IS_VDEVICE_X86_64_BUILD = "${@'1' if d.getVar('TOPDIR') and d.getVar('TOPDIR').endswith('/build-vdevice_x86-64-mw') else '0'}" + +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_POKY') + '/meta-poky' if d.getVar('IS_VDEVICE_X86_64_BUILD') == '1' and d.getVar('MANIFEST_PATH_POKY') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_POKY') + '/meta-poky/conf/layer.conf') else ''}" + +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_POKY') + '/meta-yocto-bsp' if d.getVar('IS_VDEVICE_X86_64_BUILD') == '1' and d.getVar('MANIFEST_PATH_POKY') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_POKY') + '/meta-yocto-bsp/conf/layer.conf') else ''}" + +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_OPENEMBEDDED') + '/meta-xfce' if d.getVar('IS_VDEVICE_X86_64_BUILD') == '1' and d.getVar('MANIFEST_PATH_OPENEMBEDDED') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_OPENEMBEDDED') + '/meta-xfce/conf/layer.conf') else ''}" + +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_OPENEMBEDDED') + '/meta-gnome' if d.getVar('IS_VDEVICE_X86_64_BUILD') == '1' and d.getVar('MANIFEST_PATH_OPENEMBEDDED') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_OPENEMBEDDED') + '/meta-gnome/conf/layer.conf') else ''}" + +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_BINDER') if d.getVar('IS_VDEVICE_X86_64_BUILD') == '1' and d.getVar('MANIFEST_PATH_BINDER') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_BINDER') + '/conf/layer.conf') else ''}" + +BBLAYERS =+ "${@d.getVar('MANIFEST_PATH_GSTREAMER') if d.getVar('IS_VDEVICE_X86_64_BUILD') == '1' and d.getVar('MANIFEST_PATH_GSTREAMER') is not None and os.path.isfile(d.getVar('MANIFEST_PATH_GSTREAMER') + '/conf/layer.conf') else ''}" diff --git a/recipes-common/breakpad_wrapper/breakpad-wrapper.bb b/recipes-common/breakpad_wrapper/breakpad-wrapper.bb new file mode 100644 index 000000000..a8d143955 --- /dev/null +++ b/recipes-common/breakpad_wrapper/breakpad-wrapper.bb @@ -0,0 +1,33 @@ +SUMMARY = "C wrapper for breakpad" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=175792518e4ac015ab6696d16c4f607e" + +SRC_URI = "${CMF_GITHUB_ROOT}/breakpad_wrapper;${CMF_GITHUB_BRANCH};name=breakpadwrapper" + +DEPENDS += "breakpad" + +SRCREV_breakpadwrapper = "be8cd679e095cd300f77913863724fa5e39a6182" +SRCREV_FORMAT = "breakpadwrapper" +PV = "1.0.0" + +S = "${WORKDIR}/git/" + +inherit autotools coverity + +CPPFLAGS:append = " \ + -I${STAGING_INCDIR}/breakpad/ \ + " + +LDFLAGS += "-lbreakpad_client -lpthread" + +do_install:append () { + # Config files and scripts + install -d ${D}${includedir}/ + install -D -m 0644 ${S}/*.h ${D}${includedir}/ +} + + +FILES:${PN} += "${libdir}/*.so" + +CXXFLAGS:append:client = " -DMINIDUMP_RDKV" diff --git a/recipes-common/crashupload/crashupload_git.bb b/recipes-common/crashupload/crashupload_git.bb index 575564a06..8b47ceecc 100644 --- a/recipes-common/crashupload/crashupload_git.bb +++ b/recipes-common/crashupload/crashupload_git.bb @@ -1,59 +1,82 @@ -SUMMARY = "Crashupload application" +SUMMARY = "Crash Upload Utility for RDK Platforms" SECTION = "console/utils" LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=175792518e4ac015ab6696d16c4f607e" +LIC_FILES_CHKSUM = "file://../LICENSE;md5=175792518e4ac015ab6696d16c4f607e" +PV = "2.1.2" +PR = "r0" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" -# To have a possibility to override SRC_URI later, we are introducing the following workaround: -CRASHUPLOAD_SRC_URI ?= "${RDK_GENERIC_ROOT_GIT}/crashupload/generic;module=.;protocol=${RDK_GIT_PROTOCOL};branch=${RDK_GIT_BRANCH}" -SRC_URI = "${CMF_GITHUB_ROOT}/crashupload;${CMF_GITHUB_SRC_URI_SUFFIX};module=." -PV = "1.0" -S = "${WORKDIR}/git" +SRC_URI = "${CMF_GITHUB_ROOT}/${BPN}.git;nobranch=1;protocol=${CMF_GIT_PROTOCOL}" +SRCREV = "8fcb791cf927c91f53353cc6e5ac15a37bee1905" + +S = "${WORKDIR}/git/c_sourcecode" DEPENDS = "glib-2.0 libsyswrapper" export LINK = "${LD}" -CFLAGS += " \ - -I=${libdir}/glib-2.0/include \ - -I=${includedir}/glib-2.0 \ - " +CFLAGS:append = " \ + -I=${libdir}/glib-2.0/include \ + -I=${includedir}/glib-2.0 \ + -DRFC_API_ENABLED \ + -DT2_EVENT_ENABLED \ + -DRDK_LOGGER \ + -DUSE_EXTENDED_LOGGER_INIT \ + -DRBUS_API_ENABLED \ + " export GLIBS = "-lglib-2.0 -lz" export USE_DBUS = "y" -LDFLAGS += "-Wl,-O1" +LDFLAGS:append = " -Wl,-O1" + +inherit autotools systemd coverity pkgconfig -inherit coverity -inherit systemd +DEPENDS:append:client = " \ + openssl \ + libarchive \ + rdk-logger \ + commonutilities \ + rfc \ + telemetry \ + " do_install() { install -d ${D}${base_libdir}/rdk install -d ${D}${sysconfdir} ${D}${sysconfdir}/rfcdefaults - install -m 0755 ${S}/uploadDumps.sh ${D}${base_libdir}/rdk + install -m 0755 ${WORKDIR}/git/uploadDumps.sh ${D}${base_libdir}/rdk + install -m 0755 ${WORKDIR}/git/runDumpUpload.sh ${D}${base_libdir}/rdk +} + +do_install:append:client() { + install -d ${D}${bindir} + install -m 0755 ${B}/src/crashupload ${D}${bindir}/crashupload } do_install:append:broadband() { use_sysv="${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'false', 'true', d)}" $use_sysv || install -d ${D}${systemd_unitdir}/system - $use_sysv || install -m 0644 ${S}/coredump-upload.service ${D}${systemd_unitdir}/system/ - $use_sysv || install -m 0644 ${S}/coredump-upload.path ${D}${systemd_unitdir}/system/ - $use_sysv || install -m 0644 ${S}/minidump-on-bootup-upload.service ${D}${systemd_unitdir}/system/ - $use_sysv || install -m 0644 ${S}/minidump-on-bootup-upload.timer ${D}${systemd_unitdir}/system/ + $use_sysv || install -m 0644 ${WORKDIR}/git/coredump-upload.service ${D}${systemd_unitdir}/system/ + $use_sysv || install -m 0644 ${WORKDIR}/git/coredump-upload.path ${D}${systemd_unitdir}/system/ + $use_sysv || install -m 0644 ${WORKDIR}/git/minidump-on-bootup-upload.service ${D}${systemd_unitdir}/system/ + $use_sysv || install -m 0644 ${WORKDIR}/git/minidump-on-bootup-upload.timer ${D}${systemd_unitdir}/system/ install -d ${D}${sysconfdir} - #install -m 0755 ${S}/uploadDumpsUtils.sh ${D}${base_libdir}/rdk + install -m 0755 ${WORKDIR}/git/uploadDumpsUtils.sh ${D}${base_libdir}/rdk } SYSTEMD_SERVICE:${PN}:append:broadband = " coredump-upload.service \ coredump-upload.path \ minidump-on-bootup-upload.service \ minidump-on-bootup-upload.timer \ -" -RDEPENDS:${PN} += "busybox" + " + +RDEPENDS:${PN} += "busybox commonutilities" PACKAGE_BEFORE_PN += "${PN}-conf" -FILES:${PN} += "${base_libdir}/rdk/uploadDumps.sh" -#FILES:${PN}:append:broadband = " ${base_libdir}/rdk/uploadDumpsUtils.sh" +FILES:${PN}:append:client = " ${bindir}/crashupload" +FILES:${PN}:append = " ${base_libdir}/rdk/uploadDumps.sh" +FILES:${PN}:append = " ${base_libdir}/rdk/runDumpUpload.sh" +FILES:${PN}:append:broadband = " ${base_libdir}/rdk/uploadDumpsUtils.sh" diff --git a/recipes-common/dca/dca_git.bb b/recipes-common/dca/dca_git.bb index 22b8df5a5..973a68191 100644 --- a/recipes-common/dca/dca_git.bb +++ b/recipes-common/dca/dca_git.bb @@ -14,7 +14,7 @@ CFLAGS += " -Wall -Werror -Wextra -Wno-sign-compare -Wno-address " SRC_URI = "${CMF_GIT_ROOT}/rdk/components/generic/dca;protocol=${CMF_GIT_PROTOCOL};branch=${CMF_GIT_BRANCH}" PV = "${RDK_RELEASE}+git${SRCPV}" -SRCREV ?= "${AUTOREV}" +SRCREV ?= "94bab6ee8e3c7f4fc30acfc45ba266e303f16d3a" S = "${WORKDIR}/git" inherit pkgconfig autotools systemd coverity diff --git a/recipes-common/dcm/dcmjsonparser_git.bb b/recipes-common/dcm/dcmjsonparser_git.bb index 312fb4d5f..b348e48c7 100644 --- a/recipes-common/dcm/dcmjsonparser_git.bb +++ b/recipes-common/dcm/dcmjsonparser_git.bb @@ -11,7 +11,7 @@ RDEPENDS:${PN} = "cjson" SRC_URI = "${CMF_GIT_ROOT}/rdk/components/generic/dcm;protocol=${CMF_GIT_PROTOCOL};branch=${CMF_GIT_BRANCH}" PV = "${RDK_RELEASE}+git${SRCPV}" -SRCREV ?= "${AUTOREV}" +SRCREV ?= "065da5cb555bd8e9328934bfb98b68745ecc618f" S = "${WORKDIR}/git" CFLAGS:append = " \ diff --git a/recipes-common/dcmd/dcmd.bb b/recipes-common/dcmd/dcmd.bb index 25527e6a4..1d7b9e045 100644 --- a/recipes-common/dcmd/dcmd.bb +++ b/recipes-common/dcmd/dcmd.bb @@ -5,18 +5,19 @@ DESCRIPTION = "dcmd" SECTION = "dcmd" DEPENDS += "rbus" +DEPENDS += "commonutilities" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=2441d6cdabdc0f370be5cd8a746eb647" # This tells bitbake where to find the files we're providing on the local filesystem FILESEXTRAPATHS:prepend := "${THISDIR}:" +SRCREV = "0b00b30e28f0847671e228ec421405c85c8e6706" SRC_URI = "${CMF_GITHUB_ROOT}/dcm-agent;${CMF_GITHUB_SRC_URI_SUFFIX}" +PV = "2.1.4" +PR = "r0" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" -PV ?= "1.0.0" -PR ?= "r0" - # Make sure our source directory (for the build) matches the directory structure in the tarball S = "${WORKDIR}/git" @@ -35,17 +36,32 @@ ASNEEDED = "" CFLAGS:append = " -std=c11 -fPIC -D_GNU_SOURCE -Wall -Werror" +# added for certselector +EXTRA_OECONF:append = " --enable-t2api=yes --enable-iarmevent" LDFLAGS:append = "${@bb.utils.contains('DISTRO_FEATURES', 'enable_maintenance_manager', '-lIARMBus', '', d)}" - DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'enable_maintenance_manager', 'iarmmgrs iarmbus', '', d)}" CFLAGS:append += "${@bb.utils.contains('DISTRO_FEATURES', 'enable_maintenance_manager', '-DHAS_MAINTENANCE_MANAGER', '', d)}" do_install:append () { - + install -d ${D}${bindir} install -d ${D}${systemd_unitdir}/system install -m 0644 ${S}/dcmd.service ${D}${systemd_unitdir}/system + install -d ${D}${includedir} + install -m 0644 ${S}/uploadstblogs/include/*.h ${D}${includedir} } -SYSTEMD_SERVICE:${PN} += "dcmd.service" +inherit breakpad-wrapper +DEPENDS += "breakpad breakpad-wrapper" +BREAKPAD_BIN:append = "logupload" +PACKAGECONFIG:append = " breakpad" +PACKAGECONFIG[breakpad] = "--enable-breakpad,,breakpad," + +LDFLAGS += "-lbreakpadwrapper" +CXXFLAGS += "-DINCLUDE_BREAKPAD" + + +# Add any extra packaging if needed +FILES_${PN} += "${bindir}/logupload" +SYSTEMD_SERVICE:${PN} += "dcmd.service" diff --git a/recipes-common/lib_syscall_wrapper/libsyswrapper.bb b/recipes-common/lib_syscall_wrapper/libsyswrapper.bb index b13e6ca1c..dbf8e871b 100644 --- a/recipes-common/lib_syscall_wrapper/libsyswrapper.bb +++ b/recipes-common/lib_syscall_wrapper/libsyswrapper.bb @@ -2,11 +2,17 @@ SUMMARY = "secure wrapper for system calls" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=175792518e4ac015ab6696d16c4f607e" + +PV = "1.3.3" +PR = "r1" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" S = "${WORKDIR}/git" DEPENDS += "rdk-logger" +SRCREV = "69fab9ab4403b7cda68af1d6a095b2cf5749c84f" SRC_URI = "${CMF_GITHUB_ROOT}/libSyscallWrapper;${CMF_GITHUB_SRC_URI_SUFFIX};name=libsyswrapper" -EXTRA_OECONF += "--enable-testapp" +#EXTRA_OECONF += "--enable-testapp" +CFLAGS:append = " -Wall -Werror" +CXXFLAGS:append = " -Wall -Werror" DEBIAN_NOAUTONAME:${PN} = "1" diff --git a/recipes-common/libunpriv/libunpriv.bb b/recipes-common/libunpriv/libunpriv.bb index 5cf84a347..d76dec7ae 100644 --- a/recipes-common/libunpriv/libunpriv.bb +++ b/recipes-common/libunpriv/libunpriv.bb @@ -2,6 +2,10 @@ SUMMARY = "libcap wrapper " LICENSE = "Apache-2.0" DEPENDS = "libcap jsoncpp" S = "${WORKDIR}/git" +PV = "1.0.2" +PR = "r0" +PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" +SRCREV_rdk-libunpriv = "2e6c30c88823b7ff9cebde4d7f4d978118510da0" SRC_URI = "${CMF_GITHUB_ROOT}/rdk-libunpriv.git;${CMF_GITHUB_SRC_URI_SUFFIX};name=rdk-libunpriv" SRCREV_FORMAT = "rdk-libunpriv" diff --git a/recipes-common/rbus/files/gtest_libraries_check.patch b/recipes-common/rbus/files/gtest_libraries_check.patch deleted file mode 100644 index 843835c87..000000000 --- a/recipes-common/rbus/files/gtest_libraries_check.patch +++ /dev/null @@ -1,40 +0,0 @@ -############################################################################### -Date: Tuesday 24 January 22:10:00 UTC 2023 -Subject: With newer cmake-3.22, the FindGTest.cmake module is - slightly differenct than older cmake-3.16 module. We don't have - GTEST_INCLUDE_DIR set in latest cmake GTest module where as - GTEST_LIBRARIES and GTEST_INCLUDE_DIRS are set on both older and new modules. -Source: Comcast -License: NA -Upstream-Status: Pending -Signed-off-by: Arjun -############################################################################### ---- a/unittests/CMakeLists.txt.orig 2023-01-24 08:28:22.536357264 +0000 -+++ b/unittests/CMakeLists.txt 2023-01-24 08:31:39.383571780 +0000 -@@ -26,7 +26,7 @@ - - string(REPLACE "-Werror" "" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}) - string(REPLACE "-Werror" "" CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE}) --if (NOT GTEST_INCLUDE_DIR) -+if (NOT GTEST_LIBRARIES) - message("Warning GTest wasn't found. GTest library will be built.") - include(ExternalProject) - #include(GoogleTest) -@@ -53,7 +53,7 @@ - - include_directories("${source_dir}/googletest/include" "${source_dir}/googlemock/include") - else () -- include_directories("${GTEST_INCLUDE_DIR}") -+ include_directories("GTEST_INCLUDE_DIRS") - endif() - - # someone needs to figure out how to run this stuff under valgrind -@@ -102,7 +102,7 @@ - main.cpp) - add_dependencies(rbus_gtest.bin rbus) - --if (NOT GTEST_INCLUDE_DIR) -+if (NOT GTEST_LIBRARIES) - target_link_libraries(rbus_gtest.bin rbus libgtest libgmock gcov) - else () - target_link_libraries(rbus_gtest.bin rbus gtest gcov) diff --git a/recipes-common/rbus/rbus.bb b/recipes-common/rbus/rbus.bb index 669125d14..b11915115 100644 --- a/recipes-common/rbus/rbus.bb +++ b/recipes-common/rbus/rbus.bb @@ -4,13 +4,12 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=ed63516ecab9f06e324238dd2b259549" SRC_URI = "git://github.com/rdkcentral/rbus.git;branch=release" -SRC_URI:append = " file://gtest_libraries_check.patch" -SRCREV = "ed30640c74511681e8d2cc3566b46dfb28de8323" +SRCREV = "3e344546469f2ac2daf4314ff6acc7ca718580f6" SRCREV_FORMAT = "base" -PV ?= "2.3.0" -PR ?= "r0" +PV = "2.12.0" +PR = "r0" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" @@ -31,8 +30,8 @@ EXTRA_OECMAKE += " -DCMAKE_BUILD_TYPE=Release " EXTRA_OECMAKE += " -DMSG_ROUNDTRIP_TIME=ON -DENABLE_RDKLOGGER=ON" #Gtest Specific Enablements -EXTRA_OECMAKE += " ${@bb.utils.contains('DISTRO_FEATURES', 'gtestapp', '-DENABLE_UNIT_TESTING=ON', '', d)}" -EXTRA_OECMAKE += " ${@bb.utils.contains('DISTRO_FEATURES', 'gtestapp', '-DBUILD_RBUS_BENCHMARK_TEST=ON -DBUILD_RBUS_UNIT_TEST=ON -DBUILD_RBUS_SAMPLE_APPS=ON', '', d)}" +EXTRA_OECMAKE += " ${@bb.utils.contains('DISTRO_FEATURES', 'gtestapp', '-DENABLE_UNIT_TESTING=ON -DBUILD_RBUS_BENCHMARK_TEST=ON', '', d)}" +EXTRA_OECMAKE += " ${@bb.utils.contains('DISTRO_FEATURES', 'RBUS_ENABLE_TESTAPPS', '-DBUILD_RBUS_SAMPLE_APPS=ON -DBUILD_RBUS_TEST_APPS=ON ', '-DBUILD_RBUS_SAMPLE_APPS=OFF -DBUILD_RBUS_TEST_APPS=OFF', d)}" DEPENDS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'gtestapp', ' gtest benchmark ', ' ', d)}" #Dunfell Specific CFlags diff --git a/recipes-common/rdk-cert-config/rdkcertconfig.bb b/recipes-common/rdk-cert-config/rdkcertconfig.bb index 0f31c473a..b18c6da5f 100644 --- a/recipes-common/rdk-cert-config/rdkcertconfig.bb +++ b/recipes-common/rdk-cert-config/rdkcertconfig.bb @@ -3,18 +3,22 @@ SUMMARY = "A simple library for certificate selector/locator" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" +PV = "1.0.5" +PR = "r1" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" -PV = "1.0" DEPENDS += " libsyswrapper " #code will be cloned from the following SRC_URI +SRCREV = "cd445dd473a9a82488d553faaf7e60e57a0e102b" SRC_URI = "${CMF_GITHUB_ROOT}/rdk-cert-config;${CMF_GITHUB_SRC_URI_SUFFIX}" S = "${WORKDIR}/git" B = "${WORKDIR}/git" -CFLAGS:append = " -DCONFIG_ERROR_ENABLED " +CFLAGS:append = " -DCONFIG_ERROR_ENABLED -Wall -Werror" +CXXFLAGS:append = " -Wall -Werror" + inherit autotools pkgconfig coverity TARGET_CC_ARCH += "${LDFLAGS}" diff --git a/recipes-common/rdk-logger/rdk-logger_git.bb b/recipes-common/rdk-logger/rdk-logger_git.bb index 5a29a1926..12f8fd3ba 100644 --- a/recipes-common/rdk-logger/rdk-logger_git.bb +++ b/recipes-common/rdk-logger/rdk-logger_git.bb @@ -1,55 +1,34 @@ -SUMMARY = "This receipe compiles rmfcore code base. This has interface clasess that would be necessary for all the mediaplayers" +SUMMARY = "This recipe builds the rdk_logger code base, providing logging interfaces required by all mediaplayers" SECTION = "console/utils" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=175792518e4ac015ab6696d16c4f607e" -PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" -PV ?= "1.0.0" -PR ?= "r0" - -SRCREV = "968bdfc364008e27a52921370f7bc98c0c43e161" -SRCREV_FORMAT = "rdklogger" - - -SRC_URI = "${CMF_GITHUB_ROOT}/rdk_logger;${CMF_GITHUB_SRC_URI_SUFFIX}" +SRC_URI = "${CMF_GITHUB_ROOT}/rdk_logger;protocol=https;branch=main" S = "${WORKDIR}/git" +SRCREV = "6dc321d7a5890ef947402532a990ebfb91839f2b" +PV = "3.1.0" +PR = "r0" +PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" DEPENDS = "log4c glib-2.0" DEPENDS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', ' safec', " ", d)}" -DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd syslog-helper', '', d)}" - -# RDK-E remove syslog_helper RDK-42429 -DEPENDS:remove = "syslog-helper" -PACKAGECONFIG[systemd-syslog-helper] = "--enable-systemd-syslog-helper,," - -#Milestone Support -EXTRA_OECONF += " --enable-milestone" PROVIDES = "getClockUptime" +#Milestone Support CFLAGS:append = " -DLOGMILESTONE" -CXXFLAGS:append = " -DLOGMILESTONE" -inherit autotools pkgconfig coverity pkgconfig +inherit autotools pkgconfig coverity CFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', ' `pkg-config --cflags libsafec`', '-fPIC', d)}" - CFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', '', ' -DSAFEC_DUMMY_API', d)}" LDFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', ' `pkg-config --libs libsafec`', '', d)}" -do_configure:append:broadband () { - #Use the RDKB Versions of the Files - install -m 644 ${S}/rdkb_debug.ini ${S}/debug.ini - install -m 644 ${S}/rdkb_log4crc ${S}/log4crc -} - do_install:append () { install -d ${D}${base_libdir}/rdk/ install -m 0755 ${S}/scripts/logMilestone.sh ${D}${base_libdir}/rdk } FILES:${PN} += "${base_libdir}/rdk/logMilestone.sh \ - /rdkLogMileStone \ - /rdklogctrl \ ${base_libdir} \ ${base_libdir}/rdk" diff --git a/recipes-common/rdkversion/rdkversion_1.0.bb b/recipes-common/rdkversion/rdkversion_1.0.bb index 7e7557c7c..dca33145c 100644 --- a/recipes-common/rdkversion/rdkversion_1.0.bb +++ b/recipes-common/rdkversion/rdkversion_1.0.bb @@ -4,10 +4,10 @@ SECTION = "console/utils" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=175792518e4ac015ab6696d16c4f607e" -PV ?= "1.0.0" -PR ?= "r0" +PV = "1.0.0" +PR = "r0" -SRCREV ?= "d461bbd2fc8299f6e5056f488ff944e90142e9b6" +SRCREV_rdkversion = "d461bbd2fc8299f6e5056f488ff944e90142e9b6" SRCREV_FORMAT = "rdkversion" SRC_URI = "${CMF_GITHUB_ROOT}/rdkversion;${CMF_GITHUB_SRC_URI_SUFFIX};name=rdkversion" diff --git a/recipes-common/rfc/rfc_git.bb b/recipes-common/rfc/rfc_git.bb index 51cc90bf5..b0905a370 100644 --- a/recipes-common/rfc/rfc_git.bb +++ b/recipes-common/rfc/rfc_git.bb @@ -6,6 +6,10 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=bef3b9130aa5d626df3f7171f2dadfe2" PACKAGECONFIG ??= "rfctool" PACKAGECONFIG[rfctool] = "--enable-rfctool=yes" +PV = "1.2.6" +PR = "r0" + +SRCREV = "df9171e723c5aa2bb007484db71e67ffd9d0518a" SRC_URI = "${CMF_GITHUB_ROOT}/rfc;${CMF_GITHUB_SRC_URI_SUFFIX};name=rfc" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" S = "${WORKDIR}/git" @@ -13,9 +17,22 @@ S = "${WORKDIR}/git" export cjson_CFLAGS = "-I$(PKG_CONFIG_SYSROOT_DIR)${includedir}/cjson" export cjson_LIBS = "-lcjson" -DEPENDS="cjson curl commonutilities libsyswrapper iarmmgrs-hal-headers" +DEPENDS="cjson curl commonutilities libsyswrapper" +DEPENDS:append:client = " iarmmgrs-hal-headers" +DEPENDS:append:broadband += " rbus" +export rbus_CFLAGS = "-I$(PKG_CONFIG_SYSROOT_DIR)${includedir}/rbus" +export rbus_LIBS = "-lrbus" + EXTRA_OEMAKE += "-e MAKEFLAGS=" -EXTRA_OECONF:append = " --enable-iarmbus=yes --enable-tr69hostif=yes" +EXTRA_OECONF:append:client = " --enable-iarmbus=yes --enable-tr69hostif=yes" +EXTRA_OECONF:append:broadband = " --enable-rdkb=yes --enable-tr181set=yes" +EXTRA_OEMAKE += "LIBS='-lsafec'" + +DEPENDS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', ' safec', " ", d)}" +CFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', ' `pkg-config --cflags libsafec`', '-fPIC', d)}" +CFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', '', ' -DSAFEC_DUMMY_API', d)}" +LDFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', ' `pkg-config --libs libsafec`', '', d)}" +LDFLAGS:append_morty = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', ' -Wl,--no-as-needed -lsafec-3.5.1 -Wl,--as-needed', '', d)}" inherit autotools pkgconfig coverity @@ -27,7 +44,6 @@ do_install:append () { install -d ${D}${base_libdir}/rdk install -d ${D}${sysconfdir} - install -m 0755 ${S}/rfcInit.sh ${D}${base_libdir}/rdk install -m 0644 ${S}/rfc.properties ${D}${sysconfdir}/rfc.properties } diff --git a/recipes-common/rtremote/rtremote_git.bb b/recipes-common/rtremote/rtremote_git.bb index 0cf47546a..0fdeced43 100644 --- a/recipes-common/rtremote/rtremote_git.bb +++ b/recipes-common/rtremote/rtremote_git.bb @@ -6,10 +6,8 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=cfbe95dd83ee8f2ea75475ecc20723e5" DEPENDS = " util-linux rtcore " PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" -PV ?= "2.0.0" -PR ?= "r0" - -PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" +PV = "2.0.0" +PR = "r3" S = "${WORKDIR}/git" @@ -84,7 +82,7 @@ do_configure:prepend:kirkstone() { do_install () { install -d ${D}/${libdir} - cp -a ${S}/librtRemote* ${D}/${libdir} + install -m 0755 ${S}/librtRemote* ${D}/${libdir} mkdir -p ${D}${includedir}/rtcore install -m 0644 ${S}/include/rtRemote.h ${D}${includedir}/rtcore/ diff --git a/recipes-common/sys_mon_tools/cpuprocanalyzer_git.bb b/recipes-common/sys_mon_tools/cpuprocanalyzer_git.bb index 76c380164..b8bb7faf1 100644 --- a/recipes-common/sys_mon_tools/cpuprocanalyzer_git.bb +++ b/recipes-common/sys_mon_tools/cpuprocanalyzer_git.bb @@ -2,7 +2,7 @@ DESCRIPTION = "CPU Proc Analyzer" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=175792518e4ac015ab6696d16c4f607e" -SRCREV = "${AUTOREV}" +SRCREV = "8fb410c461543ffa1d97245e9c493762d9392ad4" SRC_URI = "${CMF_GIT_ROOT}/rdk/components/generic/cpuprocanalyzer;protocol=${CMF_GIT_PROTOCOL};branch=${CMF_GIT_BRANCH};name=cpuprocanalyzer" S = "${WORKDIR}/git" diff --git a/recipes-common/sys_mon_tools/sys-resource_git.bb b/recipes-common/sys_mon_tools/sys-resource_git.bb deleted file mode 100644 index f5eaaa9f6..000000000 --- a/recipes-common/sys_mon_tools/sys-resource_git.bb +++ /dev/null @@ -1,32 +0,0 @@ -SUMMARY = "Sys mon tool - SYS RESOURCE recipe" - -DESCRIPTION = "Sys mon tool - SYS RESOURCE recipe" - -SECTION = "console/utils" - -include sys_mon_tools.inc - -SYSMONTOOL_NAME = "sys_resource" - - -export USE_SYS_RESOURCE_MLT="y" -export USE_IDLE_MLT="y" -export USE_MPEMEDIATUNE_MLT="n" -export USE_SYS_RESOURCE_MON="y" -export USE_SYSRES_PLATFORM="LINUX" - -PACKAGECONFIG = "sys-resource-mlt analyze-idle-mlt mlt-bt" -PACKAGECONFIG[sys-resource-mlt] = "--enable-sys-resource-mlt,,," -PACKAGECONFIG[analyze-idle-mlt] = "--enable-analyze-idle-mlt,,," -PACKAGECONFIG[lnk-mlt] = "--enable-lnk-mlt,,," -PACKAGECONFIG[file-wdr] = "--enable-file-wdr,,," -PACKAGECONFIG[cmas-cp] = "--enable-cmas-cp,,," -PACKAGECONFIG[cmas-it] = "--enable-cmas-it,,," -PACKAGECONFIG[mlt-bt] = "--enable-mlt-bt,,," -PACKAGECONFIG[cmat-sstats] = "--enable-cmat-sstats,,," - -CFLAGS:append:broadband = " -DRDK_BROADBAND" -CXXFLAGS:append:broadband = " -DRDK_BROADBAND" - - -inherit autotools pkgconfig coverity diff --git a/recipes-common/sys_mon_tools/sys_mon_tools.inc b/recipes-common/sys_mon_tools/sys_mon_tools.inc index 25b29c71c..5b07373ef 100644 --- a/recipes-common/sys_mon_tools/sys_mon_tools.inc +++ b/recipes-common/sys_mon_tools/sys_mon_tools.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=175792518e4ac015ab6696d16c4f607e" PV = "${RDK_RELEASE}+git${SRCPV}" -SRCREV = "${AUTOREV}" +SRCREV = "d332320370379900302daaaa3d181f3b40c5ac9a" SRC_URI += "${CMF_GIT_ROOT}/rdk/components/generic/sys_mon_tools/sys_resource;protocol=${CMF_GIT_PROTOCOL};branch=${CMF_GIT_BRANCH}" diff --git a/recipes-common/systimemgr/systimemgr_git.bb b/recipes-common/systimemgr/systimemgr_git.bb index c7bd53073..6438cf107 100755 --- a/recipes-common/systimemgr/systimemgr_git.bb +++ b/recipes-common/systimemgr/systimemgr_git.bb @@ -5,8 +5,9 @@ DESCRIPTION = "Timer , publishing and subscription interfaces." LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" -DEPENDS = "systimemgrinetrface systimemgrfactory rdk-logger libsyswrapper wpeframework-clientlibraries" +DEPENDS = "systimemgrinetrface systimemgrfactory rdk-logger libsyswrapper wpeframework-clientlibraries telemetry libchronyctl" +SRCREV_systemtimemgr = "1bf386d4806baec8b6ceeed17288ccf1a22c74a3" SRC_URI = "${CMF_GITHUB_ROOT}/systemtimemgr;${CMF_GITHUB_SRC_URI_SUFFIX};name=systemtimemgr" SRC_URI:append = " file://systimemgr.conf " @@ -14,7 +15,8 @@ SRC_URI:append = " file://secure.conf " PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" SRCREV_FORMAT = "systemtimemgr" -PV = "1.0" +PV = "1.7.0" +PR = "r0" CXXFLAGS += " -I${PKG_CONFIG_SYSROOT_DIR}/${includedir}/WPEFramework/powercontroller" LDFLAGS:append = " \ @@ -30,6 +32,7 @@ SYSLOG-NG_LOGRATE_systimemgr = "low" RDEPENDS:${PN} += "systimemgrfactory" +EXTRA_OECONF = "--enable-t2api=yes" do_install:append() { install -d ${D}${systemd_unitdir}/system install -d ${D}${systemd_unitdir}/system/systimemgr.service.d diff --git a/recipes-common/systimemgr/systimemgrfactory_git.bb b/recipes-common/systimemgr/systimemgrfactory_git.bb index be7e93116..5bb7573d6 100755 --- a/recipes-common/systimemgr/systimemgrfactory_git.bb +++ b/recipes-common/systimemgr/systimemgrfactory_git.bb @@ -5,16 +5,17 @@ DESCRIPTION = "Timer , publishing and subscription interfaces." LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://../LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" -DEPENDS = "systimemgrinetrface iarmbus jsonrpc virtual/mfrlib rdk-logger" +DEPENDS = "systimemgrinetrface iarmbus jsonrpc virtual/mfrlib rdk-logger telemetry libchronyctl" +SRCREV_systemtimemgrfactory = "1bf386d4806baec8b6ceeed17288ccf1a22c74a3" SRC_URI = "${CMF_GITHUB_ROOT}/systemtimemgr;${CMF_GITHUB_SRC_URI_SUFFIX};name=systemtimemgrfactory" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" SRCREV_FORMAT = "systemtimemgrfactory" -PV ?= "1.0.0" -PR ?= "r0" +PV = "1.7.0" +PR = "r0" ASNEEDED = "" @@ -28,8 +29,7 @@ S = "${WORKDIR}/git/systimerfactory" inherit autotools pkgconfig -RDEPENDS:${PN} += " jsonrpc curl jsoncpp " +RDEPENDS:${PN} += " jsonrpc curl jsoncpp" DEPENDS += " iarmmgrs wpeframework wpeframework-clientlibraries" -EXTRA_OECONF:append = " --enable-wpevgdrm --enable-dtt " - +EXTRA_OECONF:append = " --enable-wpevgdrm --enable-dtt --enable-t2api=yes" diff --git a/recipes-common/systimemgr/systimemgrinetrface_git.bb b/recipes-common/systimemgr/systimemgrinetrface_git.bb index 57d611e94..11c7a8cfa 100644 --- a/recipes-common/systimemgr/systimemgrinetrface_git.bb +++ b/recipes-common/systimemgr/systimemgrinetrface_git.bb @@ -6,6 +6,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://../LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" +SRCREV_systemtimemgrifc = "1bf386d4806baec8b6ceeed17288ccf1a22c74a3" SRC_URI = "${CMF_GITHUB_ROOT}/systemtimemgr;${CMF_GITHUB_SRC_URI_SUFFIX};name=systemtimemgrifc" @@ -15,7 +16,8 @@ PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" SRCREV_FORMAT = "systemtimemgrifc" -PV = "1.0" +PV = "1.7.0" +PR = "r0" inherit autotools pkgconfig ALLOW_EMPTY:${PN} = "1" diff --git a/recipes-common/telemetry/telemetry_git.bb b/recipes-common/telemetry/telemetry_git.bb index d1d9bb4a9..9fb655302 100644 --- a/recipes-common/telemetry/telemetry_git.bb +++ b/recipes-common/telemetry/telemetry_git.bb @@ -4,6 +4,7 @@ SECTION = "console/utils" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=175792518e4ac015ab6696d16c4f607e" +SRCREV = "1399fc337b3d49d143c749af1f05195dbe2b4131" SRC_URI = "${CMF_GITHUB_ROOT}/telemetry;${CMF_GITHUB_SRC_URI_SUFFIX}" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" @@ -13,18 +14,20 @@ DEPENDS += "rdk-logger" RDEPENDS:${PN} += "curl cjson glib-2.0 rbus" -PV ?= "1.0.1" -PR ?= "r0" +PV = "1.9.6" +PR = "r0" S = "${WORKDIR}/git" #compiler warnings were fixed as part of RDK-55297 #CFLAGS += " -Wall -Werror -Wextra -Wno-unused-parameter -Wno-pointer-sign -Wno-sign-compare -Wno-enum-compare -Wno-type-limits -Wno-enum-conversion -Wno-format-truncation" CFLAGS += " -Wall -Werror -Wextra" +#FIXME, this is temporary workaround for broadband. It has to be verified and remove these suppression flags +CFLAGS:append:broadband += " -DRDK_LOGGER -Wno-sign-compare -Wno-unused-parameter -Wno-pointer-sign" inherit pkgconfig autotools systemd ${@bb.utils.contains("DISTRO_FEATURES", "kirkstone", "python3native", "pythonnative", d)} breakpad-logmapper -CFLAGS += " -DDROP_ROOT_PRIV " +CFLAGS += " -DDROP_ROOT_PRIV -DENABLE_MTLS " LDFLAGS:append = " \ -lbreakpadwrapper \ diff --git a/recipes-common/utils/commonutilities_git.bb b/recipes-common/utils/commonutilities_git.bb new file mode 100644 index 000000000..1880418de --- /dev/null +++ b/recipes-common/utils/commonutilities_git.bb @@ -0,0 +1,33 @@ +SUMMARY = "RDK commonutilities" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=24691c8ce48996ecd1102d29eab1216e" + +# To have a possibility to override SRC_URI later, we are introducing the following workaround: +SRCREV = "a97a431ad0d149f4dc9521cf1d49c150d421cce9" + +SRC_URI = "${CMF_GITHUB_ROOT}/common_utilities;module=.;${CMF_GITHUB_SRC_URI_SUFFIX}" + +PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" +DEPENDS +=" cjson curl rdk-logger rdkcertconfig" +#RDEPENDS:{PN} += " rfc" + +#uncomment the following line to turn on debugging +#CFLAGS:append = " -DCURL_DEBUG" +# or enable this distro feature +CFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'debug_curl_cdl', ' -DCURL_DEBUG', '', d)}" + +DEPENDS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', ' safec', " ", d)}" +CFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', ' `pkg-config --cflags libsafec`', '-fPIC', d)}" +CFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', '', ' -DSAFEC_DUMMY_API', d)}" +LDFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', ' `pkg-config --libs libsafec`', '', d)}" + +LDFLAGS:append = " -lsafec -lsecure_wrapper" + +CFLAGS:append = " -DRDK_LOGGER" + +PV = "1.5.5" +PR = "r0" + +S = "${WORKDIR}/git" + +inherit autotools pkgconfig coverity diff --git a/recipes-common/webconfig-framework/webconfig-framework.bb b/recipes-common/webconfig-framework/webconfig-framework.bb index 13f4a2faf..51c933682 100644 --- a/recipes-common/webconfig-framework/webconfig-framework.bb +++ b/recipes-common/webconfig-framework/webconfig-framework.bb @@ -13,9 +13,9 @@ RDEPENDS:${PN}:remove_morty = "bash" SRC_URI = "${CMF_GITHUB_ROOT}/WebconfigFramework;${CMF_GITHUB_SRC_URI_SUFFIX}" SRCREV_FORMAT = "WebconfigFramework" -SRCREV = "bf798d05bfd5de2b4e1a58d76fdc0108b5a85091" -PV ?= "1.0.0" -PR ?= "r0" +SRCREV = "9c7a05a78aefd1d5da1afe3cf050499888b93fb7" +PV = "1.0.0" +PR = "r0" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" diff --git a/recipes-connectivity/bluetooth/bleadvhci.bb b/recipes-connectivity/bluetooth/bleadvhci.bb new file mode 100644 index 000000000..a54cb8373 --- /dev/null +++ b/recipes-connectivity/bluetooth/bleadvhci.bb @@ -0,0 +1,23 @@ +DESCRIPTION = "Bluetooth LE Application to advertise on boot-up" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +SRCREV = "${AUTOREV}" + +SRC_URI += "file://bleadvhci.service" +SRC_URI += "file://bleadvhci.path" + +do_install:append() { + install -d ${D}${systemd_unitdir}/system + + install -m 0644 ${WORKDIR}/bleadvhci.service ${D}${systemd_unitdir}/system/ + install -m 0644 ${WORKDIR}/bleadvhci.path ${D}${systemd_unitdir}/system/ +} + +SYSTEMD_SERVICE:${PN}:remove = " bleadvhci.service" +SYSTEMD_SERVICE:${PN} += " bleadvhci.path" + +FILES:${PN} = "${sysconfdir}/* \ + ${systemd_unitdir}/system/* \ + " +inherit systemd diff --git a/recipes-connectivity/bluetooth/bluetooth-core_git.bb b/recipes-connectivity/bluetooth/bluetooth-core_git.bb index ccdc96364..f85e7d87f 100644 --- a/recipes-connectivity/bluetooth/bluetooth-core_git.bb +++ b/recipes-connectivity/bluetooth/bluetooth-core_git.bb @@ -5,24 +5,33 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=175792518e4ac015ab6696d16c4f607e" BLUEZ ?= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', bb.utils.contains('DISTRO_FEATURES', 'bluez5', 'bluez5', 'bluez4', d), '', d)}" -DEPENDS = "dbus ${BLUEZ} rdk-logger" +DEPENDS = "dbus ${BLUEZ} rdk-logger telemetry" +DEPENDS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', ' safec', " ", d)}" DEPENDS:append = "${@bb.utils.contains('DISTRO_FEATURES', 'gdbus_bluez5', 'glib-2.0-native', '', d)}" -RDEPENDS:${PN} = "dbus ${BLUEZ} rdk-logger" -PV ?= "1.0.0" -PR ?= "r0" +RDEPENDS:${PN} = "dbus ${BLUEZ} rdk-logger telemetry" +PV = "1.0.11" +PR = "r2" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" -SRCREV = "1a38598ab61c2b1e2b238eb2444f2e74d34c176a" +SRCREV = "c8d1ca7eb057eff90b7ce342ce532b9cd18a55e7" SRCREV_FORMAT = "bluetooth-core" SRC_URI = "${CMF_GITHUB_ROOT}/bluetooth;${CMF_GITHUB_SRC_URI_SUFFIX}" S = "${WORKDIR}/git" +CFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', ' `pkg-config --cflags libsafec`', '-fPIC', d)}" + +CFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', '', ' -DSAFEC_DUMMY_API', d)}" +LDFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', ' `pkg-config --libs libsafec`', '', d)}" CFLAGS:append:morty = " -DMORTY_BUILD" CFLAGS:append:daisy = " -DMORTY_BUILD" +# BT unsupported gamepad feature enabled +ENABLE_UNSUPPORT_GAMEPAD = "--enable-unsupportedgamepad=${@bb.utils.contains('DISTRO_FEATURES', 'disable_unsupported_gamepad','no','yes',d)}" +EXTRA_OECONF += " ${ENABLE_UNSUPPORT_GAMEPAD} " + ENABLE_BTR_IFCE = "--enable-btr-ifce=${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', \ bb.utils.contains('DISTRO_FEATURES', 'gdbus_bluez5', 'gdbus_bluez5', \ bb.utils.contains('DISTRO_FEATURES', 'bluez5', 'bluez5', 'bluez4', d), d), 'none', d)}" diff --git a/recipes-connectivity/bluetooth/bluetooth-mgr_git.bb b/recipes-connectivity/bluetooth/bluetooth-mgr_git.bb index 9f229e89b..ab895a29a 100644 --- a/recipes-connectivity/bluetooth/bluetooth-mgr_git.bb +++ b/recipes-connectivity/bluetooth/bluetooth-mgr_git.bb @@ -4,10 +4,11 @@ SECTION = "console/utils" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=175792518e4ac015ab6696d16c4f607e" -PV ?= "1.0.0" -PR ?= "r0" +PV = "1.0.11" +PR = "r2" SRCREV_FORMAT = "bluetooth-mgr" +SRCREV = "cbdbcc195aad9a720f3c5e9c5ee73eab6c4f232f" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" SRC_URI = "${CMF_GITHUB_ROOT}/bluetooth_mgr;${CMF_GITHUB_SRC_URI_SUFFIX}" SRC_URI:append = " file://btmgr.conf" @@ -26,6 +27,9 @@ EXTRA_OECONF = " ${ENABLE_GST1}" ENABLE_SAFEC = "--enable-safec=${@bb.utils.contains('DISTRO_FEATURES', 'safec','yes', 'no', d)}" EXTRA_OECONF += " ${ENABLE_SAFEC}" +ENABLE_BRCM_BUILD = "--enable-brcm-build=${@bb.utils.contains('DISTRO_FEATURES', 'btr_bcm_pcm_sink','yes', 'no', d)}" +EXTRA_OECONF += " ${ENABLE_BRCM_BUILD}" + # RPC-IARM Must be Enabled for Video Platforms only; Also iarmbus is dependency for Video Platforms DEPENDS:append:client = " iarmbus ${@bb.utils.contains('DISTRO_FEATURES', 'ENABLE_NETWORKMANAGER', '', 'netsrvmgr', d)}" DEPENDS:append:hybrid = " iarmbus" @@ -84,6 +88,10 @@ CFLAGS:append =" ${@bb.utils.contains('RDEPENDS:${PN}', 'virtual/${MLPREFIX}medi ENABLE_RDK_LOGGER = "--enable-rdk-logger=${@bb.utils.contains('RDEPENDS:${PN}', '${MLPREFIX}rdk-logger', 'yes', 'no', d)}" EXTRA_OECONF += " ${ENABLE_RDK_LOGGER}" +# Autoconnect feature will always be enabled +ENABLE_AUTO_CONNECT = "--enable-autoconnectfeature=yes" +EXTRA_OECONF += " ${ENABLE_AUTO_CONNECT} " + EXTRA_OECONF:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--enable-systemd-notify', '', d)}" EXTRA_OECONF:append:client = " --enable-sys-diag" diff --git a/recipes-connectivity/bluetooth/files/bleadvhci.path b/recipes-connectivity/bluetooth/files/bleadvhci.path new file mode 100644 index 000000000..a08b33d22 --- /dev/null +++ b/recipes-connectivity/bluetooth/files/bleadvhci.path @@ -0,0 +1,9 @@ +[Unit] +Description= RCP Beaconing + +[Path] +PathExists=/tmp/bluezup +Unit=bleadvhci.service + +[Install] +WantedBy=multi-user.target diff --git a/recipes-connectivity/bluetooth/files/bleadvhci.service b/recipes-connectivity/bluetooth/files/bleadvhci.service new file mode 100644 index 000000000..233470d39 --- /dev/null +++ b/recipes-connectivity/bluetooth/files/bleadvhci.service @@ -0,0 +1,29 @@ +########################################################################## +# If not stated otherwise in this file or this component's Licenses.txt +# file the following copyright and licenses apply: +# +# Copyright 2022 RDK Management +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +########################################################################## +[Unit] +Description=BLE LE Advertisement using hci + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/etc/ble_adv_onboard_hci.sh +SyslogIdentifier=ble-adv-onboard-hci + +[Install] +WantedBy=multi-user.target diff --git a/recipes-containers/dobby/dobby-thunderplugin.bb b/recipes-containers/dobby/dobby-thunderplugin.bb index 6abd444cd..ba22da1cb 100644 --- a/recipes-containers/dobby/dobby-thunderplugin.bb +++ b/recipes-containers/dobby/dobby-thunderplugin.bb @@ -27,5 +27,3 @@ FILES_SOLIBSDEV = "" FILES:${PN} += "${libdir}/plugins/dobby/*.so*" -PV ?= "1.0.0" -PR ?= "r0" diff --git a/recipes-containers/dobby/dobby.bb b/recipes-containers/dobby/dobby.bb index 71a1085c1..edf6a927f 100644 --- a/recipes-containers/dobby/dobby.bb +++ b/recipes-containers/dobby/dobby.bb @@ -29,7 +29,15 @@ S = "${WORKDIR}/git" inherit pkgconfig cmake systemd logrotate_config inherit syslog-ng-config-gen -LOGROTATE_NAME="dobby" +SYSLOG-NG_FILTER = "rdkappmanagers" +SYSLOG-NG_SERVICE_rdkappmanagers = "dobby.service" +SYSLOG-NG_DESTINATION_rdkappmanagers = "rdkappmanagers.log" +SYSLOG-NG_LOGRATE_rdkappmanagers = "high" +LOGROTATE_LOGNAME_rdkappmanagers = "rdkappmanagers.log" +LOGROTATE_SIZE_MEM_rdkappmanagers = "10485760" +LOGROTATE_ROTATION_MEM_rdkappmanagers = "4" + +LOGROTATE_NAME="dobby rdkappmanagers" LOGROTATE_LOGNAME_dobby="dobby.log" LOGROTATE_SIZE_dobby="1572864" LOGROTATE_ROTATION_dobby="3" @@ -96,5 +104,3 @@ FILES:${PN} += "${libexecdir}/DobbyInit" FILES:${PN} += "${libdir}/plugins/dobby/*.so*" FILES:${PN} += "${libdir}/libethanlog.so*" FILES:${PN} += "${libdir}/libocispec.so*" -PV ?= "1.0.0" -PR ?= "r0" diff --git a/recipes-containers/dobby/dobby.inc b/recipes-containers/dobby/dobby.inc index 5339c9593..6db83ab9d 100644 --- a/recipes-containers/dobby/dobby.inc +++ b/recipes-containers/dobby/dobby.inc @@ -1,4 +1,5 @@ -SRC_URI = "gitsm://github.com/rdkcentral/Dobby;protocol=https;branch=release/v3.14" +SRC_URI = "gitsm://github.com/rdkcentral/Dobby;protocol=https;branch=release/v3.20" -PV = "3.14.0+git${SRCPV}" -SRCREV = "c7ce28554c6306b3f42493a2ad3e5e3ba44dbe81" +PV = "3.20.0" +PR = "r0" +SRCREV = "e04168fbccba6546e0f284543139ba2d769c4b23" diff --git a/recipes-containers/dsm/dsm.bb b/recipes-containers/dsm/dsm.bb index 99df3ad74..3d5541537 100644 --- a/recipes-containers/dsm/dsm.bb +++ b/recipes-containers/dsm/dsm.bb @@ -3,7 +3,41 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=50e2d278b66b3b7b20bc165c146a2b58" S = "${WORKDIR}/git" -SRC_URI = "${CMF_GITHUB_ROOT}/DSM;protocol=${CMF_GIT_PROTOCOL};branch=${CMF_GITHUB_MAIN_BRANCH}" +SRC_URI = "${CMF_GITHUB_ROOT}/DSM;protocol=${CMF_GIT_PROTOCOL};branch=${CMF_GITHUB_MAIN_BRANCH} \ + file://dsm.config \ + file://dsm.service " -SRCREV = "e2386b3ab0640fd7ffacb5f6895d05b176f63eba" -inherit pkgconfig cmake +SRCREV = "c3cfd0a9d1ee1e9c2f2e8db4348b314aa32439bc" +SRCREV:kirkstone = "be204cb7f1e46ad6b66489172010eee80967b4be" +DEPENDS:append:kirkstone = " dobby " + +EXTRA_OECMAKE = " -DENABLE_RBUS_PROVIDER=ON" + +inherit pkgconfig cmake systemd + +DEPENDS += "rbus" +DEPENDS += "dobby" + +RDEPENDS:${PN} += "rbus" +RDEPENDS:${PN} += "dobby" + +SYSTEMD_AUTO_ENABLE:${PN} = "enable" +SYSTEMD_SERVICE:${PN} = "dsm.service" + +FILES:${PN} += " ${systemd_unitdir}/system/dsm.service \ + ${sysconfdir}/dsm.config \ + /home/root/destination " + +OECMAKE_CXX_FLAGS += " -I${STAGING_INCDIR}/rbus " +OECMAKE_CXX_FLAGS += "-I${STAGING_INCDIR}" + +SYSTEMD_AUTO_ENABLE:${PN} = "enable" +SYSTEMD_SERVICE:${PN} = " dsm.service " + +do_install:append() { + install -d ${D}${sysconfdir} + install -D -m 644 ${WORKDIR}/dsm.config ${D}${sysconfdir} + install -d ${D}/${systemd_unitdir}/system + install -m 0644 ${WORKDIR}/dsm.service ${D}/${systemd_unitdir}/system/dsm.service + install -d ${D}/home/root/destination +} diff --git a/recipes-containers/dsm/files/dsm.config b/recipes-containers/dsm/files/dsm.config new file mode 100644 index 000000000..dd8150de4 --- /dev/null +++ b/recipes-containers/dsm/files/dsm.config @@ -0,0 +1,49 @@ +{ + "DSMController": { + "EELimit": 5, + "RuntimeConfig": "/etc/dsm.config" + }, + "ExecutionEnvironments": [ + { + "name": "default", + "enabled": true, + "status": "Up", + "InitialRunLevel": 5, + "CurrentRunLevel": 5, + "id": 1, + "packager": "local-tarball", + "default": true + }, + { + "name": "test", + "enabled": true, + "status": "Up", + "InitialRunLevel": 5, + "CurrentRunLevel": 5, + "id": 2, + "packager": "local-tarball" + }, + { + "name": "user", + "enabled": true, + "status": "Up", + "InitialRunLevel": 5, + "CurrentRunLevel": 5, + "id": 2, + "packager": "local-tarball" + } + ], + "Packagers": { + "local-tarball": { + "repo": "/home/root/repo", + "destination": "/home/root/destination" + }, + "remote-tarball": { + "repo": "http://localhost:8080" + } + }, + "CommandServer": { + "domain-socket": "command.socket" + } +} + diff --git a/recipes-containers/dsm/files/dsm.service b/recipes-containers/dsm/files/dsm.service new file mode 100644 index 000000000..756afbfe9 --- /dev/null +++ b/recipes-containers/dsm/files/dsm.service @@ -0,0 +1,13 @@ +[Unit] +Description=Broadband DAC (DSM) +After=dobby.service rbus.service network.target + +[Service] +Type=simple +ExecStart=/usr/bin/dsm +WorkingDirectory=/home/root/ +Restart=no +Environment="DSM_CONFIG_FILE=/etc/dsm.config" + +[Install] +WantedBy=multi-user.target diff --git a/recipes-containers/lxccpid/lxccpid_git.bb b/recipes-containers/lxccpid/lxccpid_git.bb index 5964ce56f..f8a2886fd 100644 --- a/recipes-containers/lxccpid/lxccpid_git.bb +++ b/recipes-containers/lxccpid/lxccpid_git.bb @@ -3,7 +3,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=175792518e4ac015ab6696d16c4f607e" SRC_URI = "${CMF_GIT_ROOT}/rdk/components/generic/lxccpid;protocol=${CMF_GIT_PROTOCOL};branch=${CMF_GIT_MASTER_BRANCH};name=lxccpid" -SRCREV ?= "${AUTOREV}" +SRCREV ?= "25ba689f67db86ea7dd35b1cfd649b4dd51ac99c" S = "${WORKDIR}/git" diff --git a/recipes-core/packagegroups/packagegroup-rdk-mediaserver.bb b/recipes-core/packagegroups/packagegroup-rdk-mediaserver.bb index 0d8e194cc..fe0d30df9 100644 --- a/recipes-core/packagegroups/packagegroup-rdk-mediaserver.bb +++ b/recipes-core/packagegroups/packagegroup-rdk-mediaserver.bb @@ -17,7 +17,6 @@ RDEPENDS:packagegroup-rdk-generic-mediaserver = "\ hdparm \ dibbler-client \ procps \ - sys-utils \ xfsprogs \ ntp \ power-state-monitor \ diff --git a/recipes-core/packagegroups/packagegroup-rdk-oss-broadband.bb b/recipes-core/packagegroups/packagegroup-rdk-oss-broadband.bb index 9a0c952bb..f97a39cd0 100644 --- a/recipes-core/packagegroups/packagegroup-rdk-oss-broadband.bb +++ b/recipes-core/packagegroups/packagegroup-rdk-oss-broadband.bb @@ -71,6 +71,7 @@ RDEPENDS:packagegroup-rdk-oss-broadband = "\ " DEPENDS += " libsyswrapper" +RDEPENDS:packagegroup-rdk-oss-broadband += " ${@bb.utils.contains('DISTRO_FEATURES', 'btr_hciadv', 'bleadvhci', '', d)}" RDEPENDS:packagegroup-rdk-oss-broadband += " ${@bb.utils.contains('DISTRO_FEATURES', 'snmppa', 'net-snmp-client net-snmp-server net-snmp-mibs net-snmp-server-snmpd', '', d)}" RDEPENDS:packagegroup-rdk-oss-broadband += " ${@bb.utils.contains('DISTRO_FEATURES', 'rdk-oss-ssa', 'rdk-oss-ssa ecryptfs-utils', '', d)}" RDEPENDS:packagegroup-rdk-oss-broadband += " ${@bb.utils.contains('DISTRO_FEATURES', 'gateway_manager', ' rsync ', '', d)}" diff --git a/recipes-core/sysctl/files/98-sysctl-mw.conf b/recipes-core/sysctl/files/98-sysctl-mw.conf index 9508252cc..9cfc1826b 100644 --- a/recipes-core/sysctl/files/98-sysctl-mw.conf +++ b/recipes-core/sysctl/files/98-sysctl-mw.conf @@ -3,7 +3,7 @@ net.netfilter.nf_conntrack_helper = 0 vm.panic_on_oom = 1 vm.overcommit_memory = 0 -kernel.panic = 3 +kernel.panic = 40 kernel.panic_on_oops = 1 net.ipv6.conf.all.forwarding = 0 @@ -30,8 +30,8 @@ net.ipv4.conf.default.accept_source_route = 0 net.core.rmem_max=1048576 -vm.swappiness=80 -vm.vfs_cache_pressure=200 -vm.watermark_scale_factor=40 -vm.dirty_background_ratio=1 -vm.dirty_ratio=1 +vm.swappiness = 60 +vm.vfs_cache_pressure = @RDK_VM_VFS_CACHE_PRESSURE@ +vm.watermark_scale_factor = @RDK_VM_WATERMARK_SCALE_FACTOR@ +vm.dirty_background_ratio = 10 +vm.dirty_ratio = 20 diff --git a/recipes-core/sysctl/rdksysctl.bb b/recipes-core/sysctl/rdksysctl.bb index 9b1365c52..c68052bd7 100644 --- a/recipes-core/sysctl/rdksysctl.bb +++ b/recipes-core/sysctl/rdksysctl.bb @@ -6,10 +6,21 @@ LIC_FILES_CHKSUM = "file://${THISDIR}/files/Apache-2.0;md5=3b83ef96387f14655fc85 SRC_URI = "file://50-sysctl.conf" SRC_URI += "file://98-sysctl-mw.conf" +# Defaults (keep existing behavior unless overridden per MACHINE) +RDK_VM_VFS_CACHE_PRESSURE ?= "100" +RDK_VM_WATERMARK_SCALE_FACTOR ?= "10" + +PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" + S = "${WORKDIR}" do_install() { install -d ${D}${sysconfdir}/sysctl.d install -m 0644 ${S}/50-sysctl.conf ${D}${sysconfdir}/sysctl.d - install -m 0644 ${S}/98-sysctl-mw.conf ${D}${sysconfdir}/sysctl.d + # Generate 98-sysctl-mw.conf with machine-configurable values + sed -e "s/@RDK_VM_VFS_CACHE_PRESSURE@/${RDK_VM_VFS_CACHE_PRESSURE}/g" \ + -e "s/@RDK_VM_WATERMARK_SCALE_FACTOR@/${RDK_VM_WATERMARK_SCALE_FACTOR}/g" \ + ${S}/98-sysctl-mw.conf > ${D}${sysconfdir}/sysctl.d/98-sysctl-mw.conf + + chmod 0644 ${D}${sysconfdir}/sysctl.d/98-sysctl-mw.conf } diff --git a/recipes-devtools/memcapture/memcapture_git.bb b/recipes-devtools/memcapture/memcapture_git.bb new file mode 100644 index 000000000..ce6a70c2b --- /dev/null +++ b/recipes-devtools/memcapture/memcapture_git.bb @@ -0,0 +1,32 @@ +SUMMARY = "Memcapture - memory reporting and analysis tool for RDK" +DESCRIPTION = "A C++ tool to capture the average memory usage of a platform including per-process memory usage and data metrics present them in a report" + +LICENSE = "Apache-2.0" + +LIC_FILES_CHKSUM = "file://${WORKDIR}/git/LICENSE;md5=1b8525f92b462b86205ffaba159b4481" + +PV = "2.0.2" +PR = "r0" +PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" + +SRCREV = "0331c6f16a985e23f6a2133e2351f4f781317e5d" +SRC_URI = "git://github.com/rdkcentral/MemCapture.git;branch=main;name=src;destsuffix=git" + +S = "${WORKDIR}/git" +B = "${WORKDIR}/build" + +DEPENDS = "inja nlohmann-json" + +inherit cmake syslog-ng-config-gen systemd +EXTRA_OECMAKE += "-DCMAKE_BUILD_TYPE=Release" +EXTRA_OECMAKE += "${@bb.utils.contains('DISTRO_FEATURES', 'disable_idle_metrics', '-DENABLE_CPU_IDLE_METRICS=OFF', '-DENABLE_CPU_IDLE_METRICS=ON', d)}" + +SYSLOG-NG_FILTER = "memcapture" +SYSLOG-NG_SERVICE_memcapture = "memcapture.service" +SYSLOG-NG_DESTINATION_memcapture = "memcapture.log" +SYSLOG-NG_LOGRATE_memcapture = "high" + +do_install () { + install -d ${D}${bindir} + install -m 4755 ${B}/MemCapture ${D}${bindir} +} diff --git a/recipes-extended/memcr/files/0001-RDK-47153-Option-to-set-dump-dir-and-compression-per.patch b/recipes-extended/memcr/files/0001-RDK-47153-Option-to-set-dump-dir-and-compression-per.patch new file mode 100644 index 000000000..799c0f519 --- /dev/null +++ b/recipes-extended/memcr/files/0001-RDK-47153-Option-to-set-dump-dir-and-compression-per.patch @@ -0,0 +1,571 @@ +From 4f95172d70777357a4b90dd356372ae36be3cb07 Mon Sep 17 00:00:00 2001 +From: Adrian Muzyka +Date: Wed, 30 Jul 2025 08:26:52 +0200 +Subject: [PATCH] RDK-47153: Option to set dump dir and compression per PID + +--- + memcr.c | 309 +++++++++++++++++++++++++++++++++++++++++--- + memcrclient_proto.h | 23 +++- + 2 files changed, 312 insertions(+), 20 deletions(-) + +diff --git a/memcr.c b/memcr.c +index 264ffa3..c12ef3c 100644 +--- a/memcr.c ++++ b/memcr.c +@@ -118,7 +118,15 @@ struct vm_area { + unsigned long flags; + }; + +-static char *dump_dir; ++struct dump_dir_list { ++ char *dir; ++ struct dump_dir_list *next; ++}; ++ ++#define MEMCR_DUMPDIR_DEFAULT "/tmp" ++ ++static struct dump_dir_list *allowed_dump_dirs; ++static char *dfl_dump_dir = MEMCR_DUMPDIR_DEFAULT; + static char *parasite_socket_dir; + static int parasite_socket_gid = -1; + static int parasite_socket_use_netns; +@@ -150,6 +158,7 @@ static pid_t tids[MAX_THREADS]; + static int nr_threads; + + #define SERVICE_MODE_SELECT_TIMEOUT_MS 100 ++#define SERVICE_MODE_SOCKET_TIMEOUT_MS 1000 + + #define MAX_VMAS (3*4096) + static struct vm_area vmas[MAX_VMAS]; +@@ -206,6 +215,7 @@ static struct { + int state; + int checkpoint_abort; + int checkpoint_cmd_sd; ++ struct service_options options; + } checkpoint_service_data[CHECKPOINTED_PIDS_LIMIT]; + + #define SOCKET_INVALID (-1) +@@ -430,7 +440,7 @@ static void parasite_socket_init(struct sockaddr_un *addr, pid_t pid) + } + } + +-static void cleanup_pid(pid_t pid) ++static void cleanup_pid(pid_t pid, const char* dump_dir) + { + char path[PATH_MAX]; + +@@ -826,7 +836,15 @@ static int dump_write(int fd, const void *buf, size_t count) + return ret; + } + +-static void init_pid_checkpoint_data(pid_t pid) ++static void clear_checkpoint_options(struct service_options *options) ++{ ++ options->is_dump_dir = FALSE; ++ options->dump_dir[0] = 0; ++ options->is_compress_alg = FALSE; ++ options->compress_alg = MEMCR_COMPRESS_NONE; ++} ++ ++static void init_pid_checkpoint_data(pid_t pid, struct service_options *options) + { + pthread_mutex_lock(&checkpoint_service_data_lock); + for (int i=0; iis_dump_dir; ++ strncpy(checkpoint_service_data[i].options.dump_dir, options->dump_dir, ++ MEMCR_DUMPDIR_LEN_MAX); ++ checkpoint_service_data[i].options.is_compress_alg = options->is_compress_alg; ++ checkpoint_service_data[i].options.compress_alg = options->compress_alg; ++ } else { ++ clear_checkpoint_options(&checkpoint_service_data[i].options); ++ } + pthread_mutex_unlock(&checkpoint_service_data_lock); + return; + } +@@ -851,11 +878,14 @@ static void cleanup_checkpointed_pids(void) + if (checkpoint_service_data[i].pid != PID_INVALID) { + fprintf(stdout, "[i] Killing PID %d\n", checkpoint_service_data[i].pid); + kill(checkpoint_service_data[i].pid, SIGKILL); +- cleanup_pid(checkpoint_service_data[i].pid); ++ const char *dir = checkpoint_service_data[i].options.is_dump_dir ? ++ checkpoint_service_data[i].options.dump_dir : dfl_dump_dir; ++ cleanup_pid(checkpoint_service_data[i].pid, dir); + checkpoint_service_data[i].pid = PID_INVALID; + checkpoint_service_data[i].worker = PID_INVALID; + checkpoint_service_data[i].state = STATE_RESTORED; + checkpoint_service_data[i].checkpoint_cmd_sd = SOCKET_INVALID; ++ clear_checkpoint_options(&checkpoint_service_data[i].options); + } + } + pthread_mutex_unlock(&checkpoint_service_data_lock); +@@ -918,6 +948,7 @@ static void clear_pid_checkpoint_data(pid_t pid) + checkpoint_service_data[i].worker = PID_INVALID; + checkpoint_service_data[i].checkpoint_cmd_sd = SOCKET_INVALID; + checkpoint_service_data[i].state = STATE_RESTORED; ++ clear_checkpoint_options(&checkpoint_service_data[i].options); + } + } + pthread_mutex_unlock(&checkpoint_service_data_lock); +@@ -929,11 +960,14 @@ static void clear_pid_on_worker_exit_non_blocking(pid_t worker) + if (checkpoint_service_data[i].worker == worker) { + fprintf(stdout, "[+] Clearing pid: %d with worker: %d on worker exit ...\n", + checkpoint_service_data[i].pid, worker); +- cleanup_pid(checkpoint_service_data[i].pid); ++ const char *dir = checkpoint_service_data[i].options.is_dump_dir ? ++ checkpoint_service_data[i].options.dump_dir : dfl_dump_dir; ++ cleanup_pid(checkpoint_service_data[i].pid, dir); + checkpoint_service_data[i].pid = PID_INVALID; + checkpoint_service_data[i].worker = PID_INVALID; + checkpoint_service_data[i].checkpoint_cmd_sd = SOCKET_INVALID; + checkpoint_service_data[i].state = STATE_RESTORED; ++ clear_checkpoint_options(&checkpoint_service_data[i].options); + } + } + } +@@ -1629,7 +1663,7 @@ static int get_target_pages(int pid, struct vm_area vmas[], int nr_vmas) + if (pd < 0) + fprintf(stdout, "[i] /proc/pagemap open failed %m, using remote access\n"); + +- snprintf(path, sizeof(path), "%s/pages-%d.img", dump_dir, pid); ++ snprintf(path, sizeof(path), "%s/pages-%d.img", dfl_dump_dir, pid); + + fd = dump_open(path, O_CREAT | O_TRUNC | O_WRONLY, S_IRUSR | S_IWUSR); + if (fd < 0) { +@@ -1748,7 +1782,7 @@ static int target_set_pages(pid_t pid) + int cd = -1; + int fd = -1; + +- snprintf(path, sizeof(path), "%s/pages-%d.img", dump_dir, pid); ++ snprintf(path, sizeof(path), "%s/pages-%d.img", dfl_dump_dir, pid); + + fd = dump_open(path, O_RDONLY, 0); + if (fd < 0) { +@@ -1870,7 +1904,7 @@ static int cmd_checkpoint(pid_t pid) + } + + fprintf(stdout, "[i] download took %lu ms\n", diff_ms(&ts)); +- fprintf(stdout, "[i] stored at %s/pages-%d.img\n", dump_dir, pid); ++ fprintf(stdout, "[i] stored at %s/pages-%d.img\n", dfl_dump_dir, pid); + + get_target_rss(pid, &vms_b); + +@@ -2361,6 +2395,104 @@ static void sigpipe_handler(int sig, siginfo_t *sip, void *notused) + fprintf(stdout, "[!] program received SIGPIPE from %d.\n", sip->si_pid); + } + ++static void set_dump_dirs(const char *dirs) ++{ ++ char real_dir[PATH_MAX]; ++ ++ //clear current allowed dirs ++ while (allowed_dump_dirs) { ++ if (allowed_dump_dirs->dir) ++ free(allowed_dump_dirs->dir); ++ ++ struct dump_dir_list *curr = allowed_dump_dirs; ++ allowed_dump_dirs = allowed_dump_dirs->next; ++ free(curr); ++ } ++ ++ if (dirs == NULL) { ++ fprintf(stderr, "[!] %s(): Error dump dir cannot be empty!\n", __func__); ++ exit(EXIT_FAILURE); ++ } ++ ++ // Create a mutable copy of dirs ++ char *dirs_copy = strdup(dirs); ++ if (!dirs_copy) { ++ fprintf(stderr, "[!] %s(): Memory allocation error!\n", __func__); ++ exit(EXIT_FAILURE); ++ } ++ ++ struct dump_dir_list *dump_dir_iter = NULL; ++ char *dir = strtok(dirs_copy, ";"); ++ while (dir) { ++ if (realpath(dir, real_dir)) { ++ struct dump_dir_list *new_dump_dir = malloc(sizeof(struct dump_dir_list)); ++ if (!new_dump_dir) { ++ fprintf(stderr, "[!] %s(): Memory allocation error!\n", __func__); ++ exit(EXIT_FAILURE); ++ } ++ ++ new_dump_dir->dir = strdup(real_dir); ++ if (!new_dump_dir->dir) { ++ fprintf(stderr, "[!] %s(): Memory allocation error!\n", __func__); ++ exit(EXIT_FAILURE); ++ } ++ fprintf(stdout, "[+] Allowed dump directory: %s\n", new_dump_dir->dir); ++ ++ new_dump_dir->next = NULL; ++ ++ if (!allowed_dump_dirs) { ++ allowed_dump_dirs = new_dump_dir; ++ dump_dir_iter = allowed_dump_dirs; ++ } else { ++ dump_dir_iter->next = new_dump_dir; ++ dump_dir_iter = dump_dir_iter->next; ++ } ++ ++ } else { ++ fprintf(stderr, "[!] %s(): Unable to resolve allowed directory: %s\n", __func__, dir); ++ exit(EXIT_FAILURE); ++ } ++ ++ dir = strtok(NULL, ";"); ++ } ++ ++ free(dirs_copy); ++ ++ if (!allowed_dump_dirs) { ++ fprintf(stderr, "[!] %s(): No allowed dump directories!\n", __func__); ++ exit(EXIT_FAILURE); ++ } ++ ++ // Default dump dir is the first allowed one ++ dfl_dump_dir = allowed_dump_dirs->dir; ++ fprintf(stdout, "[+] %s(): Allowed dump directories set.\n", __func__); ++} ++ ++ ++static int is_dump_dir_path_allowed(const char *dump_dir_path) { ++ char real_dir_path[PATH_MAX]; ++ ++ // Resolve the real path ++ if (!realpath(dump_dir_path, real_dir_path)) { ++ fprintf(stderr, "[-] %s(): Unable to resolve dump dir path: %s\n", __func__, dump_dir_path); ++ return 0; ++ } ++ ++ fprintf(stdout, "[+] %s(): Real dir path to check: %s\n", __func__, real_dir_path); ++ ++ // iterate over allowed dump dirs and do an exact match ++ struct dump_dir_list *curr = allowed_dump_dirs; ++ while (curr) { ++ if (strcmp(real_dir_path, curr->dir) == 0) { ++ return 1; ++ } ++ curr = curr->next; ++ } ++ ++ fprintf(stderr, "[-] %s(): Dump dir path is not allowed: %s\n", __func__, dump_dir_path); ++ return 0; ++} ++ + static int read_command(int cd, struct service_command *svc_cmd) + { + int ret; +@@ -2374,6 +2506,124 @@ static int read_command(int cd, struct service_command *svc_cmd) + return ret; + } + ++static int read_command_v2(int cd, struct service_command *svc_cmd, struct service_options *options, size_t len) ++{ ++ /* There must be at least service_command that can be followed by service_checkpoint_options */ ++ if (len < sizeof(struct service_command)) { ++ fprintf(stderr, "[-] %s(): cmds len to short: %d\n", __func__, (unsigned int)len); ++ return -1; ++ } ++ ++ int ret = read_command(cd, svc_cmd); ++ if (ret < 0) { ++ fprintf(stderr, "%s(): Error reading a command!\n", __func__); ++ return ret; ++ } ++ ++ len -= sizeof(struct service_command); ++ ++ switch (svc_cmd->cmd) { ++ case MEMCR_CHECKPOINT: { ++ fprintf(stdout, "[+] read MEMCR_CHECKPOINT for %d\n", svc_cmd->pid); ++ /* try to read checkpoint options */ ++ memcr_svc_checkpoint_options option; ++ while (len >= sizeof(option) && _read(cd, &option, sizeof(option)) > 0 ) { ++ len -= sizeof(option); ++ ++ switch (option) { ++ case MEMCR_CHECKPOINT_DUMPDIR: { ++ /* read string till NULL */ ++ unsigned int pos = 0; ++ while (len-- > 0 && (_read(cd, &options->dump_dir[pos], sizeof(char)) == sizeof(char)) && ++ (options->dump_dir[pos] != 0) && (++pos < MEMCR_DUMPDIR_LEN_MAX)); ++ ++ if (pos >= MEMCR_DUMPDIR_LEN_MAX || options->dump_dir[pos] != 0) { ++ fprintf(stderr, "[-] %s(): dump dir path too long or not terminated with NULL\n", __func__); ++ return -1; ++ } ++ ++ if (is_dump_dir_path_allowed(options->dump_dir)) { ++ options->is_dump_dir = TRUE; ++ fprintf(stdout, "[+] read dump dir path for this checkpoint: %s\n", options->dump_dir); ++ } else { ++ fprintf(stderr, "[i] dump dir path incorrect, using default\n"); ++ } ++ break; ++ } ++ case MEMCR_CHECKPOINT_COMPRESS_ALG: ++ { ++ if (len < sizeof(options->compress_alg) || ++ _read(cd, &options->compress_alg, sizeof(options->compress_alg)) != sizeof(options->compress_alg)) { ++ fprintf(stderr, "[-] %s(): compression algorithm invalid\n", __func__); ++ return -1; ++ } ++ ++ len -= sizeof(options->compress_alg); ++ ++ if (options->compress_alg != MEMCR_COMPRESS_NONE ++ && options->compress_alg != MEMCR_COMPRESS_LZ4 ++ && options->compress_alg != MEMCR_COMPRESS_ZSTD ++ ) { ++ /* skip if not support */ ++ fprintf(stderr, "[-] %s(): compression algorithm not supported: %d\n", __func__, options->compress_alg); ++ break; ++ } ++ ++ options->is_compress_alg = TRUE; ++ const char *caToS[] = { ++ [MEMCR_COMPRESS_NONE] = "none", ++ [MEMCR_COMPRESS_LZ4] = "lz4", ++ [MEMCR_COMPRESS_ZSTD] = "zstd"}; ++ fprintf(stdout, "[+] read compress alg for this checkpoint: %s\n", caToS[options->compress_alg]); ++ break; ++ } ++ default: ++ fprintf(stderr, "[-] %s(): checkpoint option invalid: %d\n", __func__, option); ++ } ++ } ++ break; ++ } ++ case MEMCR_RESTORE: { ++ /* nothing more to read for RESTORE*/ ++ fprintf(stdout, "[+] read MEMCR_RESTORE for %d\n", svc_cmd->pid); ++ break; ++ } ++ default: ++ fprintf(stderr, "%s(): Error command not expected or invalid: %d!\n", __func__, svc_cmd->cmd); ++ return -1; ++ } ++ ++ return 0; ++} ++ ++static void set_checkpoint_options_dfl(pid_t pid) ++{ ++ for (int i=0; isvc_cmd.cmd) +@@ -2798,7 +3049,7 @@ static void service_command(struct service_command_ctx *svc_ctx) + break; + } + +- init_pid_checkpoint_data(svc_ctx->svc_cmd.pid); ++ init_pid_checkpoint_data(svc_ctx->svc_cmd.pid, checkpoint_options); + ret = service_cmds_push_back(svc_ctx); + if (!ret) + fprintf(stdout, "[+] Checkpoint request scheduled...\n"); +@@ -2851,6 +3102,7 @@ static int service_mode(const char *listen_location, const int gid) + struct timeval tv; + int errsv; + pthread_t svc_cmd_thread_id; ++ struct service_options checkpoint_options; + + if (listen_port > 0) + csd = setup_listen_tcp_socket(listen_port); +@@ -2891,6 +3143,13 @@ static int service_mode(const char *listen_location, const int gid) + cd = accept(csd, NULL, NULL); + if (cd >= 0) { + struct service_command_ctx svc_ctx = { .cd = cd }; ++ // set rcv timeout for the socket ++ struct timeval rcv_timeout = { ++ .tv_sec = SERVICE_MODE_SOCKET_TIMEOUT_MS/1000, ++ .tv_usec = (SERVICE_MODE_SELECT_TIMEOUT_MS%1000)*1000 ++ }; ++ setsockopt(cd, SOL_SOCKET, SO_RCVTIMEO, &rcv_timeout, sizeof(rcv_timeout)); ++ + ret = read_command(cd, &svc_ctx.svc_cmd); + if (ret < 0) { + fprintf(stderr, "%s(): Error reading a command!\n", __func__); +@@ -2898,7 +3157,19 @@ static int service_mode(const char *listen_location, const int gid) + continue; + } + +- service_command(&svc_ctx); ++ clear_checkpoint_options(&checkpoint_options); ++ ++ if (svc_ctx.svc_cmd.cmd == MEMCR_CMDS_V2) { ++ size_t cmds_len = svc_ctx.svc_cmd.pid; ++ ret = read_command_v2(cd, &svc_ctx.svc_cmd, &checkpoint_options, cmds_len); ++ if (ret < 0) { ++ fprintf(stderr, "%s(): Error reading a command!\n", __func__); ++ close(cd); ++ continue; ++ } ++ } ++ ++ service_command(&svc_ctx, &checkpoint_options); + continue; + } + +@@ -2968,7 +3239,7 @@ out: + } + + unseize_target(); +- cleanup_pid(pid); ++ cleanup_pid(pid, dfl_dump_dir); + + return ret; + } +@@ -2993,7 +3264,7 @@ static void usage(const char *name, int status) + "options:\n" \ + " -h --help help\n" \ + " -p --pid target process pid\n" \ +- " -d --dir dir where memory dump is stored (defaults to /tmp)\n" \ ++ " -d --dir dir/dirs where memory dump can be stored (defaults to /tmp. Separated by ';')\n" \ + " -S --parasite-socket-dir dir where socket to communicate with parasite is created\n" \ + " (abstract socket will be used if no path specified)\n" \ + " -G --parasite-socket-gid group ID for parasite UNIX domain socket file, valid only for if --parasite-socket-dir provided\n" \ +@@ -3059,7 +3330,7 @@ int main(int argc, char *argv[]) + { NULL, 0, NULL, 0 } + }; + +- dump_dir = "/tmp"; ++ set_dump_dirs(MEMCR_DUMPDIR_DEFAULT); + parasite_socket_dir = NULL; + parasite_socket_use_netns = 0; + +@@ -3072,7 +3343,7 @@ int main(int argc, char *argv[]) + pid = atoi(optarg); + break; + case 'd': +- dump_dir = optarg; ++ set_dump_dirs(optarg); + break; + case 'S': + parasite_socket_dir = optarg; +diff --git a/memcrclient_proto.h b/memcrclient_proto.h +index f9dee66..8641834 100644 +--- a/memcrclient_proto.h ++++ b/memcrclient_proto.h +@@ -21,9 +21,23 @@ + + typedef enum { + MEMCR_CHECKPOINT = 100, +- MEMCR_RESTORE ++ MEMCR_RESTORE, ++ MEMCR_CMDS_V2 + } memcr_svc_cmd; + ++typedef enum { ++ MEMCR_CHECKPOINT_DUMPDIR = 200, ++ MEMCR_CHECKPOINT_COMPRESS_ALG, ++} memcr_svc_checkpoint_options; ++ ++#define MEMCR_DUMPDIR_LEN_MAX 1024 ++ ++typedef enum { ++ MEMCR_COMPRESS_NONE = 0, ++ MEMCR_COMPRESS_LZ4, ++ MEMCR_COMPRESS_ZSTD ++} memcr_compress_alg; ++ + struct service_command { + memcr_svc_cmd cmd; + pid_t pid; +@@ -39,4 +53,11 @@ struct service_response { + memcr_svc_response resp_code; + } __attribute__((packed)); + ++struct service_options { ++ int is_dump_dir; ++ char dump_dir[MEMCR_DUMPDIR_LEN_MAX]; ++ int is_compress_alg; ++ memcr_compress_alg compress_alg; ++}; ++ + #endif /* __MEMCR_CLIENT_PROTO_H__ */ +-- +2.43.0 + diff --git a/recipes-extended/memcr/files/0001-RDK-47153-Support-zstd-compression-and-option-to-set-dump-dir-.patch b/recipes-extended/memcr/files/0001-RDK-47153-Support-zstd-compression-and-option-to-set-dump-dir-.patch deleted file mode 100644 index da72ccb43..000000000 --- a/recipes-extended/memcr/files/0001-RDK-47153-Support-zstd-compression-and-option-to-set-dump-dir-.patch +++ /dev/null @@ -1,1118 +0,0 @@ -From e55a011bf2a2c2c2fc52fe708bd4947ffe7a1096 Mon Sep 17 00:00:00 2001 -From: Adrian Muzyka -Date: Wed, 15 Jan 2025 11:32:19 +0000 -Subject: [PATCH] Support zstd compression and option to set dump dir and - compression per PID - ---- - Makefile | 5 + - README.md | 5 +- - memcr-client.c | 171 ++++++++++++++++--- - memcr.c | 446 +++++++++++++++++++++++++++++++++++++++++++------ - memcr.h | 23 ++- - 5 files changed, 573 insertions(+), 77 deletions(-) - -diff --git a/Makefile b/Makefile -index 3543ad8..eb5894e 100644 ---- a/Makefile -+++ b/Makefile -@@ -38,6 +38,11 @@ ifeq ($(COMPRESS_LZ4), 1) - LDFLAGS += -llz4 - endif - -+ifeq ($(COMPRESS_ZSTD), 1) -+ MCFLAGS += -DCOMPRESS_ZSTD -+ LDFLAGS += -lzstd -+endif -+ - ifeq ($(CHECKSUM_MD5), 1) - MCFLAGS += -DCHECKSUM_MD5 - LDFLAGS += -lcrypto -diff --git a/README.md b/README.md -index 8cac5f1..8c6dbfc 100644 ---- a/README.md -+++ b/README.md -@@ -18,6 +18,7 @@ make - ##### compilation options - You can enable support for compression and checksumming of memory dump file: - - `COMPRESS_LZ4=1` - requires liblz4 -+ - `COMPRESS_ZSTD=1` - requires libzstd - - `CHECKSUM_MD5=1` - requires libcrypto and openssl headers - - There is also `ENCRYPT` option for building `libencrypt.so` that provides sample implementation of encryption layer based on libcrypto API. memcr is not linked with libencrypt.so, but it can be preloaded with `LD_PRELOAD`. -@@ -56,7 +57,7 @@ memcr [-h] [-p PID] [-d DIR] [-S DIR] [-l PORT|PATH] [-n] [-m] [-f] [-z] [-c] [- - options: - -h --help help - -p --pid target process pid -- -d --dir dir where memory dump is stored (defaults to /tmp) -+ -d --dir dir/dirs where memory dump can be stored (defaults to /tmp. Separated by ';') - -S --parasite-socket-dir dir where socket to communicate with parasite is created - (abstract socket will be used if no path specified) - -N --parasite-socket-netns use network namespace of parasite when connecting to socket -@@ -67,7 +68,7 @@ options: - -n --no-wait no wait for key press - -m --proc-mem get pages from /proc/pid/mem - -f --rss-file include file mapped memory -- -z --compress compress memory dump -+ -z --compress compress memory dump with alg: lz4 or zstd - -c --checksum enable md5 checksum for memory dump - -e --encrypt enable encryption of memory dump - -t --timeout timeout in seconds for checkpoint/restore execution in service mode -diff --git a/memcr-client.c b/memcr-client.c -index 3fccbc1..0bc0bb1 100644 ---- a/memcr-client.c -+++ b/memcr-client.c -@@ -24,9 +24,13 @@ - #include - #include - #include -+#include - - #include "memcr.h" - -+#define CMD_LEN_MAX (sizeof(struct service_command) + (2*sizeof(memcr_svc_checkpoint_options)) \ -+ + MEMCR_DUMPDIR_LEN_MAX + sizeof(memcr_compress_alg)) -+ - static int xconnect(struct sockaddr *addr, socklen_t addrlen) - { - int cd, ret; -@@ -74,8 +78,61 @@ static int send_cmd(int cd, struct service_command cmd) - int ret; - struct service_response resp = {0}; - -- ret = write(cd, &cmd, sizeof(struct service_command)); -- if (ret != sizeof(struct service_command)) { -+ret = write(cd, &cmd, sizeof(cmd)); -+ if (ret != sizeof(cmd)) { -+ fprintf(stderr, "%s() write request failed: ret %d, errno %m\n", __func__, ret); -+ return -1; -+ } -+ -+ ret = read(cd, &resp, sizeof(struct service_response)); -+ if (ret != sizeof(struct service_response)) { -+ fprintf(stderr, "%s() read response failed: ret %d, errno %m\n", __func__, ret); -+ return -1; -+ } -+ -+ fprintf(stdout, "Procedure finished with %s status.\n", MEMCR_OK == resp.resp_code ? "OK" : "ERROR"); -+ -+ return resp.resp_code; -+} -+ -+static int send_cmd_v2(int cd, memcr_svc_cmd cmd, pid_t pid, const struct service_options *opt) -+{ -+ int ret; -+ struct service_response resp = {0}; -+ -+ size_t cmd_size = 0; -+ unsigned char cmd_buf[CMD_LEN_MAX]; -+ -+ struct service_command cmd_cr = {.cmd = cmd, .pid = pid}; -+ memcpy(cmd_buf, &cmd_cr, sizeof(struct service_command)); -+ cmd_size += sizeof(struct service_command); -+ -+ if (opt && opt->is_dump_dir) { -+ memcr_svc_checkpoint_options opt_id = MEMCR_CHECKPOINT_DUMPDIR; -+ memcpy(cmd_buf+cmd_size, &opt_id, sizeof(memcr_svc_checkpoint_options)); -+ cmd_size += sizeof(memcr_svc_checkpoint_options); -+ strncpy((char*)cmd_buf + cmd_size, opt->dump_dir, MEMCR_DUMPDIR_LEN_MAX); -+ cmd_size += strlen(opt->dump_dir) + 1; -+ } -+ -+ if (opt && opt->is_compress_alg) { -+ memcr_svc_checkpoint_options opt_id = MEMCR_CHECKPOINT_COMPRESS_ALG; -+ memcpy(cmd_buf+cmd_size, &opt_id, sizeof(memcr_svc_checkpoint_options)); -+ cmd_size += sizeof(memcr_svc_checkpoint_options); -+ memcpy(cmd_buf+cmd_size, &opt->compress_alg, sizeof(memcr_compress_alg)); -+ cmd_size += sizeof(memcr_compress_alg); -+ } -+ -+ struct service_command cmd_v2 = {.cmd = MEMCR_CMDS_V2, .pid = cmd_size}; -+ -+ ret = write(cd, &cmd_v2, sizeof(cmd_v2)); -+ if (ret != sizeof(cmd_v2)) { -+ fprintf(stderr, "%s() write request failed: ret %d, errno %m\n", __func__, ret); -+ return -1; -+ } -+ -+ ret = write(cd, cmd_buf, cmd_size); -+ if (ret != cmd_size) { - fprintf(stderr, "%s() write request failed: ret %d, errno %m\n", __func__, ret); - return -1; - } -@@ -99,7 +156,7 @@ static void print_version(void) - static void usage(const char *name, int status) - { - fprintf(status ? stderr : stdout, -- "%s -l PORT|PATH -p PID [-c -r] [-V]\n" \ -+ "%s -l PORT|PATH -p PID [-c -r [-d DIR] [-z ALG]] [-V]\n" \ - "options: \n" \ - " -h --help\t\thelp\n" \ - " -l --location\t\tTCP port number of localhost memcr service\n" \ -@@ -107,8 +164,11 @@ static void usage(const char *name, int status) - " -p --pid\t\tprocess ID to be checkpointed / restored\n" \ - " -c --checkpoint\tsend checkpoint command to memcr service\n" \ - " -r --restore\t\tsend restore command to memcr service\n" \ -- " -V --version\t\tprint version and exit\n", -- name); -+ " -V --version\t\tprint version and exit\n" \ -+ " -d --dir\tdir where memory dump is stored of max length %d\n" \ -+ " -z --compress\tcompress memory dump with selected algorithm: 'lz4', 'zstd' or disable with 'none'\n" \ -+ " -v --v1\t\tforce using old protocol\n", -+ name, MEMCR_DUMPDIR_LEN_MAX); - exit(status); - } - -@@ -119,21 +179,27 @@ int main(int argc, char *argv[]) - int restore = 0; - int port = -1; - int option_index; -- struct service_command cmd = {0}; - char *comm_location = NULL; - int pid = 0; -+ const char *dump_dir_s = 0; -+ const char *compress_alg_s = 0; -+ struct service_options checkpoint_options = {0}; -+ int v1 = 0; - - struct option long_options[] = { - { "help", 0, 0, 'h'}, - { "location", 1, 0, 'l'}, - { "pid", 1, 0, 'p'}, - { "checkpoint", 0, 0, 'c'}, -+ { "dir", 1, 0, 'd'}, -+ { "compress", 1, 0, 'z'}, - { "restore", 0, 0, 'r'}, - { "version", 0, 0, 'V'}, -+ { "v1", 0, 0, 'v'}, - { NULL, 0, 0, 0 } - }; - -- while ((opt = getopt_long(argc, argv, "hl:p:crV", long_options, &option_index)) != -1) { -+ while ((opt = getopt_long(argc, argv, "hl:p:crVd:z:v", long_options, &option_index)) != -1) { - switch (opt) { - case 'h': - usage(argv[0], 0); -@@ -147,12 +213,21 @@ int main(int argc, char *argv[]) - case 'c': - checkpoint = 1; - break; -+ case 'd': -+ dump_dir_s = optarg; -+ break; -+ case 'z': -+ compress_alg_s = optarg; -+ break; - case 'r': - restore = 1; - break; - case 'V': - print_version(); - exit(0); -+ case 'v': -+ v1 = 1; -+ break; - default: /* '?' */ - usage(argv[0], 1); - break; -@@ -171,35 +246,85 @@ int main(int argc, char *argv[]) - return -1; - } - -- port = atoi(comm_location); -+ if (!checkpoint && (dump_dir_s || compress_alg_s)) { -+ fprintf(stderr, "Dir dump and compression is available only for checkpoint!\n"); -+ usage(argv[0], 1); -+ return -1; -+ } - -- if (port > 0) -- cd = connect_tcp(port); -- else -- cd = connect_unix(comm_location); -+ if (dump_dir_s) { -+ if (strlen(dump_dir_s) >= MEMCR_DUMPDIR_LEN_MAX) { -+ fprintf(stderr, "Dir dump too long!\n"); -+ usage(argv[0], 1); -+ return -1; -+ } - -- if (cd < 0) { -- fprintf(stderr, "Connection creation failed!\n"); -- return cd; -+ strcpy(checkpoint_options.dump_dir, dump_dir_s); -+ checkpoint_options.is_dump_dir = 1; - } - -+ if (compress_alg_s) { -+ checkpoint_options.is_compress_alg = 1; -+ if (strcmp(compress_alg_s, "none") == 0) -+ checkpoint_options.compress_alg = MEMCR_COMPRESS_NONE; -+ else if (strcmp(compress_alg_s, "lz4") == 0) -+ checkpoint_options.compress_alg = MEMCR_COMPRESS_LZ4; -+ else if (strcmp(compress_alg_s, "zstd") == 0) -+ checkpoint_options.compress_alg = MEMCR_COMPRESS_ZSTD; -+ else { -+ fprintf(stderr, "Incorrect compression algorithm provided!\n"); -+ usage(argv[0], 1); -+ return -1; -+ } -+ } -+ -+ port = atoi(comm_location); -+ - if (checkpoint) { - fprintf(stdout, "Will checkpoint %d.\n", pid); -- cmd.cmd = MEMCR_CHECKPOINT; -- cmd.pid = pid; -- ret = send_cmd(cd, cmd); -+ -+ if (port > 0) -+ cd = connect_tcp(port); -+ else -+ cd = connect_unix(comm_location); -+ -+ if (cd < 0) { -+ fprintf(stderr, "Connection creation failed!\n"); -+ return cd; -+ } -+ -+ if (v1) { -+ struct service_command cmd = {.cmd = MEMCR_CHECKPOINT, .pid = pid}; -+ ret = send_cmd(cd, cmd); -+ } else -+ ret = send_cmd_v2(cd, MEMCR_CHECKPOINT, pid, &checkpoint_options); -+ -+ close(cd); - } - - if (restore) { - fprintf(stdout, "Will restore %d.\n", pid); -- cmd.cmd = MEMCR_RESTORE; -- cmd.pid = pid; -- ret = send_cmd(cd, cmd); -+ -+ if (port > 0) -+ cd = connect_tcp(port); -+ else -+ cd = connect_unix(comm_location); -+ -+ if (cd < 0) { -+ fprintf(stderr, "Connection creation failed!\n"); -+ return cd; -+ } -+ -+ if (v1) { -+ struct service_command cmd = {.cmd = MEMCR_RESTORE, .pid = pid}; -+ ret = send_cmd(cd, cmd); -+ } else -+ ret = send_cmd_v2(cd, MEMCR_RESTORE, pid, NULL); -+ -+ close(cd); - } - - fprintf(stdout, "Command executed, exiting.\n"); -- close(cd); -- - return ret; - } - -diff --git a/memcr.c b/memcr.c -index 5c38429..f431355 100644 ---- a/memcr.c -+++ b/memcr.c -@@ -47,11 +47,16 @@ - #include - #include /* MIN(), MAX() */ - #include -+#include - - #ifdef COMPRESS_LZ4 - #include - #endif - -+#ifdef COMPRESS_ZSTD -+#include -+#endif -+ - #ifdef CHECKSUM_MD5 - #include - #if OPENSSL_VERSION_NUMBER >= 0x30000000L -@@ -115,13 +120,21 @@ struct vm_area { - unsigned long flags; - }; - --static char *dump_dir; -+struct dump_dir_list { -+ char *dir; -+ struct dump_dir_list *next; -+}; -+ -+#define MEMCR_DUMPDIR_DEFAULT "/tmp" -+ -+static struct dump_dir_list *allowed_dump_dirs; -+static char *dfl_dump_dir = MEMCR_DUMPDIR_DEFAULT; - static char *parasite_socket_dir; - static int parasite_socket_use_netns; - static int no_wait; - static int proc_mem; - static int rss_file; --static int compress; -+static memcr_compress_alg dfl_compress_alg; - static int checksum; - static int service; - static unsigned int timeout; -@@ -145,6 +158,7 @@ static pid_t tids[MAX_THREADS]; - static int nr_threads; - - #define SERVICE_MODE_SELECT_TIMEOUT_MS 100 -+#define SERVICE_MODE_SOCKET_TIMEOUT_MS 1000 - - #define MAX_VMAS (3*4096) - static struct vm_area vmas[MAX_VMAS]; -@@ -156,6 +170,13 @@ static int nr_vmas; - #define MAX_LZ4_DST_SIZE LZ4_compressBound(MAX_VM_REGION_SIZE) - #endif - -+#ifdef COMPRESS_ZSTD -+#define MAX_ZSTD_DST_SIZE ZSTD_compressBound(MAX_VM_REGION_SIZE) -+#ifndef COMPRESS_ZSTD_LVL -+#define COMPRESS_ZSTD_LVL 3 -+#endif -+#endif -+ - static pid_t parasite_pid; - static pid_t parasite_pid_clone; - static struct target_context ctx; -@@ -203,6 +224,7 @@ static struct { - int state; - int checkpoint_abort; - int checkpoint_cmd_sd; -+ struct service_options options; - } checkpoint_service_data[CHECKPOINTED_PIDS_LIMIT]; - - #define SOCKET_INVALID (-1) -@@ -354,6 +376,17 @@ static void md5_final(unsigned char *md, unsigned int *len, void *ctx) - } - #endif - -+static void __attribute__((noreturn)) die(const char *fmt, ...) -+{ -+ va_list ap; -+ -+ va_start(ap, fmt); -+ vfprintf(stderr, fmt, ap); -+ va_end(ap); -+ -+ exit(1); -+} -+ - static void parasite_status_signal(pid_t pid, int status) - { - pthread_mutex_lock(¶site_watch.lock); -@@ -428,7 +461,7 @@ static void parasite_socket_init(struct sockaddr_un *addr, pid_t pid) - } - } - --static void cleanup_pid(pid_t pid) -+static void cleanup_pid(pid_t pid, const char* dump_dir) - { - char path[PATH_MAX]; - -@@ -829,7 +862,15 @@ static int dump_write(int fd, const void *buf, size_t count) - return ret; - } - --static void init_pid_checkpoint_data(pid_t pid) -+static void clear_checkpoint_options(struct service_options *options) -+{ -+ options->is_dump_dir = FALSE; -+ options->dump_dir[0] = 0; -+ options->is_compress_alg = FALSE; -+ options->compress_alg = MEMCR_COMPRESS_NONE; -+} -+ -+static void init_pid_checkpoint_data(pid_t pid, struct service_options *options) - { - pthread_mutex_lock(&checkpoint_service_data_lock); - for (int i=0; iis_dump_dir; -+ strncpy(checkpoint_service_data[i].options.dump_dir, options->dump_dir, -+ MEMCR_DUMPDIR_LEN_MAX); -+ checkpoint_service_data[i].options.is_compress_alg = options->is_compress_alg; -+ checkpoint_service_data[i].options.compress_alg = options->compress_alg; -+ } else { -+ clear_checkpoint_options(&checkpoint_service_data[i].options); -+ } - pthread_mutex_unlock(&checkpoint_service_data_lock); - return; - } -@@ -854,11 +904,14 @@ static void cleanup_checkpointed_pids(void) - if (checkpoint_service_data[i].pid != PID_INVALID) { - fprintf(stdout, "[i] Killing PID %d\n", checkpoint_service_data[i].pid); - kill(checkpoint_service_data[i].pid, SIGKILL); -- cleanup_pid(checkpoint_service_data[i].pid); -+ const char *dir = checkpoint_service_data[i].options.is_dump_dir ? -+ checkpoint_service_data[i].options.dump_dir : dfl_dump_dir; -+ cleanup_pid(checkpoint_service_data[i].pid, dir); - checkpoint_service_data[i].pid = PID_INVALID; - checkpoint_service_data[i].worker = PID_INVALID; - checkpoint_service_data[i].state = STATE_RESTORED; - checkpoint_service_data[i].checkpoint_cmd_sd = SOCKET_INVALID; -+ clear_checkpoint_options(&checkpoint_service_data[i].options); - } - } - pthread_mutex_unlock(&checkpoint_service_data_lock); -@@ -921,6 +974,7 @@ static void clear_pid_checkpoint_data(pid_t pid) - checkpoint_service_data[i].worker = PID_INVALID; - checkpoint_service_data[i].checkpoint_cmd_sd = SOCKET_INVALID; - checkpoint_service_data[i].state = STATE_RESTORED; -+ clear_checkpoint_options(&checkpoint_service_data[i].options); - } - } - pthread_mutex_unlock(&checkpoint_service_data_lock); -@@ -932,11 +986,14 @@ static void clear_pid_on_worker_exit_non_blocking(pid_t worker) - if (checkpoint_service_data[i].worker == worker) { - fprintf(stdout, "[+] Clearing pid: %d with worker: %d on worker exit ...\n", - checkpoint_service_data[i].pid, worker); -- cleanup_pid(checkpoint_service_data[i].pid); -+ const char *dir = checkpoint_service_data[i].options.is_dump_dir ? -+ checkpoint_service_data[i].options.dump_dir : dfl_dump_dir; -+ cleanup_pid(checkpoint_service_data[i].pid, dir); - checkpoint_service_data[i].pid = PID_INVALID; - checkpoint_service_data[i].worker = PID_INVALID; - checkpoint_service_data[i].checkpoint_cmd_sd = SOCKET_INVALID; - checkpoint_service_data[i].state = STATE_RESTORED; -+ clear_checkpoint_options(&checkpoint_service_data[i].options); - } - } - } -@@ -1040,10 +1097,27 @@ static int read_vm_region(int fd, struct vm_region *vmr, char *buf) - if (!vm_region_valid(vmr)) - return -1; - --#ifdef COMPRESS_LZ4 -- if (compress) { -+ -+ if (dfl_compress_alg != MEMCR_COMPRESS_NONE) { - int src_size; -- char src[MAX_LZ4_DST_SIZE]; -+ int src_size_max = 0; -+ -+ switch (dfl_compress_alg) { -+#ifdef COMPRESS_LZ4 -+ case MEMCR_COMPRESS_LZ4: -+ src_size_max = MAX_LZ4_DST_SIZE; -+ break; -+#endif -+#ifdef COMPRESS_ZSTD -+ case MEMCR_COMPRESS_ZSTD: -+ src_size_max = MAX_ZSTD_DST_SIZE; -+ break; -+#endif -+ default: -+ die("compression set but not enabled, recompile with COMPRESS_LZ4=1 and/or COMPRESS_ZSTD=1"); -+ } -+ -+ char src[src_size_max]; - - ret = dump_read(fd, &src_size, sizeof(src_size)); - if (ret != sizeof(src_size)) -@@ -1053,13 +1127,24 @@ static int read_vm_region(int fd, struct vm_region *vmr, char *buf) - if (ret != src_size) - return -1; - -- ret = LZ4_decompress_safe(src, buf, src_size, MAX_VM_REGION_SIZE); -+ switch (dfl_compress_alg) { -+#ifdef COMPRESS_LZ4 -+ case MEMCR_COMPRESS_LZ4: -+ ret = LZ4_decompress_safe(src, buf, src_size, MAX_VM_REGION_SIZE); -+ break; -+#endif -+#ifdef COMPRESS_ZSTD -+ case MEMCR_COMPRESS_ZSTD: -+ ret = ZSTD_decompress(buf, MAX_VM_REGION_SIZE, src, src_size); -+ break; -+#endif -+ default: -+ die("compression set but not enabled, recompile with COMPRESS_LZ4=1 and/or COMPRESS_ZSTD=1"); -+ } - /* fprintf(stdout, "[+] Decompressed %d Bytes back into %d.\n", srcSize, ret); */ - if (ret <= 0) - return -1; -- } else --#endif -- { -+ } else { - ret = dump_read(fd, buf, vmr->len); - if (ret != vmr->len) - return -1; -@@ -1079,12 +1164,39 @@ static int write_vm_region(int fd, const struct vm_region *vmr, const void *buf) - if (ret != sizeof(struct vm_region)) - return -1; - -+ if (dfl_compress_alg != MEMCR_COMPRESS_NONE) { -+ int dst_size_max = 0; -+ switch (dfl_compress_alg) { - #ifdef COMPRESS_LZ4 -- if (compress) { -- char dst[MAX_LZ4_DST_SIZE]; -- int dst_size; -+ case MEMCR_COMPRESS_LZ4: -+ dst_size_max = MAX_LZ4_DST_SIZE; -+ break; -+#endif -+#ifdef COMPRESS_ZSTD -+ case MEMCR_COMPRESS_ZSTD: -+ dst_size_max = MAX_ZSTD_DST_SIZE; -+ break; -+#endif -+ default: -+ die("compression set but not enabled, recompile with COMPRESS_LZ4=1 and/or COMPRESS_ZSTD=1"); -+ } -+ char dst[dst_size_max]; -+ int dst_size = 0; - -- dst_size = LZ4_compress_default(buf, dst, vmr->len, MAX_LZ4_DST_SIZE); -+ switch (dfl_compress_alg) { -+#ifdef COMPRESS_LZ4 -+ case MEMCR_COMPRESS_LZ4: -+ dst_size = LZ4_compress_default(buf, dst, vmr->len, MAX_LZ4_DST_SIZE); -+ break; -+#endif -+#ifdef COMPRESS_ZSTD -+ case MEMCR_COMPRESS_ZSTD: -+ dst_size = ZSTD_compress(dst, MAX_ZSTD_DST_SIZE, buf, vmr->len, COMPRESS_ZSTD_LVL); -+ break; -+#endif -+ default: -+ die("compression set but not enabled, recompile with COMPRESS_LZ4=1 and/or COMPRESS_ZSTD=1"); -+ } - /* fprintf(stdout, "[+] Compressed %lu Bytes into %d.\n", len, dstSize); */ - if (dst_size <= 0) - return -1; -@@ -1097,9 +1209,7 @@ static int write_vm_region(int fd, const struct vm_region *vmr, const void *buf) - if (ret != dst_size) - return -1; - -- } else --#endif -- { -+ } else { - ret = dump_write(fd, buf, vmr->len); - if (ret != vmr->len) - return -1; -@@ -1572,7 +1682,7 @@ static int get_target_pages(int pid, struct vm_area vmas[], int nr_vmas) - if (pd < 0) - goto out; - -- snprintf(path, sizeof(path), "%s/pages-%d.img", dump_dir, pid); -+ snprintf(path, sizeof(path), "%s/pages-%d.img", dfl_dump_dir, pid); - - fd = dump_open(path, O_CREAT | O_TRUNC | O_WRONLY, S_IRUSR | S_IWUSR); - if (fd < 0) { -@@ -1691,7 +1801,7 @@ static int target_set_pages(pid_t pid) - int cd = -1; - int fd = -1; - -- snprintf(path, sizeof(path), "%s/pages-%d.img", dump_dir, pid); -+ snprintf(path, sizeof(path), "%s/pages-%d.img", dfl_dump_dir, pid); - - fd = dump_open(path, O_RDONLY, 0); - if (fd < 0) { -@@ -1812,7 +1922,7 @@ static int cmd_checkpoint(pid_t pid) - } - - fprintf(stdout, "[i] download took %lu ms\n", diff_ms(&ts)); -- fprintf(stdout, "[i] stored at %s/pages-%d.img\n", dump_dir, pid); -+ fprintf(stdout, "[i] stored at %s/pages-%d.img\n", dfl_dump_dir, pid); - - get_target_rss(pid, &vms_b); - -@@ -2290,6 +2400,104 @@ static void sigpipe_handler(int sig, siginfo_t *sip, void *notused) - fprintf(stdout, "[!] program received SIGPIPE from %d.\n", sip->si_pid); - } - -+static void set_dump_dirs(const char *dirs) -+{ -+ char real_dir[PATH_MAX]; -+ -+ //clear current allowed dirs -+ while (allowed_dump_dirs) { -+ if (allowed_dump_dirs->dir) -+ free(allowed_dump_dirs->dir); -+ -+ struct dump_dir_list *curr = allowed_dump_dirs; -+ allowed_dump_dirs = allowed_dump_dirs->next; -+ free(curr); -+ } -+ -+ if (dirs == NULL) { -+ fprintf(stderr, "[!] %s(): Error dump dir cannot be empty!\n", __func__); -+ exit(EXIT_FAILURE); -+ } -+ -+ // Create a mutable copy of dirs -+ char *dirs_copy = strdup(dirs); -+ if (!dirs_copy) { -+ fprintf(stderr, "[!] %s(): Memory allocation error!\n", __func__); -+ exit(EXIT_FAILURE); -+ } -+ -+ struct dump_dir_list *dump_dir_iter = NULL; -+ char *dir = strtok(dirs_copy, ";"); -+ while (dir) { -+ if (realpath(dir, real_dir)) { -+ struct dump_dir_list *new_dump_dir = malloc(sizeof(struct dump_dir_list)); -+ if (!new_dump_dir) { -+ fprintf(stderr, "[!] %s(): Memory allocation error!\n", __func__); -+ exit(EXIT_FAILURE); -+ } -+ -+ new_dump_dir->dir = strdup(real_dir); -+ if (!new_dump_dir->dir) { -+ fprintf(stderr, "[!] %s(): Memory allocation error!\n", __func__); -+ exit(EXIT_FAILURE); -+ } -+ fprintf(stdout, "[+] Allowed dump directory: %s\n", new_dump_dir->dir); -+ -+ new_dump_dir->next = NULL; -+ -+ if (!allowed_dump_dirs) { -+ allowed_dump_dirs = new_dump_dir; -+ dump_dir_iter = allowed_dump_dirs; -+ } else { -+ dump_dir_iter->next = new_dump_dir; -+ dump_dir_iter = dump_dir_iter->next; -+ } -+ -+ } else { -+ fprintf(stderr, "[!] %s(): Unable to resolve allowed directory: %s\n", __func__, dir); -+ exit(EXIT_FAILURE); -+ } -+ -+ dir = strtok(NULL, ";"); -+ } -+ -+ free(dirs_copy); -+ -+ if (!allowed_dump_dirs) { -+ fprintf(stderr, "[!] %s(): No allowed dump directories!\n", __func__); -+ exit(EXIT_FAILURE); -+ } -+ -+ // Default dump dir is the first allowed one -+ dfl_dump_dir = allowed_dump_dirs->dir; -+ fprintf(stdout, "[+] %s(): Allowed dump directories set.\n", __func__); -+} -+ -+ -+static int is_dump_dir_path_allowed(const char *dump_dir_path) { -+ char real_dir_path[PATH_MAX]; -+ -+ // Resolve the real path -+ if (!realpath(dump_dir_path, real_dir_path)) { -+ fprintf(stderr, "[-] %s(): Unable to resolve dump dir path: %s\n", __func__, dump_dir_path); -+ return 0; -+ } -+ -+ fprintf(stdout, "[+] %s(): Real dir path to check: %s\n", __func__, real_dir_path); -+ -+ // iterate over allowed dump dirs and do an exact match -+ struct dump_dir_list *curr = allowed_dump_dirs; -+ while (curr) { -+ if (strcmp(real_dir_path, curr->dir) == 0) { -+ return 1; -+ } -+ curr = curr->next; -+ } -+ -+ fprintf(stderr, "[-] %s(): Dump dir path is not allowed: %s\n", __func__, dump_dir_path); -+ return 0; -+} -+ - static int read_command(int cd, struct service_command *svc_cmd) - { - int ret; -@@ -2303,6 +2511,115 @@ static int read_command(int cd, struct service_command *svc_cmd) - return ret; - } - -+static int read_command_v2(int cd, struct service_command *svc_cmd, struct service_options *options, size_t len) -+{ -+ /* There must be at least service_command that can be followed by service_checkpoint_options */ -+ if (len < sizeof(struct service_command)) { -+ fprintf(stderr, "[-] %s(): cmds len to short: %d\n", __func__, (unsigned int)len); -+ return -1; -+ } -+ -+ int ret = read_command(cd, svc_cmd); -+ if (ret < 0) { -+ fprintf(stderr, "%s(): Error reading a command!\n", __func__); -+ return ret; -+ } -+ -+ len -= sizeof(struct service_command); -+ -+ switch (svc_cmd->cmd) { -+ case MEMCR_CHECKPOINT: { -+ fprintf(stdout, "[+] read MEMCR_CHECKPOINT for %d\n", svc_cmd->pid); -+ /* try to read checkpoint options */ -+ memcr_svc_checkpoint_options option; -+ while (len >= sizeof(option) && _read(cd, &option, sizeof(option)) > 0 ) { -+ len -= sizeof(option); -+ -+ switch (option) { -+ case MEMCR_CHECKPOINT_DUMPDIR: { -+ /* read string till NULL */ -+ unsigned int pos = 0; -+ while (len-- > 0 && (_read(cd, &options->dump_dir[pos], sizeof(char)) == sizeof(char)) && -+ (options->dump_dir[pos] != 0) && (++pos < MEMCR_DUMPDIR_LEN_MAX)); -+ -+ if (pos >= MEMCR_DUMPDIR_LEN_MAX || options->dump_dir[pos] != 0) { -+ fprintf(stderr, "[-] %s(): dump dir path too long or not terminated with NULL\n", __func__); -+ return -1; -+ } -+ -+ if (is_dump_dir_path_allowed(options->dump_dir)) { -+ options->is_dump_dir = TRUE; -+ fprintf(stdout, "[+] read dump dir path for this checkpoint: %s\n", options->dump_dir); -+ } else { -+ fprintf(stderr, "[i] dump dir path incorrect, using default\n"); -+ } -+ break; -+ } -+ case MEMCR_CHECKPOINT_COMPRESS_ALG: -+ { -+ if (len < sizeof(options->compress_alg) || -+ _read(cd, &options->compress_alg, sizeof(options->compress_alg)) != sizeof(options->compress_alg)) { -+ fprintf(stderr, "[-] %s(): compression algorithm invalid\n", __func__); -+ return -1; -+ } -+ -+ len -= sizeof(options->compress_alg); -+ -+ if (options->compress_alg != MEMCR_COMPRESS_NONE -+#ifdef COMPRESS_LZ4 -+ && options->compress_alg != MEMCR_COMPRESS_LZ4 -+#endif -+#ifdef COMPRESS_ZSTD -+ && options->compress_alg != MEMCR_COMPRESS_ZSTD -+#endif -+ ) { -+ /* skip if not support */ -+ fprintf(stderr, "[-] %s(): compression algorithm not supported: %d\n", __func__, options->compress_alg); -+ break; -+ } -+ -+ options->is_compress_alg = TRUE; -+ const char *caToS[] = { -+ [MEMCR_COMPRESS_NONE] = "none", -+ [MEMCR_COMPRESS_LZ4] = "lz4", -+ [MEMCR_COMPRESS_ZSTD] = "zstd"}; -+ fprintf(stdout, "[+] read compress alg for this checkpoint: %s\n", caToS[options->compress_alg]); -+ break; -+ } -+ default: -+ fprintf(stderr, "[-] %s(): checkpoint option invalid: %d\n", __func__, option); -+ } -+ } -+ break; -+ } -+ case MEMCR_RESTORE: { -+ /* nothing more to read for RESTORE*/ -+ fprintf(stdout, "[+] read MEMCR_RESTORE for %d\n", svc_cmd->pid); -+ break; -+ } -+ default: -+ fprintf(stderr, "%s(): Error command not expected or invalid: %d!\n", __func__, svc_cmd->cmd); -+ return -1; -+ } -+ -+ return 0; -+} -+ -+static void set_checkpoint_options_dfl(pid_t pid) -+{ -+ for (int i=0; isvc_cmd.cmd) -@@ -2687,7 +3005,7 @@ static void service_command(struct service_command_ctx *svc_ctx) - break; - } - -- init_pid_checkpoint_data(svc_ctx->svc_cmd.pid); -+ init_pid_checkpoint_data(svc_ctx->svc_cmd.pid, checkpoint_options); - ret = service_cmds_push_back(svc_ctx); - if (!ret) - fprintf(stdout, "[+] Checkpoint request scheduled...\n"); -@@ -2740,6 +3058,7 @@ static int service_mode(const char *listen_location) - struct timeval tv; - int errsv; - pthread_t svc_cmd_thread_id; -+ struct service_options checkpoint_options; - - if (listen_port > 0) - csd = setup_listen_tcp_socket(listen_port); -@@ -2780,6 +3099,13 @@ static int service_mode(const char *listen_location) - cd = accept(csd, NULL, NULL); - if (cd >= 0) { - struct service_command_ctx svc_ctx = { .cd = cd }; -+ // set rcv timeout for the socket -+ struct timeval rcv_timeout = { -+ .tv_sec = SERVICE_MODE_SOCKET_TIMEOUT_MS/1000, -+ .tv_usec = (SERVICE_MODE_SELECT_TIMEOUT_MS%1000)*1000 -+ }; -+ setsockopt(cd, SOL_SOCKET, SO_RCVTIMEO, &rcv_timeout, sizeof(rcv_timeout)); -+ - ret = read_command(cd, &svc_ctx.svc_cmd); - if (ret < 0) { - fprintf(stderr, "%s(): Error reading a command!\n", __func__); -@@ -2787,7 +3113,19 @@ static int service_mode(const char *listen_location) - continue; - } - -- service_command(&svc_ctx); -+ clear_checkpoint_options(&checkpoint_options); -+ -+ if (svc_ctx.svc_cmd.cmd == MEMCR_CMDS_V2) { -+ size_t cmds_len = svc_ctx.svc_cmd.pid; -+ ret = read_command_v2(cd, &svc_ctx.svc_cmd, &checkpoint_options, cmds_len); -+ if (ret < 0) { -+ fprintf(stderr, "%s(): Error reading a command!\n", __func__); -+ close(cd); -+ continue; -+ } -+ } -+ -+ service_command(&svc_ctx, &checkpoint_options); - continue; - } - -@@ -2846,7 +3184,7 @@ static int user_interactive_mode(pid_t pid) - - out: - unseize_target(); -- cleanup_pid(pid); -+ cleanup_pid(pid, dfl_dump_dir); - - return ret; - } -@@ -2867,11 +3205,11 @@ static void print_version(void) - static void usage(const char *name, int status) - { - fprintf(status ? stderr : stdout, -- "%s [-h] [-p PID] [-d DIR] [-S DIR] [-l PORT|PATH] [-n] [-m] [-f] [-z] [-c] [-e] [-V]\n" \ -+ "%s [-h] [-p PID] [-d DIR] [-S DIR] [-l PORT|PATH] [-n] [-m] [-f] [-z ALG] [-c] [-e] [-V]\n" \ - "options:\n" \ - " -h --help help\n" \ - " -p --pid target process pid\n" \ -- " -d --dir dir where memory dump is stored (defaults to /tmp)\n" \ -+ " -d --dir dir/dirs where memory dump can be stored (defaults to /tmp. Separated by ';')\n" \ - " -S --parasite-socket-dir dir where socket to communicate with parasite is created\n" \ - " (abstract socket will be used if no path specified)\n" \ - " -N --parasite-socket-netns use network namespace of parasite when connecting to socket\n" \ -@@ -2882,7 +3220,7 @@ static void usage(const char *name, int status) - " -n --no-wait no wait for key press\n" \ - " -m --proc-mem get pages from /proc/pid/mem\n" \ - " -f --rss-file include file mapped memory\n" \ -- " -z --compress compress memory dump\n" \ -+ " -z --compress compress memory dump with selected algorithm: lz4, zstd\n" \ - " -c --checksum enable md5 checksum for memory dump\n" \ - " -e --encrypt enable encryption of memory dump\n" \ - " -t --timeout timeout in seconds for checkpoint/restore execution in service mode\n" \ -@@ -2892,17 +3230,6 @@ static void usage(const char *name, int status) - exit(status); - } - --static void __attribute__((noreturn)) die(const char *fmt, ...) --{ -- va_list ap; -- -- va_start(ap, fmt); -- vfprintf(stderr, fmt, ap); -- va_end(ap); -- -- exit(1); --} -- - int main(int argc, char *argv[]) - { - int ret; -@@ -2923,7 +3250,7 @@ int main(int argc, char *argv[]) - { "no-wait", 0, NULL, 'n'}, - { "proc-mem", 0, NULL, 'm'}, - { "rss-file", 0, NULL, 'f'}, -- { "compress", 0, NULL, 'z'}, -+ { "compress", 2, NULL, 'z'}, - { "checksum", 0, NULL, 'c'}, - { "encrypt", 2, 0, 'e'}, - { "timeout", 1, 0, 't'}, -@@ -2931,11 +3258,11 @@ int main(int argc, char *argv[]) - { NULL, 0, NULL, 0 } - }; - -- dump_dir = "/tmp"; -+ set_dump_dirs(MEMCR_DUMPDIR_DEFAULT); - parasite_socket_dir = NULL; - parasite_socket_use_netns = 0; - -- while ((opt = getopt_long(argc, argv, "hp:d:S:Nl:nmfzce::t:V", long_options, &option_index)) != -1) { -+ while ((opt = getopt_long(argc, argv, "hp:d:S:Nl:nmfz::ce::t:V", long_options, &option_index)) != -1) { - switch (opt) { - case 'h': - usage(argv[0], 0); -@@ -2944,7 +3271,7 @@ int main(int argc, char *argv[]) - pid = atoi(optarg); - break; - case 'd': -- dump_dir = optarg; -+ set_dump_dirs(optarg); - break; - case 'S': - parasite_socket_dir = optarg; -@@ -2966,10 +3293,27 @@ int main(int argc, char *argv[]) - rss_file = 1; - break; - case 'z': -+ if (optarg) { -+ if (strcmp(optarg, "lz4") == 0) { - #ifndef COMPRESS_LZ4 -- die("compression not available, recompile with COMPRESS_LZ4=1\n"); -+ die("not enabled, recompile with COMPRESS_LZ4=1\n"); -+#endif -+ dfl_compress_alg = MEMCR_COMPRESS_LZ4; -+ } else if (strcmp(optarg, "zstd") == 0) { -+#ifndef COMPRESS_ZSTD -+ die("not enabled, recompile with COMPRESS_ZSTD=1\n"); - #endif -- compress = 1; -+ dfl_compress_alg = MEMCR_COMPRESS_ZSTD; -+ } -+ } else { -+#ifdef COMPRESS_LZ4 -+ dfl_compress_alg = MEMCR_COMPRESS_LZ4; -+#elif defined COMPRESS_ZSTD -+ dfl_compress_alg = MEMCR_COMPRESS_ZSTD; -+#else -+ die("not enabled, recompile with COMPRESS_LZ4=1 and/or COMPRESS_ZSTD=1\n"); -+#endif -+ } - break; - case 'c': - #ifndef CHECKSUM_MD5 -diff --git a/memcr.h b/memcr.h -index 6ce8001..ceacac3 100644 ---- a/memcr.h -+++ b/memcr.h -@@ -47,14 +47,35 @@ typedef enum { - - typedef enum { - MEMCR_CHECKPOINT = 100, -- MEMCR_RESTORE -+ MEMCR_RESTORE, -+ MEMCR_CMDS_V2 - } memcr_svc_cmd; - -+typedef enum { -+ MEMCR_CHECKPOINT_DUMPDIR = 200, -+ MEMCR_CHECKPOINT_COMPRESS_ALG, -+} memcr_svc_checkpoint_options; -+ -+#define MEMCR_DUMPDIR_LEN_MAX 1024 -+ -+typedef enum { -+ MEMCR_COMPRESS_NONE = 0, -+ MEMCR_COMPRESS_LZ4, -+ MEMCR_COMPRESS_ZSTD -+} memcr_compress_alg; -+ - struct service_command { - memcr_svc_cmd cmd; - pid_t pid; - } __attribute__((packed)); - -+struct service_options { -+ int is_dump_dir; -+ char dump_dir[MEMCR_DUMPDIR_LEN_MAX]; -+ int is_compress_alg; -+ memcr_compress_alg compress_alg; -+}; -+ - typedef enum { - MEMCR_OK = 0, - MEMCR_ERROR_GENERAL = -1, --- -2.43.0 - diff --git a/recipes-extended/memcr/files/memcr.service b/recipes-extended/memcr/files/memcr.service index 905c94d58..07d99713b 100644 --- a/recipes-extended/memcr/files/memcr.service +++ b/recipes-extended/memcr/files/memcr.service @@ -15,7 +15,7 @@ ExecStartPre=/bin/sh -c '/bin/mkdir -p ${DUMPSDIR_PERSIST}; /bin/chmod -R 777 ${ ExecStartPre=/usr/bin/find ${DUMPSDIR_PERSIST} -mindepth 1 -exec rm {} \; ExecStartPre=/bin/sh -c '/bin/mkdir -p ${DUMPSDIR_TEMP}; /bin/chmod -R 777 ${DUMPSDIR_TEMP}' ExecStartPre=/usr/bin/find ${DUMPSDIR_TEMP} -mindepth 1 -exec rm {} \; -ExecStart=/usr/bin/memcr -d "${DUMPSDIR_PERSIST};${DUMPSDIR_TEMP}" -N -l ${LOCATOR} -f -z -e -t ${TIMEOUT} +ExecStart=/usr/bin/memcr -d "${DUMPSDIR_PERSIST};${DUMPSDIR_TEMP}" -N -l ${LOCATOR} -c -f -z -e -t ${TIMEOUT} Restart=on-failure [Install] diff --git a/recipes-extended/memcr/memcr_git.bb b/recipes-extended/memcr/memcr_git.bb index 9d29d39fa..1f674ba50 100644 --- a/recipes-extended/memcr/memcr_git.bb +++ b/recipes-extended/memcr/memcr_git.bb @@ -1,21 +1,22 @@ SUMMARY = "memcr memory hibernate/restore tool" LICENSE = "GPL-2.0-only" -LIC_FILES_CHKSUM = "file://COPYING;md5=0ba16794955006770904e8293abcbee5" +LIC_FILES_CHKSUM = "file://COPYING;md5=606d8cf603cf7007e6c1fffda5da9ffa" HOMEPAGE = "https://github.com/LibertyGlobal/memcr" FILESEXTRAPATHS:prepend := "${THISDIR}/files:" SRC_URI = "git://git@github.com/LibertyGlobal/memcr.git;branch=main;protocol=ssh" -SRC_URI += " file://0001-RDK-54059-retry-ptrace-seize-on-EPERM.patch" SRC_URI += " file://memcr.service" -SRC_URI += " file://0001-RDK-47153-Support-zstd-compression-and-option-to-set-dump-dir-.patch" +SRC_URI += " file://0001-RDK-47153-Option-to-set-dump-dir-and-compression-per.patch" +SRC_URI += " file://0001-RDK-54059-retry-ptrace-seize-on-EPERM.patch" INSANE_SKIP:${PN} += "ldflags" -PV = "1.0+git${SRCPV}" -# Code base from 30.08.2024 -SRCREV = "b58f2b8e26cab6b67eceaa36fd6ce5a6d04dcd28" +PV = "1.0.3" +PR = "r0" +# Code base from 18.08.2025 +SRCREV = "e58cf09b092b5e269acb5e8a3aa311b6d748bfe0" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" diff --git a/recipes-extended/rdkperf/rdkperf.bb b/recipes-extended/rdkperf/rdkperf.bb deleted file mode 100644 index f285f86e4..000000000 --- a/recipes-extended/rdkperf/rdkperf.bb +++ /dev/null @@ -1,86 +0,0 @@ -DESCRIPTION = "RDK Perf - lightweight profiling tool for real time performance metrics reporting" - -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=175792518e4ac015ab6696d16c4f607e" - -FILESEXTRAPATHS:prepend := "${THISDIR}/files:" - -#DEPENDS = " " - -#USE_RDKPERF_SERVICE = "${@bb.utils.contains('DISTRO_FEATURES', 'rdkperf_service', "true", "", d)}" - -inherit systemd syslog-ng-config-gen -SYSLOG-NG_FILTER = "${@bb.utils.contains('DISTRO_FEATURES', 'rdkperf_service', "rdkperf", "", d)}" -SYSLOG-NG_SERVICE_rdkperf = "${@bb.utils.contains('DISTRO_FEATURES', 'rdkperf_service', "rdkperf.service", "", d)}" -SYSLOG-NG_DESTINATION_rdkperf = "${@bb.utils.contains('DISTRO_FEATURES', 'rdkperf_service', "rdkperf.log", "", d)}" -SYSLOG-NG_LOGRATE_rdkperf = "${@bb.utils.contains('DISTRO_FEATURES', 'rdkperf_service', "low", "", d)}" - -def use_rdk_perf_service(d): - if bb.utils.contains("DISTRO_FEATURES", "rdkperf_service", "true", "false", d) == "true": - # SYSLOG-NG_FILTER = bb.utils.contains("DISTRO_FEATURES", 'rdkperf_service', "rdkperf", "", d) - # SYSLOG-NG_SERVICE_rdkperf = bb.utils.contains("DISTRO_FEATURES", 'rdkperf_service', "rdkperf.service", "", d) - # SYSLOG-NG_DESTINATION_rdkperf = bb.utils.contains("DISTRO_FEATURES", 'rdkperf_service', "rdkperf.log", "", d) - # SYSLOG-NG_LOGRATE_rdkperf = bb.utils.contains("DISTRO_FEATURES", 'rdkperf_service', "low", "", d) - return "true" - else: - return "false" - -USE_RDKPERF_SERVICE = "${@use_rdk_perf_service(d)}" - -# git@github.com:rdkcentral/rdkperf.git -# Testing with development branch -#SRC_URI = "git://github.com/rdkcentral/rdkperf;protocol=git;branch=development" - -# Using the main branch -SRC_URI = "git://github.com/rdkcentral/rdkperf;protocol=git;branch=main" - -PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" - -PV ?= "1.0.0" -PR ?= "r0" -S = "${WORKDIR}/git" - - -RDKPERF_BUILD_FLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'rdkperf_service', "ENABLE_PERF_REMOTE=1", "", d)}" - -do_configure() { - echo "RDKPERF Configure" - oe_runmake -C ${S} -f Makefile ${RDKPERF_BUILD_FLAGS} clean -} - -do_compile () { - oe_runmake -C ${S} -f Makefile ${RDKPERF_BUILD_FLAGS} -} - -do_install() { - install -d ${D}/usr/lib - install -d ${D}/usr/include - install -m 0755 ${S}/build/librdkperf.so ${D}/usr/lib - install -m 0755 ${S}/build/libperftool.so ${D}/usr/lib - install -m 0644 ${S}/rdkperf/rdk_perf.h ${D}/usr/include - install -m 0644 ${S}/src/*.h ${D}/usr/include -} - -do_install:append() { - if [ "x${USE_RDKPERF_SERVICE}" = "xtrue" ]; then - echo "Installing RDKPerf service" - install -d ${D}${systemd_unitdir}/system - install -m 0644 ${S}/service/rdkperf.service ${D}${systemd_unitdir}/system/rdkperf.service - - install -d ${D}/usr/bin - install -m 0755 ${S}/build/perfservice ${D}/usr/bin - - fi -} - - -SYSTEMD_SERVICE:${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'rdkperf_service', "rdkperf.service", "", d)}" -FILES:${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'rdkperf_service', "${systemd_unitdir}/system/rdkperf.service", "", d)}" - -INSANE_SKIP:${PN} = "dev-so" -FILES_SOLIBSDEV = "" -FILES:${PN} += "${libdir}/*.so" - -INSANE_SKIP:${PN} += "ldflags" - - diff --git a/recipes-extended/remotedebugger/remotedebugger.bb b/recipes-extended/remotedebugger/remotedebugger.bb index f78d8c278..21265d230 100644 --- a/recipes-extended/remotedebugger/remotedebugger.bb +++ b/recipes-extended/remotedebugger/remotedebugger.bb @@ -2,18 +2,22 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=175792518e4ac015ab6696d16c4f607e" FILESEXTRAPATHS:prepend := "${THISDIR}/files:" +PV = "1.3.6" +PR = "r0" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" +SRCREV = "6ff11e27284e51df2475cb3cbdcf38f1ad7d4252" SRC_URI = "${CMF_GITHUB_ROOT}/remote_debugger;${CMF_GITHUB_SRC_URI_SUFFIX};name=generic" SRCREV_FORMAT = "generic" -# Release version - 1.3.1 +# Release version - 1.3.6 S = "${WORKDIR}/git" CFLAGS += " -Wall -Werror" inherit autotools pkgconfig coverity systemd syslog-ng-config-gen breakpad-logmapper -DEPENDS = "cjson iarmbus iarmmgrs rdk-logger trower-base64 msgpack-c webconfig-framework rbus libsyswrapper" +DEPENDS = "cjson rdk-logger trower-base64 msgpack-c webconfig-framework rbus libsyswrapper dcmd" +DEPENDS:append:client = " iarmbus iarmmgrs" RDEPENDS:${PN}:append = " bash" RDEPENDS:${PN}:remove_morty = "bash" @@ -30,8 +34,10 @@ INCLUDE_DIRS = " \ -I${STAGING_INCDIR}/trower-base64 \ -I${STAGING_INCDIR}/rbus \ " + + # RBUS is now used for generic communication. Enable IARMBUS support for Video devices. -EXTRA_OECONF:append = " --enable-iarmbusSupport=yes" +EXTRA_OECONF:append:client = " --enable-iarmbusSupport=yes" SYSLOG-NG_FILTER = "remote-debugger" SYSLOG-NG_SERVICE_remote-debugger = "remote-debugger.service" diff --git a/recipes-extended/webkitbrowser-plugin/files/0009-Thunder-R4.4.3-upgrade-Fix.patch b/recipes-extended/webkitbrowser-plugin/files/0009-Thunder-R4.4.3-upgrade-Fix.patch new file mode 100644 index 000000000..acacd1589 --- /dev/null +++ b/recipes-extended/webkitbrowser-plugin/files/0009-Thunder-R4.4.3-upgrade-Fix.patch @@ -0,0 +1,12 @@ +diff --git a/WebKitBrowser/Extension/main.cpp b/WebKitBrowser/Extension/main.cpp +index 24acca0fc..a25030b4f 100644 +--- a/WebKitBrowser/Extension/main.cpp ++++ b/WebKitBrowser/Extension/main.cpp +@@ -282,7 +282,3 @@ G_MODULE_EXPORT void webkit_web_extension_initialize_with_user_data(WebKitWebExt + } + + } +- +-// explicit instantiation so that -O1/2/3 flags do not introduce undefined symbols +-template void WPEFramework::Core::IPCMessageType<2u, WPEFramework::RPC::Data::Input, WPEFramework::RPC::Data::Output>::RawSerializedType::AddRef() const; +-template void WPEFramework::Core::IPCMessageType<2u, WPEFramework::RPC::Data::Input, WPEFramework::RPC::Data::Output>::RawSerializedType::AddRef() const; diff --git a/recipes-extended/webkitbrowser-plugin/files/webkit-browser-cache-cleanup.service b/recipes-extended/webkitbrowser-plugin/files/webkit-browser-cache-cleanup.service index fe36c2377..b565a80ed 100644 --- a/recipes-extended/webkitbrowser-plugin/files/webkit-browser-cache-cleanup.service +++ b/recipes-extended/webkitbrowser-plugin/files/webkit-browser-cache-cleanup.service @@ -2,11 +2,13 @@ Description=Cleans up browser cache After=local-fs.target storagemgrmain.service -Before=wpeframework.service [Service] Type=oneshot ExecStart=-/bin/sh -c '/lib/rdk/clearWebkitBrowserCache.sh' +# Ensure this service runs only once ever after boot, independently +# of other services being restarted that depend on this one +RemainAfterExit=yes [Install] WantedBy=multi-user.target diff --git a/recipes-extended/webkitbrowser-plugin/webkitbrowser-plugin_git.bb b/recipes-extended/webkitbrowser-plugin/webkitbrowser-plugin_git.bb index f99f738f4..9866a232f 100644 --- a/recipes-extended/webkitbrowser-plugin/webkitbrowser-plugin_git.bb +++ b/recipes-extended/webkitbrowser-plugin/webkitbrowser-plugin_git.bb @@ -3,8 +3,8 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://../LICENSE;md5=16cf2209d4e903e4d5dcd75089d7dfe2" # keep PV/PR in sync with meta-middleware-generic-support/conf/include/generic-pkgrev.inc -PV ?= "1.1.27" -PR ?= "r0" +PV = "1.1.30" +PR = "r0" PATCHTOOL = "git" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" @@ -18,10 +18,11 @@ SRC_URI = "git://github.com/rdkcentral/rdkservices.git;protocol=git;branch=main file://0006-Introduce-state-aware-memory-observer.patch;patchdir=../ \ file://0007-Legacy-launch-metrics.patch;patchdir=../ \ file://0008-Thunder-upgrade-quirks.patch;patchdir=../ \ + file://0009-Thunder-R4.4.3-upgrade-Fix.patch;patchdir=../ \ " -# Tip of the main at Dec 18, 2024 -SRCREV = "d6d87d24468970fe94d692a7b0efbb77e8fe1547" +# Tip of the main at June 27, 2025 +SRCREV = "857eff8cdcf0a3506683043d0676d541e48dfaa3" inherit cmake pkgconfig python3native diff --git a/recipes-extended/wpe-backend-rdk/files/comcast-manette-gamepad-analog-button.patch b/recipes-extended/wpe-backend-rdk/files/comcast-manette-gamepad-analog-button.patch new file mode 100644 index 000000000..f0d3837c8 --- /dev/null +++ b/recipes-extended/wpe-backend-rdk/files/comcast-manette-gamepad-analog-button.patch @@ -0,0 +1,96 @@ +Date: Fri, Aug 30 20:30:21 2024 +0000 +From: Manoj Bhatta +Subject: [PATCH] Add support for Analog buton values +Source: COMCAST +Signed-off-by: Ganesh Sahu + +diff --git a/src/manettegamepad/manette_gamepad.cpp b/src/manettegamepad/manette_gamepad.cpp +index 71ee82a..c4f1a04 100644 +--- a/src/manettegamepad/manette_gamepad.cpp ++++ b/src/manettegamepad/manette_gamepad.cpp +@@ -166,17 +166,29 @@ struct GamepadProvider + static void onButtonPressEvent(ManetteDevice* device, ManetteEvent* event, GamepadProvider* provider) + { + uint16_t button; ++ double value = 1.0; + if (!manette_event_get_button(event, &button)) + return; +- provider->buttonPressedOrReleased(device, toStandardGamepadButton(button), true); ++ if (button == BTN_TL2 || button == BTN_TR2) { ++ manette_event_get_button_value(event, &value); ++ provider->analogButtonChanged(device, toStandardGamepadButton(button), value); ++ } ++ else ++ provider->buttonPressedOrReleased(device, toStandardGamepadButton(button), true); + } + + static void onButtonReleaseEvent(ManetteDevice* device, ManetteEvent* event, GamepadProvider* provider) + { + uint16_t button; ++ double value = 0.0; + if (!manette_event_get_button(event, &button)) + return; +- provider->buttonPressedOrReleased(device, toStandardGamepadButton(button), false); ++ if (button == BTN_TL2 || button == BTN_TR2) { ++ manette_event_get_button_value(event, &value); ++ provider->analogButtonChanged(device, toStandardGamepadButton(button), value); ++ } ++ else ++ provider->buttonPressedOrReleased(device, toStandardGamepadButton(button), false); + } + + void listentoManetteDevice(ManetteDevice * device) +@@ -186,6 +198,16 @@ struct GamepadProvider + g_signal_connect(device, "absolute-axis-event", G_CALLBACK(onAbsoluteAxisEvent), this); + g_signal_connect(device, "hat-axis-event", G_CALLBACK(onHatAxisEvent), this); + } ++ ++ void analogButtonChanged(ManetteDevice* device, enum wpe_gamepad_button button, double value) ++ { ++ if (button == WPE_GAMEPAD_BUTTON_COUNT) ++ return; ++ auto it = manetteDevices.find(device); ++ if (it != manetteDevices.end()) { ++ updateGamepadAnalogButton(it->second,button,value); ++ } ++ } + + void buttonPressedOrReleased(ManetteDevice* device, enum wpe_gamepad_button button, bool pressed) + { +@@ -317,6 +339,7 @@ struct GamepadProvider + gamepadsInfo.erase(it); + wpe_gamepad_provider_dispatch_gamepad_disconnected(provider, gamepadId); + } ++ void updateGamepadAnalogButton(uint32_t gamepadId, enum wpe_gamepad_button button, double value); + void updateGamepadButton(uint32_t gamepadId, enum wpe_gamepad_button button, bool pressed); + void updateGamepadAxis(uint32_t gamepadId, enum wpe_gamepad_axis axis, double value); + }; +@@ -354,6 +377,12 @@ struct GamepadProxy + return result ? result: "Unknown"; + } + ++ void dispatchAnalogButtonChanged(enum wpe_gamepad_button button, double value) ++ { ++ if (gamepad) ++ wpe_gamepad_dispatch_analog_button_changed(gamepad, button, value); ++ } ++ + void dispatchButtonChanged(enum wpe_gamepad_button button, bool pressed) + { + if (gamepad) +@@ -378,6 +407,15 @@ GamepadProvider::~GamepadProvider() + kv.second->cleanUp(); + } + ++void GamepadProvider::updateGamepadAnalogButton( uint32_t gamepadId, enum wpe_gamepad_button button, double value ) ++{ ++ auto iter = gamepadProxies.find(gamepadId); ++ if (iter != gamepadProxies.end()) { ++ auto *proxy = iter->second; ++ proxy->dispatchAnalogButtonChanged(button,value); ++ } ++} ++ + void GamepadProvider::updateGamepadButton( uint32_t gamepadId, enum wpe_gamepad_button button, bool pressed ) + { + auto iter = gamepadProxies.find(gamepadId); diff --git a/recipes-extended/wpe-backend-rdk/files/comcast-manette-gamepad-digital-trigger-fix.patch b/recipes-extended/wpe-backend-rdk/files/comcast-manette-gamepad-digital-trigger-fix.patch new file mode 100644 index 000000000..5b22a6318 --- /dev/null +++ b/recipes-extended/wpe-backend-rdk/files/comcast-manette-gamepad-digital-trigger-fix.patch @@ -0,0 +1,79 @@ +From 6fc3fd84b63b5ea45630e0d5f53afbba83d54075 Mon Sep 17 00:00:00 2001 +From: Ganesh prasad Sahu +Date: Thu, 1 May 2025 18:37:24 +0000 +Subject: [PATCH] comcast manette gamepad digital trigger fix +Source: COMCAST + +--- + src/manettegamepad/manette_gamepad.cpp | 31 ++++++++++++++++++++++++-- + 1 file changed, 29 insertions(+), 2 deletions(-) + +diff --git a/src/manettegamepad/manette_gamepad.cpp b/src/manettegamepad/manette_gamepad.cpp +index c4f1a04..c7a8336 100644 +--- a/src/manettegamepad/manette_gamepad.cpp ++++ b/src/manettegamepad/manette_gamepad.cpp +@@ -28,6 +28,7 @@ + #include + #include + #include ++#include ` + + struct GamepadProxy; + +@@ -163,15 +164,38 @@ struct GamepadProvider + } + } + ++ typedef gboolean (*manette_device_trigger_type_func)(ManetteDevice *device); ++ ++ //Safe call for the trigger type api ++ static gboolean safe_manette_device_trigger_type(ManetteDevice *device) ++ { ++ static bool symbol_checked = false; ++ static manette_device_trigger_type_func manette_device_trigger_type_ptr = nullptr; ++ ++ if (!symbol_checked) { ++ manette_device_trigger_type_ptr = (manette_device_trigger_type_func) ++ dlsym(RTLD_DEFAULT, "manette_device_trigger_type"); ++ symbol_checked = true; ++ } ++ ++ if (manette_device_trigger_type_ptr) { ++ return manette_device_trigger_type_ptr(device); ++ } ++ ++ return TRUE; // Default to analog behavior when libmanette doesn't provide support ++ } ++ + static void onButtonPressEvent(ManetteDevice* device, ManetteEvent* event, GamepadProvider* provider) + { + uint16_t button; + double value = 1.0; + if (!manette_event_get_button(event, &button)) + return; +- if (button == BTN_TL2 || button == BTN_TR2) { ++ //Send button pressed with absolute value if an analog trigger ++ if ( (button == BTN_TL2 || button == BTN_TR2) && safe_manette_device_trigger_type(device) ) { + manette_event_get_button_value(event, &value); + provider->analogButtonChanged(device, toStandardGamepadButton(button), value); ++ //g_warning("manette-gamepad: buttonPressEvent btn=%u (analog=y) val=%lf\n",button, value); + } + else + provider->buttonPressedOrReleased(device, toStandardGamepadButton(button), true); +@@ -183,9 +207,12 @@ struct GamepadProvider + double value = 0.0; + if (!manette_event_get_button(event, &button)) + return; +- if (button == BTN_TL2 || button == BTN_TR2) { ++ ++ //Send button released with absolute value if an analog trigger ++ if ( (button == BTN_TL2 || button == BTN_TR2) && safe_manette_device_trigger_type(device) ) { + manette_event_get_button_value(event, &value); + provider->analogButtonChanged(device, toStandardGamepadButton(button), value); ++ //g_warning("manette-gamepad: buttonReleaseEvent btn=%u (analog=y) val=%lf\n",button, value); + } + else + provider->buttonPressedOrReleased(device, toStandardGamepadButton(button), false); +-- +2.34.1 + diff --git a/recipes-extended/wpe-backend-rdk/wpe-backend-rdk_0.5.bb b/recipes-extended/wpe-backend-rdk/wpe-backend-rdk_0.5.bb new file mode 100644 index 000000000..6122f0c74 --- /dev/null +++ b/recipes-extended/wpe-backend-rdk/wpe-backend-rdk_0.5.bb @@ -0,0 +1,60 @@ +SUMMARY = "WPE WebKit RDK backend" +HOMEPAGE = "https://github.com/WebPlatformForEmbedded" +SECTION = "wpe" +LICENSE = "BSD-2-Clause & Apache-2.0" +LIC_FILES_CHKSUM = "file://COPYING;md5=ab5b52d145a58f5fcc0e2a531e7a2370" + +DEPENDS += "libwpe glib-2.0" + +PV ?= "0.5.0" +PR ?= "r0" + +PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" +PATCHTOOL = "git" + +# Revision date: March 15, 2024 +SRCREV = "6f53fce68d8e6895fd25a2b18c781bfbccdcf3b0" +BASE_URI ?= "git://github.com/WebPlatformForEmbedded/WPEBackend-rdk.git;protocol=https;branch=master" +SRC_URI = "${BASE_URI}" + +SRC_URI += "file://comcast-Naive-gamepad-support.patch" +SRC_URI += "file://0001-Fix-browser-crash-when-the-compositor-is-not-created.patch" +SRC_URI += "file://0001-Send-SIGHUP-if-compositor-is-terminated.patch" +SRC_URI += "file://comcast-manette-gamepad-support.patch" +SRC_URI += "file://comcast-manette-gamepad-analog-button.patch" +SRC_URI += "file://comcast-manette-gamepad-digital-trigger-fix.patch" + +S = "${WORKDIR}/git" + +inherit cmake pkgconfig + +WPE_BACKEND ?= "essos headless" +RDEPENDS:${PN}-platform-plugin:append = " essos" + +PACKAGECONFIG ?= "${WPE_BACKEND}" +PACKAGECONFIG:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'gamepad-using-libmanette', ' manettegamepad', ' gamepad', d)}" + +PACKAGECONFIG[westeros] = "-DUSE_BACKEND_WESTEROS=ON -DUSE_KEY_INPUT_HANDLING_LINUX_INPUT=OFF,,wayland westeros libxkbcommon" +PACKAGECONFIG[essos] = "-DUSE_BACKEND_ESSOS=ON -DUSE_INPUT_LIBINPUT=OFF,-DUSE_BACKEND_ESSOS=OFF,essos libxkbcommon wayland" +PACKAGECONFIG[gamepad] = "-DUSE_GENERIC_GAMEPAD=ON,-DUSE_GENERIC_GAMEPAD=OFF," +PACKAGECONFIG[headless] = "-DUSE_BACKEND_HEADLESS=ON -DUSE_INPUT_LIBINPUT=OFF,-DUSE_BACKEND_HEADLESS=OFF," +PACKAGECONFIG[manettegamepad] = "-DUSE_LIBMANETTE_GAMEPAD=ON, -DUSE_LIBMANETTE_GAMEPAD=OFF, libmanette" + + +EXTRA_OECMAKE += " \ + -DCMAKE_BUILD_TYPE=Release \ +" + +PROVIDES = "wpe-backend-rdk" +RPROVIDES:${PN} = "wpe-backend-rdk" + +PACKAGES =+ "${PN}-platform-plugin" +FILES:${PN}-platform-plugin += "${libdir}/*.so ${bindir}/*" +INSANE_SKIP:${PN}-platform-plugin = "dev-so" + +FILES_SOLIBSDEV = "" +SOLIBS = ".so" +INSANE_SKIP:${PN} += "dev-so" +FILES:${PN} += "${libdir}/*.so" +#We need the default package, even if empty for SDK +ALLOW_EMPTY:${PN}="1" diff --git a/recipes-support/aker/aker_git.bb b/recipes-support/aker/aker_git.bb new file mode 100644 index 000000000..690556882 --- /dev/null +++ b/recipes-support/aker/aker_git.bb @@ -0,0 +1,51 @@ +SUMMARY = "This receipe compiles and builds aker." +SECTION = "libs" +DESCRIPTION = "Module for selectively blocking MAC addresses based on a succinct schedule in MsgPack" +HOMEPAGE = "https://github.com/Comcast/aker" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" + +SRCREV = "ebbf31be22b1cc7928bed070fe84ecdc7191c4c2" +SRC_URI = "git://github.com/xmidt-org/aker.git;branch=main" +SRC_URI += "file://aker-01.patch" +SRC_URI += "file://drop_root_aker.patch" + +PV = "git+${SRCPV}" +S = "${WORKDIR}/git" + +ASNEEDED = "" + +DEPENDS = "libparodus wrp-c trower-base64 msgpack-c rdk-logger log4c util-linux libunpriv" +DEPENDS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'telemetry2_0', 'telemetry', '', d)}" + +CFLAGS:append = " \ + -I${STAGING_INCDIR} \ + -I${STAGING_INCDIR}/libparodus \ + -I${STAGING_INCDIR}/msgpack \ + -I${STAGING_INCDIR}/wrp-c \ + -I${STAGING_INCDIR}/cimplog \ + -I${STAGING_INCDIR}/trower-base64 \ + " +CFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'telemetry2_0', '-DENABLE_FEATURE_TELEMETRY2_0', '', d)}" +LDFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'telemetry2_0', ' -ltelemetry_msgsender ', '', d)}" +LDFLAGS:append = " -lprivilege" + +inherit pkgconfig coverity cmake +EXTRA_OECMAKE = "-DBUILD_TESTING=OFF -DBUILD_YOCTO=true" + +do_install:append() { + if ${@bb.utils.contains('DISTRO_FEATURES', 'aker', 'true', 'false', d)}; then + install -d ${D}/etc + cd ${D}/etc + touch AKER_ENABLE + cd - + fi +} + +FILES:${PN} += " \ + ${bindir}/* \ +" +FILES:${PN} += " \ + ${@bb.utils.contains("DISTRO_FEATURES", "aker", "/etc/* ", " ", d)} \ +" diff --git a/recipes-support/aker/files/aker-01.patch b/recipes-support/aker/files/aker-01.patch new file mode 100644 index 000000000..87a27d0cb --- /dev/null +++ b/recipes-support/aker/files/aker-01.patch @@ -0,0 +1,30 @@ +Date: Nov 1, 2017 3:38 AM + +From: 3a060c36ddd7a1fc0150063f9469e412e6ace94f Nov 2, 2017 12:49 AM + +Subject: [PATCH] RDKB-14632: Deploy aker on Yocto. + + Support for aker, parental control component on Yocto. + +Source: COMCAST + + +Upstream-Status: Pending + +Signed-off-by: Ramki Ananthakrishnan +--- + +diff --git a/src/main.c b/src/main.c +index cf6e9ea..0808271 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -248,3 +248,9 @@ static int main_loop(libpd_cfg_t *cfg, char *firewall_cmd, char *data_file, char + debug_print("End of parodus_upstream\n"); + return 0; + } ++ ++ ++const char *rdk_logger_module_fetch(void) ++{ ++ return "LOG.RDK.AKER"; ++} diff --git a/recipes-support/aker/files/drop_root_aker.patch b/recipes-support/aker/files/drop_root_aker.patch new file mode 100644 index 000000000..ad95e1434 --- /dev/null +++ b/recipes-support/aker/files/drop_root_aker.patch @@ -0,0 +1,66 @@ +Date: Jan 13, 2025 10:50 PM +From: LasyaPrakarsha_DonthiVenkata@comcast.com +Subject: RDKB-58300: aker process runs with limited privilege +Source: Comcast +Upstream-Status: Pending +Signed-off-by: LasyaPrakarsha_DonthiVenkata@comcast.com + +--- + +Index: git/src/main.c +=================================================================== +--- git.orig/src/main.c ++++ git/src/main.c +@@ -43,6 +43,8 @@ + #include + #endif + ++#include "cap.h" ++static cap_user appcaps; + + /*----------------------------------------------------------------------------*/ + /* Macros */ +@@ -71,6 +73,7 @@ size_t max_macs = INT_MAX; + static void sig_handler(int sig); + static void import_existing_schedule( const char *data_file, const char *md5_file ); + static int main_loop(libpd_cfg_t *cfg, char *data_file, char *md5_file, const char *device_id ); ++static bool drop_root(); + + /*----------------------------------------------------------------------------*/ + /* External Functions */ +@@ -181,6 +184,10 @@ int main( int argc, char **argv) + } + } + ++ if(!drop_root()) { ++ debug_error("drop_root method failed!\n"); ++ } ++ + if (max_macs <= 0) { + max_macs = INT_MAX; + } +@@ -249,6 +256,24 @@ int main( int argc, char **argv) + return rv; + } + ++static bool drop_root() ++{ ++ bool retval = false; ++ debug_info("NonRoot feature is enabled, dropping root privileges for aker process\n"); ++ appcaps.caps = NULL; ++ appcaps.user_name = NULL; ++ ++ if(init_capability() != NULL) { ++ if(drop_root_caps(&appcaps) != -1) { ++ if(update_process_caps(&appcaps) != -1) { ++ read_capability(&appcaps); ++ retval = true; ++ } ++ } ++ } ++ return retval; ++} ++ + /*----------------------------------------------------------------------------*/ + /* Internal functions */ + /*----------------------------------------------------------------------------*/ diff --git a/recipes-support/ccronexpr/ccronexpr_1.0.bb b/recipes-support/ccronexpr/ccronexpr_1.0.bb new file mode 100644 index 000000000..f7f35a6f5 --- /dev/null +++ b/recipes-support/ccronexpr/ccronexpr_1.0.bb @@ -0,0 +1,20 @@ +SUMMARY = "ccronexpr library" +SECTION = "libs" +DESCRIPTION = "Library for ccronexpr" +HOMEPAGE = "https://github.com/staticlibs/ccronexpr" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=646c743a776a3dc373f94d63fb2f1a71" + +SRC_URI = "git://github.com/staticlibs/ccronexpr.git;branch=master" +SRCREV = "17475e10c2053650a86b1d25a692c2c20d74c420" + +SRC_URI += "file://0001-ccronexpr-cmakeLists.patch" +SRC_URI += "file://0002-Add-CRON_USE_LOCAL_TIME-preprocessor-option.patch" + +S = "${WORKDIR}/git" + +inherit cmake + +TARGET_CFLAGS += "-DCRON_USE_LOCAL_TIME" + diff --git a/recipes-support/ccronexpr/files/0001-ccronexpr-cmakeLists.patch b/recipes-support/ccronexpr/files/0001-ccronexpr-cmakeLists.patch new file mode 100644 index 000000000..cd2581305 --- /dev/null +++ b/recipes-support/ccronexpr/files/0001-ccronexpr-cmakeLists.patch @@ -0,0 +1,42 @@ +From b49d709fc2902abb7723c31c289a2141af8600c3 Mon Sep 17 00:00:00 2001 +From: Thomas Lea +Date: Mon, 21 Sep 2020 08:56:02 -0500 +Subject: [PATCH] Added CMakeLists.txt +Source: COMCAST +Upstream-Status: Pending + +Signed-off-by: Thomas Lea +--- + CMakeLists.txt | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + create mode 100644 CMakeLists.txt + +diff --git a/CMakeLists.txt b/CMakeLists.txt +new file mode 100644 +index 0000000..2209ae3 +--- /dev/null ++++ b/CMakeLists.txt +@@ -0,0 +1,21 @@ ++cmake_minimum_required(VERSION 2.8) ++project(ccronexprd) ++ ++add_definitions(-DCRON_USE_LOCAL_TIME) ++add_library(ccronexprd SHARED ccronexpr.c) ++ ++target_include_directories(ccronexprd PUBLIC ++ $ ++ $ ++) ++ ++set_property(TARGET ccronexprd PROPERTY VERSION "1.0") ++ ++install(TARGETS ccronexprd ++ ARCHIVE DESTINATION lib ++ LIBRARY DESTINATION lib ++ RUNTIME DESTINATION bin ++) ++ ++install(FILES ccronexpr.h DESTINATION include) ++ +-- +2.25.1 diff --git a/recipes-support/ccronexpr/files/0002-Add-CRON_USE_LOCAL_TIME-preprocessor-option.patch b/recipes-support/ccronexpr/files/0002-Add-CRON_USE_LOCAL_TIME-preprocessor-option.patch new file mode 100644 index 000000000..397871a7c --- /dev/null +++ b/recipes-support/ccronexpr/files/0002-Add-CRON_USE_LOCAL_TIME-preprocessor-option.patch @@ -0,0 +1,35 @@ +Date: Sept 21 08:49:52 2020 + +From: 17475e10c2053650a86b1d25a692c2c20d74c420 Tue May 12 17:49:14 2020 +0100 + +Subject: add CRON_USE_LOCAL_TIME preprocessor option + +When defined, this will use local time for crontab entries instead of UTC. + +Source: COMCAST + + +Upstream-Status: Pending + +Signed-off-by: Thomas Lea +--- +Index: git/ccronexpr.c +=================================================================== +--- git.orig/ccronexpr.c ++++ git/ccronexpr.c +@@ -96,6 +96,7 @@ time_t _mkgmtime(struct tm* tm); + #endif /* __MINGW32__ */ + + /* function definitions */ ++#ifndef CRON_USE_LOCAL_TIME + time_t cron_mktime_gm(struct tm* tm) { + #if defined(_WIN32) + /* http://stackoverflow.com/a/22557778 */ +@@ -133,6 +134,7 @@ time_t cron_mktime_gm(struct tm* tm) { + return timegm(tm); + #endif + } ++#endif + + struct tm* cron_time_gm(time_t* date, struct tm* out) { + #if defined(__MINGW32__) diff --git a/recipes-support/chrony/chrony_%.bbappend b/recipes-support/chrony/chrony_%.bbappend new file mode 100644 index 000000000..766eb043a --- /dev/null +++ b/recipes-support/chrony/chrony_%.bbappend @@ -0,0 +1,42 @@ +FILESEXTRAPATHS:prepend := "${THISDIR}/files:" + +RDEPENDS:${PN} += "bash" + +SRC_URI += "file://chrony.conf \ + file://chronyd.service \ + file://rdk_chrony.conf \ + file://chrony-conf-update.sh \ + " +PACKAGECONFIG:remove = "editline" + +do_install:append() { + # Binaries + install -m 0755 ${S}/chronyc ${D}${sbindir} + install -d ${D}${base_libdir}/rdk + + #config File + rm -rf ${D}${sysconfdir}/chrony.conf + install -m 0644 ${WORKDIR}/chrony.conf ${D}${sysconfdir}/ + install -m 0644 ${WORKDIR}/rdk_chrony.conf ${D}${sysconfdir}/ + install -m 0755 ${WORKDIR}/chrony-conf-update.sh ${D}${base_libdir}/rdk + + + # service to start chrony + rm -rf ${D}${systemd_unitdir}/system/chronyd.service + install -m 0644 ${WORKDIR}/chronyd.service ${D}${systemd_unitdir}/system/ +} + + +FILES:${PN} += "${sbindir}/chronyc" +CONFFILES:${PN} += "${sysconfdir}/chrony.conf" +CONFFILES:${PN} += "${sysconfdir}/rdk_chrony.conf" +FILES:${PN} += "${base_libdir}/rdk/chrony-conf-update.sh" +FILES:${PN} += "${systemd_unitdir}/system/chronyd.service" + + +inherit syslog-ng-config-gen +SYSLOG-NG_FILTER = "chronyd" +SYSLOG-NG_SERVICE_chronyd = "chronyd.service" +SYSLOG-NG_DESTINATION_chronyd = "chrony.log" +SYSLOG-NG_LOGRATE_chronyd = "low" + diff --git a/recipes-support/chrony/files/chrony-conf-update.sh b/recipes-support/chrony/files/chrony-conf-update.sh new file mode 100644 index 000000000..19722256e --- /dev/null +++ b/recipes-support/chrony/files/chrony-conf-update.sh @@ -0,0 +1,228 @@ +#!/bin/bash +############################################################################## +# If not stated otherwise in this file or this component's LICENSE file the +# following copyright and licenses apply: +# +# Copyright 2020 RDK Management +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +############################################################################## +# Purpose : To generate the chrony configuration file (/etc/rdk_chrony.conf) +# Scope : RDK Devices +# Usage : Invoke by systemd service as part of chrony integration + + +LOG_FILE="/opt/logs/chrony.log" +CHRONY_CONF=/etc/rdk_chrony.conf +DEFAULT_MINPOLL="10" +DEFAULT_MAXPOLL="12" + +if [ -f /etc/env_setup.sh ]; then + . /etc/env_setup.sh +fi + +#create directory if not already available +/bin/mkdir -p /var/lib/chrony + +#Log framework to print timestamp and source script name +ntpLog() +{ + echo "`/bin/timestamp` : $0: $*" >> "$LOG_FILE" +} + +# ----------------------------------------------------------------------------- +# Fetch NTP server hostnames and poll intervals using property scripts +# ----------------------------------------------------------------------------- +get_ntp_hosts() { +if [ -f /lib/rdk/getPartnerProperty.sh ]; then + hostName=`/lib/rdk/getPartnerProperty.sh ntpHost` + hostName2=`/lib/rdk/getPartnerProperty.sh ntpHost2` + hostName3=`/lib/rdk/getPartnerProperty.sh ntpHost3` + hostName4=`/lib/rdk/getPartnerProperty.sh ntpHost4` + hostName5=`/lib/rdk/getPartnerProperty.sh ntpHost5` + + settings1=`/lib/rdk/getPartnerProperty.sh ntpHost1Settings` + settings2=`/lib/rdk/getPartnerProperty.sh ntpHost2Settings` + settings3=`/lib/rdk/getPartnerProperty.sh ntpHost3Settings` + settings4=`/lib/rdk/getPartnerProperty.sh ntpHost4Settings` + settings5=`/lib/rdk/getPartnerProperty.sh ntpHost5Settings` + + maxstep=`/lib/rdk/getPartnerProperty.sh ntpMakestep` +fi +} + +# Fallback: Fetch NTP hosts from bootstrap.ini if property script returns nothing +get_ntp_hosts_from_bootstrap() { + BOOTSTRAP="/opt/secure/RFC/bootstrap.ini" + + if [ ! -f "$BOOTSTRAP" ]; then + ntpLog "bootstrap.ini not found at $BOOTSTRAP" + return 1 + fi + + # Helper to fetch key=value from bootstrap.ini (first match) + get_bs_val() { + key="$1" + # Escape regex metacharacters in key so it is matched literally + escaped_key=$(printf '%s\n' "$key" | sed 's/[][\\.^$*]/\\&/g') + # Extract RHS after '=' and trim whitespace + grep -m1 -E "^[[:space:]]*$escaped_key=" "$BOOTSTRAP" 2>/dev/null | \ + cut -d'=' -f2- | sed 's/^[[:space:]]*//; s/[[:space:]]*$//' + } + + bs1="$(get_bs_val 'Device.Time.NTPServer1')" + bs2="$(get_bs_val 'Device.Time.NTPServer2')" + bs3="$(get_bs_val 'Device.Time.NTPServer3')" + bs4="$(get_bs_val 'Device.Time.NTPServer4')" + bs5="$(get_bs_val 'Device.Time.NTPServer5')" + + # Only fill missing values (don’t override TR-181 values if present) + [ -z "$hostName" ] && hostName="$bs1" + [ -z "$hostName2" ] && hostName2="$bs2" + [ -z "$hostName3" ] && hostName3="$bs3" + [ -z "$hostName4" ] && hostName4="$bs4" + [ -z "$hostName5" ] && hostName5="$bs5" + + return 0 +} + +strip_dynamic_entries() { + local conf_file="$1" + local tmp_conf="/tmp/rdk_chrony.conf.$$" + + # Remove all server, pool, and makestep lines so every run starts from a + # clean slate — partner entries from a previous run are cleared along with + # build-time defaults, making a separate deduplication step unnecessary. + awk '!/^[[:space:]]*(server|pool|makestep)[[:space:]]/' \ + "$conf_file" > "$tmp_conf" + cat "$tmp_conf" > "$conf_file" + + rm -f "$tmp_conf" +} + +strip_makestep_only() { + local conf_file="$1" + local tmp_conf="/tmp/rdk_chrony.conf.$$" + + awk '!/^[[:space:]]*makestep[[:space:]]/' \ + "$conf_file" > "$tmp_conf" + cat "$tmp_conf" > "$conf_file" + + rm -f "$tmp_conf" +} + +# Write the makestep directive using $maxstep if valid ("float,int"), +# otherwise fall back to the default "1.0 3". +write_makestep() { + if [ -n "$maxstep" ]; then + if echo "$maxstep" | grep -Eq '^[0-9]+(\.[0-9]+)?,[0-9]+$'; then + stepval="${maxstep%%,*}" + stepcount="${maxstep##*,}" + echo "makestep $stepval $stepcount" >> "$CHRONY_CONF" + ntpLog "Added makestep $stepval $stepcount to $CHRONY_CONF" + else + echo "makestep 1.0 3" >> "$CHRONY_CONF" + ntpLog "Makestep value '$maxstep' is invalid, using default makestep 1.0 3 in $CHRONY_CONF" + fi + else + echo "makestep 1.0 3" >> "$CHRONY_CONF" + ntpLog "Makestep is not set, using default makestep 1.0 3 in $CHRONY_CONF" + fi +} + +ntpLog "Retrieve NTP Server URL from /lib/rdk/getPartnerProperty.sh..." +get_ntp_hosts + +if ! ( [ "$hostName" ] || [ "$hostName2" ] || [ "$hostName3" ] || [ "$hostName4" ] || [ "$hostName5" ] ); then + ntpLog "TR-181 returned empty NTP server list; falling back to /opt/secure/RFC/bootstrap.ini..." + get_ntp_hosts_from_bootstrap +fi + +hosts=("$hostName" "$hostName2" "$hostName3" "$hostName4" "$hostName5") +all_settings=("$settings1" "$settings2" "$settings3" "$settings4" "$settings5") +ntpLog "NTP Server URL for the partner:${hosts[*]}" + +# If no partner URLs are available (even after bootstrap), update only the +# makestep directive if configured via TR-181, keeping the build-time default +# server lines untouched. +if ! ( [ "$hostName" ] || [ "$hostName2" ] || [ "$hostName3" ] || [ "$hostName4" ] || [ "$hostName5" ] ); then + if [ -n "$maxstep" ]; then + ntpLog "No partner NTP URLs found; updating makestep from TR-181 and retaining build-time server config" + strip_makestep_only "$CHRONY_CONF" + write_makestep + else + ntpLog "No partner NTP URLs found; retaining build-time default configuration in $CHRONY_CONF" + fi + exit 0 +fi + +# Partner URLs are available — strip all server/pool/makestep entries so the +# update starts from a clean slate (idempotent across repeated runs). +ntpLog "Partner NTP URLs found; updating $CHRONY_CONF" +strip_dynamic_entries "$CHRONY_CONF" + +write_makestep + +# Parse a settings string "Type,MaxSources,Iburst,MinPoll,MaxPoll" into +# s_type, s_maxsources, s_iburst, s_minpoll, s_maxpoll. +# Falls back to defaults for any missing or invalid field. +parse_settings() { + local raw="$1" + s_type=$(echo "$raw" | cut -d',' -f1) + s_maxsources=$(echo "$raw" | cut -d',' -f2) + s_iburst=$(echo "$raw" | cut -d',' -f3) + s_minpoll=$(echo "$raw" | cut -d',' -f4) + s_maxpoll=$(echo "$raw" | cut -d',' -f5) + + # Normalise type: only "pool" is special, everything else is "server" + [ "$s_type" = "pool" ] || s_type="server" + + # Validate poll values; fall back to defaults if non-numeric or inverted + [[ "$s_minpoll" =~ ^[0-9]+$ ]] || s_minpoll="$DEFAULT_MINPOLL" + [[ "$s_maxpoll" =~ ^[0-9]+$ ]] || s_maxpoll="$DEFAULT_MAXPOLL" + if [ "$s_minpoll" -gt "$s_maxpoll" ]; then + ntpLog "WARNING: minpoll ($s_minpoll) > maxpoll ($s_maxpoll) in settings '$raw', using defaults" + s_minpoll="$DEFAULT_MINPOLL" + s_maxpoll="$DEFAULT_MAXPOLL" + fi + + # Normalise iburst: only literal "true" enables it + [ "$s_iburst" = "true" ] || s_iburst="false" +} + +# Add NTP servers ("server" or "pool" directive) to the configuration file + +for i in $(seq 0 4); do + host="${hosts[$i]}" + raw="${all_settings[$i]}" + if [ -n "$host" ]; then + parse_settings "$raw" + + iburst_opt="" + [ "$s_iburst" = "true" ] && iburst_opt=" iburst" + + if [ "$s_type" = "pool" ]; then + maxsources_opt="" + [[ "$s_maxsources" =~ ^[1-9][0-9]*$ ]] && maxsources_opt=" maxsources $s_maxsources" + printf "pool %s%s%s minpoll %s maxpoll %s\n" \ + "$host" "$maxsources_opt" "$iburst_opt" "$s_minpoll" "$s_maxpoll" >> "$CHRONY_CONF" + else + printf "server %s%s minpoll %s maxpoll %s\n" \ + "$host" "$iburst_opt" "$s_minpoll" "$s_maxpoll" >> "$CHRONY_CONF" + fi + fi +done + +ntpLog "Successfully updated $CHRONY_CONF" + +exit 0 diff --git a/recipes-support/chrony/files/chrony.conf b/recipes-support/chrony/files/chrony.conf new file mode 100644 index 000000000..5b6e925dc --- /dev/null +++ b/recipes-support/chrony/files/chrony.conf @@ -0,0 +1,26 @@ +#Configuration values in this file are defaults and typically do not change. +#Server configurations are added at runtime as it may change based on the partner. + +# The next option causes a message to be written to syslog when chronyd +# has to correct an error above 0.5 seconds (you can use any amount you +# like). +logchange 0.5 + + +# Step the system clock instead of slewing it if the adjustment is larger than +# one second, but only in the first three clock updates. +# makestep 1.0 3 (added based on RFC config in runtime config) + + +# Record the rate at which the system clock gains/losses time. +driftfile /var/lib/chrony/drift + +# This directive can be used +# to enable a mode in which the RTC is periodically set to the system +# time, with no tracking of its drift. +rtcsync + +# Stop bad estimates upsetting machine clock. +maxupdateskew 100.0 + +include /etc/rdk_chrony.conf diff --git a/recipes-support/chrony/files/chronyd.service b/recipes-support/chrony/files/chronyd.service new file mode 100644 index 000000000..5df009272 --- /dev/null +++ b/recipes-support/chrony/files/chronyd.service @@ -0,0 +1,18 @@ +[Unit] +Description=NTP client/server +Documentation=man:chronyd(8) man:chrony.conf(5) +Wants=nvram.service tr69hostif.service network-up.target +After=nvram.service tr69hostif.service network-up.target +ConditionPathExists=/opt/secure/RFC/chrony/chronyd_enabled +ConditionCapability=CAP_SYS_TIME + +[Service] +Type=forking +Restart=always +PIDFile=/run/chrony/chronyd.pid +ExecStartPre=/lib/rdk/chrony-conf-update.sh +ExecStart=/usr/sbin/chronyd +ExecStartPost=/lib/rdk/logMilestone.sh "NTP_CLIENT_STARTED" + +[Install] +WantedBy=network-up.target diff --git a/recipes-support/chrony/files/rdk_chrony.conf b/recipes-support/chrony/files/rdk_chrony.conf new file mode 100644 index 000000000..43bf9f3b3 --- /dev/null +++ b/recipes-support/chrony/files/rdk_chrony.conf @@ -0,0 +1,4 @@ +# Configuration values in this file may change dynamically via TR-181 parameters. +makestep 1.0 3 +pool global-bootstrap-time1.xfinity.com maxsources 4 iburst minpoll 10 maxpoll 12 +pool global-bootstrap-time2.xfinity.com maxsources 4 iburst minpoll 10 maxpoll 12 diff --git a/recipes-support/cimplog/cimplog_1.0.bb b/recipes-support/cimplog/cimplog_1.0.bb index cc8be75a4..438fe83cf 100644 --- a/recipes-support/cimplog/cimplog_1.0.bb +++ b/recipes-support/cimplog/cimplog_1.0.bb @@ -13,12 +13,11 @@ PR ?= "r0" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" +CFLAGS:append:broadband += " ${@bb.utils.contains('DISTRO_FEATURES', 'bci', '', '-DFEATURE_SUPPORT_ONBOARD_LOGGING',d)}" S = "${WORKDIR}/git" -CFLAGS:append += " ${@bb.utils.contains('DISTRO_FEATURES', 'bci', '', '-DFEATURE_SUPPORT_ONBOARD_LOGGING',d)}" inherit pkgconfig cmake EXTRA_OECMAKE += "-DRDK_LOGGER=ON -DBUILD_TESTING=OFF -DBUILD_YOCTO=true" -EXTRA_OECMAKE:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'bci', '', ' -DFEATURE_SUPPORT_ONBOARD_LOGGING=true',d)}" ASNEEDED_hybrid = "" ASNEEDED_client = "" diff --git a/recipes-support/cpeabs/cpeabs_1.0.bb b/recipes-support/cpeabs/cpeabs_1.0.bb index 4845a8dce..6ee856e5a 100644 --- a/recipes-support/cpeabs/cpeabs_1.0.bb +++ b/recipes-support/cpeabs/cpeabs_1.0.bb @@ -4,6 +4,8 @@ SECTION = "libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSES/Apache-2.0.txt;md5=c846ebb396f8b174b10ded4771514fcc" +PV = "2.0.0" +PR = "r0" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" DEPENDS = "cjson msgpack-c rbus wdmp-c cimplog" diff --git a/recipes-support/irtt/irtt.bb b/recipes-support/irtt/irtt.bb new file mode 100644 index 000000000..4df7c17b6 --- /dev/null +++ b/recipes-support/irtt/irtt.bb @@ -0,0 +1,41 @@ +SUMMARY = "IRTT measures round-trip time, one-way delay and other metrics using UDP packets sent on a fixed period, and produces both user and machine parseable output." +HOMEPAGE = "https://${GO_IMPORT}" +LICENSE = "GPL-2.0-only" +LIC_FILES_CHKSUM = "file://src/${GO_IMPORT}/LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263" +SRC_URI = "git://${GO_IMPORT};branch=master;protocol=https" +SRCREV = "c5ed230a672f5233f4a87b2a28dd6d5c86b6feba" + + +inherit go-mod + +GO_IMPORT = "github.com/heistp/irtt" +GO_INSTALL = "${GO_IMPORT}" +GO_LINKSHARED = "" +GOBUILDFLAGS:remove = "-buildmode=pie" +GO_EXTLDFLAGS:append = " -s -w " +export GOPROXY = "https://proxy.golang.org,direct" + +PV="0.9.1" +PACKAGES = "${PN}-dbg ${PN}" +FILES:${PN} += "/usr/bin/irtt" +FILES:${PN}-dbg += "/usr/bin/.debug/irtt" + +do_compile() { + export CGO_ENABLED=0 + export CGO_CFLAGS="${CFLAGS}" + export CGO_LDFLAGS="${LDFLAGS}" + export GOARCH="${TARGET_ARCH}" + export GOOS=linux + export GOROOT="${STAGING_DIR_NATIVE}/usr/lib/go" + export GOPATH="${S}" + export GOCACHE="${WORKDIR}/go-cache" + export GOMODCACHE="${WORKDIR}/go-mod" + + cd ${S}/src/${GO_IMPORT}/cmd/irtt + ${GO} build ${GO_LINKSHARED} ${GOBUILDFLAGS} -o irtt main.go +} + +do_install() { + install -d ${D}${bindir} + install -m 0755 ${S}/src/${GO_IMPORT}/cmd/irtt/irtt ${D}${bindir}/irtt +} diff --git a/recipes-support/libchronyctl/libchronyctl_git.bb b/recipes-support/libchronyctl/libchronyctl_git.bb new file mode 100644 index 000000000..6e8c319cf --- /dev/null +++ b/recipes-support/libchronyctl/libchronyctl_git.bb @@ -0,0 +1,30 @@ +SUMMARY = "Chrony Control Shared Library" +DESCRIPTION = "Builds and installs libchronyctl and headers" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${WORKDIR}/git/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" + +SRC_URI = "${CMF_GITHUB_ROOT}/time-utils.git;${CMF_GITHUB_SRC_URI_SUFFIX};name=time-utils" +SRCREV = "cb3c153dcc0919dd680adb496ea3897541aea7c7" +PV = "1.1.0" +PR = "r0" + +PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" + +S = "${WORKDIR}/git/libchronyctl" + +inherit autotools pkgconfig + +DEPENDS = "chrony" + +do_install:append() { + rm -f ${D}${libdir}/libchronyctl.la +} + +FILES:${PN} += "${libdir}/libchronyctl.so.*" +FILES:${PN}-dev += "${libdir}/libchronyctl.so \ + ${includedir}/libchronyctl.h \ + ${includedir}/addressing.h \ + ${includedir}/candm.h" + + +RDEPENDS:${PN} = "chrony" diff --git a/recipes-support/littlesheens/littlesheens_1.0.0.bb b/recipes-support/littlesheens/littlesheens_1.0.0.bb new file mode 100644 index 000000000..91fcf7533 --- /dev/null +++ b/recipes-support/littlesheens/littlesheens_1.0.0.bb @@ -0,0 +1,32 @@ +SUMMARY = "A minimalist Machines implementation in ECMAScript that's executed by Duktape and wrapped in a C library" +DESCRIPTION = "A minimalist Machines implementation in ECMAScript that's executed by Duktape and wrapped in a C library" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" + +SECTION = "libs" + +DEPENDS = "duktape" +DEPENDS:append = " vim-native coreutils-native" +DEPENDS:remove_morty = " vim-native coreutils-native" + +S = "${WORKDIR}/git" + +SRC_URI = "git://github.com/Comcast/littlesheens.git;protocol=https;branch=master" +SRCREV = "${AUTOREV}" +PV := "${PV}+${SRCPV}" + +# We must tell cmake where the headers are +# instead of relying on CMAKE_INSTALL_PREFIX as +# the OE build system will set the prefix to +# "${prefix} (which is "/usr") instead of the +# actual staging directory. Then on install +# it will override the install prefix with +# the staging directory. +# +# Confused yet? Yeah me too. +CFLAGS:append = " -I${STAGING_INCDIR}/duktape" + +inherit pkgconfig cmake + +EXTRA_OECMAKE = "-DTARGET_PLATFORM=yocto" diff --git a/recipes-support/mustach/mustach_1.2.2.bb b/recipes-support/mustach/mustach_1.2.2.bb new file mode 100644 index 000000000..a4fc9f735 --- /dev/null +++ b/recipes-support/mustach/mustach_1.2.2.bb @@ -0,0 +1,24 @@ +SUMMARY = "mustach" +DESCRIPTION = "A C library implementation of the mustache templating languge" +SECTION = "libs" +HOMEPAGE = "https://gitlab.com/jobol/mustach.git" + +LICENSE = "ISC" +LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=b26c29d2595093a3286f808cc8c91423" + +PR="r0" + +MUSTACH_TAG="1.2.2" + +SRC_URI = "git://gitlab.com/jobol/mustach;protocol=https" +SRCREV = "a65e3a24a40aa479879a03ff3d7fb4288af65ea6" + +S = "${WORKDIR}/git" + +DEPENDS = "cjson" + +inherit pkgconfig + +do_install () { + oe_runmake PREFIX=${prefix} DESTDIR=${D} install +} diff --git a/recipes-support/network-hotplug/files/lan-iface@.service b/recipes-support/network-hotplug/files/lan-iface@.service new file mode 100644 index 000000000..c6b06c77b --- /dev/null +++ b/recipes-support/network-hotplug/files/lan-iface@.service @@ -0,0 +1,12 @@ +[Unit] +Description=LAN Interface + +[Service] +Type=oneshot +RemainAfterExit=yes +EnvironmentFile=/etc/device.properties +ExecStart=/sbin/udhcpc -i ${LAN_INTERFACE} -p /tmp/udhcpc.${LAN_INTERFACE} +ExecStop=/sbin/ifconfig ${LAN_INTERFACE} down + +[Install] +Alias=multi-user.target.wants/lan-iface@%i.service diff --git a/recipes-support/network-hotplug/files/network.rules b/recipes-support/network-hotplug/files/network.rules new file mode 100644 index 000000000..d2d2557d1 --- /dev/null +++ b/recipes-support/network-hotplug/files/network.rules @@ -0,0 +1 @@ +SUBSYSTEM=="net", KERNEL!="lo", ENV{SYSTEMD_WANTS}+="network@$name.service" ENV{SYSTEMD_ALIAS}="/$name" diff --git a/recipes-support/network-hotplug/files/network@.service b/recipes-support/network-hotplug/files/network@.service new file mode 100644 index 000000000..d94fdacdf --- /dev/null +++ b/recipes-support/network-hotplug/files/network@.service @@ -0,0 +1,15 @@ +# currently, the BindTo is not working +[Service] +Type=oneshot +RemainAfterExit=yes + +EnvironmentFile=/etc/device.properties + +ExecStart=/sbin/ip link set dev %i up +ExecReload=/sbin/ip addr flush dev %i scope global +ExecStop=-/sbin/ip addr flush dev %i scope global +StandardOutput=journal + +[Unit] +BindsTo=%i.device +After=%i.device diff --git a/recipes-support/network-hotplug/files/udhcpc@.service b/recipes-support/network-hotplug/files/udhcpc@.service new file mode 100644 index 000000000..10723ecc7 --- /dev/null +++ b/recipes-support/network-hotplug/files/udhcpc@.service @@ -0,0 +1,16 @@ +[Unit] +Description=Connection service (udhcpc) +After=network@%i.service +Requires=network@%i.service +Wants=network-online.target +Before=network-online.target +ConditionPathExists=/etc +ConditionPathExists=/tmp + +[Service] +ExecStartPre=-/bin/touch /etc/resolv.conf +ExecStart=/sbin/udhcpc -i%i +RemainAfterExit=yes + +[Install] +WantedBy=network.target diff --git a/recipes-support/network-hotplug/files/usb-ethernet.rules b/recipes-support/network-hotplug/files/usb-ethernet.rules new file mode 100644 index 000000000..6079137d6 --- /dev/null +++ b/recipes-support/network-hotplug/files/usb-ethernet.rules @@ -0,0 +1,2 @@ +# Disable USB to Ethernet interface +KERNEL!="lo", ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", ENV{ID_BUS}=="usb", ATTRS{authorized}=="1", PROGRAM="/lib/rdk/disableUSBEthernet.sh", RESULT=="TRUE", ENV{SYSTEMD_WANTS}="", ENV{SYSTEMD_ALIAS}="", RUN+="/bin/sh -c 'echo 0 >/sys/bus/usb/devices/$id/authorized'" diff --git a/recipes-support/network-hotplug/files/usb-input.rules b/recipes-support/network-hotplug/files/usb-input.rules new file mode 100644 index 000000000..253929fd9 --- /dev/null +++ b/recipes-support/network-hotplug/files/usb-input.rules @@ -0,0 +1,2 @@ +#Disable USB KeyBoard and Mouse based on RFC parameter +ACTION=="add", SUBSYSTEM=="input", SUBSYSTEMS=="usb", ENV{ID_BUS}=="usb", ATTRS{authorized}=="1", TAG+="systemd", ENV{SYSTEMD_WANTS}+="usb-input@$id.service" diff --git a/recipes-support/network-hotplug/network-hotplug_%.bbappend b/recipes-support/network-hotplug/network-hotplug_%.bbappend new file mode 100644 index 000000000..18c98340e --- /dev/null +++ b/recipes-support/network-hotplug/network-hotplug_%.bbappend @@ -0,0 +1,8 @@ +FILESEXTRAPATHS:prepend := "${THISDIR}/files:" + +SRC_URI += "file://usb-ethernet.rules" + +do_install:append() { + install -d ${D}${sysconfdir}/udev/rules.d + install -m 0644 ${WORKDIR}/usb-ethernet.rules ${D}${sysconfdir}/udev/rules.d/usb-ethernet.rules +} diff --git a/recipes-support/network-hotplug/network-hotplug_1.0.bb b/recipes-support/network-hotplug/network-hotplug_1.0.bb new file mode 100644 index 000000000..88d2a77a2 --- /dev/null +++ b/recipes-support/network-hotplug/network-hotplug_1.0.bb @@ -0,0 +1,25 @@ +DESCRIPTION = "Network Hotplug" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/../meta-rdk/licenses/Apache-2.0;md5=3b83ef96387f14655fc854ddc3c6bd57" + +SRC_URI = " \ + file://network@.service \ + file://network.rules \ + file://lan-iface@.service \ + " + +FILES:${PN} = "${sysconfdir}/udev/rules.d/* ${systemd_unitdir}/system/*" + +RDEPENDS:${PN} = "udev" + +do_install() { + install -d ${D}${systemd_unitdir}/system + + if ${@bb.utils.contains('DISTRO_FEATURES', 'benchmark_enable', 'false', 'true', d)}; then + install -m 0644 ${WORKDIR}/*.service ${D}${systemd_unitdir}/system + fi + install -d ${D}${sysconfdir}/udev/rules.d + install -m 0644 ${WORKDIR}/network.rules ${D}${sysconfdir}/udev/rules.d/network.rules +} + +inherit systemd diff --git a/recipes-support/parodus/paroduscl_1.0.bb b/recipes-support/parodus/paroduscl_1.0.bb new file mode 100644 index 000000000..5ca822eac --- /dev/null +++ b/recipes-support/parodus/paroduscl_1.0.bb @@ -0,0 +1,16 @@ +SUMMARY = "parodus client library" +DESCRIPTION = "C client library for parodus" +HOMEPAGE = "https://github.com/Comcast/paroduscl" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" + +DEPENDS = "wrp-c nanomsg" + +SRCREV = "c6b1ee637eab22ac281779546fab7b7ff171cba2" +SRC_URI = "git://github.com/Comcast/paroduscl.git" + +PV = "git+${SRCPV}" +S = "${WORKDIR}/git" + +inherit autotools pkgconfig diff --git a/recipes-support/rdmagent/rdmagent.bb b/recipes-support/rdmagent/rdmagent.bb index 279221006..23e398a09 100644 --- a/recipes-support/rdmagent/rdmagent.bb +++ b/recipes-support/rdmagent/rdmagent.bb @@ -8,9 +8,14 @@ DEPENDS += "rbus" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=8700a1d105cac2a90d4f51290ac6e466" +PV = "2.3.0" +PR = "r0" +PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" + # This tells bitbake where to find the files we're providing on the local filesystem FILESEXTRAPATHS:prepend := "${THISDIR}:" +SRCREV = "069aaab56ce56cc6c9695c1bab860abfa7162260" SRC_URI = "${CMF_GITHUB_ROOT}/rdm-agent;${CMF_GITHUB_SRC_URI_SUFFIX};name=rdmagent" SRCREV_FORMAT = "rdmagent" @@ -32,7 +37,7 @@ LOGROTATE_ROTATION_MEM_rdm_status="3" PARALLEL_MAKE = "" -DEPENDS += "commonutilities" +DEPENDS += "commonutilities telemetry" DEPENDS += "opkg" CFLAGS:append = " -std=c11 -fPIC -D_GNU_SOURCE -Wall -Werror " @@ -41,7 +46,14 @@ LDFLAGS:append = " -lsecure_wrapper" DEPENDS += "libsyswrapper" -EXTRA_OECONF:append = " --enable-iarmbusSupport=yes" +EXTRA_OECONF:append = " --enable-iarmbusSupport=yes --enable-t2api=yes" + +EXTRA_OEMAKE += "LIBS='-lsafec'" + +DEPENDS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', ' safec', " ", d)}" +CFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', ' `pkg-config --cflags libsafec`', '-fPIC', d)}" +CFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', '', ' -DSAFEC_DUMMY_API', d)}" +LDFLAGS:append = " ${@bb.utils.contains('DISTRO_FEATURES', 'safec', ' `pkg-config --libs libsafec`', '', d)}" DEPENDS:append = " iarmmgrs iarmbus" LDFLAGS:append = " -lIARMBus" diff --git a/recipes-support/reboot-manager/reboot-manager.bb b/recipes-support/reboot-manager/reboot-manager.bb new file mode 100644 index 000000000..4c55917d2 --- /dev/null +++ b/recipes-support/reboot-manager/reboot-manager.bb @@ -0,0 +1,83 @@ +# +# Recipe for reboot-manager: Installs a binary utility to perform system reboots +# and log the reasons for those reboots, supporting diagnostics +# and telemetry integration. +# + +DESCRIPTION = "reboot-manager: Binary Utility to initiate system reboots and log detailed reboot reasons, aiding diagnostics and telemetry" +SECTION = "reboot-manager" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" + +FILESEXTRAPATHS:prepend := "${THISDIR}:" +# Release Tag - 2.2.3 on 20thJuly2026 +PV = "2.2.3" +PR = "r0" +PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" + +SRC_URI = "${CMF_GITHUB_ROOT}/reboot-manager;${CMF_GITHUB_SRC_URI_SUFFIX};name=reboot-manager" +SRCREV_reboot-manager = "2c991ae7a90e8d0aa8e0c06d25053d440305e08b" + +S = "${WORKDIR}/git" + +inherit autotools coverity systemd syslog-ng-config-gen logrotate_config + +SYSLOG-NG_FILTER = "reboot_reason" +SYSLOG-NG_SERVICE_reboot_reason = "update-reboot-info.service" +SYSLOG-NG_DESTINATION_reboot_reason = "rebootreason.log" +SYSLOG-NG_LOGRATE_reboot_reason = "low" + +LOGROTATE_NAME="reboot_reason rebootInfo" +LOGROTATE_LOGNAME_reboot_reason="rebootreason.log" +#HDD_ENABLE +LOGROTATE_SIZE_reboot_reason="1572864" +LOGROTATE_ROTATION_reboot_reason="3" +#HDD_DISABLE +LOGROTATE_SIZE_MEM_reboot_reason="1572864" +LOGROTATE_ROTATION_MEM_reboot_reason="3" + +LOGROTATE_LOGNAME_rebootInfo = "rebootInfo.log" +#HDD_ENABLE +LOGROTATE_SIZE_rebootInfo = "64000" +LOGROTATE_ROTATION_rebootInfo = "3" +#HDD_DISABLE +LOGROTATE_SIZE_MEM_rebootInfo = "64000" +LOGROTATE_ROTATION_MEM_rebootInfo = "3" + +DEPENDS += "commonutilities telemetry rbus" +RDEPENDS:${PN}:append = " bash" + +CFLAGS:append = " -std=c11 -fPIC -D_GNU_SOURCE -Wall -Werror " +EXTRA_OECONF:append = " --enable-t2api=yes" + +do_install:append() { + install -d ${D}${bindir} + install -d ${D}${systemd_unitdir}/system + install -m 0644 ${S}/services/update-reboot-info.path ${D}${systemd_unitdir}/system + install -m 0644 ${S}/services/update-reboot-info.service ${D}${systemd_unitdir}/system + + if [ "${ENABLE_SYSLOGNG}" = "true" ]; then + echo "SYSLOG_NG_ENABLED=true" >> ${D}${sysconfdir}/device-middleware.properties + fi + + install -d ${D}${base_libdir}/rdk + install -m 0755 ${S}/scripts/update_previous_reboot_info.sh ${D}${base_libdir}/rdk + install -m 0755 ${S}/scripts/rebootNow.sh ${D}${base_libdir}/rdk + ln -sf ${base_libdir}/rdk/rebootNow.sh ${D}/ +} + +# generating minidumps symbols +inherit breakpad-wrapper +BREAKPAD_BIN:append = " rebootnow" +PACKAGECONFIG:append = " breakpad" +PACKAGECONFIG[breakpad] = "--enable-breakpad,,breakpad," + +LDFLAGS += "-lbreakpadwrapper -lpthread -lstdc++" +CXXFLAGS += "-DINCLUDE_BREAKPAD" + +SYSTEMD_SERVICE:${PN} += "update-reboot-info.path" +SYSTEMD_SERVICE:${PN} += "update-reboot-info.service" + +FILES:${PN} += "${base_libdir}/rdk/*" +FILES:${PN} += "/rebootNow.sh" +FILES:${PN} += "${bindir}/rebootnow" diff --git a/recipes-support/webcfg/webcfg_1.0.bb b/recipes-support/webcfg/webcfg_1.0.bb index 58bf91092..a26e2a143 100644 --- a/recipes-support/webcfg/webcfg_1.0.bb +++ b/recipes-support/webcfg/webcfg_1.0.bb @@ -4,6 +4,8 @@ SECTION = "libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" +PV = "1.1.0" +PR = "r0" PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" DEPENDS = "cjson trower-base64 msgpack-c cimplog wdmp-c curl wrp-c" @@ -66,13 +68,13 @@ do_install:append:broadband() { then if ${@bb.utils.contains("DISTRO_FEATURES", "gateway_manager", "false", "true", d)} then - sed -z 's/"name": "gwfailover",\n[[:blank:]]*"bitposition": 1,\n[[:blank:]]*"support": true,/"name": "gwfailover",\n"bitposition": 1,\n"support": false,/g' ${WORKDIR}/webconfig_metadata.json > ${WORKDIR}/out.txt - mv ${WORKDIR}/out.txt ${WORKDIR}/webconfig_metadata.json + sed -z 's/"name": "gwfailover",\n[[:blank:]]*"bitposition": 1,\n[[:blank:]]*"support": true,/"name": "gwfailover",\n"bitposition": 1,\n"support": false,/g' ${WORKDIR}/webconfig_broadband_metadata.json > ${WORKDIR}/out.txt + mv ${WORKDIR}/out.txt ${WORKDIR}/webconfig_broadband_metadata.json fi install -d ${D}/usr/ccsp/webconfig install -d ${D}/etc touch ${D}/etc/WEBCONFIG_ENABLE - (${PYTHON} ${WORKDIR}/metadata_parser.py ${WORKDIR}/webconfig_metadata.json ${D}/etc/webconfig.properties ${MACHINE}) + (${PYTHON} ${WORKDIR}/metadata_parser.py ${WORKDIR}/webconfig_broadband_metadata.json ${D}/etc/webconfig.properties ${MACHINE}) fi if ${@bb.utils.contains("DISTRO_FEATURES", "WanFailOverSupportEnable", "true", "false", d)} diff --git a/recipes-support/xmidt-agent/xmidt-agent_git.bb b/recipes-support/xmidt-agent/xmidt-agent_git.bb index 05f740c3f..7f09fcd35 100644 --- a/recipes-support/xmidt-agent/xmidt-agent_git.bb +++ b/recipes-support/xmidt-agent/xmidt-agent_git.bb @@ -2,6 +2,10 @@ DESCRIPTION = "The client agent for the Xmidt service." LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${THISDIR}/files/Apache-2.0;md5=3b83ef96387f14655fc854ddc3c6bd57" +PV = "1.0.0" +PR = "r0" +PACKAGE_ARCH = "${MIDDLEWARE_ARCH}" + PKG_VERSION = "0.5.15" SRC_URI = "https://github.com/xmidt-org/xmidt-agent/releases/download/v${PKG_VERSION}/xmidt-agent_${PKG_VERSION}_rdk_armv7.ipk;name=xmidt-agent" diff --git a/rename_srcrev.sh b/rename_srcrev.sh index 964858f98..a0d7417a2 100755 --- a/rename_srcrev.sh +++ b/rename_srcrev.sh @@ -93,8 +93,6 @@ if [ -f ${PWD}/../versions.conf ]; then sed -z -i 's+SRCREV:pn-rdk/components/cpc/xreplugins/generic+SRCREV:pn-netflix-plugin+' ${PWD}/../versions.conf sed -z -i 's+SRCREV:pn-rdk/components/cpc/xreplugins/generic+SRCREV:pn-wayland-plugin-default+' ${PWD}/../versions.conf sed -z -i 's+SRCREV:pn-rdk/components/cpc/xreplugins/generic+SRCREV:pn-xre2-plugin-default+' ${PWD}/../versions.conf - sed -z -i 's+SRCREV:pn-rdk/components/cpc/xre/generic+SRCREV:pn-xre-receiver-default+' ${PWD}/../versions.conf - sed -z -i 's+SRCREV:pn-rdk/components/cpc/xre/generic+SRCREV:pn-xre-receiver-default-headers+' ${PWD}/../versions.conf sed -z -i 's+SRCREV:pn-rdk/components/cpc/ave/generic+SRCREV:pn-ave-crypto+' ${PWD}/../versions.conf sed -z -i 's+SRCREV:pn-rdk/components/cpc/ave/generic+SRCREV:pn-ave-filesystem+' ${PWD}/../versions.conf sed -z -i 's+SRCREV:pn-rdk/components/cpc/ave/generic+SRCREV:pn-ave-trace+' ${PWD}/../versions.conf @@ -171,7 +169,6 @@ if [ -f ${PWD}/../versions.conf ]; then sed -i 's+SRCREV:pn-rdk/components/generic/control-testapp/generic+SRCREV:pn-ctrlm-testapp+g' ${PWD}/../versions.conf sed -i 's+SRCREV:pn-rdk/components/thirdparty/vnc/generic+SRCREV:pn-vnc+g' ${PWD}/../versions.conf sed -i 's+SRCREV:pn-rdk/components/generic/hdmicec/soc/raspberrypi/rpi3+SRCREV:pn-hdmicec-hal+g' ${PWD}/../versions.conf - sed -i 's+SRCREV:pn-rdk/components/cpc/xre/devices/raspberry/rpi3+SRCREV_xreplat:pn-xre-receiver-default +g' ${PWD}/../versions.conf sed -i 's+SRCREV:pn-rdk/components/generic/sec-apis/generic+SRCREV:pn-secapi-noop+g' ${PWD}/../versions.conf sed -i 's+SRCREV:pn-rdk/components/generic/dcm/generic+SRCREV:pn-dcmjsonparser+g' ${PWD}/../versions.conf sed -i 's+SRCREV:pn-rdk/components/generic/gstreamer-netflix-platform/generic+SRCREV:pn-rdk-gstreamer-utils+g' ${PWD}/../versions.conf @@ -372,8 +369,6 @@ if [ -f ${PWD}/../auto.conf ]; then sed -i 's/SRCREV_pn-wayland-plugin-default/SRCREV_xreplgs_pn-wayland-plugin-default/g' ${PWD}/../auto.conf sed -i 's/SRCREV_pn-cef-eglfs/SRCREV_rdkcef_chromium_pn-cef-eglfs/g' ${PWD}/../auto.conf sed -i 's/SRCREV_pn-qtwebrtc/SRCREV_qtwebrtc_pn-qtwebrtc/g' ${PWD}/../auto.conf - sed -i 's/SRCREV_pn-xre-receiver-default /SRCREV_xre_default_xreplat_servicemanager_svcmgrplat_pn-xre-receiver-default/g' ${PWD}/../auto.conf - sed -i 's/SRCREV_pn-xre-receiver-default-headers/SRCREV_xrereceiverdefaultheaders_pn-xre-receiver-default-headers/g' ${PWD}/../auto.conf sed -i 's/SRCREV_pn-authservice/SRCREV_authservice_pn-authservice/g' ${PWD}/../auto.conf sed -i 's/SRCREV_pn-sdvagent/SRCREV_sdvagent_pn-sdvagent/g' ${PWD}/../auto.conf sed -i 's/SRCREV_pn-rdk-oss-ssa/SRCREV_rdk-oss-ssa:pn-rdk-oss-ssa/g' ${PWD}/../auto.conf diff --git a/setup-environment b/setup-environment index d30d0d967..b2ae7ee99 100755 --- a/setup-environment +++ b/setup-environment @@ -34,8 +34,13 @@ if [ "$(whoami)" = "root" ]; then return 1 fi +OE_CORE_LAYER="openembedded-core" +if [ -d "poky" ];then + OE_CORE_LAYER="poky" +fi + # check that we are where we think we are! -if [ ! -f "openembedded-core/oe-init-build-env" ]; then +if [ ! -f "$OE_CORE_LAYER/oe-init-build-env" ]; then echo -e "\nUNABLE TO FIND OPENEMBEDDED !" return 1 fi @@ -53,7 +58,7 @@ EOF export PATH="`echo ${PATH} | sed 's/\(:.\|:\)*:/:/g;s/^.\?://;s/:.\?$//'`" # Clean PATH of any previous oe-core bitbake or scripts directories -export PATH="$(echo $PATH | sed 's!/[^:]\+/openembedded-core/\(bitbake/bin\|scripts\):!!g')" +export PATH="$(echo $PATH | sed 's!/[^:]\+/$OE_CORE_LAYER/\(bitbake/bin\|scripts\):!!g')" # only 1 parameter max, folder, or default to build-$machine _BUILDDIR= @@ -110,7 +115,7 @@ _PWD_PREV=$(pwd) # Warning: Sourcing the oe-init-build-env script changes the current directory. -TEMPLATECONF=${_PWD_PREV}/meta-rdk/conf source openembedded-core/oe-init-build-env ${_BUILDDIR} +TEMPLATECONF=${_PWD_PREV}/meta-rdk/conf source $OE_CORE_LAYER/oe-init-build-env ${_BUILDDIR} if [ "$_CONFIGS_FOUND" ]; then echo -e "\nConfig files already exist in folder ${_BUILDDIR}/conf/, they were not modified." @@ -124,9 +129,10 @@ fi # bitbake released with OE 2.0) with OE 1.6. We need to account for that here, # ie bitbake version 1.28 needs to map to "daisy", not "jethro". -case "$(sed -n 's/^__version__ = "\(.*\)"/\1/p' ${_PWD_PREV}/openembedded-core/bitbake/bin/bitbake)" +case "$(sed -n 's/^__version__ = "\(.*\)"/\1/p' ${_PWD_PREV}/$OE_CORE_LAYER/bitbake/bin/bitbake)" in 2.2.*) _DISTRO_CODENAME="kirkstone" ;; + 2.0.*) _DISTRO_CODENAME="kirkstone" ;; 1.46.*) _DISTRO_CODENAME="dunfell" ;; 1.37.*|1.38.*) _DISTRO_CODENAME="sumo" ;; 1.35.*|1.36.*) _DISTRO_CODENAME="rocko" ;;