EtherLib/prefab/conn_blocks/ipv4/ip_assembler.h
Wiesner András c165389369 - Timer checked, found no (obvious) bugs
- Dynmem mutex added
- IP reassembler fixed
- More explanation added in comments to the PacketSieve
2023-11-04 20:12:45 +01:00

56 lines
1.8 KiB
C

#ifndef ETHERLIB_IP_ASSEMBLER_H
#define ETHERLIB_IP_ASSEMBLER_H
#include <stdint.h>
#include "../../packet_parsers/ipv4_packet.h"
typedef struct IPv4Fragment_ {
uint16_t offset; ///< Address offset of this segment
uint16_t size; ///< Size of this segment
struct IPv4Fragment_ * next; ///< Pointer to next segment
bool8_t lastFrag; ///< It's the last fragment from a packet
uint8_t payload[]; ///< Fragment payload
} IPv4Fragment;
/**
* Fragment chain descriptor
*/
typedef struct FragChainDesc_ {
IPv4Fragment * fragChain; ///< Fragment chain
uint32_t alarmID; ///< Alarm ID for reassembly timeout
uint16_t id; ///< IP packet identification
uint16_t fullSize; ///< Reassembled IP packet size
struct FragChainDesc_ * next; ///< Next fragment chain
} FragChainDesc;
typedef struct {
FragChainDesc * chains; ///< Linked list of fragment chains
struct EthInterface_ * intf; ///< Interface instantiated this reassembler
} IPv4Assembler;
/**
* Create new IPv4 packet reassembler.
* @return pointer to newly allocated assembler
*/
IPv4Assembler * ipra_new(struct EthInterface_ * intf);
/**
* Input packet packet fragment.
* @param ipra pointer to IP reassembler
* @param ipProps pointer to IP properties structure
*/
void ipra_input(IPv4Assembler * ipra, const IPv4Props * ipProps, const uint8_t * payload, uint32_t size);
/**
* Attempt to reassemble a packet.
* @param ipra pointer to IPv4 reassembly object
* @param id packet sequence identification
* @param payload pointer to uint8_t* pointer; filled only on successful reassembly
* @param size pointer to uint16_t field; filled only on successful reassembly
* @return reassembly was successful
*/
bool ipra_try_reassemble(IPv4Assembler *ipra, uint16_t id, uint8_t **payload, uint16_t *size, PcktHeaderElement *pcktHdrLe);
#endif //ETHERLIB_IP_ASSEMBLER_H