FD.io VPP  v16.09
Vector Packet Processing
packets.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <vnet/vnet.h>
18 
19 #define IP_DF 0x4000 /* don't fragment */
20 
21 void *pkt_push_ip (vlib_main_t * vm, vlib_buffer_t * b, ip_address_t * src,
22  ip_address_t * dst, u32 proto);
23 
25  u16 dp, ip_address_t * sip, ip_address_t * dip);
26 
28 
31 {
32  return b->data + b->current_data + b->current_length;
33 }
34 
35 always_inline void *
37 {
38  /* XXX should make sure there's enough space! */
39  void *p = vlib_buffer_get_tail (b);
40  b->current_length += size;
41  return p;
42 }
43 
44 always_inline void *
46 {
47  /* XXX should make sure there's enough space! */
48  ASSERT (b->current_data >= size);
49  b->current_data -= size;
50  b->current_length += size;
51 
52  return vlib_buffer_get_current (b);
53 }
54 
55 always_inline void *
57 {
58  /* XXX should make sure there's enough space! */
59  b->current_data += size;
60  return vlib_buffer_get_current (b);
61 }
62 
63 always_inline void *
65 {
66  if (b->current_length < size)
67  return 0;
68 
69  void *data = vlib_buffer_get_current (b);
70  vlib_buffer_advance (b, size);
71  return data;
72 }
73 
74 /* *INDENT-ON* */
75 
76 /*
77  * fd.io coding-style-patch-verification: ON
78  *
79  * Local Variables:
80  * eval: (c-set-style "gnu")
81  * End:
82  */
static u8 * vlib_buffer_get_tail(vlib_buffer_t *b)
Definition: packets.h:30
static void * vlib_buffer_put_uninit(vlib_buffer_t *b, u8 size)
Definition: packets.h:36
static void * vlib_buffer_push_uninit(vlib_buffer_t *b, u8 size)
Definition: packets.h:45
i16 current_data
signed offset in data[], pre_data[] that we are currently processing.
Definition: buffer.h:78
#define always_inline
Definition: clib.h:84
static void * vlib_buffer_get_current(vlib_buffer_t *b)
Get pointer to current data to process.
Definition: buffer.h:187
u16 current_length
Nbytes between current data and the end of this buffer.
Definition: buffer.h:82
static void * vlib_buffer_pull(vlib_buffer_t *b, u8 size)
Definition: packets.h:64
static void * vlib_buffer_make_headroom(vlib_buffer_t *b, u8 size)
Definition: packets.h:56
static void vlib_buffer_advance(vlib_buffer_t *b, word l)
Advance current data pointer by the supplied (signed!) amount.
Definition: buffer.h:200
#define ASSERT(truth)
unsigned int u32
Definition: types.h:88
void * pkt_push_ip(vlib_main_t *vm, vlib_buffer_t *b, ip_address_t *src, ip_address_t *dst, u32 proto)
Definition: packets.c:200
u32 size
Definition: vhost-user.h:77
unsigned short u16
Definition: types.h:57
void * pkt_push_ecm_hdr(vlib_buffer_t *b)
Definition: packets.c:249
unsigned char u8
Definition: types.h:56
void * pkt_push_udp_and_ip(vlib_main_t *vm, vlib_buffer_t *b, u16 sp, u16 dp, ip_address_t *sip, ip_address_t *dip)
Definition: packets.c:226
u8 data[0]
Packet data.
Definition: buffer.h:151