00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef ROHC_COMMON_CRC_H
00033 #define ROHC_COMMON_CRC_H
00034
00035 #include "ip.h"
00036
00037 #ifdef __KERNEL__
00038 # include <linux/types.h>
00039 #else
00040 # include <stdbool.h>
00041 #endif
00042
00043
00044 #define CRC_INIT_3 0x7
00045
00046 #define CRC_INIT_7 0x7f
00047
00048 #define CRC_INIT_8 0xff
00049
00050
00051 #define CRC_INIT_FCS32 0xffffffff
00052
00053 #define CRC_FCS32_LEN 4U
00054
00055
00056 typedef enum
00057 {
00058 ROHC_CRC_TYPE_NONE = 0,
00059 ROHC_CRC_TYPE_3 = 3,
00060 ROHC_CRC_TYPE_7 = 7,
00061 ROHC_CRC_TYPE_8 = 8,
00062 } rohc_crc_type_t;
00063
00064
00065
00066
00067
00068
00069 bool rohc_crc_init_table(uint8_t *const table,
00070 const rohc_crc_type_t crc_type)
00071 __attribute__((nonnull(1), warn_unused_result));
00072
00073 uint8_t crc_calculate(const rohc_crc_type_t crc_type,
00074 const uint8_t *const data,
00075 const size_t length,
00076 const uint8_t init_val,
00077 const uint8_t *const crc_table)
00078 __attribute__((nonnull(2, 5), warn_unused_result));
00079
00080 uint32_t crc_calc_fcs32(const uint8_t *const data,
00081 const size_t length,
00082 const uint32_t init_val)
00083 __attribute__((nonnull(1), warn_unused_result, pure));
00084
00085 uint8_t compute_crc_static(const uint8_t *const outer_ip,
00086 const uint8_t *const inner_ip,
00087 const uint8_t *const next_header,
00088 const rohc_crc_type_t crc_type,
00089 const uint8_t init_val,
00090 const uint8_t *const crc_table)
00091 __attribute__((nonnull(1, 6), warn_unused_result));
00092 uint8_t compute_crc_dynamic(const uint8_t *const outer_ip,
00093 const uint8_t *const inner_ip,
00094 const uint8_t *const next_header,
00095 const rohc_crc_type_t crc_type,
00096 const uint8_t init_val,
00097 const uint8_t *const crc_table)
00098 __attribute__((nonnull(1, 6), warn_unused_result));
00099
00100 uint8_t udp_compute_crc_static(const uint8_t *const outer_ip,
00101 const uint8_t *const inner_ip,
00102 const uint8_t *const next_header,
00103 const rohc_crc_type_t crc_type,
00104 const uint8_t init_val,
00105 const uint8_t *const crc_table)
00106 __attribute__((nonnull(1, 3, 6), warn_unused_result));
00107 uint8_t udp_compute_crc_dynamic(const uint8_t *const outer_ip,
00108 const uint8_t *const inner_ip,
00109 const uint8_t *const next_header,
00110 const rohc_crc_type_t crc_type,
00111 const uint8_t init_val,
00112 const uint8_t *const crc_table)
00113 __attribute__((nonnull(1, 3, 6), warn_unused_result));
00114
00115 uint8_t esp_compute_crc_static(const uint8_t *const outer_ip,
00116 const uint8_t *const inner_ip,
00117 const uint8_t *const next_header,
00118 const rohc_crc_type_t crc_type,
00119 const uint8_t init_val,
00120 const uint8_t *const crc_table)
00121 __attribute__((nonnull(1, 3, 6), warn_unused_result));
00122 uint8_t esp_compute_crc_dynamic(const uint8_t *const outer_ip,
00123 const uint8_t *const inner_ip,
00124 const uint8_t *const next_header,
00125 const rohc_crc_type_t crc_type,
00126 const uint8_t init_val,
00127 const uint8_t *const crc_table)
00128 __attribute__((nonnull(1, 3, 6), warn_unused_result));
00129
00130 uint8_t rtp_compute_crc_static(const uint8_t *const outer_ip,
00131 const uint8_t *const inner_ip,
00132 const uint8_t *const next_header,
00133 const rohc_crc_type_t crc_type,
00134 const uint8_t init_val,
00135 const uint8_t *const crc_table)
00136 __attribute__((nonnull(1, 3, 6), warn_unused_result));
00137 uint8_t rtp_compute_crc_dynamic(const uint8_t *const outer_ip,
00138 const uint8_t *const inner_ip,
00139 const uint8_t *const next_header,
00140 const rohc_crc_type_t crc_type,
00141 const uint8_t init_val,
00142 const uint8_t *const crc_table)
00143 __attribute__((nonnull(1, 3, 6), warn_unused_result));
00144
00145 #endif
00146