Osmocom CRC routines

## Files

file | crc16.h
file | crcgen.h
file | crc16.c

## Data Structures

struct | osmo_crc16gen_code
| structure describing a given CRC code of max 16 bits More...
struct | osmo_crc32gen_code
| structure describing a given CRC code of max 32 bits More...
struct | osmo_crc64gen_code
| structure describing a given CRC code of max 64 bits More...
struct | osmo_crc8gen_code
| structure describing a given CRC code of max 8 bits More...

## Functions

uint16_t | osmo_crc16 (uint16_t crc, uint8_t const *buffer, size_t len)
| Compute 16bit CCITT polynome 0x8408 (x^0 + x^5 + x^12) over given buffer. More...
static uint16_t | osmo_crc16_byte (uint16_t crc, const uint8_t data)
| CRC-16 polynome 0x8005 (x^16 + x^15 + x^2 + 1) More...
uint16_t | osmo_crc16_ccitt (uint16_t crc, uint8_t const *buffer, size_t len)
| Compute 16bit CCITT polynome 0x8408 (x^0 + x^5 + x^12) over given buffer. More...
static uint16_t | osmo_crc16_ccitt_byte (uint16_t crc, const uint8_t data)
| CCITT polynome 0x8408 (x^0 + x^5 + x^12) More...
uint16_t | osmo_crc16gen_compute_bits (const struct osmo_crc16gen_code *code, const ubit_t *in, int len)
| Compute the CRC value of a given array of hard-bits. More...
int | osmo_crc16gen_check_bits (const struct osmo_crc16gen_code *code, const ubit_t *in, int len, const ubit_t *crc_bits)
| Checks the CRC value of a given array of hard-bits. More...
void | osmo_crc16gen_set_bits (const struct osmo_crc16gen_code *code, const ubit_t *in, int len, ubit_t *crc_bits)
| Computes and writes the CRC value of a given array of bits. More...
uint32_t | osmo_crc32gen_compute_bits (const struct osmo_crc32gen_code *code, const ubit_t *in, int len)
| Compute the CRC value of a given array of hard-bits. More...
int | osmo_crc32gen_check_bits (const struct osmo_crc32gen_code *code, const ubit_t *in, int len, const ubit_t *crc_bits)
| Checks the CRC value of a given array of hard-bits. More...
void | osmo_crc32gen_set_bits (const struct osmo_crc32gen_code *code, const ubit_t *in, int len, ubit_t *crc_bits)
| Computes and writes the CRC value of a given array of bits. More...
uint64_t | osmo_crc64gen_compute_bits (const struct osmo_crc64gen_code *code, const ubit_t *in, int len)
| Compute the CRC value of a given array of hard-bits. More...
int | osmo_crc64gen_check_bits (const struct osmo_crc64gen_code *code, const ubit_t *in, int len, const ubit_t *crc_bits)
| Checks the CRC value of a given array of hard-bits. More...
void | osmo_crc64gen_set_bits (const struct osmo_crc64gen_code *code, const ubit_t *in, int len, ubit_t *crc_bits)
| Computes and writes the CRC value of a given array of bits. More...
uint8_t | osmo_crc8gen_compute_bits (const struct osmo_crc8gen_code *code, const ubit_t *in, int len)
| Compute the CRC value of a given array of hard-bits. More...
int | osmo_crc8gen_check_bits (const struct osmo_crc8gen_code *code, const ubit_t *in, int len, const ubit_t *crc_bits)
| Checks the CRC value of a given array of hard-bits. More...
void | osmo_crc8gen_set_bits (const struct osmo_crc8gen_code *code, const ubit_t *in, int len, ubit_t *crc_bits)
| Computes and writes the CRC value of a given array of bits. More...

## Variables

const uint16_t | osmo_crc16_table [256]
| CRC table for the CRC-16. More...
const uint16_t | osmo_crc16_ccitt_table [256]
| CRC table for the CCITT CRC-6. More...
const uint16_t | osmo_crc16_table [256]
| CRC table for the CRC-16. More...
const uint16_t | osmo_crc16_ccitt_table [256]
| CRC table for the CCITT CRC-6. More...

## Detailed Description

Osmocom generic CRC routines (for max 16 bits poly).

Osmocom generic CRC routines (for max 32 bits poly).

Osmocom generic CRC routines (for max 64 bits poly).

Osmocom generic CRC routines (for max 8 bits poly).

## Function Documentation

## osmo_crc16()

uint16_t osmo_crc16 | ( | uint16_t | crc,
|  | uint8_t const * | buffer,
|  | size_t | len
| ) |  |

Compute 16bit CCITT polynome 0x8408 (x^0 + x^5 + x^12) over given buffer.

Parameters

  crc[in] | previous CRC value
  buffer[in] | data pointer
  len[in] | number of bytes in input buffer

Returns
  updated CRC value

References osmo_crc16_byte().

## osmo_crc16_byte()

static uint16_t osmo_crc16_byte | ( | uint16_t | crc,
|  | const uint8_t | data
| ) |  |

inline static

