Files
android_kernel_samsung_sm86…/kernel-tests/HeaderProcessingContextTestFixture.h
Ilia Lin f1c1fb3a16 ipa: Move kernel-tests from ip_accelerator to techpack.
Move ip_accelerator which is a part of kernel-tests-internal
from kernel to techpack. Updated up to SHA1:
b8790774643dbfea5b312ed422ef86b54e4c8d7f

The kernel-test-module was moved into the driver,
and will be compiled as part of debug build.

Change-Id: I427b9ea061401c74845d2bd0d505da747d5fe89f
Acked-by: Eliad Ben Yishay <ebenyish@qti.qualcomm.com>
Signed-off-by: Amir Levy <alevy@codeaurora.org>
Signed-off-by: Ilia Lin <ilialin@codeaurora.org>
2021-05-04 20:50:23 -07:00

219 rindas
7.0 KiB
C++

Šīs fails satur neredzamus unikoda simbolus
Šis fails satur neredzamus unikoda simbolus, kas ir neatšķirami cilvēkiem, bet dators tās var atstrādāt atšķirīgi. Ja šķiet, ka tas ir ar nolūku, šo brīdinājumu var droši neņemt vērā. Jāizmanto atsoļa taustiņš (Esc), lai atklātu tās.
/*
* Copyright (c) 2017-2019 The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdint.h>
#include <cstring> // for memcpy
#include "hton.h" // for htonl
#include "InterfaceAbstraction.h"
#include "Constants.h"
#include "Logger.h"
#include "TestsUtils.h"
#include "Filtering.h"
#include "HeaderInsertion.h"
#include "RoutingDriverWrapper.h"
#include "IPAFilteringTable.h"
/*
Processing context test design:
1. 1 Producer with RNDIS de-aggregation and ETH2 header removal.
2. 1 Producer with WLAN and ETH2 header removal.
3. 1 default consumer.
4. 1 RNDIS aggregation consumer.
5. 1 FLT rule – accept all - points to 1 RT rule.
6. 1 RT rule – accept all - points to specific test relevant proc_ctx.
7. All tests add all proc_ctx (for all tests).
8. Proc_ctx to be added: 1 for each test – 3 altogether.
Proc_ctx of test 01 and 03 are the same.
9. Each test will send 1 packet and check that the packet is good
except test 03.
10. Test 03 the same as Test 01 but will send multiple packets
and expect 1 (RNDIS aggregation test).
List of tests:
00. Header insertion scenario of [RNDIS][ETH_II][IP] -> [WLAN][ETH_II][IP]
01. Header insertion scenario of [WLAN][ETH_II][IP] -> [RNDIS][ETH_II][IP]
02. Header insertion scenario of [WLAN][ETH_II][IP] -> [WLAN’][ETH_II][IP]
03. Header insertion of [WLAN][ETH_II][IP] -> [RNDIS][ETH_II][IP]
with RNDIS aggregation.
04. Header insertion scenario when adding total header sizes > 2048
05. Header insertion scenario of [ETH_II][IP] -> [WLAN][ETH_II][IP]
06. Header insertion scenario of [WLAN][ETH_II][IP] -> [ETH_II][IP
07. Header insertion scenario of [ETH_II][IP] -> [ETH_II][IP]
08. Header insertion scenario of [RNDIS][ETH_II][IP] -> [WLAN][802.3][IP]
09. Header insertion scenario of [WLAN][802.3][IP] -> [RNDIS][ETH_II][IP]
10. Header insertion scenario of [ETH_II][IP] -> [WLAN][802.3][IP]
11. Header insertion scenario of [WLAN][802.3][IP] -> [WLAN’][802.3][IP]
*/
class IpaHdrProcCtxTestFixture : public TestBase
{
public:
enum HeaderHandleId
{
HEADER_HANDLE_ID_WLAN_ETH2,
HEADER_HANDLE_ID_RNDIS_ETH2,
HEADER_HANDLE_ID_ETH2,
HEADER_HANDLE_ID_WLAN_802_3,
HEADER_HANDLE_ID_VLAN_802_1Q,
HEADER_HANDLE_ID_MAX
};
enum ProcCtxHandleId
{
PROC_CTX_HANDLE_ID_ETH2_2_WLAN_ETH2,
PROC_CTX_HANDLE_ID_ETH2_2_RNDIS_ETH2,
PROC_CTX_HANDLE_ID_ETH2_ETH2_2_ETH2,
PROC_CTX_HANDLE_ID_WLAN_ETH2_2_802_3,
PROC_CTX_HANDLE_ID_RNDIS_802_3_2_ETH2,
PROC_CTX_HANDLE_ID_WLAN_802_3_2_ETH2,
PROC_CTX_HANDLE_ID_802_1Q_2_802_1Q,
PROC_CTX_HANDLE_ID_ETH2_2_802_1Q,
PROC_CTX_HANDLE_ID_802_1Q_2_ETH2,
PROC_CTX_HANDLE_ID_ETH2_ETH2_2_ETH2_EX,
PROC_CTX_HANDLE_ID_MAX
};
// header table consist of 9 bits and 4B units -> 2048
static const int m_ALL_HEADER_SIZE_LIMIT = 2048;
static const size_t m_BUFF_MAX_SIZE =
2 * RNDISAggregationHelper::RNDIS_AGGREGATION_BYTE_LIMIT;
// [WLAN][ETH2] header
static const Byte WLAN_ETH2_HDR[WLAN_ETH2_HDR_SIZE];
// [ETH2] header
static const Byte ETH2_HDR[ETH_HLEN];
// [ETH2_802_1Q] vlan header
static const Byte ETH2_8021Q_HDR[ETH8021Q_HEADER_LEN];
// [WLAN][802.3] header
static const Byte WLAN_802_3_HDR[WLAN_802_3_HDR_SIZE];
static Filtering m_filtering;
static RoutingDriverWrapper m_routing;
static HeaderInsertion m_headerInsertion;
// For each header type the handle is saved
// to be used by the processing context
uint32_t m_headerHandles[HEADER_HANDLE_ID_MAX];
// For each prco_ctx type the handle is saved
// to be used by the routing rule
uint32_t m_procCtxHHandles[PROC_CTX_HANDLE_ID_MAX];
// proc_ctx handle ID
ProcCtxHandleId m_procCtxHandleId;
// routing table handle
uint32_t m_routingTableHdl;
// Pipe with RNDIS and ETH2 header removal
InterfaceAbstraction m_rndisEth2Producer;
// Pipe with WLAN and ETH2 header removal
InterfaceAbstraction m_wlanEth2producer;
// Pipe with ETH2 header removal
InterfaceAbstraction m_eth2Producer;
// TODO: Pipe with WLAN and 802.3 header removal
InterfaceAbstraction m_wlan802_3producer;
// Pointer to current producer pipe used in the test
InterfaceAbstraction *m_pCurrentProducer;
ipa_client_type m_currProducerClient;
// Pipe of the WLAN ETH2 consumer
InterfaceAbstraction m_defaultConsumer;
// Pipe of the RNDIS ETH2 consumer
InterfaceAbstraction m_rndisEth2Consumer;
// Pointer to current consumer pipe used in the test
InterfaceAbstraction *m_pCurrentConsumer;
ipa_client_type m_currConsumerPipeNum;
// First input packet
Byte m_sendBuffer1[m_BUFF_MAX_SIZE];
size_t m_sendSize1;
// Second input packet
Byte m_sendBuffer2[m_BUFF_MAX_SIZE];
size_t m_sendSize2;
// First expected packet
Byte m_expectedBuffer1[m_BUFF_MAX_SIZE];
size_t m_expectedBufferSize1;
enum ipa_ip_type m_IpaIPType;
IpaHdrProcCtxTestFixture();
virtual bool Setup();
virtual bool Teardown();
virtual void AddAllHeaders();
// Insert a single header
virtual void AddHeader(HeaderHandleId handleId);
virtual void AddAllProcCtx();
// Insert a single proc_ctx
virtual void AddProcCtx(ProcCtxHandleId handleId);
virtual void AddRtBypassRule(uint32_t hdrHdl, uint32_t procCtxHdl);
virtual void AddFltBypassRule();
virtual bool LoadPackets(enum ipa_ip_type ip) = 0;
virtual bool ReceivePacketsAndCompare();
// Create 1 IPv4 bypass routing entry and commits it
virtual bool CreateIPv4BypassRoutingTable (
const char *name,
uint32_t hdrHdl,
uint32_t procCtxHdl);
virtual bool GenerateExpectedPackets() = 0;
virtual bool AddRules();
virtual bool SendPackets();
virtual bool Run();
~IpaHdrProcCtxTestFixture();
private:
};