https://github.com/tylertreat/comcast Skip to content Sign up * Product + Features + Mobile + Actions + Codespaces + Copilot + Packages + Security + Code review + Issues + Discussions + Integrations + GitHub Sponsors + Customer stories * Team * Enterprise * Explore + Explore GitHub + Learn and contribute + Topics + Collections + Trending + Skills + GitHub Sponsors + Open source guides + Connect with others + The ReadME Project + Events + Community forum + GitHub Education + GitHub Stars program * Marketplace * Pricing + Plans + Compare plans + Contact Sales + Education [ ] * # In this repository All GitHub | Jump to | * No suggested jump to results * # In this repository All GitHub | Jump to | * # In this user All GitHub | Jump to | * # In this repository All GitHub | Jump to | Sign in Sign up {{ message }} tylertreat / comcast Public * Notifications * Fork 347 * Star 8.3k Simulating shitty network connections so you can build better systems. License Apache-2.0 license 8.3k stars 347 forks Star Notifications * Code * Issues 22 * Pull requests 1 * Actions * Projects 0 * Wiki * Security * Insights More * Code * Issues * Pull requests * Actions * Projects * Wiki * Security * Insights tylertreat/comcast This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. master Switch branches/tags [ ] Branches Tags Could not load branches Nothing to show {{ refName }} default View all branches Could not load tags Nothing to show {{ refName }} default View all tags 1 branch 2 tags Code Latest commit @tylertreat tylertreat Merge pull request #78 from dgretton/newinstall ... 461b29c Apr 22, 2022 Merge pull request #78 from dgretton/newinstall Update README.md to use 'go install' instead of 'go get' 461b29c Git stats * 112 commits Files Permalink Failed to load latest commit information. Type Name Latest commit message Commit time throttler add Makefile and module support Mar 13, 2022 .gitignore Initial commit Nov 12, 2014 .travis.yml Update .travis.yml Jun 30, 2019 LICENSE Initial commit Nov 12, 2014 Makefile add Makefile and module support Mar 13, 2022 README.md update readme to use go install instead of deprecated go get Apr 22, 2022 comcast.go Fix stdout Oct 2, 2015 go.mod Update go.mod Mar 13, 2022 View code Comcast Installation Usage I don't trust you, this code sucks, I hate Go, etc. Linux BSD/OSX Network Condition Profiles README.md Comcast Testing distributed systems under hard failures like network partitions and instance termination is critical, but it's also important we test them under less catastrophic conditions because this is what they most often experience. Comcast is a tool designed to simulate common network problems like latency, bandwidth restrictions, and dropped/reordered/corrupted packets. It works by wrapping up some system tools in a portable(ish) way. On BSD-derived systems such as OSX, we use tools like ipfw and pfctl to inject failure. On Linux, we use iptables and tc. Comcast is merely a thin wrapper around these controls. Windows support may be possible with wipfw or even the native network stack, but this has not yet been implemented in Comcast and may be at a later date. Installation $ go install github.com/tylertreat/comcast@latest Usage On Linux, Comcast supports several options: device, latency, target/ default bandwidth, packet loss, protocol, and port number. $ comcast --device=eth0 --latency=250 --target-bw=1000 --default-bw=1000000 --packet-loss=10% --target-addr=8.8.8.8,10.0.0.0/24 --target-proto=tcp,udp,icmp --target-port=80,22,1000:2000 On OSX, Comcast will check for pfctl support (as of Yosemite), which supports the same options as above. If pfctl is not available, it will use ipfw instead, which supports device, latency, target bandwidth, and packet-loss options. On BSD (with ipfw), Comcast currently supports only: device, latency, target bandwidth, and packet loss. $ comcast --device=eth0 --latency=250 --target-bw=1000 --packet-loss=10% This will add 250ms of latency, limit bandwidth to 1Mbps, and drop 10% of packets to the targetted (on Linux) destination addresses using the specified protocols on the specified port numbers (slow lane). The default bandwidth specified will apply to all egress traffic (fast lane). To turn this off, run the following: $ comcast --stop By default, comcast will determine the system commands to execute, log them to stdout, and execute them. The --dry-run flag will skip execution. I don't trust you, this code sucks, I hate Go, etc. If you don't like running code that executes shell commands for you (despite it being open source, so you can read it and change the code) or want finer-grained control, you can run them directly instead. Read the man pages on these things for more details. Linux On Linux, you can use iptables to drop incoming and outgoing packets. $ iptables -A INPUT -m statistic --mode random --probability 0.1 -j DROP $ iptables -A OUTPUT -m statistic --mode random --probability 0.1 -j DROP Alternatively, you can use tc which supports some additional options. $ tc qdisc add dev eth0 root netem delay 50ms 20ms distribution normal $ tc qdisc change dev eth0 root netem reorder 0.02 duplicate 0.05 corrupt 0.01 To reset: $ tc qdisc del dev eth0 root netem BSD/OSX To shape traffic in BSD-derived systems, create an ipfw pipe and configure it. You can control incoming and outgoing traffic separately for any specific host or network. $ ipfw add 1 pipe 1 ip from me to any $ ipfw add 2 pipe 1 ip from any to me $ ipfw pipe 1 config delay 500ms bw 1Mbit/s plr 0.1 To reset: $ ipfw delete 1 Note: ipfw was removed in OSX Yosemite in favor of pfctl. Network Condition Profiles Here's a list of network conditions with values that you can plug into Comcast. Please add any more that you may come across. Name Latency Bandwidth Packet-loss GPRS (good) 500 50 2 EDGE (good) 300 250 1.5 3G/HSDPA (good) 250 750 1.5 DIAL-UP (good) 185 40 2 DSL (poor) 70 2000 2 DSL (good) 40 8000 0.5 WIFI (good) 40 30000 0.2 Starlink 20 - 2.5 About Simulating shitty network connections so you can build better systems. Topics go latency chaos bandwidth packet-loss chaos-engineering Resources Readme License Apache-2.0 license Stars 8.3k stars Watchers 151 watching Forks 347 forks Releases 2 Comcast 1.0.1 Latest Nov 27, 2015 + 1 release Packages 0 No packages published Used by 6 * @liuxd6825 * @tylertreat * @ekmixon * @dapr Contributors 24 * * * * * * * * * * * + 13 contributors Languages * Go 97.9% * Makefile 2.1% Footer (c) 2022 GitHub, Inc. Footer navigation * Terms * Privacy * Security * Status * Docs * Contact GitHub * Pricing * API * Training * Blog * About You can't perform that action at this time. You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.