{"id":22038301,"url":"https://github.com/opencyphal/libudpard","last_synced_at":"2025-05-07T21:24:29.261Z","repository":{"id":77217472,"uuid":"521716542","full_name":"OpenCyphal/libudpard","owner":"OpenCyphal","description":"A compact implementation of the Cyphal/UDP protocol in C for high-integrity real-time embedded systems ","archived":false,"fork":false,"pushed_at":"2024-11-29T11:04:09.000Z","size":345,"stargazers_count":14,"open_issues_count":7,"forks_count":10,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-05-01T07:45:16.943Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpenCyphal.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"open_collective":"opencyphal","github":"OpenCyphal"}},"created_at":"2022-08-05T17:03:43.000Z","updated_at":"2025-03-29T14:37:58.000Z","dependencies_parsed_at":"2024-06-09T05:00:43.891Z","dependency_job_id":"1eda9d16-990a-4efb-ae8d-fdd8d367f20f","html_url":"https://github.com/OpenCyphal/libudpard","commit_stats":{"total_commits":28,"total_committers":9,"mean_commits":3.111111111111111,"dds":0.75,"last_synced_commit":"3d9f5efc26b91d7c9bf9104f55551ea7ad454dc2"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenCyphal%2Flibudpard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenCyphal%2Flibudpard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenCyphal%2Flibudpard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenCyphal%2Flibudpard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpenCyphal","download_url":"https://codeload.github.com/OpenCyphal/libudpard/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252955631,"owners_count":21831141,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-30T11:05:24.837Z","updated_at":"2025-05-07T21:24:29.228Z","avatar_url":"https://github.com/OpenCyphal.png","language":"C","funding_links":["https://opencollective.com/opencyphal","https://github.com/sponsors/OpenCyphal"],"categories":[],"sub_categories":[],"readme":"# Compact Cyphal/UDP in C\n\n[![Main Workflow](https://github.com/OpenCyphal-Garage/libudpard/actions/workflows/main.yml/badge.svg)](https://github.com/OpenCyphal-Garage/libudpard/actions/workflows/main.yml)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=libudpard\u0026metric=reliability_rating)](https://sonarcloud.io/summary?id=libudpard)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=libudpard\u0026metric=coverage)](https://sonarcloud.io/summary?id=libudpard)\n[![Forum](https://img.shields.io/discourse/users.svg?server=https%3A%2F%2Fforum.opencyphal.org\u0026color=1700b3)](https://forum.opencyphal.org)\n\nLibUDPard is a compact implementation of the Cyphal/UDP protocol in C99/C11 for high-integrity real-time\nembedded systems.\n\n[Cyphal](https://opencyphal.org) is an open lightweight data bus standard designed for reliable intravehicular\ncommunication in aerospace and robotic applications via CAN bus, UDP, and other robust transports.\n\nWe pronounce LibUDPard as *lib-you-dee-pee-ard*.\n\n## Features\n\nSome of the features listed here are intrinsic properties of Cyphal.\n\n- Full branch coverage and extensive static analysis.\n\n- Compliance with automatically enforceable MISRA C rules (reach out to https://forum.opencyphal.org for details).\n\n- Detailed time complexity and memory requirement models for the benefit of real-time high-integrity applications.\n\n- Purely reactive time-deterministic API without the need for background servicing.\n\n- Zero-copy data pipeline on reception --\n  payload is moved from the underlying NIC driver all the way to the application without copying.\n\n- Support for redundant network interfaces with seamless interface aggregation and no fail-over delay.\n\n- Out-of-order multi-frame transfer reassembly, including cross-transfer interleaved frames.\n\n- Support for repetition-coding forward error correction (FEC) for lossy links (e.g., wireless)\n  transparent to the application.\n\n- No dependency on heap memory; the library can be used with fixed-size block pool allocators.\n\n- Compatibility with all conventional 8/16/32/64-bit platforms.\n\n- Compatibility with extremely resource-constrained baremetal environments starting from 64K ROM and 64K RAM.\n\n- Implemented in ≈2000 lines of code.\n\n## Usage\n\nThe library implements the Cyphal/UDP protocol, which is a transport-layer entity.\nAn application using this library will need to implement the presentation layer above the library,\nperhaps with the help of the [Nunavut transpiler](https://github.com/OpenCyphal/nunavut),\nand the network layer below the library using a third-party UDP/IP stack implementation with multicast/IGMP support\n(TCP and ARP are not needed).\nIn the most straightforward case, the network layer can be based on the standard Berkeley socket API\nor a lightweight embedded stack such as LwIP.\n\n```mermaid\n%%{init: {\"fontFamily\": \"Ubuntu Mono, monospace\", \"flowchart\": {\"curve\": \"basis\"}}}%%\nflowchart TD\n    classDef OpenCyphal color:#00DAC6,fill:#1700b3,stroke:#00DAC6,stroke-width:2px,font-weight:600\n    Application \u003c--\u003e|messages,\\nrequests,\\nresponses| LibUDPard[fa:fa-code LibUDPard]\n    class LibUDPard OpenCyphal\n    LibUDPard \u003c--\u003e|multicast datagrams| UDP\n    subgraph domain_udpip[\"3rd-party UDP/IP+IGMP stack\"]\n        UDP \u003c--\u003e IP[\"IPv4, IGMPv1+\"] \u003c--\u003e MAC\n    end\n    MAC \u003c--\u003e PHY\n```\n\nTo integrate the library into your application, simply copy the files under `libudpard/` into your project tree,\nor add this entire repository as a submodule.\nThe library contains only one translation unit named `udpard.c`;\nno special compiler options are needed to build it.\nThe library should be compatible with all conventional computer architectures where a standards-compliant C99 compiler\nis available.\n\n**Read the API docs in [`libudpard/udpard.h`](libudpard/udpard.h).**\nFor complete usage examples, please refer to \u003chttps://github.com/OpenCyphal-Garage/demos\u003e.\n\n## Revisions\n\n### v1.0\n\nInitial release.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopencyphal%2Flibudpard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopencyphal%2Flibudpard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopencyphal%2Flibudpard/lists"}