diff --git a/content/software/_index.md b/content/software/_index.md index 9991c98..3ebf1d3 100644 --- a/content/software/_index.md +++ b/content/software/_index.md @@ -2,13 +2,17 @@ title: Software --- -Both professionally and in my free time, I create software. +## Applications -Check out the following categories to learn more about my past and current projects. +- [Slice](/software/apps/slice): A hybrid analog/digital WearOS watch face that features a 24-hour clock +- [Protomask](/software/apps/protomask): Fast & reliable user space NAT64 -## My Projects +## Libraries -- Games - - [[data::loss]](/software/games/data-loss) - - [Deep Breath](/software/games/deep-breath) - - [Micromanaged Mike](/software/games/micromanaged-mike) \ No newline at end of file +## Games + +- [[data::loss]](/software/games/data-loss): A Ludum Dare 49 game +- [Deep Breath](/software/games/deep-breath): A Ludum Dare 48 game +- [Micromanaged Mike](/software/games/micromanaged-mike): A Ludum Dare 46 game + +## Experiments diff --git a/content/software/apps/protomask.md b/content/software/apps/protomask.md new file mode 100644 index 0000000..41d9643 --- /dev/null +++ b/content/software/apps/protomask.md @@ -0,0 +1,73 @@ +--- +title: Protomask +description: Fast & reliable user space NAT64 +--- + +The protomask tool suite is a collection of user space tools that translate packets between OSI layer 3 protocol versions. + +`protomask` (the main binary) is a user space NAT64 implementation that acts as the core NAT64 translator inside AS54041 (my autonomous system). It prioritizes efficiency and ease of use from the operator's standpoint. + +I began the protomask project in 2023 as a replacement for `tayga` (the translator I was using at the time). It has since served as a robust & reliable NAT64 translator for my network, and has been a great way for me to learn more about the inner workings of both versions of the Internet Protocol. + +## The tool suite + +Alongside `protomask` itself, the project provides a handful of Rust crates that perform each of the tasks needed to build a NAT64 translator. This way, even if you don't like my implementation specifically, it is easy to build on top of my work. I hope that my protocol translation logic comes to be of use to others in the future. + +The libraries exposed by this project are as follows: + +<table style="margin:auto;"> + <thead> + <tr> + <td><strong>Crate</strong></td> + <td><strong>Info</strong></td> + <td><strong>Latest Version</strong></td> + </tr> + </thead> + <tbody> + <tr> + <td><code>easy-tun</code></td> + <td>A pure-rust TUN interface library</td> + <td> + <a target="_blank" href="https://crates.io/crates/easy-tun"><img src="https://img.shields.io/crates/v/easy-tun" alt="crates.io" style="margin:0;display:unset;"></a> + <a target="_blank" href="https://docs.rs/easy-tun"><img src="https://docs.rs/easy-tun/badge.svg" alt="docs.rs" style="margin:0;display:unset;"></a> + </td> + </tr> + <tr> + <td><code>fast-nat</code></td> + <td>An OSI layer 3 Network Address Table built for speed</td> + <td> + <a target="_blank" href="https://crates.io/crates/fast-nat"><img src="https://img.shields.io/crates/v/fast-nat" alt="crates.io" style="margin:0;display:unset;"></a> + <a target="_blank" href="https://docs.rs/fast-nat"><img src="https://docs.rs/fast-nat/badge.svg" alt="docs.rs" style="margin:0;display:unset;"></a> + </td> + </tr> + <tr> + <td><code>interproto</code></td> + <td>Utilities for translating packets between IPv4 and IPv6</td> + <td> + <a target="_blank" href="https://crates.io/crates/interproto"><img src="https://img.shields.io/crates/v/interproto" alt="crates.io" style="margin:0;display:unset;"></a> + <a target="_blank" href="https://docs.rs/interproto"><img src="https://docs.rs/interproto/badge.svg" alt="docs.rs" style="margin:0;display:unset"></a> + </td> + </tr> + <tr> + <td><code>rfc6052</code></td> + <td>A Rust implementation of RFC6052</td> + <td> + <a target="_blank" href="https://crates.io/crates/rfc6052"><img src="https://img.shields.io/crates/v/rfc6052" alt="crates.io" style="margin:0;display:unset;"></a> + <a target="_blank" href="https://docs.rs/rfc6052"><img src="https://docs.rs/rfc6052/badge.svg" alt="docs.rs" style="margin:0;display:unset;"></a> + </td> + </tr> + <tr> + <td><code>rtnl</code></td> + <td>Slightly sane wrapper around rtnetlink</td> + <td> + <a target="_blank" href="https://crates.io/crates/rtnl"><img src="https://img.shields.io/crates/v/rtnl" alt="crates.io" style="margin:0;display:unset;"></a> + <a target="_blank" href="https://docs.rs/rtnl"><img src="https://docs.rs/rtnl/badge.svg" alt="docs.rs" style="margin:0;display:unset;"></a> + </td> + </tbody> +</table> + +Additionally, a secondary binary (`protomask-clat`) is shipped alongside the project. This binary is a simple CLAT implementation that can be used to deploy IPv4 networks across IPv6-only links. + +## Learn more + +The protomask tool suite is Open Source. Check it out [on GitHub](https://github.com/ewpratten/protomask). diff --git a/content/apps/slice.md b/content/software/apps/slice.md similarity index 100% rename from content/apps/slice.md rename to content/software/apps/slice.md