FD.io VPP  v16.06
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 *
22 pkt_push_ip (vlib_main_t * vm, vlib_buffer_t *b, ip_address_t *src,
23  ip_address_t *dst, u32 proto);
24 
25 void *
27  ip_address_t *sip, ip_address_t *dip);
28 
29 void *
31 
34 {
35  return b->data + b->current_data + b->current_length;
36 }
37 
38 always_inline void *
40 {
41  /* XXX should make sure there's enough space! */
42  void * p = vlib_buffer_get_tail (b);
43  b->current_length += size;
44  return p;
45 }
46 
47 always_inline void *
49 {
50  /* XXX should make sure there's enough space! */
51  ASSERT (b->current_data >= size);
52  b->current_data -= size;
53  b->current_length += size;
54 
55  return vlib_buffer_get_current(b);
56 }
57 
58 always_inline void *
60 {
61  /* XXX should make sure there's enough space! */
62  b->current_data += size;
63  return vlib_buffer_get_current (b);
64 }
65 
66 always_inline void *
68 {
69  void * data = vlib_buffer_get_current (b);
70  vlib_buffer_advance (b, size);
71  return data;
72 }
always_inline void * vlib_buffer_get_current(vlib_buffer_t *b)
Get pointer to current data to process.
Definition: buffer.h:184
always_inline void * vlib_buffer_push_uninit(vlib_buffer_t *b, u8 size)
Definition: packets.h:48
i16 current_data
signed offset in data[], pre_data[] that we are currently processing.
Definition: buffer.h:77
#define always_inline
Definition: clib.h:84
always_inline u8 * vlib_buffer_get_tail(vlib_buffer_t *b)
Definition: packets.h:33
u16 current_length
Nbytes between current data and the end of this buffer.
Definition: buffer.h:81
always_inline void * vlib_buffer_put_uninit(vlib_buffer_t *b, u8 size)
Definition: packets.h:39
#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:198
always_inline void * vlib_buffer_make_headroom(vlib_buffer_t *b, u8 size)
Definition: packets.h:59
u32 size
Definition: vhost-user.h:74
always_inline void * vlib_buffer_pull(vlib_buffer_t *b, u8 size)
Definition: packets.h:67
unsigned short u16
Definition: types.h:57
void * pkt_push_ecm_hdr(vlib_buffer_t *b)
Definition: packets.c:245
always_inline void vlib_buffer_advance(vlib_buffer_t *b, word l)
Advance current data pointer by the supplied (signed!) amount.
Definition: buffer.h:197
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:222
u8 data[0]
Packet data.
Definition: buffer.h:150