{"id":20038525,"url":"https://github.com/yahoo/udping","last_synced_at":"2025-07-27T15:08:23.965Z","repository":{"id":52659971,"uuid":"90413887","full_name":"yahoo/UDPing","owner":"yahoo","description":"UDPing measures latency and packet loss across a link.","archived":false,"fork":false,"pushed_at":"2023-10-08T04:38:36.000Z","size":66,"stargazers_count":76,"open_issues_count":3,"forks_count":15,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-05-05T06:37:21.804Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yahoo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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}},"created_at":"2017-05-05T20:29:38.000Z","updated_at":"2025-05-02T00:09:39.000Z","dependencies_parsed_at":"2024-01-25T04:47:53.087Z","dependency_job_id":"23c33ccc-33ae-4186-8a16-4782ac67d649","html_url":"https://github.com/yahoo/UDPing","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/yahoo/UDPing","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yahoo%2FUDPing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yahoo%2FUDPing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yahoo%2FUDPing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yahoo%2FUDPing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yahoo","download_url":"https://codeload.github.com/yahoo/UDPing/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yahoo%2FUDPing/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267376029,"owners_count":24077294,"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","status":"online","status_checked_at":"2025-07-27T02:00:11.917Z","response_time":82,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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-13T10:29:47.337Z","updated_at":"2025-07-27T15:08:23.889Z","avatar_url":"https://github.com/yahoo.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"### Welcome to the UDPing network measurement tool.\n\nThe purpose of UDPing is to measure latency and packet loss across a link.  It does this by sending a continuous stream of packets from a source to a destination, measuring latency and loss at the destination, and periodically outputting summary performance metrics.\n\nUDPing has many useful features, including:\n* Efficient implementation - typical sampling rates are 100/second\n* Randomized Poisson sampling intervals\n* Multiple source ports (to exercise multiple ECMP paths)\n* Ability to specify multiple next-hop MAC addresses\n* Varied payload sizes\n* Supports multiple output formats, including statsd and JSON to stdout \n* True one-way protocol - no information is sent from server to client\n\n## Usage\n\n    udping_client -r \u003cremote hostname\u003e -p \u003cremote port\u003e -d \u003cdelay\u003e -l \u003clocal IP\u003e\n      -s \u003cstarting port\u003e|\u003csource port descriptor\u003e [-n \u003cnumber of ports\u003e]\n      -i \u003cmeasurement interval seconds\u003e -m \u003cmax packet size\u003e -a \u003cnext-hop MAC,...\u003e\n      [-v] [-q]\n        * Source port descriptor should be a set of ranges separated by commas.\n          Each range can either be a port, or a range of ports separated by a\n          dash.  For example:\n            * 5000 -\u003e port 5000\n            * 5000-5009 -\u003e ports 5000,5001,...,5009\n            * 5000,5005,5010 -\u003e ports 5000,5005,5010\n            * 5000-5001,5005-5006 -\u003e ports 5000,5001,5005,5006\n        * If a single port is specified AND a number of ports is specified,\n          then source traffic from the number of sequential ports specified\n          starting with the starting port\n\n    udping_server -l \u003clisten hostname\u003e -p \u003cport number\u003e -k \u003ckeepalive interval seconds\u003e\n      [-r \u003creceive hostname\u003e] [-s \u003cstatsd host:port\u003e]\n      [-t \u003ctag based statsd host:port\u003e] [-m \u003ctag based statsd metric name\u003e]\n      [-v] [-q]\n\n## How it works\n\nThe UDPing client publishes a stream of UDP packets from a client to a server with a header and a varying length payload, with an average interval specified by the -d switch.  The payload size is randomized from zero to MAX - the size of the header, where MAX is specified by the -m switch on the client.  The packets are sent in groups according to a measurement period, specified by the -i switch.  Packets for a measurement period from a single port share a common GUID.  At the end of the measurement period, a control packet is sent from each port with the total packet count for the period.\n\nAs the server receives packets, it timestamps them on arrival and records several counters, including\n* Count\n* Sum of latency\n* Sum of squares of latency\n* Max latency\n\nUpon receipt of a control packet, the server dumps several metrics to stdout, a statsd receiver, or both, including\n* Count\n* Expected count\n* Sum of latency\n* Sum of squares of latency\n* Max latency\n\nIf the server does not receive a control packet within a keepalive timeout specified by the -k switch, it will output metrics with a zero expected count.\n\nMetrics emitted to stdout are at the source host:port level.  Metrics emitted to statsd can either be at the host level only, or at the host level and the host:port level, as specified in the -s switch on the server.\n\nAt least one next-hop MAC address must be specified with the -a switch on the client.  This should ordinarily be set to the MAC address of the default gateway for the client.  If more than one egress path is desired, multiple next-hops can be separated by commas.\n\n## Protocol\n\nThe header is defined by the following struct:\n\n    typedef struct {\n        uint8_t protoVersion;      // Allow for evolution of protocol\n        time_t clientStartTime;    // Holds the creation time for the client session - used by the server to differentiate between runs\n        char guid[MAX_GUID + 1];   // Unique identifier for a stream of packets\n        seqnum_t seqNum;           // Monotonically increasing sequence number per client port\n        struct timespec sent;      // High-resolution sender timestamp (resolution dependent on system clock resolution)\n        uint32_t size;             // Size of the packet, including the header and the payload\n    } packet;\n\nA normal packet also includes a payload of random size, up to MAX - sizeof(packet), where MAX is specified by the -m switch on the client.\n\nThis code is licensed under Apache License 2.0 as per the license file and contains code from the reference implementation in RFC 1071.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyahoo%2Fudping","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyahoo%2Fudping","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyahoo%2Fudping/lists"}