void user_init(void) { char * ap = "SKUNKWILLEM"; char * pass = "******"; uart_init(BIT_RATE_115200, uart_receive, false); system_set_os_print(1); os_printf("\nUart init done... \n"); wifi_softap_get_config(&apconf); memset(apconf.ssid, 0, 32); memset(apconf.password, 0, 64); os_strncpy((char*)apconf.ssid, ap, 32); os_strncpy((char*)apconf.password, pass, 64); apconf.authmode = AUTH_WPA_WPA2_PSK; apconf.max_connection = 5; apconf.ssid_hidden = 0; wifi_softap_set_config(&apconf); IP4_ADDR(&IpInfo.gw, 192, 168, 10, 1); IP4_ADDR(&IpInfo.ip, 192, 168, 10, 1); IP4_ADDR(&IpInfo.netmask, 255, 255, 255, 0); wifi_softap_dhcps_stop(); dhcps_start(&IpInfo); wifi_set_ip_info(0x01, &IpInfo); os_timer_disarm(&waitTimer); os_timer_setfn(&waitTimer, init_udp, NULL); os_timer_arm(&waitTimer, 2000, 0); }
struct netif * ICACHE_FLASH_ATTR eagle_lwip_if_alloc(struct ieee80211_conn *conn, uint8 *macaddr, struct ip_info *info) { struct netif *myif = conn->myif; if (myif == NULL) { myif = (void *) pvPortMalloc(sizeof(struct netif)); // SDK 1.1.2 : pvPortZalloc(64) conn->myif = myif; } if(myif == NULL) return NULL; if (conn->dhcps_if == 0) { // +176 if(default_hostname) { wifi_station_set_default_hostname(macaddr); } myif->hostname = hostname; // +40 } else myif->hostname = NULL; // +40 myif->state = conn; // +28 myif->name[0] = 'e'; // + 54 myif->name[1] = 'w'; // + 55 myif->output = etharp_output; // +20 myif->linkoutput = ieee80211_output_pbuf; // +24 ets_memcpy(myif->hwaddr, macaddr, 6); // +47 ETSEvent *queue = (void *) pvPortMalloc(sizeof(struct ETSEventTag) * QUEUE_LEN); // pvPortZalloc(80) if(queue == NULL) return NULL; if (conn->dhcps_if != 0) { // +176 lwip_if_queues[1] = queue; netif_set_addr(myif, &info->ip, &info->netmask, &info->gw); ets_task(task_if1, LWIP_IF1_PRIO, (ETSEvent *)lwip_if_queues[1], QUEUE_LEN); netif_add(myif, &info->ip, &info->netmask, &info->gw, conn, init_fn, ethernet_input); if(dhcps_flag) { dhcps_start(info); os_printf("dhcp server start:(ip:" IPSTR ",mask:" IPSTR ",gw:" IPSTR ")\n", IP2STR(&info->ip), IP2STR(&info->netmask), IP2STR(&info->gw)); } } else { lwip_if_queues[0] = queue; ets_task(task_if0, LWIP_IF0_PRIO, (ETSEvent *)lwip_if_queues[0], QUEUE_LEN); struct ip_info ipn; if(wifi_station_dhcpc_status()) { ipn.ip.addr = 0; ipn.netmask.addr = 0; ipn.gw.addr = 0; } else { ipn = *info; } netif_add(myif, &ipn.ip, &ipn.netmask, &ipn.gw, conn, init_fn, ethernet_input); } return myif; }
struct netif * eagle_lwip_if_alloc(struct myif_state *state, u8_t hw[6], ip_addr_t *ips) { struct ETSEventTag *queue; struct netif *myif; ip_addr_t ipaddr = ips[0]; ip_addr_t netmask = ips[1]; ip_addr_t gw = ips[2]; if (state->myif == NULL) { myif = (void *)os_zalloc(sizeof(struct netif)); } myif->state = state; myif->name[0] = 'e'; myif->name[1] = 'w'; myif->linkoutput = ieee80211_output_pbuf; myif->output = etharp_output; ets_memcpy(myif->hwaddr, hw, 6); queue = (void *) os_malloc(sizeof(struct ETSEventTag) * QUEUE_LEN); if (state->dhcps_if == 0) { #if LWIP_NETIF_HOSTNAME #ifdef LWIP_NETIF_HOSTNAME_PREFIX myif->hostname = os_malloc(sizeof(LWIP_NETIF_HOSTNAME_PREFIX)+10); os_sprintf(myif->hostname, "%s%02x%02x%02x", LWIP_NETIF_HOSTNAME_PREFIX, myif->hwaddr[3], myif->hwaddr[4], myif->hwaddr[5]); #endif #endif ets_task(task_if0, TASK_IF0_PRIO, queue, QUEUE_LEN); } else { netif_set_addr(myif, &ipaddr, &netmask, &gw); if (dhcps_flag != 0) { dhcps_start((struct ip_info *)ips); os_printf("dhcp server start:(ip:%08x,mask:%08x,gw:%08x)\n", ipaddr.addr, netmask.addr, gw.addr); } ets_task(task_if1, TASK_IF1_PRIO, queue, QUEUE_LEN); } netif_add(myif, &ipaddr, &netmask, &gw, state, init_fn, ethernet_input); return myif; }
// // Test starts here // int main(int argc, char** argv) { uint8_t *buf; struct pbuf *p; FILE *file; size_t len = 1460; dhcp_test_init_di(); IP4_ADDR(&server_ip, 192,168,4,1); dhcps_set_new_lease_cb(dhcp_test_dhcps_cb); dhcps_start(&mynetif, server_ip); #ifdef INSTR_IS_OFF p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL); buf = p->payload; memset(buf, 0, 1460); if (argc != 2) { printf("Non-instrumentation mode: please supply a file name created by AFL to reproduce crash\n"); return 1; } // // Note: parameter1 is a file (mangled packet) which caused the crash file = fopen(argv[1], "r"); if (file) { len = fread(buf, 1, 1460, file); } fclose(file); int i; for (i=0; i<1; i++) { #else while (__AFL_LOOP(1000)) { p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL); buf = p->payload; memset(buf, 0, 1460); size_t len = read(0, buf, 1460); #endif p->len = len; p->tot_len = len; p->next = NULL; dhcp_test_handle_dhcp(NULL, NULL, p, &ip_addr_any, 0); } return 0; }
struct netif * ICACHE_FLASH_ATTR eagle_lwip_if_alloc(struct myif_state *state, u8_t hw[6], struct ip_info * ips) { #if 1 // optimize ... struct netif *myif = state->myif; if (myif == NULL) { myif = (void *) pvPortMalloc(sizeof(struct netif)); // pvPortZalloc(60) state->myif = myif; } myif->state = state; // +28 myif->name[0] = 'e'; // +50 myif->name[1] = 'w'; // +51 myif->linkoutput = ieee80211_output_pbuf; // +24 myif->output = etharp_output; // +20 ets_memcpy(myif->hwaddr, hw, 6); // +43 ETSEvent *queue = (void *) pvPortMalloc(sizeof(struct ETSEventTag) * QUEUE_LEN); // pvPortZalloc(80) if (state->dhcps_if != 0) { // +176 lwip_if_queues[1] = queue; netif_set_addr(myif, &ips->ip, &ips->netmask, &ips->gw); ets_task(task_if1, TASK_IF1_PRIO, (ETSEvent *)lwip_if_queues[1], QUEUE_LEN); netif_add(myif, &ips->ip, &ips->netmask, &ips->gw, state, init_fn, ethernet_input); if(dhcps_flag) { dhcps_start(ips); // os_printf("dhcp server start:(ip:%08x,mask:%08x,gw:%08x)\n", ips->ip.addr, ips->netmask.addr, ips->gw.addr); } } else { lwip_if_queues[0] = queue; ets_task(task_if0, TASK_IF0_PRIO, (ETSEvent *)lwip_if_queues[0], QUEUE_LEN); struct ip_info ipn; if(wifi_station_dhcpc_status()) { ipn = *ips; } else { ipn.ip.addr = 0; ipn.netmask.addr = 0; ipn.gw.addr = 0; } netif_add(myif, &ipn.ip, &ipn.netmask, &ipn.gw, state, init_fn, ethernet_input); } return myif; #else // source ETSEvent *queue; ip_addr_t ipaddr; ip_addr_t netmask; ip_addr_t gw; struct netif *myif = state->myif; if (myif == NULL) { myif = (void *) pvPortMalloc(sizeof(struct netif)); // pvPortZalloc(60) state->myif = myif; } myif->state = state; // +28 myif->name[0] = 'e'; // +50 myif->name[1] = 'w'; // +51 myif->linkoutput = ieee80211_output_pbuf; // +24 myif->output = etharp_output; // +20 ets_memcpy(myif->hwaddr, hw, 6); // +43 if (state->dhcps_if != 0) { // +176 ipaddr = ips->ip; netmask = ips->netmask; gw = ips->gw; netif_set_addr(myif, &ipaddr, &netmask, &gw); queue = (void *) pvPortMalloc(sizeof(struct ETSEventTag) * QUEUE_LEN); // pvPortZalloc(80) lwip_if_queues[1] = queue; ets_task(task_if1, TASK_IF1_PRIO, (ETSEvent *)queue, QUEUE_LEN); netif_add(myif, &ipaddr, &netmask, &gw, state, init_fn, ethernet_input); if(dhcps_flag) { dhcps_start(ips); // os_printf("dhcp server start:(ip:%08x,mask:%08x,gw:%08x)\n", ipaddr.addr, netmask.addr, gw.addr); } } else { if(wifi_station_dhcpc_status()) { ipaddr = ips->ip; netmask = ips->netmask; gw = ips->gw; } else { ipaddr.addr = 0; netmask.addr = 0; gw.addr = 0; } queue = (void *) pvPortMalloc(sizeof(struct ETSEventTag) * QUEUE_LEN); // pvPortZalloc(80) lwip_if_queues[0] = queue; ets_task(task_if0, TASK_IF0_PRIO, (ETSEvent *)queue, QUEUE_LEN); netif_add(myif, &ipaddr, &netmask, &gw, state, init_fn, ethernet_input); } return myif; #endif }