Support packets in flight
[samplevnf.git] / VNFs / DPPD-PROX / defaults.h
1 /*
2 // Copyright (c) 2010-2020 Intel Corporation
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //     http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 */
16
17 #ifndef _DEFAULTS_H_
18 #define _DEFAULTS_H_
19
20 #include <rte_ether.h>
21 #include "prox_compat.h"
22
23 struct prox_cfg;
24 struct lcore_cfg;
25
26 void set_global_defaults(struct prox_cfg* prox_cfg);
27 void set_task_defaults(struct prox_cfg* prox_cfg, struct lcore_cfg* lcore_cfg_init);
28 void set_port_defaults(void);
29
30 #define MAX_PKT_SIZE    10000
31 #define MAX_PKT_BURST   64
32 #define MAX_RING_BURST  64
33 #define DUMP_PKT_LEN    MAX_PKT_SIZE
34 #define MAX_IMIX_PKTS 128
35
36 #if MAX_RING_BURST < MAX_PKT_BURST
37 #error MAX_RING_BURST < MAX_PKT_BURST
38 #endif
39
40 #define NUM_VCPES               65536
41 #define GRE_BUCKET_ENTRIES      4
42 #define MAX_GRE                 (NUM_VCPES * GRE_BUCKET_ENTRIES)
43 #define MAX_RSS_QUEUE_BITS      9
44
45 #define PROX_VLAN_TAG_SIZE      4
46
47 /* MBUF_SIZE can be configured based on the following:
48    - If only one segment is used ETH_TXQ_FLAGS_NOMULTSEGS can be used resulting
49      in vector mode used for transmission hence higher performance
50    - Only one segment is used by the rx function if the mbuf size is big enough
51    - Bigger mbufs result in more memory used, hence slighly lower performance (DTLB misses)
52    - Selecting the smaller mbuf is not obvious as pmds might behave slighly differently:
53      - on ixgbe a 1526 + 256 mbuf size will cause any packets bigger than 1024 bytes to be segmented
54      - on i40e a 1526 + 256 mbuf size will cause any packets bigger than 1408 bytes to be segmented
55      - other pmds might have additional requirements
56    As the performance decrease due to the usage of bigger mbuf is not very important, we prefer
57    here to use  the same, bigger, mbuf size for all pmds, making the code easier to support.
58    An mbuf size of 2048 + 128 + 128 + 8 can hold a 2048 packet, and only one segment will be used
59    except if jumbo frames are enabled. +8 (VLAN) is needed for i40e (and maybe other pmds).
60    TX_MBUF_SIZE is used for when transmitting only: in this case the mbuf size can be smaller.
61 */
62 #define MBUF_SIZE (2048 + (unsigned)sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM + 2 * PROX_VLAN_TAG_SIZE)
63 #define TX_MBUF_SIZE (PROX_RTE_ETHER_MAX_LEN + (unsigned)sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM +  2 * PROX_VLAN_TAG_SIZE)
64
65 #define PROX_MTU   PROX_RTE_ETHER_MAX_LEN - PROX_RTE_ETHER_HDR_LEN - PROX_RTE_ETHER_CRC_LEN
66 #define NO_VDEV_PORT    0xFF
67
68 #endif /* _DEFAULTS_H_ */