dpdk: Add support for Mellanox ConnectX-4 devices
[vpp.git] / src / vnet / lisp-cp / packets.h
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>
17 #include <vnet/lisp-cp/lisp_types.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
24 void *pkt_push_udp_and_ip (vlib_main_t * vm, vlib_buffer_t * b, u16 sp,
25                            u16 dp, ip_address_t * sip, ip_address_t * dip);
26
27 void *pkt_push_ecm_hdr (vlib_buffer_t * b);
28
29 always_inline u8 *
30 vlib_buffer_get_tail (vlib_buffer_t * b)
31 {
32   return b->data + b->current_data + b->current_length;
33 }
34
35 always_inline void *
36 vlib_buffer_put_uninit (vlib_buffer_t * b, u8 size)
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 *
45 vlib_buffer_push_uninit (vlib_buffer_t * b, u8 size)
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 *
56 vlib_buffer_make_headroom (vlib_buffer_t * b, u8 size)
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 *
64 vlib_buffer_pull (vlib_buffer_t * b, u8 size)
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  */