1/*
2 * Copyright (C) 2021 Huawei Device Co., Ltd.
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#ifndef NSTACKX_CONGESTION_H
17#define NSTACKX_CONGESTION_H
18
19#include "nstackx_common_header.h"
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25#define MIN_MTU 64
26#define MAX_MTU 65536
27#define BITINBYTE 8
28
29#define MAX_WIFI_NEGO_RATE 2500
30
31typedef struct _WifiRateInfo {
32    uint32_t rateBitrate;
33    uint32_t rateWidth;
34} WifiRateInfo;
35
36typedef struct _WifiStationInfo {
37    uint32_t txRate;
38    uint32_t rxRate;
39    int32_t signal;
40    uint32_t freq;
41} WifiStationInfo;
42
43/* DFX */
44typedef struct _RamInfo {
45    uint32_t availableRam;
46    uint32_t totalRam;
47} RamInfo;
48
49typedef enum {
50    ROOT_QUEUE = -1,        /* ROOT queueu */
51    HI_QUEUE = 1,           /* QDISC queue 1 WLAN_HI_QUEUE = 0 */
52    NORMAL_QUEUE,           /* QDISC queue 2 WLAN_NORMAL_QUEUE */
53    TCP_DATA_QUEUE,         /* QDISC queue 3 WLAN_TCP_DATA_QUEUE */
54    TCP_ACK_QUEUE,          /* QDISC queue 4 WLAN_TCP_ACK_QUEUE */
55    UDP_BK_QUEUE,           /* QDISC queue 5 WLAN_UDP_BK_QUEUE */
56    UDP_BE_QUEUE,           /* QDISC queue 6 WLAN_UDP_BE_QUEUE */
57    UDP_VI_QUEUE,           /* QDISC queue 7 WLAN_UDP_VI_QUEUE */
58    UDP_VO_QUEUE,           /* QDISC queue 8 WLAN_UDP_VO_QUEUE */
59    MAX_QUEUE,
60} QDISC_PROTOCOL_TYPE;
61
62NSTACKX_EXPORT WifiStationInfo GetGTxWifiStationInfo(uint8_t socketIndex);
63NSTACKX_EXPORT int32_t CheckWlanNegoRateValid(uint32_t rate);
64
65/* for JNI */
66typedef int32_t (*GetWifiInfoHook)(const char *devName, WifiStationInfo *wifiStationInfo);
67NSTACKX_EXPORT int32_t CongestionInitGetWifiHook(GetWifiInfoHook getWifiInfoFromCb);
68
69/* for qdisc */
70NSTACKX_EXPORT int32_t GetQdiscLen(const char *devName, int32_t protocol, uint32_t *len);
71
72/* for wifi */
73NSTACKX_EXPORT int32_t GetServerWifiStationInfo(const char *devName, WifiStationInfo *wifiStationInfo);
74NSTACKX_EXPORT int32_t UpdateWifiStationInfo(const char *devName, WifiStationInfo *txWifiStationInfo,
75    uint8_t socketIndex, int *changeStatus);
76NSTACKX_EXPORT int32_t GetConngestSendRate(WifiStationInfo *rxWifiStationInfo, uint16_t connType, uint32_t mtu,
77    uint8_t socketIndex, uint16_t *sendRateResult);
78NSTACKX_EXPORT int32_t GetWifiInfoDMsg(const char *devName, WifiStationInfo *wifiStationInfo);
79NSTACKX_EXPORT int32_t GetConngestSendRateDMsg(const char *devName, uint32_t speedTX, uint32_t speedRX,
80    uint32_t *sendRateResult, uint32_t mtu);
81
82/* init and clean */
83NSTACKX_EXPORT int32_t CongModuleInit(void);
84NSTACKX_EXPORT void CongModuleClean(void);
85
86#ifdef __cplusplus
87}
88#endif
89
90#endif
91