# ppproto
Rust implementation of the Point-to-Point Protocol (PPP) for embedded systems. `no-std` compatible, no alloc (heap) required.
## Relevant RFCs
- [RFC 1661](https://tools.ietf.org/html/rfc1661) - The Point-to-Point Protocol (PPP)
- [RFC 1332](https://tools.ietf.org/html/rfc1332) - The PPP Internet Protocol Control Protocol (IPCP)
- [RFC 1334](https://tools.ietf.org/html/rfc1334) - PPP Authentication Protocols
## Testing against pppd
Put this in `/etc/ppp/pap-secrets`, where `myhostname` is the hostname of your machine.
```
myuser myhostname mypass 192.168.7.10
```
```
socat -v -x PTY,link=pty1,rawer PTY,link=pty2,rawer
pppd $PWD/pty1 115200 192.168.7.1: ms-dns 8.8.4.4 ms-dns 8.8.8.8 nodetach debug local persist silent noproxyarp
RUST_LOG=trace cargo run --bin simple -- --device pty2
ping 192.168.7.10
```
## Testing against a real modem
- `minicom -D /dev/ttyUSB0 -b 115200`
- put whatever AT commands you need to connect (such as `ATD*99#`)
- Control+A Q
- RUST_LOG=trace cargo run --bin simple -- --device /dev/ttyUSB0
If you want to "MITM" the serial communications to see the raw bytes coming and going, you can do this:
```
socat -v -x /dev/ttyUSB0 PTY,link=pty,rawer
```
and then use `$PWD/pty` instead of `/dev/ttyUSB0`
## License
This work is licensed under either of
- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or
<http://www.apache.org/licenses/LICENSE-2.0>)
- MIT license ([LICENSE-MIT](LICENSE-MIT) or <http://opensource.org/licenses/MIT>)
at your option.