ReactOS 0.4.16-dev-737-g3368adc
fuzz_common.h File Reference
#include "lwip/opt.h"
#include "lwip/arch.h"
Include dependency graph for fuzz_common.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define LWIP_FUZZ_DEFAULT   0x01
 
#define LWIP_FUZZ_STATICARP   0x02
 
#define LWIP_FUZZ_TCP_SERVER   0x04
 
#define LWIP_FUZZ_TCP_CLIENT   0x08
 
#define LWIP_FUZZ_UDP_SERVER   0x10
 
#define LWIP_FUZZ_UDP_CLIENT   0x20
 

Enumerations

enum  lwip_fuzz_type { LWIP_FUZZ_SINGLE = 0 , LWIP_FUZZ_MULTIPACKET = 1 , LWIP_FUZZ_MULTIPACKET_TIME = 2 }
 

Functions

int lwip_fuzztest (int argc, char **argv, enum lwip_fuzz_type type, u32_t test_apps)
 

Macro Definition Documentation

◆ LWIP_FUZZ_DEFAULT

#define LWIP_FUZZ_DEFAULT   0x01

Definition at line 49 of file fuzz_common.h.

◆ LWIP_FUZZ_STATICARP

#define LWIP_FUZZ_STATICARP   0x02

Definition at line 50 of file fuzz_common.h.

◆ LWIP_FUZZ_TCP_CLIENT

#define LWIP_FUZZ_TCP_CLIENT   0x08

Definition at line 52 of file fuzz_common.h.

◆ LWIP_FUZZ_TCP_SERVER

#define LWIP_FUZZ_TCP_SERVER   0x04

Definition at line 51 of file fuzz_common.h.

◆ LWIP_FUZZ_UDP_CLIENT

#define LWIP_FUZZ_UDP_CLIENT   0x20

Definition at line 54 of file fuzz_common.h.

◆ LWIP_FUZZ_UDP_SERVER

#define LWIP_FUZZ_UDP_SERVER   0x10

Definition at line 53 of file fuzz_common.h.

Enumeration Type Documentation

◆ lwip_fuzz_type

Enumerator
LWIP_FUZZ_SINGLE 
LWIP_FUZZ_MULTIPACKET 
LWIP_FUZZ_MULTIPACKET_TIME 

Definition at line 42 of file fuzz_common.h.

42 {
46};
@ LWIP_FUZZ_SINGLE
Definition: fuzz_common.h:43
@ LWIP_FUZZ_MULTIPACKET_TIME
Definition: fuzz_common.h:45
@ LWIP_FUZZ_MULTIPACKET
Definition: fuzz_common.h:44

Function Documentation

◆ lwip_fuzztest()

int lwip_fuzztest ( int  argc,
char **  argv,
enum lwip_fuzz_type  type,
u32_t  test_apps 
)

Definition at line 576 of file fuzz_common.c.

