Fuzzing the lwIP stack (afl-fuzz requires linux/unix or similar)This directory contains a small app that reads Ethernet frames from stdin andprocesses them. It is used together with the 'american fuzzy lop' tool (foundat http://lcamtuf.coredump.cx/afl/) and the sample inputs to test howunexpected inputs are handled. The afl tool will read the known inputs, andtry to modify them to exercise as many code paths as possible, by instrumentingthe code and keeping track of which code is executed.Just running make will produce the test program.Running make with parameter 'D=-DLWIP_FUZZ_MULTI_PACKET' will produce a binarythat parses the input data as multiple packets (experimental!).Then run afl with:afl-fuzz -i inputs/<INPUT> -o output ./lwip_fuzzand it should start working. It will probably complain about CPU scheduler,set AFL_SKIP_CPUFREQ=1 to ignore it.If it complains about invalid "/proc/sys/kernel/core_pattern" setting, tryexecuting "sudo bash -c 'echo core > /proc/sys/kernel/core_pattern'".The input is split into different subdirectories since they test differentparts of the code, and since you want to run one instance of afl-fuzz on eachcore.When afl finds a crash or a hang, the input that caused it will be placed inthe output directory. If you have hexdump and text2pcap tools installed,running output_to_pcap.sh <outputdir> will create pcap files for each inputfile to simplify viewing in wireshark.The lwipopts.h file needs to have checksum checking off, otherwise almost everypacket will be discarded because of that. The other options can be tuned toexpose different parts of the code.