{"id":31660458,"url":"https://github.com/howerj/ip","last_synced_at":"2026-02-27T09:11:12.813Z","repository":{"id":290833732,"uuid":"975131818","full_name":"howerj/ip","owner":"howerj","description":"udp/tcp/ip stack experimentation","archived":false,"fork":false,"pushed_at":"2025-06-18T22:14:03.000Z","size":134,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-18T23:23:46.734Z","etag":null,"topics":["arp","c","ip-stack","ipv4","ipv6","ndp","ntp","tcp","tcp-stack","udp"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"0bsd","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/howerj.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,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-29T20:46:35.000Z","updated_at":"2025-06-18T22:14:06.000Z","dependencies_parsed_at":"2025-05-18T01:00:45.580Z","dependency_job_id":null,"html_url":"https://github.com/howerj/ip","commit_stats":null,"previous_names":["howerj/ip"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/howerj/ip","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/howerj%2Fip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/howerj%2Fip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/howerj%2Fip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/howerj%2Fip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/howerj","download_url":"https://codeload.github.com/howerj/ip/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/howerj%2Fip/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278811882,"owners_count":26050190,"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-10-07T02:00:06.786Z","response_time":59,"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":["arp","c","ip-stack","ipv4","ipv6","ndp","ntp","tcp","tcp-stack","udp"],"created_at":"2025-10-07T17:16:53.416Z","updated_at":"2025-10-07T17:16:54.893Z","avatar_url":"https://github.com/howerj.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"* Author: Richard James Howe\n* License: 0BSD\n* Email: \u003cmailto:howe.r.j.89@gmail.com\u003e\n* Repo: \u003chttps://github.com/howerj/ip\u003e\n\n**This project is a work in progress**.\n\nAn attempt at a IPv4 UDP/TCP stack. \n\nNote that functions, structures and variables will have the `ip_` prefix as\nthat is the name of the library. (e.g. `ip_ethernet_tx` transmits an Ethernet\nframe, which is a separate layer which is independent of the IP protocol).\n\nTo Do / Plan:\n\n* [x] libpcap or TAP/TUN?\n* [x] Headers for IPv4, IPv6, ICMP, UDP, TCP, ARP/NDP, DHCP, DNS, ...\n* [ ] ARP\n* [ ] UDP\n* [ ] DHCP, DHCP TLV option parsing\n* [ ] ICMP\n* [ ] TCP\n* [ ] Make a Unix Berkeley sockets API.\n* [ ] DNS Cache / Hosts file support\n* [ ] PPP\n* [ ] Other frame formats than ethernet\n* [ ] DHCP client and server\n* [ ] Default gateway, netmasks, routing, firewall, ...\n* [ ] Make an alternate more lower level API (e.g. callback on receipt of any\n  packet, on UDP packet, etcetera).\n* [ ] Make a test bench, and way of creating corrupt packets for both\n  RX and TX for testing purposes.\n* [ ] Documentation; turn into a (semi-) literate program, like\n  \u003chttps://github.com/howerj/libforth\u003e.\n* [ ] Make utilities such as ping, netcat, as part of a multicall binary.\n* [ ] Turn into library; need a way to schedule the stack, sleep,\n  and receive / transmit packets over Ethernet.\n* [ ] integrate with \u003chttps://github.com/howerj/httpc\u003e, get it running\n  using this TCP/IP stack.\n* [ ] integrate with \u003chttps://github.com/howerj/tftp\u003e, get it running using\n  this UDP/IP stack.\n* [ ] Bad link detection (same IP assigned to multiple MACs, etcetera).\n* [ ] port to \u003chttps://github.com/howerj/subleq-network\u003e.\n* [ ] port to an OS of my own design?\n* [ ] Turn into header only library?\n* [ ] Handle WiFi frames as well as Ethernet ones\n* [ ] Make a VHDL version?\n* [ ] Make a version in rust?\n* [ ] Add back in warnings for unused functions\n* It would be a neat idea to make the TCP functionality separate from the\nrest of the stack, and independent of the TCP header, this would allow the\nTCP algorithms, which are very useful in themselves, to be used in other custom\nprotocols, or without the overhead of Ethernet (for example, TCP over a fast\nserial line). Allowing the protocol to be more customizable even if it breaks\ncompatibility would be useful (by disabling algorithms selectively).\n\n# Notes\n\nSome commands:\n\n\tip link add br0 type bridge\n\tip tuntap add mode tap user ${USER} group ${GROUP} name tap0\n\tip tuntap add mode tap user ${USER} group ${GROUP} name tap1\n\tip link set tap0 master br0\n\tip link set tap1 master br0\n\tip link set dev tap0 up\n\tip link set dev tap1 up\n\tip link set dev br0 up\n\tsocat -u TUN,tun-name=tap0,tun-type=tap /dev/null\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhowerj%2Fip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhowerj%2Fip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhowerj%2Fip/lists"}