-PcktSieve special return functionality added -ARP multicast learning bug fixed -include guards have been refactored -Doxygen style tweaked
55 lines
1.7 KiB
C
55 lines
1.7 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
|
|
} IPv4Assembler;
|
|
|
|
/**
|
|
* Create new IPv4 packet reassembler.
|
|
* @return pointer to newly allocated assembler
|
|
*/
|
|
IPv4Assembler * ipra_new();
|
|
|
|
/**
|
|
* 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);
|
|
|
|
|
|
/**
|
|
* Try to reassembly 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
|