+ for (auto& msg : *this) {
+ auto& payload = msg.get_payload();
+
+ const dhcp_client::state_t& s =
+ dhcp_client::state_t::from_vpp(payload.lease.state);
+ route::prefix_t pfx(payload.lease.is_ipv6, payload.lease.host_address,
+ payload.lease.mask_width);
+ std::shared_ptr<interface> itf = interface::find(payload.lease.sw_if_index);
+
+ if (itf) {
+ std::shared_ptr<dhcp_client::lease_t> ev =
+ std::make_shared<dhcp_client::lease_t>(
+ s, itf, from_bytes(0, payload.lease.router_address), pfx,
+ reinterpret_cast<const char*>(payload.lease.hostname),
+ mac_address_t(payload.lease.host_mac));
+ m_listener.handle_dhcp_event(ev);
+
+ VOM_LOG(log_level_t::INFO) << "DHCP: " << ev->to_string();
+ } else {
+ VOM_LOG(log_level_t::ERROR) << "DHCP: no interface: "
+ << payload.lease.sw_if_index;
+ }
+ }
+
+ flush();