about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/libwifi/core/frame/crc.c6
-rw-r--r--src/libwifi/core/frame/crc.h9
2 files changed, 12 insertions, 3 deletions
diff --git a/src/libwifi/core/frame/crc.c b/src/libwifi/core/frame/crc.c index 33dae06..8e45c85 100644 --- a/src/libwifi/core/frame/crc.c +++ b/src/libwifi/core/frame/crc.c
@@ -49,15 +49,17 @@ uint32_t libwifi_calculate_fcs(const unsigned char *frame, size_t frame_len) {
49} 49}
50 50
51/* 51/*
52 * Verify a frame containing a FCS at the end to the FCS calculated 52 * Verify a raw frame containing a FCS at the end to the FCS calculated
53 * by libwifi. 53 * by libwifi.
54 */ 54 */
55int libwifi_frame_verify(void *frame, size_t frame_len) { 55int libwifi_frame_verify(void *frame, size_t frame_len) {
56 uint32_t oCRC = *((uint32_t *) ((char *) frame + frame_len)); 56 // A frame with a CRC will have the CRC placed at the end, and is 4 bytes long.
57 uint32_t oCRC = *((uint32_t *) ((char *) frame + (frame_len - 4)));
57 uint32_t rCRC = libwifi_calculate_fcs(frame, frame_len); 58 uint32_t rCRC = libwifi_calculate_fcs(frame, frame_len);
58 59
59 if (rCRC == oCRC) { 60 if (rCRC == oCRC) {
60 return 1; 61 return 1;
61 } 62 }
63
62 return 0; 64 return 0;
63} 65}
diff --git a/src/libwifi/core/frame/crc.h b/src/libwifi/core/frame/crc.h index aab1c4e..0f89383 100644 --- a/src/libwifi/core/frame/crc.h +++ b/src/libwifi/core/frame/crc.h
@@ -38,7 +38,14 @@ uint32_t libwifi_crc32(const unsigned char *message, int message_len);
38uint32_t libwifi_calculate_fcs(const unsigned char *frame, size_t frame_len); 38uint32_t libwifi_calculate_fcs(const unsigned char *frame, size_t frame_len);
39 39
40/** 40/**
41 * Check if the given 802.11 frame has a valid FCS. 41 * Check if the given raw 802.11 frame has a valid FCS.
42 *
43 * This function relies on an assumption that the last 4 bytes of the supplied
44 * frame is the CRC, as stated in the Radiotap specification.
45 *
46 * You can check if the frame data has this field by using libwifi_get_wifi_frame()
47 * and then checking if the libwifi_frame's flags has the LIBWIFI_FLAGS_FCS_PRESENT
48 * bit set.
42 * 49 *
43 * @param frame An 802.11 frame with an FCS 50 * @param frame An 802.11 frame with an FCS
44 * @param frame_len Length of the frame 51 * @param frame_len Length of the frame