Fragment reassembly interface for YAF. More...
#include <yaf/autoinc.h>#include <yaf/decode.h>#include <yaf/yafcore.h>Go to the source code of this file.
Typedefs | |
| typedef struct yfFragTab_st | yfFragTab_t |
| A fragment table. | |
Functions | |
| yfFragTab_t * | yfFragTabAlloc (uint32_t idle_ms, uint32_t max_frags, uint32_t max_payload) |
| Allocate a fragment table. | |
| void | yfFragTabFree (yfFragTab_t *fragtab) |
| Free a fragment table. | |
| gboolean | yfDefragPBuf (yfFragTab_t *fragtab, yfIPFragInfo_t *fraginfo, size_t pbuflen, yfPBuf_t *pbuf, const uint8_t *pkt, size_t hdr_len) |
| Defragment a fragment returned by yfDecodeToPBuf(). | |
| void | yfFragDumpStats (yfFragTab_t *fragtab, uint64_t packetTotal) |
| Print fragment reassembler statistics to the log. | |
| void | yfGetFragTabStats (yfFragTab_t *fragtab, uint32_t *dropped, uint32_t *assembled) |
| Get Frag Stats to yfWriteStatsFlow for Stats Export. | |
Fragment reassembly interface for YAF.
[TODO - new frontmatter]
This facility is used by the YAF flow generator.
| typedef struct yfFragTab_st yfFragTab_t |
A fragment table.
Opaque. Create with yfFragTabAlloc() and free with yfFragTabFree().
| gboolean yfDefragPBuf | ( | yfFragTab_t * | fragtab, | |
| yfIPFragInfo_t * | fraginfo, | |||
| size_t | pbuflen, | |||
| yfPBuf_t * | pbuf, | |||
| const uint8_t * | pkt, | |||
| size_t | hdr_len | |||
| ) |
Defragment a fragment returned by yfDecodeToPBuf().
This adds the fragment to the given fragment table. If the fragment completes a fragmented packet, copies the assembled packet into the given pbuf, overwriting it, and returns TRUE. If the packet is not fragmented (that is, if fraginfo->frag is 0), has no effect and returns TRUE.
| fragtab | fragment table to add fragment to | |
| fraginfo | fragment information structure filled in by yfDecodeToPBuf() | |
| pbuflen | size of the packet buffer pbuf | |
| pbuf | packet buffer. On call, contains decoded fragmented packet to add to the fragment table. If this call returns TRUE, on return, contains assembled packet. | |
| pkt | pkt buffer from libpcap. We need this to reassemble (memcpy) TCP header fragments when payload is not enabled. | |
| hdr_len | size of the packet buffer pkt |
| void yfFragDumpStats | ( | yfFragTab_t * | fragtab, | |
| uint64_t | packetTotal | |||
| ) |
Print fragment reassembler statistics to the log.
| fragtab | fragment table to dump stats for | |
| packetTotal | total number of packets observed |
| yfFragTab_t* yfFragTabAlloc | ( | uint32_t | idle_ms, | |
| uint32_t | max_frags, | |||
| uint32_t | max_payload | |||
| ) |
Allocate a fragment table.
| idle_ms | idle timeout in milliseconds. A fragmented packet for which no fragments are received over an idle timeout is dropped. Most host IPv4 implementations use 30 seconds (30000); it is recommended to use the same here. | |
| max_frags | maximum number of unreassembled fragmented packets. Fragmented packets exceeding this limit will be dropped in least-recent order. Used to limit resource usage of a fragment table. A value of 0 disables fragment count limits. | |
| max_payload | maximum octets of payload to capture per fragmented packet. A value of 0 disables payload reassembly. |
| void yfFragTabFree | ( | yfFragTab_t * | fragtab | ) |
Free a fragment table.
Discards any outstanding fragmented packets within.
| fragtab | a fragment table. |
| void yfGetFragTabStats | ( | yfFragTab_t * | fragtab, | |
| uint32_t * | dropped, | |||
| uint32_t * | assembled | |||
| ) |
Get Frag Stats to yfWriteStatsFlow for Stats Export.
| fragtab | pointer to fragmentation table | |
| dropped | number of expired fragments | |
| assembled | number of assembled packets |