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>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
5faad0ab9e
commit
f1c1fb3a16
264
kernel-tests/ExceptionsTests.cpp
Normal file
264
kernel-tests/ExceptionsTests.cpp
Normal file
@@ -0,0 +1,264 @@
|
||||
/*
|
||||
* Copyright (c) 2017 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 "RoutingDriverWrapper.h"
|
||||
#include "HeaderInsertion.h"
|
||||
#include "Filtering.h"
|
||||
#include "IPAFilteringTable.h"
|
||||
#include "TestsUtils.h"
|
||||
#include "ExceptionsTestFixture.h"
|
||||
#include "IPv4Packet.h"
|
||||
#include <string.h>
|
||||
|
||||
#define MAX_SENT_BUFFER_SIZE 1500
|
||||
#define MAX_RECEIVE_BUFFER_SIZE 1500
|
||||
#define VALIDATE_WITH_MSG_AND_RETVAL(bRetVal,msg) \
|
||||
if (false == bRetVal){ \
|
||||
LOG_MSG_ERROR(msg); \
|
||||
return false; \
|
||||
}
|
||||
|
||||
using namespace IPA;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class ExceptionsTestNonIpPacket: public ExceptionsTestFixture {
|
||||
public:
|
||||
//The packet size to be sent
|
||||
size_t m_nPacketSize;
|
||||
//A buffer to hold the non-IP(V4/V6) packet
|
||||
Byte *m_pSendBuffer;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//Set the tests name and description
|
||||
ExceptionsTestNonIpPacket() :
|
||||
m_nPacketSize(0), m_pSendBuffer(NULL) {
|
||||
m_name = "ExceptionsTestNonIpPacket";
|
||||
m_description =
|
||||
"Create a non-IP packet(version!=4 && version !=6) and \
|
||||
expect exception from Filter block";
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
virtual bool Run() {
|
||||
bool bRetVal = true;
|
||||
Byte *pReceiveBuffer = new Byte[MAX_RECEIVE_BUFFER_SIZE];
|
||||
//Send the non-IPV4/IPV6 packet to the IPA
|
||||
LOG_MSG_DEBUG("Send the non-IPV4/IPV6 packet to the IPA");
|
||||
size_t nBytesSent = m_USB1ToIpaPipe.Send(m_pSendBuffer, m_nPacketSize);
|
||||
if (nBytesSent != m_nPacketSize) {
|
||||
LOG_MSG_ERROR("Not all data was sent into the IPA");
|
||||
return false;
|
||||
}
|
||||
|
||||
//Read from the exception pipe(from IPA to A5) - try to read as much as we can
|
||||
size_t nBytesRead = m_IpaToA5ExceptionPipe.Receive(pReceiveBuffer,
|
||||
MAX_RECEIVE_BUFFER_SIZE);
|
||||
if (nBytesRead != nBytesSent) {
|
||||
LOG_MSG_ERROR("Not all data was read:");
|
||||
print_buff(pReceiveBuffer, nBytesRead);
|
||||
return false;
|
||||
}
|
||||
|
||||
//check the exception packet against the one that we sent
|
||||
bRetVal = !memcmp(m_pSendBuffer, pReceiveBuffer, nBytesSent);
|
||||
if (false == bRetVal) {
|
||||
LOG_MSG_ERROR("Received packet is not equal, Received:");
|
||||
print_buff(pReceiveBuffer, nBytesRead);
|
||||
LOG_MSG_ERROR("Received packet is not equal, Sent:");
|
||||
print_buff(m_pSendBuffer, m_nPacketSize);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//build the non-IP packet
|
||||
virtual bool Setup() {
|
||||
bool bRetVal = true;
|
||||
m_pSendBuffer = new Byte[MAX_SENT_BUFFER_SIZE];
|
||||
//Load some default IPV4 packet and save its size
|
||||
m_nPacketSize = MAX_SENT_BUFFER_SIZE; //This parameter is In/Out
|
||||
bRetVal = LoadDefaultPacket(IPA_IP_v4, m_pSendBuffer, m_nPacketSize);
|
||||
VALIDATE_WITH_MSG_AND_RETVAL(bRetVal, "Load failed");
|
||||
//Set the version field to non-IPV4/IPV6(version = 5)
|
||||
m_pSendBuffer[0] &= 0x0F;
|
||||
m_pSendBuffer[0] |= 0x50;
|
||||
|
||||
//initialize Pipes
|
||||
bRetVal = m_USB1ToIpaPipe.Init();
|
||||
VALIDATE_WITH_MSG_AND_RETVAL(bRetVal, "Pipe Initialization failed");
|
||||
bRetVal = m_IpaToA5ExceptionPipe.Init();
|
||||
VALIDATE_WITH_MSG_AND_RETVAL(bRetVal, "Pipe Initialization failed");
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
virtual bool Teardown() {
|
||||
bool bRetVal = true;
|
||||
delete[] m_pSendBuffer;
|
||||
m_USB1ToIpaPipe.Destroy();
|
||||
m_IpaToA5ExceptionPipe.Destroy();
|
||||
return bRetVal;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
};
|
||||
//ExceptionTestNoneIpPacket
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class ExceptionsTestFragmentedException: public ExceptionsTestFixture {
|
||||
public:
|
||||
//The packet size to be sent
|
||||
size_t m_nPacketSize;
|
||||
//A buffer to hold the non-IP(V4/V6) packet
|
||||
Byte *m_pSendBuffer;
|
||||
Byte *m_pReceiveBuffer;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//Set the tests name and description
|
||||
ExceptionsTestFragmentedException():m_nPacketSize(0), m_pSendBuffer(NULL),
|
||||
m_pReceiveBuffer(NULL){
|
||||
m_name = "ExceptionsTestFragmentedException";
|
||||
m_description =
|
||||
"Send IP packet with MF set, create global Filter rule \
|
||||
that will hit it as Exception";
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
virtual bool Run() {
|
||||
bool bRetVal = true;
|
||||
//configuring the Filter block to catch the fragmented packet:
|
||||
ConfigureFilterGlobalRuleForMF();
|
||||
//Send the non-IPV4/IPV6 packet to the IPA
|
||||
LOG_MSG_DEBUG("Send the IP packet with the MF bit set(size = %d)", m_nPacketSize);
|
||||
size_t nBytesSent = m_USB1ToIpaPipe.Send(m_pSendBuffer, m_nPacketSize);
|
||||
if (nBytesSent != m_nPacketSize) {
|
||||
LOG_MSG_ERROR("Not all data was sent into the IPA(only %d)", nBytesSent);
|
||||
return false;
|
||||
}
|
||||
//Read from the exception pipe(from IPA to A5) - try to read as much as we can
|
||||
size_t nBytesRead = m_IpaToA5ExceptionPipe.Receive(m_pReceiveBuffer,
|
||||
MAX_RECEIVE_BUFFER_SIZE);
|
||||
if (nBytesRead != nBytesSent) {
|
||||
LOG_MSG_ERROR("Not all data was read:");
|
||||
print_buff(m_pReceiveBuffer, nBytesRead);
|
||||
return false;
|
||||
}
|
||||
//check the exception packet against the one that we sent
|
||||
bRetVal = !memcmp(m_pSendBuffer, m_pReceiveBuffer, nBytesSent);
|
||||
if (false == bRetVal) {
|
||||
LOG_MSG_ERROR("Received packet is not equal, Received:");
|
||||
print_buff(m_pReceiveBuffer, nBytesRead);
|
||||
LOG_MSG_ERROR("Received packet is not equal, Sent:");
|
||||
print_buff(m_pSendBuffer, m_nPacketSize);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//build the non-IP packet
|
||||
virtual bool Setup() {
|
||||
bool bRetVal = true;
|
||||
m_pReceiveBuffer = new Byte[MAX_RECEIVE_BUFFER_SIZE];
|
||||
m_pSendBuffer = new Byte[MAX_RECEIVE_BUFFER_SIZE];
|
||||
//Load some default TCP packet
|
||||
TCPPacket tcpPacket;
|
||||
//Set the MF bit
|
||||
tcpPacket.SetMF(true);
|
||||
//copy the packet to the send buffer
|
||||
m_nPacketSize = tcpPacket.GetSize();
|
||||
tcpPacket.ToNetworkByteStream(m_pSendBuffer);
|
||||
//initialize Pipes
|
||||
bRetVal = m_USB1ToIpaPipe.Init();
|
||||
VALIDATE_WITH_MSG_AND_RETVAL(bRetVal, "Pipe Initialization failed");
|
||||
bRetVal = m_IpaToA5ExceptionPipe.Init();
|
||||
VALIDATE_WITH_MSG_AND_RETVAL(bRetVal, "Pipe Initialization failed");
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
virtual bool Teardown() {
|
||||
bool bRetVal = true;
|
||||
delete[] m_pSendBuffer;
|
||||
m_USB1ToIpaPipe.Destroy();
|
||||
m_IpaToA5ExceptionPipe.Destroy();
|
||||
return bRetVal;
|
||||
}
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void ConfigureFilterGlobalRuleForMF(){
|
||||
//struct ipa_ioc_add_flt_rule *pRuleTable;
|
||||
//Allocate memory for a table with one rule.
|
||||
|
||||
//Instruct the Driver to write this table(with its one rule) to the HW
|
||||
|
||||
//Continue from here - build the rule to catch the fragmented packet
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
};
|
||||
//ExceptionsTestFragmentedException
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class ExceptionsTestNonTCPUDP: public ExceptionsTestFixture {
|
||||
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//Classes instances:
|
||||
static ExceptionsTestNonIpPacket exceptionsTestNonIpPacket;
|
||||
static ExceptionsTestFragmentedException exceptionsTestFragmentedException;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
////////////// EOF ////////
|
||||
///////////////////////////////////////////////////////////////////////////////
|
Reference in New Issue
Block a user