u32 n_bytes = sizeof (h[0]);
vec_add2 (*result, p, n_bytes);
- memcpy (p, h, n_bytes);
+ clib_memcpy (p, h, n_bytes);
}
return 1;
return frame->n_vectors;
}
+static clib_error_t *
+gre_interface_admin_up_down (vnet_main_t * vnm, u32 hw_if_index, u32 flags)
+{
+ if (flags & VNET_SW_INTERFACE_FLAG_ADMIN_UP)
+ vnet_hw_interface_set_flags (vnm, hw_if_index, VNET_HW_INTERFACE_FLAG_LINK_UP);
+ else
+ vnet_hw_interface_set_flags (vnm, hw_if_index, 0 /* down */);
+
+ return /* no error */ 0;
+}
+
static u8 * format_gre_tunnel_name (u8 * s, va_list * args)
{
u32 dev_instance = va_arg (*args, u32);
.format_device = format_gre_device,
.format_tx_trace = format_gre_tx_trace,
.tx_function = gre_interface_tx,
+ .admin_up_down_function = gre_interface_admin_up_down,
#ifdef SOON
.clear counter = 0;
- .admin_up_down_function = 0;
#endif
};
+VLIB_DEVICE_TX_FUNCTION_MULTIARCH (gre_device_class,
+ gre_interface_tx)
+
VNET_HW_INTERFACE_CLASS (gre_hw_interface_class) = {
.name = "GRE",