577{
578 struct netif net_test;
579 ip4_addr_t addr;
580 ip4_addr_t netmask;
581 ip4_addr_t gw;
582 size_t len;
583 err_t err;
584 ip_addr_t remote_addr; /* a IPv4 addr of the destination */
585 struct eth_addr remote_mac = ETH_ADDR(0x28, 0x00, 0x00, 0x22, 0x2b, 0x38); /* a MAC addr of the destination */
586
588 lwip_init();
589
590 IP4_ADDR(&addr, 172, 30, 115, 84);
591 IP4_ADDR(&netmask, 255, 255, 255, 0);
592 IP4_ADDR(&gw, 172, 30, 115, 1);
593
594 netif_add(&net_test, &addr, &netmask, &gw, &net_test, testif_init, ethernet_input);
597
598 if (test_apps & LWIP_FUZZ_STATICARP) {
599 /* Add the ARP entry */
600 IP_ADDR4(&remote_addr, 172, 30, 115, 37);
601 etharp_add_static_entry(&(remote_addr.u_addr.ip4), &remote_mac);
602 }
603
604#if LWIP_IPV6
605 nd6_tmr(); /* tick nd to join multicast groups */
606#endif
607 dns_setserver(0, &net_test.gw);
608
609 if (test_apps & LWIP_FUZZ_DEFAULT) {
610 /* initialize apps */
611 httpd_init();
613 mdns_resp_init();
614 mdns_resp_add_netif(&net_test, "hostname");
615 snmp_init();
616 }
617 if (test_apps & LWIP_FUZZ_TCP_CLIENT) {
618 tcp_client_pcb = altcp_tcp_new_ip_type(IPADDR_TYPE_ANY);
619 LWIP_ASSERT("Error: altcp_new() failed", tcp_client_pcb != NULL);
620 tcp_remote_port = 80;
621 err = altcp_connect(tcp_client_pcb, &remote_addr, tcp_remote_port, tcp_client_connected);
622 LWIP_ASSERT("Error: altcp_connect() failed", err == ERR_OK);
623 altcp_recv(tcp_client_pcb, tcp_client_recv);
624 altcp_err(tcp_client_pcb, tcp_client_err);
625 altcp_poll(tcp_client_pcb, tcp_client_poll, 10);
626 altcp_sent(tcp_client_pcb, tcp_client_sent);
627 }
628 if (test_apps & LWIP_FUZZ_TCP_SERVER) {
629 tcp_server_pcb = altcp_tcp_new_ip_type(IPADDR_TYPE_ANY);
630 LWIP_ASSERT("Error: altcp_new() failed", tcp_server_pcb != NULL);
631 altcp_setprio(tcp_server_pcb, TCP_PRIO_MIN);
632 tcp_local_port = 80;
633 err = altcp_bind(tcp_server_pcb, IP_ANY_TYPE, tcp_local_port);
634 LWIP_ASSERT("Error: altcp_bind() failed", err == ERR_OK);
635 tcp_server_pcb = altcp_listen(tcp_server_pcb);
636 LWIP_ASSERT("Error: altcp_listen() failed", err == ERR_OK);
637 altcp_accept(tcp_server_pcb, tcp_server_accept);
638 }
639 if (test_apps & LWIP_FUZZ_UDP_CLIENT) {
640 udp_client_pcb = udp_new();
641 udp_new_ip_type(IPADDR_TYPE_ANY);
642 udp_recv(udp_client_pcb, udp_client_recv, NULL);
643 udp_remote_port = 161;
644 udp_connect(udp_client_pcb, &remote_addr, udp_remote_port);
645 }
646 if (test_apps & LWIP_FUZZ_UDP_SERVER) {
647 udp_server_pcb = udp_new();
648 udp_new_ip_type(IPADDR_TYPE_ANY);
649 udp_local_port = 161;
650 udp_bind(udp_server_pcb, IP_ANY_TYPE, udp_local_port);
651 udp_recv(udp_server_pcb, udp_server_recv, NULL);
652 }
653
654 if(argc > 1) {
655 FILE* f;
656 const char* filename;
657 printf("reading input from file... ");
658 fflush(stdout);
659 filename = argv[1];
660 LWIP_ASSERT("invalid filename", filename != NULL);
661 f = fopen(filename, "rb");
662 LWIP_ASSERT("open failed", f != NULL);
663 len = fread(pktbuf, 1, sizeof(pktbuf), f);
664 fclose(f);
665 printf("testing file: \"%s\"...\r\n", filename);
666 } else {
667 len = fread(pktbuf, 1, sizeof(pktbuf), stdin);
668 }
670
672 return 0;
673}
static int argc
Definition: ServiceArgs.c:12
#define altcp_accept
Definition: altcp.h:169
#define altcp_connect
Definition: altcp.h:177
#define altcp_poll
Definition: altcp.h:172
#define altcp_sent
Definition: altcp.h:171
#define altcp_listen
Definition: altcp.h:181
#define altcp_setprio
Definition: altcp.h:196
#define altcp_err
Definition: altcp.h:173
#define altcp_recv
Definition: altcp.h:170
#define altcp_tcp_new_ip_type
Definition: altcp.h:160
#define altcp_bind
Definition: altcp.h:176
#define NULL
Definition: types.h:112
void httpd_init(void)
#define LWIP_ASSERT(message, assertion)
Definition: debug.h:116
#define printf
Definition: freeldr.h:97
static u8_t pktbuf[200000]
Definition: fuzz_common.c:57
static void input_pkts(enum lwip_fuzz_type type, struct netif *netif, const u8_t *data, size_t len)
Definition: fuzz_common.c:215
#define pcap_dump_stop()
Definition: fuzz_common.c:152
static err_t testif_init(struct netif *netif)
Definition: fuzz_common.c:164
#define pcap_dump_init()
Definition: fuzz_common.c:151
#define LWIP_FUZZ_UDP_CLIENT
Definition: fuzz_common.h:54
#define LWIP_FUZZ_UDP_SERVER
Definition: fuzz_common.h:53
#define LWIP_FUZZ_DEFAULT
Definition: fuzz_common.h:49
#define LWIP_FUZZ_STATICARP
Definition: fuzz_common.h:50
#define LWIP_FUZZ_TCP_CLIENT
Definition: fuzz_common.h:52
#define LWIP_FUZZ_TCP_SERVER
Definition: fuzz_common.h:51
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLfloat f
Definition: glext.h:7540
GLenum const GLvoid * addr
Definition: glext.h:9621
GLenum GLsizei len
Definition: glext.h:6722
s8_t err_t
Definition: err.h:96
@ ERR_OK
Definition: err.h:55
#define IP_ANY_TYPE
Definition: ip_addr.h:461
@ IPADDR_TYPE_ANY
Definition: ip_addr.h:60
void lwip_init(void)
Definition: init.c:339
struct netif * netif_add(struct netif *netif, void *state, netif_init_fn init, netif_input_fn input)
Definition: netif.c:287
void netif_set_link_up(struct netif *netif)
Definition: netif.c:1018
void netif_set_up(struct netif *netif)
Definition: netif.c:871
#define stdout
Definition: stdio.h:99
_Check_return_opt_ _CRTIMP int __cdecl fflush(_Inout_opt_ FILE *_File)
_Check_return_opt_ _CRTIMP size_t __cdecl fread(_Out_writes_bytes_(_ElementSize *_Count) void *_DstBuf, _In_ size_t _ElementSize, _In_ size_t _Count, _Inout_ FILE *_File)
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
#define stdin
Definition: stdio.h:98
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
const char * filename
Definition: ioapi.h:137
ip6_addr_t ip_addr_t
Definition: ip_addr.h:344
#define f
Definition: ke_i.h:83
#define ETH_ADDR(b0, b1, b2, b3, b4, b5)
Definition: ethernet.h:69
void * lwiperf_start_tcp_server_default(lwiperf_report_fn report_fn, void *report_arg)
#define argv
Definition: mplay32.c:18
#define err(...)
Definition: netif.h:269
static struct netif net_test
Definition: test_netif.c:12

Referenced by main().