- ip4_header_t *ip4;
- const size_t headers_size = sizeof (*ip4) + sizeof (*udp);
- vlib_buffer_advance (b, -headers_size);
- ip4 = vlib_buffer_get_current (b);
- udp = (udp_header_t *) (ip4 + 1);
- memset (ip4, 0, headers_size);
- ip4->ip_version_and_header_length = 0x45;
- ip4->ttl = 255;
- ip4->protocol = IP_PROTOCOL_UDP;
- ip4->src_address.as_u32 = key->local_addr.ip4.as_u32;
- ip4->dst_address.as_u32 = key->peer_addr.ip4.as_u32;
-
- udp->src_port = clib_host_to_net_u16 (50000); /* FIXME */
- udp->dst_port = clib_host_to_net_u16 (UDP_DST_PORT_bfd4);
+ typedef struct
+ {
+ ip4_header_t ip4;
+ udp_header_t udp;
+ } ip4_udp_headers;
+ ip4_udp_headers *headers = vlib_buffer_get_current (b);
+ vlib_buffer_advance (b, -sizeof (*headers));
+ headers = vlib_buffer_get_current (b);
+ memset (headers, 0, sizeof (*headers));
+ headers->ip4.ip_version_and_header_length = 0x45;
+ headers->ip4.ttl = 255;
+ headers->ip4.protocol = IP_PROTOCOL_UDP;
+ headers->ip4.src_address.as_u32 = key->local_addr.ip4.as_u32;
+ headers->ip4.dst_address.as_u32 = key->peer_addr.ip4.as_u32;
+
+ headers->udp.src_port = clib_host_to_net_u16 (50000); /* FIXME */
+ headers->udp.dst_port = clib_host_to_net_u16 (UDP_DST_PORT_bfd4);