You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.8 KiB
Markdown
73 lines
2.8 KiB
Markdown
5 years ago
|
tcp_dump_packets.c dumps network packets in a C source file.
|
||
|
|
||
|
It is written to be added to the "pc" project ( Windows simulator ). It uses the file system to write 2 C source files:
|
||
|
|
||
|
PacketList.c
|
||
|
PacketList.h
|
||
|
|
||
|
How to include 'tcp_dump_packets' into a project:
|
||
|
|
||
|
● Make sure that tools/tcp_dump_packets.c is added to the source files
|
||
|
● See if Network Interface has been adapted to call:
|
||
|
`iptraceDUMP_PACKET( ucBuffer, xLength, pdTRUE ); /* Incoming packet. */`
|
||
|
`iptraceDUMP_PACKET( ucBuffer, xLength, pdFALSE ); /* Outgoing packet. */`
|
||
|
● Once the network is up, call `dump_packet_init()` with a file name and a pointer to
|
||
|
`DumpEntries_t`, which contains the requirements. For instance like this:
|
||
|
static DumpEntries_t xExampleEntries = {
|
||
|
.uxEntryCount = 4, /* No more than 'dumpMAX_DUMP_ENTRIES' elements. */
|
||
|
.xEntries = {
|
||
|
{ .ulMask = flag_IN | flag_UDP, .uxMax = 2u },
|
||
|
{ .ulMask = flag_IN | flag_ARP, .uxMax = 2u },
|
||
|
{ .ulMask = flag_IN | flag_TCP, .uxMax = 5u },
|
||
|
{ .ulMask = flag_IN | flag_SYN, .uxMax = 1u },
|
||
|
}
|
||
|
};
|
||
|
● Add the following lines to FreeRTOSIPConfig.h :
|
||
|
#define ipconfigUSE_DUMP_PACKETS ( 1 )
|
||
|
#include "../tools/tcp_dump_packets.h"
|
||
|
|
||
|
Later on, the module can disabled by simply setting `ipconfigUSE_DUMP_PACKETS` to `0`.
|
||
|
|
||
|
Here is some contents of the output file:
|
||
|
|
||
|
/* Packet_0001 */
|
||
|
uint8_t ucPacket_0001[ 60 ] =
|
||
|
{
|
||
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x74, 0xb5, 0x7e, 0xf0, 0x47, 0xee, 0x08, 0x06, 0x00, 0x01,
|
||
|
0x08, 0x00, 0x06, 0x04, 0x00, 0x01, 0x74, 0xb5, 0x7e, 0xf0, 0x47, 0xee, 0xc0, 0xa8, 0x02, 0x01,
|
||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xa8, 0x02, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||
|
};
|
||
|
|
||
|
DumpPacket_t xPacket_0001 =
|
||
|
{
|
||
|
.pucData = ucPacket_0001,
|
||
|
.uxLength = 60,
|
||
|
.ulType = 0x6840, /* IN | FRAME_ARP | ARP | REQUEST */
|
||
|
};
|
||
|
/*-----------------------------------------------------------*/
|
||
|
|
||
|
tcp_dump_packets has an enum of all possible properties of network packets:
|
||
|
ICMP4, ICMP6, UDP, TCP, DNS, REPLY, REQUEST, SYN,
|
||
|
FIN, RST, ACK, IN, OUT, ARP, FRAME_ARP, FRAME_4, and FRAME_6
|
||
|
|
||
|
Each property is defined as a bit so they can be combined as in:
|
||
|
.ulType = 0x6840, /* IN | FRAME_ARP | ARP | REQUEST */
|
||
|
|
||
|
Finishing: when there are enough packets of all required types, an array is added to the C-source output:
|
||
|
|
||
|
DumpPacket_t *xPacketList[ dumpPACKET_COUNT ] =
|
||
|
{
|
||
|
&xPacket_0000,
|
||
|
&xPacket_0001,
|
||
|
&xPacket_0002,
|
||
|
&xPacket_0003,
|
||
|
&xPacket_0004,
|
||
|
&xPacket_0005,
|
||
|
&xPacket_0006,
|
||
|
&xPacket_0007,
|
||
|
&xPacket_0008,
|
||
|
};
|
||
|
|
||
|
The new source file PacketList.{c, h} can be used in testing software as sample packets.
|