/*
*
* Copyright (c) 2018 Huawei Technologies Co.,Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#ifndef __STACKX_OPT_H__
#define __STACKX_OPT_H__

#include "stackxopts.h"
#include "stackx_debug.h"
#include "compiling_check.h"

#define PBUF_VLAN_HLEN	0

//#define SIZEOF_ETH_HDR (14)

#ifndef STACKX_NETIF_API
#define STACKX_NETIF_API 1
#endif

/*
   ------------------------------------
   ---------- Thread options ----------
   ------------------------------------
 */

#define PTIMER_THREAD_NAME "ptimer_thread"

/**
 * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread.
 */
#ifndef TCPIP_THREAD_NAME
#define TCPIP_THREAD_NAME "spl_tcpip_thread"
#endif

#ifndef TCPIP_THREAD_STACKSIZE
#define TCPIP_THREAD_STACKSIZE 0
#endif

#ifndef INT_MAX
#define INT_MAX			2147483647
#endif

#ifndef INT_64_MAX
#define INT_64_MAX			9223372036854775807
#endif

#ifndef RECV_BUFSIZE_DEFAULT
#define RECV_BUFSIZE_DEFAULT INT_MAX
#endif

/*
   ----------------------------------------
   ---------- Statistics options ----------
   ----------------------------------------
 */

/*
   ---------------------------------------
   ---------- Debugging options ----------
   ---------------------------------------
 */

#ifndef STACKX_DBG_TYPES_ON
#define STACKX_DBG_TYPES_ON STACKX_DBG_ON       //ON
#endif

#ifndef INTERRUPT_DEBUG
#define INTERRUPT_DEBUG STACKX_DBG_ON   //ON
#endif

#ifndef TESTSOCKET_DEBUG
#define TESTSOCKET_DEBUG STACKX_DBG_ON  //ON
#endif

#ifndef ETHARP_DEBUG
#define ETHARP_DEBUG STACKX_DBG_ON
#endif

#ifndef NETIF_DEBUG
#define NETIF_DEBUG STACKX_DBG_ON
#endif

#ifndef PBUF_DEBUG
#define PBUF_DEBUG STACKX_DBG_ON
#endif

#ifndef API_LIB_DEBUG
#define API_LIB_DEBUG STACKX_DBG_ON
#endif

#ifndef API_MSG_DEBUG
#define API_MSG_DEBUG STACKX_DBG_ON
#endif

#ifndef SOCKETS_DEBUG
#define SOCKETS_DEBUG STACKX_DBG_ON
#endif

#ifndef NS_EPOLL_DBG
#define NS_EPOLL_DBG STACKX_DBG_ON
#endif

#ifndef ICMP_DEBUG
#define ICMP_DEBUG STACKX_DBG_ON
#endif

#ifndef IGMP_DEBUG
#define IGMP_DEBUG STACKX_DBG_ON
#endif

#ifndef INET_DEBUG
#define INET_DEBUG STACKX_DBG_ON
#endif

#ifndef IP_DEBUG
#define IP_DEBUG STACKX_DBG_ON
#endif

#ifndef IP_REASS_DEBUG
#define IP_REASS_DEBUG STACKX_DBG_ON
#endif

#ifndef RAW_DEBUG
#define RAW_DEBUG STACKX_DBG_ON
#endif

#ifndef MEMP_DEBUG
#define MEMP_DEBUG STACKX_DBG_ON
#endif

#ifndef SYS_DEBUG
#define SYS_DEBUG STACKX_DBG_OFF
#endif

#ifndef TIMERS_DEBUG
#define TIMERS_DEBUG STACKX_DBG_ON
#endif

#ifndef TCP_DEBUG
#define TCP_DEBUG STACKX_DBG_ON
#endif

#ifndef TCP_TEST_DEBUG
#define TCP_TEST_DEBUG STACKX_DBG_ON
#endif

#ifndef TCP_INPUT_DEBUG
#define TCP_INPUT_DEBUG STACKX_DBG_ON
#endif

#ifndef TCP_RTO_DEBUG
#define TCP_RTO_DEBUG STACKX_DBG_ON
#endif

#ifndef TCP_FR_DEBUG
#define TCP_FR_DEBUG STACKX_DBG_ON
#endif

#ifndef TCP_FLOW_CTL_DEBUG
#define TCP_FLOW_CTL_DEBUG STACKX_DBG_ON
#endif

#ifndef TCP_CWND_DEBUG
#define TCP_CWND_DEBUG STACKX_DBG_ON
#endif

#ifndef TCP_WND_DEBUG
#define TCP_WND_DEBUG STACKX_DBG_ON
#endif

#ifndef TCP_OUTPUT_DEBUG
#define TCP_OUTPUT_DEBUG STACKX_DBG_ON
#endif

#ifndef TCP_RST_DEBUG
#define TCP_RST_DEBUG STACKX_DBG_ON
#endif

