mirror of
https://gitlab.eurecom.fr/oai/openairinterface5g.git
synced 2026-07-13 04:30:28 +00:00
- all RAN code, CI code, configuration files, dockerfiles, in CSSL v1.0
- all deployment code (openshift, charts, ancillary files like shell
scripts), in MIT
- documentation in CC-BY-4.0
- exceptions might apply and are listed in NOTICE
- there is a new LICENSES folder with all licenses
- CONTRIBUTIONS.md has been updated accordingly
For automated changes based on OAI PL v1.1:
perl -i~ -0pe 's/\/\*.*Licensed to the OpenAirInterface.*openairinterface.org\n#?/\/*\n * SPDX-License-Identifier: LicenseRef-CSSL-1.0\n/s' **/*.{c,h,cpp}
perl -i~ -0pe 's/\/\*.*Licensed to the OpenAirInterface.*openairinterface.org\n#?/\/*\n * SPDX-License-Identifier: LicenseRef-CSSL-1.0\n/s' **/*.ts
perl -i~ -0pe 's/<!--.*Licensed to the OpenAirInterface.*openairinterface.org\n.*-->/<!-- SPDX-License-Identifier: LicenseRef-CSSL-1.0 -->/s' **/*.xml
The rest (cmake, files with missing license, cmake) manually.
78 lines
2.6 KiB
C
78 lines
2.6 KiB
C
/*
|
|
* SPDX-License-Identifier: LicenseRef-CSSL-1.0
|
|
*/
|
|
|
|
#ifndef OPENAIRINTERFACE_DCI_PAYLOAD_UTILS_H
|
|
#define OPENAIRINTERFACE_DCI_PAYLOAD_UTILS_H
|
|
#include "nfapi/tests/nr_fapi_test.h"
|
|
|
|
void printbits(const uint64_t n, const uint8_t numBytesToPrint)
|
|
{
|
|
uint64_t i;
|
|
uint8_t counter = 0;
|
|
if (numBytesToPrint == 0) {
|
|
i = 1UL << (sizeof(n) * 8 - 1);
|
|
} else {
|
|
i = 1UL << (numBytesToPrint * 8 - 1);
|
|
}
|
|
while (i > 0) {
|
|
if (n & i)
|
|
printf("1");
|
|
else
|
|
printf("0");
|
|
i >>= 1;
|
|
counter++;
|
|
if (counter % 8 == 0) {
|
|
printf(" ");
|
|
}
|
|
}
|
|
}
|
|
|
|
/*! \brief Drops unwanted bits from a byte array, leaving only a specified number of payload bits
|
|
*
|
|
* \param payloadSizeBits How many bits the payload is to have, from 1 to 64 (8 * DCI_PAYLOAD_BYTE_LEN)
|
|
* \param payload[] A uint8_t array containing the payload bytes with random data
|
|
* \details This function creates a bitmask of payloadSizeBits width to truncate the data in payload[] to only have the specified
|
|
* number of payload bits\n
|
|
* For example, a payload of 39 bits needs 5 bytes, but on the last byte, the last bit is unused, this function makes sure that
|
|
* last bit is set to 0, allowing the payload to be then packed and unpacked and successfully compared with the original payload
|
|
*/
|
|
void truncate_unwanted_bits(uint8_t payloadSizeBits, uint8_t payload[])
|
|
{
|
|
uint8_t payloadSizeBytes = (payloadSizeBits + 7) / 8;
|
|
printf("Original Value:\t");
|
|
uint64_t t = 0;
|
|
memcpy(&t, payload, payloadSizeBytes);
|
|
printbits(t, payloadSizeBytes);
|
|
printf("\n");
|
|
uint64_t bitmask = 1;
|
|
for (int i = 0; i < payloadSizeBits - 1; i++) {
|
|
bitmask = bitmask << 1 | 1;
|
|
}
|
|
printf("Calculated Bitmask:\t");
|
|
printbits(bitmask, payloadSizeBytes);
|
|
printf("\n");
|
|
t = t & bitmask;
|
|
printf("Truncated Value:\t");
|
|
printbits(t, payloadSizeBytes);
|
|
printf("\n");
|
|
memcpy(payload, &t, payloadSizeBytes);
|
|
}
|
|
|
|
/*! \brief Generates a random payload payloadSizeBits long into payload[]
|
|
*
|
|
* \param payloadSizeBits How many bits the payload is to have, from 1 to 64 (8 * DCI_PAYLOAD_BYTE_LEN)
|
|
* \param payload[] A uint8_t array to contain the generated payload
|
|
* \details This function fills a uint8_t array with payloadSizeBits of random data, by first filling however many bytes are needed
|
|
* to contain payloadSizeBits with random data, and then truncating the excess bits
|
|
*/
|
|
void generate_payload(uint8_t payloadSizeBits, uint8_t payload[])
|
|
{
|
|
for (int i = 0; i < (payloadSizeBits + 7) / 8; ++i) {
|
|
payload[i] = rand8();
|
|
}
|
|
truncate_unwanted_bits(payloadSizeBits, payload);
|
|
}
|
|
|
|
#endif // OPENAIRINTERFACE_DCI_PAYLOAD_UTILS_H
|