CRC-16 polynome 0x8005 (x^16 + x^15 + x^2 + 1)

References osmo_crc16_table.

Referenced by osmo_crc16().

## osmo_crc16_ccitt()

uint16_t osmo_crc16_ccitt | ( | uint16_t | crc,
|  | uint8_t const * | buffer,
|  | size_t | len
| ) |  |

Compute 16bit CCITT polynome 0x8408 (x^0 + x^5 + x^12) over given buffer.

Parameters

  [in] | crc | initial value of CRC
  [in] | buffer | pointer to buffer of input data
  [in] | len | length of buffer in bytes

Returns
  16bit CRC

References osmo_crc16_ccitt_byte().

## osmo_crc16_ccitt_byte()

static uint16_t osmo_crc16_ccitt_byte | ( | uint16_t | crc,
|  | const uint8_t | data
| ) |  |

inline static

CCITT polynome 0x8408 (x^0 + x^5 + x^12)

References osmo_crc16_ccitt_table.

Referenced by osmo_crc16_ccitt().

## osmo_crc16gen_check_bits()

int osmo_crc16gen_check_bits | ( | const struct osmo_crc16gen_code * | code,
|  | const ubit_t * | in,
|  | int | len,
|  | const ubit_t * | crc_bits
| ) |  |

Checks the CRC value of a given array of hard-bits.

Parameters

  [in] | code | The CRC code description to apply
  [in] | in | Array of hard bits
  [in] | len | Length of the array of hard bits
  [in] | crc_bits | Array of hard bits with the alleged CRC

Returns
  0 if CRC matches. 1 in case of error.

The crc_bits array must have a length of code->len

References osmo_crc16gen_code::bits, and osmo_crc16gen_compute_bits().

## osmo_crc16gen_compute_bits()

uint16_t osmo_crc16gen_compute_bits | ( | const struct osmo_crc16gen_code * | code,
|  | const ubit_t * | in,
|  | int | len
| ) |  |

Compute the CRC value of a given array of hard-bits.

Parameters

  [in] | code | The CRC code description to apply
  [in] | in | Array of hard bits
  [in] | len | Length of the array of hard bits

Returns
  The CRC value

References osmo_crc16gen_code::bits, osmo_crc16gen_code::init, osmo_crc16gen_code::poly, and osmo_crc16gen_code::remainder.

Referenced by osmo_crc16gen_check_bits(), and osmo_crc16gen_set_bits().

## osmo_crc16gen_set_bits()

void osmo_crc16gen_set_bits | ( | const struct osmo_crc16gen_code * | code,
|  | const ubit_t * | in,
|  | int | len,
|  | ubit_t * | crc_bits
| ) |  |

Computes and writes the CRC value of a given array of bits.

Parameters

  [in] | code | The CRC code description to apply
  [in] | in | Array of hard bits
  [in] | len | Length of the array of hard bits
  [in] | crc_bits | Array of hard bits to write the computed CRC to

The crc_bits array must have a length of code->len

References osmo_crc16gen_code::bits, and osmo_crc16gen_compute_bits().

## osmo_crc32gen_check_bits()

int osmo_crc32gen_check_bits | ( | const struct osmo_crc32gen_code * | code,
|  | const ubit_t * | in,
|  | int | len,
|  | const ubit_t * | crc_bits
| ) |  |

Checks the CRC value of a given array of hard-bits.

Parameters

  [in] | code | The CRC code description to apply
  [in] | in | Array of hard bits
  [in] | len | Length of the array of hard bits
  [in] | crc_bits | Array of hard bits with the alleged CRC

Returns
  0 if CRC matches. 1 in case of error.

The crc_bits array must have a length of code->len

References osmo_crc32gen_code::bits, and osmo_crc32gen_compute_bits().

## osmo_crc32gen_compute_bits()

uint32_t osmo_crc32gen_compute_bits | ( | const struct osmo_crc32gen_code * | code,
|  | const ubit_t * | in,
|  | int | len
| ) |  |

Compute the CRC value of a given array of hard-bits.

Parameters

  [in] | code | The CRC code description to apply
  [in] | in | Array of hard bits
  [in] | len | Length of the array of hard bits

Returns
  The CRC value

References osmo_crc32gen_code::bits, osmo_crc32gen_code::init, osmo_crc32gen_code::poly, and osmo_crc32gen_code::remainder.

Referenced by osmo_crc32gen_check_bits(), and osmo_crc32gen_set_bits().

## osmo_crc32gen_set_bits()

void osmo_crc32gen_set_bits | ( | const struct osmo_crc32gen_code * | code,
|  | const ubit_t * | in,
|  | int | len,
|  | ubit_t * | crc_bits
| ) |  |

Computes and writes the CRC value of a given array of bits.

Parameters

  [in] | code | The CRC code description to apply
  [in] | in | Array of hard bits
  [in] | len | Length of the array of hard bits
  [in] | crc_bits | Array of hard bits to write the computed CRC to

The crc_bits array must have a length of code->len

References osmo_crc32gen_code::bits, and osmo_crc32gen_compute_bits().

## osmo_crc64gen_check_bits()

