scaleway/dhcproto
forked from bluecatengineering/dhcproto
Captured source
source ↗published Aug 20, 2025seen 5dcaptured 14hhttp 200method plain
scaleway/dhcproto
Description: A DHCP parser and encoder for DHCPv4/DHCPv6
License: MIT
Stars: 0
Forks: 0
Open issues: 0
Created: 2025-08-20T13:01:25Z
Pushed: 2025-08-20T13:02:33Z
Default branch: master
Fork: yes
Parent repository: bluecatengineering/dhcproto
Archived: no
README:
dhcproto
A DHCP parser and encoder for DHCPv4/DHCPv6. dhcproto aims to be a functionally complete DHCP implementation. Many common option types are implemented, PRs are welcome to flesh out missing types.
Attention! We are developing a DHCP server using this library called dora!
features
- v4 is 100% safe rust (v6 uses
get_uncheckedafter bounds have been checked) - v4 & v6 Message types
- v4 & v6 message header getters/setters, all data mutable
- option types with 100's of fully type safe variants (accepting PR's for unknown variants)
- Long option encoding supported (RFC 3396) (allows encoding options longer than 255 bytes)
- benchmarked encoding/decoding
crates.io
Minimum Rust Version
This crate uses const generics, Rust 1.53 is required
Examples
(v4) Decoding/Encoding
use dhcproto::v4::{Message, Encoder, Decoder, Decodable, Encodable};
// decode
let bytes = dhcp_offer();
let msg = Message::decode(&mut Decoder::new(&bytes))?;
// now encode
let mut buf = Vec::new();
let mut e = Encoder::new(&mut buf);
msg.encode(&mut e)?;(v4) Constructing messages
use dhcproto::{v4, Encodable, Encoder};
// hardware addr
let chaddr = vec![
29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
];
// construct a new Message
let mut msg = v4::Message::default();
msg.set_flags(v4::Flags::default().set_broadcast()) // set broadcast to true
.set_chaddr(&chaddr) // set chaddr
.opts_mut()
.insert(v4::DhcpOption::MessageType(v4::MessageType::Discover)); // set msg type
// set some more options
msg.opts_mut()
.insert(v4::DhcpOption::ParameterRequestList(vec![
v4::OptionCode::SubnetMask,
v4::OptionCode::Router,
v4::OptionCode::DomainNameServer,
v4::OptionCode::DomainName,
]));
msg.opts_mut()
.insert(v4::DhcpOption::ClientIdentifier(chaddr));
// now encode to bytes
let mut buf = Vec::new();
let mut e = Encoder::new(&mut buf);
msg.encode(&mut e)?;
// buf now has the contents of the encoded DHCP messageRFCs supported
DHCPv6:
- - -
- (message types only)
-
- (message types/status codes only, no opt 53)
- (message types only)
- (message types only)
DHCPv4:
- - - - - - - - -
- (message types & opts)
- -
- (message types & opts 151-157)
- (message types only, status codes for opt 151 unimplemented)
- - -
Excerpt shown — open the source for the full document.
Notability
notability 2.0/10Routine fork, no notable traction