blob: 212a1d781635960afbad1f0258ab6e534d2c1f00 [file] [log] [blame]
Florin Corase127a7e2016-02-18 22:20:01 +01001/*
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
Florin Corasa2157cf2016-08-16 21:09:14 +020019#define IP_DF 0x4000 /* don't fragment */
Florin Corase127a7e2016-02-18 22:20:01 +010020
Florin Corasa2157cf2016-08-16 21:09:14 +020021void *pkt_push_ip (vlib_main_t * vm, vlib_buffer_t * b, ip_address_t * src,
22 ip_address_t * dst, u32 proto);
Florin Corase127a7e2016-02-18 22:20:01 +010023
Florin Corasa2157cf2016-08-16 21:09:14 +020024void *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);
Florin Corase127a7e2016-02-18 22:20:01 +010026
Florin Corasa2157cf2016-08-16 21:09:14 +020027void *pkt_push_ecm_hdr (vlib_buffer_t * b);
Florin Corase127a7e2016-02-18 22:20:01 +010028
29always_inline u8 *
Florin Corasa2157cf2016-08-16 21:09:14 +020030vlib_buffer_get_tail (vlib_buffer_t * b)
Florin Corase127a7e2016-02-18 22:20:01 +010031{
32 return b->data + b->current_data + b->current_length;
33}
34
35always_inline void *
Florin Corasa2157cf2016-08-16 21:09:14 +020036vlib_buffer_put_uninit (vlib_buffer_t * b, u8 size)
Florin Corase127a7e2016-02-18 22:20:01 +010037{
38 /* XXX should make sure there's enough space! */
Florin Corasa2157cf2016-08-16 21:09:14 +020039 void *p = vlib_buffer_get_tail (b);
Florin Corase127a7e2016-02-18 22:20:01 +010040 b->current_length += size;
41 return p;
42}
43
44always_inline void *
Florin Corasa2157cf2016-08-16 21:09:14 +020045vlib_buffer_push_uninit (vlib_buffer_t * b, u8 size)
Florin Corase127a7e2016-02-18 22:20:01 +010046{
47 /* XXX should make sure there's enough space! */
Florin Coras02655bd2016-04-26 00:17:24 +020048 ASSERT (b->current_data >= size);
Florin Corase127a7e2016-02-18 22:20:01 +010049 b->current_data -= size;
50 b->current_length += size;
51
Florin Corasa2157cf2016-08-16 21:09:14 +020052 return vlib_buffer_get_current (b);
Florin Corase127a7e2016-02-18 22:20:01 +010053}
54
55always_inline void *
Florin Corasa2157cf2016-08-16 21:09:14 +020056vlib_buffer_make_headroom (vlib_buffer_t * b, u8 size)
Florin Corase127a7e2016-02-18 22:20:01 +010057{
58 /* XXX should make sure there's enough space! */
59 b->current_data += size;
60 return vlib_buffer_get_current (b);
61}
62
63always_inline void *
64vlib_buffer_pull (vlib_buffer_t * b, u8 size)
65{
Florin Coras1a1adc72016-07-22 01:45:30 +020066 if (b->current_length < size)
67 return 0;
68
Florin Corasa2157cf2016-08-16 21:09:14 +020069 void *data = vlib_buffer_get_current (b);
Florin Corase127a7e2016-02-18 22:20:01 +010070 vlib_buffer_advance (b, size);
71 return data;
72}
Florin Corasa2157cf2016-08-16 21:09:14 +020073
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 */