#include <vlib/vlib.h>
#include <vnet/ip/ip_packet.h> /* for ip_csum_fold */
#include <vnet/srp/srp.h>
+#include <vnet/pg/pg.h>
srp_main_t srp_main;
b0 = vlib_get_buffer (vm, bi0);
b1 = vlib_get_buffer (vm, bi1);
- s0 = (void *) (b0->data + b0->current_data);
- s1 = (void *) (b1->data + b1->current_data);
+ s0 = vlib_buffer_get_current (b0);
+ s1 = vlib_buffer_get_current (b1);
/* Data packets are always assigned to side A (outer ring) interface. */
sw_if_index0 = vnet_buffer (b0)->sw_if_index[VLIB_RX];
b0 = vlib_get_buffer (vm, bi0);
- s0 = (void *) (b0->data + b0->current_data);
+ s0 = vlib_buffer_get_current (b0);
/* Data packets are always assigned to side A (outer ring) interface. */
sw_if_index0 = vnet_buffer (b0)->sw_if_index[VLIB_RX];
u32 * to_next;
u32 bi = ~0;
- if (vlib_buffer_add_data (vm, VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX,
- /* buffer to append to */ &bi,
+ if (vlib_buffer_add_data (vm, /* buffer to append to */ &bi,
*contents, vec_len (*contents)))
{
/* complete or partial buffer allocation failure */
b0 = vlib_get_buffer (vm, bi0);
- s0 = (void *) (b0->data + b0->current_data);
+ s0 = vlib_buffer_get_current(b0);
l2_len0 = vlib_buffer_length_in_chain (vm, b0);
l3_len0 = l2_len0 - STRUCT_OFFSET_OF (srp_generic_control_header_t, control);
= ~ip_csum_fold (ip_incremental_checksum (0, &i->control,
sizeof (i[0]) - STRUCT_OFFSET_OF (srp_ips_header_t, control)));
- if (vlib_buffer_add_data (vm, VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX,
- /* buffer to append to */ &bi,
- i, sizeof (i[0])))
+ if (vlib_buffer_add_data (vm, /* buffer to append to */ &bi, i,
+ sizeof (i[0])))
{
/* complete or partial allocation failure */
if (bi != ~0)
while (1)
{
- pool_foreach (si, sm->interface_pool, ({
+ pool_foreach (si, sm->interface_pool) {
maybe_send_ips_message (si);
- }));
+ }
vlib_process_suspend (vm, 1.0);
}
.state = VLIB_NODE_STATE_DISABLED,
};
+static void
+srp_setup_node (vlib_main_t *vm, u32 node_index)
+{
+ vlib_node_t *n = vlib_get_node (vm, node_index);
+ pg_node_t *pn = pg_get_node (node_index);
+ n->format_buffer = format_srp_header_with_length;
+ n->unformat_buffer = unformat_srp_header;
+ pn->unformat_edit = unformat_pg_srp_header;
+}
+
static clib_error_t * srp_init (vlib_main_t * vm)
{
srp_main_t * sm = &srp_main;