int osmo_crc64gen_check_bits | ( | const struct osmo_crc64gen_code * | code,
|  | const ubit_t * | in,
|  | int | len,
|  | const ubit_t * | crc_bits
| ) |  |

Checks the CRC value of a given array of hard-bits.

Parameters

  [in] | code | The CRC code description to apply
  [in] | in | Array of hard bits
  [in] | len | Length of the array of hard bits
  [in] | crc_bits | Array of hard bits with the alleged CRC

Returns
  0 if CRC matches. 1 in case of error.

The crc_bits array must have a length of code->len

References osmo_crc64gen_code::bits, and osmo_crc64gen_compute_bits().

## osmo_crc64gen_compute_bits()

uint64_t osmo_crc64gen_compute_bits | ( | const struct osmo_crc64gen_code * | code,
|  | const ubit_t * | in,
|  | int | len
| ) |  |

Compute the CRC value of a given array of hard-bits.

Parameters

  [in] | code | The CRC code description to apply
  [in] | in | Array of hard bits
  [in] | len | Length of the array of hard bits

Returns
  The CRC value

References osmo_crc64gen_code::bits, osmo_crc64gen_code::init, osmo_crc64gen_code::poly, and osmo_crc64gen_code::remainder.

Referenced by osmo_crc64gen_check_bits(), and osmo_crc64gen_set_bits().

## osmo_crc64gen_set_bits()

void osmo_crc64gen_set_bits | ( | const struct osmo_crc64gen_code * | code,
|  | const ubit_t * | in,
|  | int | len,
|  | ubit_t * | crc_bits
| ) |  |

Computes and writes the CRC value of a given array of bits.

Parameters

  [in] | code | The CRC code description to apply
  [in] | in | Array of hard bits
  [in] | len | Length of the array of hard bits
  [in] | crc_bits | Array of hard bits to write the computed CRC to

The crc_bits array must have a length of code->len

References osmo_crc64gen_code::bits, and osmo_crc64gen_compute_bits().

## osmo_crc8gen_check_bits()

int osmo_crc8gen_check_bits | ( | const struct osmo_crc8gen_code * | code,
|  | const ubit_t * | in,
|  | int | len,
|  | const ubit_t * | crc_bits
| ) |  |

Checks the CRC value of a given array of hard-bits.

Parameters

  [in] | code | The CRC code description to apply
  [in] | in | Array of hard bits
  [in] | len | Length of the array of hard bits
  [in] | crc_bits | Array of hard bits with the alleged CRC

Returns
  0 if CRC matches. 1 in case of error.

The crc_bits array must have a length of code->len

References osmo_crc8gen_code::bits, and osmo_crc8gen_compute_bits().

## osmo_crc8gen_compute_bits()

uint8_t osmo_crc8gen_compute_bits | ( | const struct osmo_crc8gen_code * | code,
|  | const ubit_t * | in,
|  | int | len
| ) |  |

Compute the CRC value of a given array of hard-bits.

Parameters

  [in] | code | The CRC code description to apply
  [in] | in | Array of hard bits
  [in] | len | Length of the array of hard bits

Returns
  The CRC value

References osmo_crc8gen_code::bits, osmo_crc8gen_code::init, osmo_crc8gen_code::poly, and osmo_crc8gen_code::remainder.

Referenced by osmo_crc8gen_check_bits(), and osmo_crc8gen_set_bits().

## osmo_crc8gen_set_bits()

void osmo_crc8gen_set_bits | ( | const struct osmo_crc8gen_code * | code,
|  | const ubit_t * | in,
|  | int | len,
|  | ubit_t * | crc_bits
| ) |  |

Computes and writes the CRC value of a given array of bits.

Parameters

  [in] | code | The CRC code description to apply
  [in] | in | Array of hard bits
  [in] | len | Length of the array of hard bits
  [in] | crc_bits | Array of hard bits to write the computed CRC to

The crc_bits array must have a length of code->len

References osmo_crc8gen_code::bits, and osmo_crc8gen_compute_bits().

## Variable Documentation

## osmo_crc16_ccitt_table [1/2]

const uint16_t osmo_crc16_ccitt_table[256]

CRC table for the CCITT CRC-6.

The poly is 0x8408 (x^0 + x^5 + x^12)

Referenced by osmo_crc16_ccitt_byte().

## osmo_crc16_ccitt_table [2/2]

const uint16_t osmo_crc16_ccitt_table[256]

CRC table for the CCITT CRC-6.

The poly is 0x8408 (x^0 + x^5 + x^12)

Referenced by osmo_crc16_ccitt_byte().

## osmo_crc16_table [1/2]

const uint16_t osmo_crc16_table[256]

CRC table for the CRC-16.

The poly is 0x8005 (x^16 + x^15 + x^2 + 1)

Referenced by osmo_crc16_byte().

## osmo_crc16_table [2/2]

const uint16_t osmo_crc16_table[256]

CRC table for the CRC-16.

The poly is 0x8005 (x^16 + x^15 + x^2 + 1)

Referenced by osmo_crc16_byte().