Net::DHCP - A DHCP packet object
0.9 2026-05-18
- Standardise POD formatting across all modules
- Implement round-trip pack/unpack for clientid, sipserv, csr
- Extract magic numbers into named constants across all modules
- Add PCAP-based tests with README documentation for relay DORA, LEASEQUERY
- Fix gaps in PCAP-based tests: add op/secs checks, missing options, correct names
- Add PCAP-based test for DHCPINFORM, RELEASE, and User-Class (77)
- Implement option 52 overload handling (RFC 2132 ยง9.3) and fix suboption bugs
- Extract _nonempty helper for defined+length guards
- Add structured option 82 suboption formatting with Cisco Circuit ID/Remote ID decoding
- Add DHO_PACKETCABLE_DEPRECATED format entry (hexa)
- Add DHO_GEOCONF format entry and suboption formats (int/byte)
- Add DHO_NWIP_SUBOPTIONS format entries (byte/inet) for option 63
- Add DHO_CCC format entries (inet/string/byte/int/hexa) for option 122
- Fix packsuboptions double-packing and redundant outer length
- Add DHO_USER_CLASS (77) support with userclass format type per RFC 3004
- Add DHO_VENDOR_ENCAPSULATED_OPTIONS (43) suboption support with CableLabs DOCSIS codes
- Fix CSR default route test: restore missing prefix assertion
- Document packsuboptions canonical TLV wire format in POD
- Use Ref::Util instead of bare ref for type checks
- Tweak imports, standardise shebangs, clean up test pragma ordering
- Remove Travis CI config (service defunct), TODO file, and PLAN from tracking
- RFC 3396: chunk options >255 bytes on serialize, concatenate duplicates on parse
- Add $Net::DHCP::multi_value_array_ref for arrayref option values
- Bump minimum Perl to 5.10.0
- Rename addOption* / addOptionValue to setOption*/setOptionValue;
add pushOptionValue with accumulation and backward-compat deprecation aliases
- Add hexa format support to top-level setOptionValue/getOptionValue dispatch
- Fix suboption vs suboptions string mismatch in setOptionValue/pushOptionValue
- Add inets2 to is_list_format for pushOptionValue compatibility
- Fix packsipserv force_type ip to use packinets() instead of raw string
- Fix serialize suboption chunking: guard empty chunk push, croak on oversized entry
- Clear sub_options_order in marshall() to prevent stale state
- Add odd-length hex warning in _pack_circuit_id/_pack_remote_id
- Update POD for renamed methods with deprecation notices; use RFC 5737 addresses
0.8 2026-05-15
- Refactor constructor: single-pass split, m/[0-9]/, condensed carp
- Use eq instead of == in removeOption for safer key comparison
- Add byte_len helper to scope 'use bytes' to a single sub
- Implement getSubOptionValue, removeSubOption stubs, refactor toString
- Replace OrderOptions stub with reorder_options() quirk handler
- Standardize shebangs to /usr/bin/env perl, add use warnings to test files
- Clean up test pragma ordering (use strict before use warnings)
- Add subtests to packinet and buffer-length tests
- Align fat commas in 102-107 test data hashes
- Add POD docs for byte_len to fix pod-coverage test
- Modernize Exporter usage: use Exporter 'import' instead of @ISA inheritance
- Explicit import lists from perlimports, drop unused imports
- Add perl minimum version and fix up perlcritic testing
- Add DHO_CCC parens for consistency in %DHO_FORMATS
- Correct typos in POD and comments
- Fix broken POD internal links for release
- Add length bounds checks in marshall and unpacksuboptions
- Use _printable in suboption formatting, quote if value contains spaces/commas
- Fix uninitialized $format warnings in getOptionValue for unknown codes
- Make uninitialized warnings fatal across all modules
0.7 2022-06-22
- Increase minimum perl to 5.12 to ensure Socket is new enough for Net::Frame
- Update Changes to provide more details
- Bump to 0.7
- WARNING! This release might break your toys. Please test it first before upgrading!
0.7_010 2022-06-22
- Update license to MIT, approved by all contributors https://github.com/djzort/Net-DHCP/issues/11
0.7_009 2022-06-22
- Accepted PR https://github.com/djzort/Net-DHCP/pull/10 - Implement levels of packet minimal length checking
0.7_008 2018-02-16
- Merge PR https://github.com/djzort/Net-DHCP/pull/8 - Declare provided modules in meta.{yml,json}
0.7_007 2016-07-25
- Merge PR https://github.com/djzort/Net-DHCP/pull/6 - Can use addSubOptionValue for some DHO_DHCP_AGENT_OPTIONS
0.7_006 2016-02-24
- Minor change via https://github.com/djzort/Net-DHCP/pull/5
0.7_005 2015-09-21
- Fix build deps for BZ107212
0.7_004 2015-09-15
- Some basic support for option 120
0.7_003 2015-08-28
- Add more test examining reeal packets
- Start handling client id's
- Add author covenant
- Moved various methods to Net::DHCP::Packet::Attributes
- Moved various methods to Net::DHCP::Packet::IPv4Utils
- Adjusted tests accordingly
- Net::DHCP no longer exports unpackinet, packinet, unpackinets, packinets
0.7_002 2015-08-15
- Add tests examining real packets from tcpdump
0.7_001 2015-08-08
- Reworked ->new()
- Bring back Net/DHCP.pm
- Add Virtual Subnet Selection constant from rfc 6607
- Add tests examining real packets from tcpdump
- Option 82 decoding
- Lists of values are now retured with commas
0.696 2015-06-10
- Fixed up dist.ini
- YAPC::NA release
0.695 2014-12-02
- Corrected github details
0.694 2014-08-27
- Fix for RT89267
- Added github details
- Some minor code style changes
0.693 2012-10-16
- Changes kindly sent in my Alexander Clouter
- Allows static routes to be included in dhcp packets
- (no tests yet)
0.692 2012-09-05
- Minor typo in pod
0.691 2012-08-24
- Updated changelog for Kawlitee
0.69 2012-06-06
- Added 'use warnings' to improve Kwalitee
- Now uses dist::zilla
0.685 2012-05-21
- Removed file
0.684 2012-05-21
- Changed to using Dist::Zilla.
0.683 2012-01-21
- Still chasing the Build requires issue.
0.682 2012-01-21
- Minor update to tests sent in from Gregory Herrmann via RT#74187. Thanks for that!
- Updated pod to complete coverage
0.681 2012-01-16
- Forgot to update MANIFEST file... woops. Also some pod updates.
0.68 2012-01-14
- Added Net/DHCP.pm stub.
0.67_2 2011-04-18
- Updated pod. Please be awair that i have added the word "CableLabs" to to pod. This 05-be of concern to Debian. Im not sure how their licensing works exactly vs CableLabs copyrights. Im reasonably certain its aok.
- Minor changes for RT#73972
- Improvements to tests
0.67_1 2010-12-16
- Warning: the declaration of DHO_NIS_DOMAIN was overlapping for options 40 options 64. Therefore, options 64 and 65 where renamed DHO_NISV3_SERVER and DHO_NISV3_DOMAIN to remove this overlap and remain consistent.
- Constants.pm. Added a vast number of option codes from the IANA listing.
- Added updated DHCP message codes, added Netware IP Codes. Tests were added for coverage of constants.
- Packet.pm. Changed a whole bunch of stuff. Including removing some then then else orgies, tidying up lots of warnings.
- Tests. I'd added a bunch more tests :)
- Rearranged the test suite. Added lots of tests.
0.67 2010-11-13
- Fixing a small bug in marshall (see cpanrt61693), fixed a bug in Constants.pm (see cpanrt32962), clarified version dependance closing out cpanrt19405
0.66 2006-07-12
- Module is definitely not compatible with Perl 5.6.0. Minimum version is Perl 5.8.0.
- Corrected major bug in removeOption(), thanks to Nathan Scarlett.
0.65 2006--04-22
- Added a sample DHCP Server and tester: dhcpd.pl & dhcpd_test.pl in the examples folder.
0.64 2006-03-06
- Added removeOption() function
0.63 2006-01-01
- Major bug corrected in Net::DHCP::Packet->new() while parsing attributes.
0.62 2005-10-07
- Minor change to make module compatible Perl 5.6.0 instead of only 5.8.0.
0.61 2005-04-29
- Changed minimal acceptable packet length in marshall() method.
0.60 2005-03-29
- Lots of tests added.
- getOption() and addOption() removed and replaced by:
* getOptionValue() & addOptionValue() which provide automatic
type conversion to/from text representation
* getOptionRaw() & addOptionRaw() to manipulate binary format packed into strings.
- new() now behaves differently for DHCP options, requiring text values and not packed binary values.
- toString() now escapes unprintable characters.
- Added methods : ciaddrRaw, giaddrRaw, siaddrRaw, yiaddrRaw that use packed binary formats. They are provided for performance enhancements when you want to avoid unnecessary type conversion.
- Pad options (0x00) are now supported.
- Example of DHCPLeaseQuery provided by John A. Murphy.
0.53 2005-03-02
- Performance enhancement in Packet->new() avoirding unnecessary type conversion and function calls.
- Support for DHCPLEASEQUERY, Cisco extension (draft-ietf-dhc-leasequery-05.txt).
- Corrected bug in Packet->new() not allowing '0' in Hlen and Htype parameters. Thanks to John A. Murphy.
0.52 2005-04-24
- Performance enhancements in Packet.pm.
0.51 2005-04-20
- Added encoding and decoding functions for Relay Agent information (option 82 - RFC 3046).
- Comment field added in the Packet object. This lets you put any comment in the Packet object, such as a transaction number. This field not processed.
0.50 2005-04-8
- Deeply rewritten version based on Net::DHCP v0.11 by Francis van Dun.
- Net::DHCP::Session is momentarily missing, it should be reintroduced soon.