crafter 0.3.2

Packet-level network interaction for Rust tools and agents.
Documentation
//! DHCPv6 protocol-family home.
//!
//! This module is the target home for the DHCPv6 packet layer defined by
//! RFC 9915, "Dynamic Host Configuration Protocol for IPv6 (DHCPv6)", plus
//! public IANA DHCPv6 registry metadata and packet-data extensions.
//!
//! The module exposes packet builders, decoders, typed option helpers, UDP
//! bindings, and registry metadata while keeping unknown codepoints and payloads
//! round-trip safe.
//!
//! DHCPv6 Authentication is packet data only. The crate can encode and decode
//! the option fields, but it never derives keys, signs messages, verifies MACs,
//! or interprets authentication secrets.
//!
//! # Packet-Layer Example
//!
//! ```
//! use crafter::prelude::*;
//! use std::net::Ipv6Addr;
//!
//! let packet =
//!     Ipv6::new()
//!         .src(Ipv6Addr::new(0x2001, 0x0db8, 0, 0, 0, 0, 0, 0x10))
//!         .dst(Ipv6Addr::new(0x2001, 0x0db8, 0, 0, 0, 0, 0, 0x01))
//!     / Udp::dhcpv6_client()
//!     / Dhcpv6::information_request(0x010203)
//!         .client_duid(Dhcpv6Duid::ll(1, [0x02, 0, 0x5e, 0, 0x06, 0x01]))
//!         .oro([DHCPV6_OPTION_DNS_SERVERS, DHCPV6_OPTION_DOMAIN_LIST]);
//!
//! let wire = packet.compile()?;
//! let decoded = Packet::decode_from_l3(NetworkLayer::Ipv6, wire.as_bytes())?;
//! let dhcpv6 = decoded.layer::<Dhcpv6>().unwrap();
//! assert_eq!(dhcpv6.message_type_value(), Dhcpv6MessageType::InformationRequest);
//! # Ok::<(), crafter::CrafterError>(())
//! ```

pub mod constants;
pub mod duid;
pub mod layer;
pub mod message;
pub mod option;
pub mod registry;
pub mod status;

pub use constants::*;
pub use duid::Dhcpv6Duid;
pub(crate) use layer::{append_dhcpv6_packet, looks_like_dhcpv6_payload};
pub use layer::{Dhcpv6, Dhcpv6OptionRepetition, Dhcpv6OptionRepetitionReport, Dhcpv6RelayHeader};
pub use message::Dhcpv6MessageType;
pub use option::{
    Dhcpv6AuthAlgorithm, Dhcpv6AuthProtocol, Dhcpv6Authentication, Dhcpv6BootfileParam,
    Dhcpv6ClientArchitecture, Dhcpv6ClientData, Dhcpv6ClientFqdn, Dhcpv6ClientLinkLayerAddress,
    Dhcpv6Dnr, Dhcpv6DnrSvcParam, Dhcpv6DomainList, Dhcpv6IaAddr, Dhcpv6IaNa, Dhcpv6IaPd,
    Dhcpv6IaPrefix, Dhcpv6Leasequery, Dhcpv6LeasequeryType, Dhcpv6NetworkInterfaceIdentifier,
    Dhcpv6NtpServer, Dhcpv6NtpSuboption, Dhcpv6Option, Dhcpv6OptionCode, Dhcpv6OptionFormat,
    Dhcpv6OptionValue, Dhcpv6PdExclude, Dhcpv6RelaySuppliedOptions, Dhcpv6RemoteId,
    Dhcpv6ReplayDetectionMethod, Dhcpv6S46Container, Dhcpv6S46ContainerKind, Dhcpv6S46Priority,
    Dhcpv6StatusCodeOption, Dhcpv6UserClass, Dhcpv6VendorClass, Dhcpv6VendorOption,
    Dhcpv6VendorOptions,
};
pub use registry::{
    dhcpv6_option_ia_na_placement, dhcpv6_option_ia_pd_placement, dhcpv6_option_meta,
    dhcpv6_option_name, dhcpv6_option_oro_placement, dhcpv6_option_placement_report,
    dhcpv6_option_registered, dhcpv6_option_relay_supplied_placement, dhcpv6_option_status,
    dhcpv6_option_top_level_placement, dhcpv6_radius_attribute_meta, dhcpv6_radius_attribute_name,
    dhcpv6_radius_attribute_permitted, dhcpv6_radius_dhcpv6_option_permission,
    dhcpv6_radius_dhcpv6_option_permitted, dhcpv6_rsoo_option_permission,
    dhcpv6_rsoo_option_permitted, dhcpv6_s46_priority_option_permission,
    dhcpv6_s46_priority_option_permitted, dhcpv6_supported_transport_meta,
    dhcpv6_supported_transport_name, Dhcpv6AuxiliaryRegistryStatus, Dhcpv6ClientOro,
    Dhcpv6OptionMeta, Dhcpv6OptionPlacementReport, Dhcpv6OptionPlacementStatus,
    Dhcpv6OptionSingleton, Dhcpv6OptionStatus, Dhcpv6RadiusAttributeCode,
    Dhcpv6RadiusAttributeMeta, Dhcpv6RadiusDhcpv6OptionPermission, Dhcpv6RsooOptionPermission,
    Dhcpv6S46PriorityOptionPermission, Dhcpv6SupportedTransportMeta,
};
pub use status::Dhcpv6StatusCode;