size_t len;
u8 i;
- lease->is_ipv6 = 0; // only support IPv6 clients
+ lease->is_ipv6 = 0; // only support IPv4 clients
lease->sw_if_index = ntohl (client->sw_if_index);
lease->state = ntohl (client->state);
len = clib_min (sizeof (lease->hostname) - 1, vec_len (client->hostname));
lease->count = vec_len (client->domain_server_address);
for (i = 0; i < lease->count; i++)
- clib_memcpy (&lease->domain_server[i].address,
- (u8 *) & client->domain_server_address[i],
+ clib_memcpy (&lease->domain_server[i].address.un.ip4,
+ (u8 *) &client->domain_server_address[i],
sizeof (ip4_address_t));
clib_memcpy (&lease->host_mac[0], client->client_hardware_address, 6);
if (!reg)
return;
- mp = vl_msg_api_alloc (sizeof (*mp));
+ mp = vl_msg_api_alloc (sizeof (*mp) +
+ sizeof (vl_api_domain_server_t) *
+ vec_len (client->domain_server_address));
mp->client_index = client_index;
mp->pid = client->pid;
dhcp_client_lease_encode (&mp->lease, client);
return error;
}
+static void
+vl_api_dhcp_client_detect_enable_disable_t_handler (
+ vl_api_dhcp_client_detect_enable_disable_t *mp)
+{
+ vl_api_dhcp_client_detect_enable_disable_reply_t *rmp;
+ int rv = 0;
+ VALIDATE_SW_IF_INDEX (mp);
+
+ if (mp->enable)
+ {
+ vnet_feature_enable_disable ("ip4-unicast", "ip4-dhcp-client-detect",
+ clib_net_to_host_u32 (mp->sw_if_index),
+ 1 /* enable */, 0, 0);
+ }
+ else
+ {
+ vnet_feature_enable_disable ("ip4-unicast", "ip4-dhcp-client-detect",
+ clib_net_to_host_u32 (mp->sw_if_index),
+ 0 /* disable */, 0, 0);
+ }
+
+ BAD_SW_IF_INDEX_LABEL;
+
+ REPLY_MACRO (VL_API_DHCP_CLIENT_DETECT_ENABLE_DISABLE_REPLY);
+}
static uword
dhcp6_reply_process (vlib_main_t * vm, vlib_node_runtime_t * rt,
vlib_frame_t * f)
vpe_client_registration_t *reg;
/* *INDENT-OFF* */
- pool_foreach(reg, vpe_api_main.dhcp6_reply_events_registrations,
- ({
+ pool_foreach (reg, vpe_api_main.dhcp6_reply_events_registrations)
+ {
vl_api_registration_t *vl_reg;
vl_reg =
vl_api_client_index_to_registration (reg->client_index);
msg->pid = reg->client_pid;
vl_api_send_msg (vl_reg, (u8 *) msg);
}
- }));
+ }
/* *INDENT-ON* */
clib_mem_free (event);
vpe_client_registration_t *reg;
/* *INDENT-OFF* */
- pool_foreach(reg, vpe_api_main.dhcp6_pd_reply_events_registrations,
- ({
+ pool_foreach (reg, vpe_api_main.dhcp6_pd_reply_events_registrations)
+ {
vl_api_registration_t *vl_reg;
vl_reg =
vl_api_client_index_to_registration (reg->client_index);
msg->pid = reg->client_pid;
vl_api_send_msg (vl_reg, (u8 *) msg);
}
- }));
+ }
/* *INDENT-ON* */
clib_mem_free (event);