8f850d03cc3b821c12dafc2c91afeb64d77d3832
[samplevnf.git] / VNFs / DPPD-PROX / defaults.h
1 /*
2 // Copyright (c) 2010-2017 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
22 struct prox_cfg;
23 struct lcore_cfg;
24
25 void set_global_defaults(struct prox_cfg* prox_cfg);
26 void set_task_defaults(struct prox_cfg* prox_cfg, struct lcore_cfg* lcore_cfg_init);
27 void set_port_defaults(void);
28
29 #define MAX_PKT_SIZE    10000
30 #define MAX_PKT_BURST   64
31 #define MAX_RING_BURST  64
32 #define DUMP_PKT_LEN    MAX_PKT_SIZE
33
34 #if MAX_RING_BURST < MAX_PKT_BURST
35 #error MAX_RING_BURST < MAX_PKT_BURST
36 #endif
37
38 #define NUM_VCPES               65536
39 #define GRE_BUCKET_ENTRIES      4
40 #define MAX_GRE                 (NUM_VCPES * GRE_BUCKET_ENTRIES)
41 #define MAX_RSS_QUEUE_BITS      9
42
43 #define PROX_VLAN_TAG_SIZE      4
44
45 /* MBUF_SIZE can be configured based on the following:
46    - If only one segment is used ETH_TXQ_FLAGS_NOMULTSEGS can be used resulting
47      in vector mode used for transmission hence higher performance
48    - Only one segment is used by the rx function if the mbuf size is big enough
49    - Bigger mbufs result in more memory used, hence slighly lower performance (DTLB misses)
50    - Selecting the smaller mbuf is not obvious as pmds might behave slighly differently:
51      - on ixgbe a 1526 + 256 mbuf size will cause any packets bigger than 1024 bytes to be segmented
52      - on i40e a 1526 + 256 mbuf size will cause any packets bigger than 1408 bytes to be segmented
53      - other pmds might have additional requirements
54    As the performance decrease due to the usage of bigger mbuf is not very important, we prefer
55    here to use  the same, bigger, mbuf size for all pmds, making the code easier to support.
56    An mbuf size of 2048 + 128 + 128 + 8 can hold a 2048 packet, and only one segment will be used
57    except if jumbo frames are enabled. +8 (VLAN) is needed for i40e (and maybe other pmds).
58    TX_MBUF_SIZE is used for when transmitting only: in this case the mbuf size can be smaller.
59 */
60 #define MBUF_SIZE (2048 + (unsigned)sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM + 2 * PROX_VLAN_TAG_SIZE)
61 #define TX_MBUF_SIZE (ETHER_MAX_LEN + (unsigned)sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM +  2 * PROX_VLAN_TAG_SIZE)
62
63 #define PROX_MTU   ETHER_MAX_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN
64
65 #endif /* _DEFAULTS_H_ */