#ifndef UDP_DEBUG
#define UDP_DEBUG STACKX_DBG_ON
#endif

#ifndef TCPIP_DEBUG
#define TCPIP_DEBUG STACKX_DBG_ON
#endif

#ifndef NEW_RING_DEBUG
#define NEW_RING_DEBUG STACKX_DBG_ON
#endif

#ifndef PACKET_DISPATCH
#define PACKET_DISPATCH 1
#endif

#ifndef NETSTAT_SWITCH
#define NETSTAT_SWITCH 1
#endif

#ifndef DISTRIBUTOR_DEBUG

#define DISTRIBUTOR_DEBUG STACKX_DBG_ON
#endif
#define PBUF_REF_DEBUG STACKX_DBG_ON

#ifndef CONTEXT_TIMER_DEBUG
#define CONTEXT_TIMER_DEBUG STACKX_DBG_OFF
#endif

#if (DISTRIBUTOR_DEBUG == STACKX_DBG_ON)
#define PD_DISTRIBUTOR_DEBUG

#define DISTRIBUTOR_SINGLE
#ifdef DISTRIBUTOR_SINGLE

#ifndef __STACKX_DEBUG_H__
#define STACKX_DBG_OFF  0x80U
#define STACKX_DBG_ON  0x00U
#endif

#ifndef ETHARP_DEBUG
#define ETHARP_DEBUG STACKX_DBG_ON
#endif
#ifndef NETIF_DEBUG
#define NETIF_DEBUG STACKX_DBG_ON
#endif
#ifndef PBUF_DEBUG
#define PBUF_DEBUG STACKX_DBG_ON
#endif
#ifndef API_LIB_DEBUG
#define API_LIB_DEBUG STACKX_DBG_ON
#endif
#ifndef API_MSG_DEBUG
#define API_MSG_DEBUG STACKX_DBG_ON
#endif
#ifndef ICMP_DEBUG
#define ICMP_DEBUG STACKX_DBG_ON
#endif
#ifndef IGMP_DEBUG
#define IGMP_DEBUG STACKX_DBG_ON
#endif
#ifndef INET_DEBUG
#define INET_DEBUG STACKX_DBG_ON
#endif
#ifndef IP_DEBUG
#define IP_DEBUG STACKX_DBG_ON
#endif
#ifndef IP_REASS_DEBUG
#define IP_REASS_DEBUG STACKX_DBG_ON
#endif
#ifndef RAW_DEBUG
#define RAW_DEBUG STACKX_DBG_ON
#endif
#ifndef MEMP_DEBUG
#define MEMP_DEBUG STACKX_DBG_ON
#endif
#ifndef SYS_DEBUG
#define SYS_DEBUG STACKX_DBG_ON
#endif
#ifndef TIMERS_DEBUG
#define TIMERS_DEBUG STACKX_DBG_ON
#endif
#ifndef TCP_DEBUG
#define TCP_DEBUG STACKX_DBG_ON
#endif
#ifndef TCP_TEST_DEBUG
#define TCP_TEST_DEBUG STACKX_DBG_ON
#endif
#ifndef TCP_INPUT_DEBUG
#define TCP_INPUT_DEBUG STACKX_DBG_ON
#endif
#ifndef TCP_FR_DEBUG
#define TCP_FR_DEBUG STACKX_DBG_ON
#endif
#ifndef TCP_RTO_DEBUG
#define TCP_RTO_DEBUG STACKX_DBG_ON
#endif
#ifndef TCP_CWND_DEBUG
#define TCP_CWND_DEBUG STACKX_DBG_ON
#endif
#ifndef TCP_WND_DEBUG
#define TCP_WND_DEBUG STACKX_DBG_ON
#endif
#ifndef TCP_OUTPUT_DEBUG
#define TCP_OUTPUT_DEBUG STACKX_DBG_ON
#endif
#ifndef TCP_RST_DEBUG
#define TCP_RST_DEBUG STACKX_DBG_ON
#endif
#ifndef UDP_DEBUG
#define UDP_DEBUG STACKX_DBG_ON
#endif
#ifndef TCPIP_DEBUG
#define TCPIP_DEBUG STACKX_DBG_ON
#endif

#define SC_DPDK_INFO STACKX_DBG_ON
#define SOCK_INFO    STACKX_DBG_ON
#ifndef STACKX_DBG_OFF
#define STACKX_DBG_OFF  0x00U
#endif

#ifndef NS_EPOLL_DBG
#define NS_EPOLL_DBG STACKX_DBG_ON
#endif

#ifndef DFX_DBG
#define DFX_DBG STACKX_DBG_ON
#endif

#endif
#endif /* DISTRIBUTOR_DEBUG */

#ifndef STACKX_FLOW_CTL
#define STACKX_FLOW_CTL 0
#endif

#endif /* __STACKX_OPT_H__ */