10 uint8_t ip_range_start, uint8_t ip_range_end) {
11 std::istringstream mac_stream(mac_address);
13 uint32_t mac_hash = 0;
16 while (std::getline(mac_stream, byte_str,
':') && byte_count < 6) {
17 uint8_t byte_val =
static_cast<uint8_t
>(std::stoul(byte_str,
nullptr, 16));
18 mac_hash = (mac_hash << 8) | byte_val;
23 static_cast<uint32_t
>(ip_range_end) -
static_cast<uint32_t
>(ip_range_start) + 1u;
24 uint8_t ip_octet =
static_cast<uint8_t
>(ip_range_start + (span > 0 ? (mac_hash % span) : 0));
26 size_t last_dot = base_ip.rfind(
'.');
27 std::string base = last_dot != std::string::npos ? base_ip.substr(0, last_dot) : base_ip;
29 return base +
"." + std::to_string(ip_octet);
std::string calculate_ip_from_mac(const std::string &mac_address, const std::string &base_ip, uint8_t ip_range_start, uint8_t ip_range_end)
Deterministic last-octet from MAC string "aa:bb:cc:dd:ee:ff" into base_ip range.