diff options
| author | David Madison <dmadison@users.noreply.github.com> | 2019-02-15 12:08:19 -0500 | 
|---|---|---|
| committer | David Madison <dmadison@users.noreply.github.com> | 2019-02-15 12:08:31 -0500 | 
| commit | 4a7ef06b516dba4cdda939a16e5458c59592f6b1 (patch) | |
| tree | b00e15e665a2f456c1fb207aeb9ac12283181a00 /firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES | |
| parent | 98f00eb533e0ed571b90f8e014d1eb59052a0597 (diff) | |
Delete 'firmwares' folder
Diffstat (limited to 'firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES')
75 files changed, 0 insertions, 27048 deletions
diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.c deleted file mode 100644 index ad5ecca..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.c +++ /dev/null @@ -1,87 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/*This file is prepared for Doxygen automatic documentation generation.*/ -/*! \file ****************************************************************** - * - * \brief Management of the delays. - * - * This file manages the "delays", with or without an OS. - * - * - Compiler:           IAR EWAVR32 and GNU GCC for AVR32 - * - Supported devices:  All AVR32 devices. - * - AppNote: - * - * \author               Atmel Corporation: http://www.atmel.com \n - *                       Support and FAQ: http://support.atmel.no/ - * - ***************************************************************************/ - -/* Copyright (c) 2009 Atmel Corporation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. The name of Atmel may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 4. This software may only be redistributed and used in connection with an Atmel - * AVR product. - * - * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE - * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE - * - */ - -//_____  I N C L U D E S ___________________________________________________ - -#include "delay.h" - - -//_____ M A C R O S ________________________________________________________ - - -//_____ D E F I N I T I O N S ______________________________________________ - -//! CPU frequency -#ifndef FREERTOS_USED -static unsigned long s_fcpu_hz; -#endif -#if (defined NUTOS_USED) -extern void NutSleep(unsigned long ms); -#endif - -//_____ D E C L A R A T I O N S ____________________________________________ - -void delay_init(unsigned long fcpu_hz) -{ -#ifndef FREERTOS_USED -  s_fcpu_hz = fcpu_hz; -#endif -} - - -void delay_ms(unsigned long delay) -{ -#if (defined FREERTOS_USED) -  vTaskDelay( (portTickType)TASK_DELAY_MS(delay) ); -#elif (defined NUTOS_USED) -  NutSleep(delay); -#else -  cpu_delay_ms(delay, s_fcpu_hz); -#endif -} diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.h deleted file mode 100644 index 2811326..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.h +++ /dev/null @@ -1,80 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/*This file is prepared for Doxygen automatic documentation generation.*/ -/*! \file ********************************************************************* - * - * \brief AT32UC3 delay management header file. - * - * This file contains definitions and services to handle "delays". - * - * - Compiler:           IAR EWAVR32 and GNU GCC for AVR32 - * - Supported devices:  All AVR32 AT32UC3 devices can be used. - * - AppNote: - * - * \author               Atmel Corporation: http://www.atmel.com \n - *                       Support and FAQ: http://support.atmel.no/ - * - ******************************************************************************/ - -/* Copyright (c) 2009 Atmel Corporation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. The name of Atmel may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 4. This software may only be redistributed and used in connection with an Atmel - * AVR product. - * - * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE - * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE - * - */ - -#ifndef _DELAY_H_ -#define _DELAY_H_ - -#include "compiler.h" -#ifdef FREERTOS_USED -# include "FreeRTOS.h" -# include "task.h" -#else -# include "cycle_counter.h" -#endif - - -/*! - * \brief Initialize the delay driver. - * - * \param  fcpu_hz: CPU frequency in Hz. - */ -extern void delay_init(unsigned long fcpu_hz); - - -/*! - * \brief Waits during at least the specified delay (in millisecond) before returning. - * - * Note that in the case of FreeRTOS, the function will delay the current task for a given number of ms. - * - * \param  delay:   Number of millisecond to wait. - */ -extern void delay_ms(unsigned long delay); - - -#endif  // _DELAY_H_ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dhcp.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dhcp.c deleted file mode 100644 index 8ef6c84..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dhcp.c +++ /dev/null @@ -1,1724 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * Dynamic Host Configuration Protocol client - * - */ - -/* - * - * Copyright (c) 2001-2004 Leon Woestenberg <leon.woestenberg@gmx.net> - * Copyright (c) 2001-2004 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is a contribution to the lwIP TCP/IP stack. - * The Swedish Institute of Computer Science and Adam Dunkels - * are specifically granted permission to redistribute this - * source code. - * - * Author: Leon Woestenberg <leon.woestenberg@gmx.net> - * - * This is a DHCP client for the lwIP TCP/IP stack. It aims to conform - * with RFC 2131 and RFC 2132. - * - * TODO: - * - Proper parsing of DHCP messages exploiting file/sname field overloading. - * - Add JavaDoc style documentation (API, internals). - * - Support for interfaces other than Ethernet (SLIP, PPP, ...) - * - * Please coordinate changes and requests with Leon Woestenberg - * <leon.woestenberg@gmx.net> - * - * Integration with your code: - * - * In lwip/dhcp.h - * #define DHCP_COARSE_TIMER_SECS (recommended 60 which is a minute) - * #define DHCP_FINE_TIMER_MSECS (recommended 500 which equals TCP coarse timer) - * - * Then have your application call dhcp_coarse_tmr() and - * dhcp_fine_tmr() on the defined intervals. - * - * dhcp_start(struct netif *netif); - * starts a DHCP client instance which configures the interface by - * obtaining an IP address lease and maintaining it. - * - * Use dhcp_release(netif) to end the lease and use dhcp_stop(netif) - * to remove the DHCP client. - * - */ - -#include "lwip/opt.h" - -#if LWIP_DHCP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/stats.h" -#include "lwip/mem.h" -#include "lwip/udp.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/inet.h" -#include "lwip/sys.h" -#include "lwip/dhcp.h" -#include "lwip/autoip.h" -#include "lwip/dns.h" -#include "netif/etharp.h" - -#include <string.h> - -/** Default for DHCP_GLOBAL_XID is 0xABCD0000 - * This can be changed by defining DHCP_GLOBAL_XID and DHCP_GLOBAL_XID_HEADER, e.g. - *  #define DHCP_GLOBAL_XID_HEADER "stdlib.h" - *  #define DHCP_GLOBAL_XID rand() - */ -#ifdef DHCP_GLOBAL_XID_HEADER -#include DHCP_GLOBAL_XID_HEADER /* include optional starting XID generation prototypes */ -#endif - -/** DHCP_OPTION_MAX_MSG_SIZE is set to the MTU - * MTU is checked to be big enough in dhcp_start */ -#define DHCP_MAX_MSG_LEN(netif)        (netif->mtu) -#define DHCP_MAX_MSG_LEN_MIN_REQUIRED  576 -/** Minimum length for reply before packet is parsed */ -#define DHCP_MIN_REPLY_LEN             44 - -#define REBOOT_TRIES 2 - -/* DHCP client state machine functions */ -static void dhcp_handle_ack(struct netif *netif); -static void dhcp_handle_nak(struct netif *netif); -static void dhcp_handle_offer(struct netif *netif); - -static err_t dhcp_discover(struct netif *netif); -static err_t dhcp_select(struct netif *netif); -static void dhcp_bind(struct netif *netif); -#if DHCP_DOES_ARP_CHECK -static void dhcp_check(struct netif *netif); -static err_t dhcp_decline(struct netif *netif); -#endif /* DHCP_DOES_ARP_CHECK */ -static err_t dhcp_rebind(struct netif *netif); -static err_t dhcp_reboot(struct netif *netif); -static void dhcp_set_state(struct dhcp *dhcp, u8_t new_state); - -/* receive, unfold, parse and free incoming messages */ -static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port); -static err_t dhcp_unfold_reply(struct dhcp *dhcp, struct pbuf *p); -static u8_t *dhcp_get_option_ptr(struct dhcp *dhcp, u8_t option_type); -static u8_t dhcp_get_option_byte(u8_t *ptr); -#if 0 -static u16_t dhcp_get_option_short(u8_t *ptr); -#endif -static u32_t dhcp_get_option_long(u8_t *ptr); -static void dhcp_free_reply(struct dhcp *dhcp); - -/* set the DHCP timers */ -static void dhcp_timeout(struct netif *netif); -static void dhcp_t1_timeout(struct netif *netif); -static void dhcp_t2_timeout(struct netif *netif); - -/* build outgoing messages */ -/* create a DHCP request, fill in common headers */ -static err_t dhcp_create_request(struct netif *netif); -/* free a DHCP request */ -static void dhcp_delete_request(struct netif *netif); -/* add a DHCP option (type, then length in bytes) */ -static void dhcp_option(struct dhcp *dhcp, u8_t option_type, u8_t option_len); -/* add option values */ -static void dhcp_option_byte(struct dhcp *dhcp, u8_t value); -static void dhcp_option_short(struct dhcp *dhcp, u16_t value); -static void dhcp_option_long(struct dhcp *dhcp, u32_t value); -/* always add the DHCP options trailer to end and pad */ -static void dhcp_option_trailer(struct dhcp *dhcp); - -/** - * Back-off the DHCP client (because of a received NAK response). - * - * Back-off the DHCP client because of a received NAK. Receiving a - * NAK means the client asked for something non-sensible, for - * example when it tries to renew a lease obtained on another network. - * - * We clear any existing set IP address and restart DHCP negotiation - * afresh (as per RFC2131 3.2.3). - * - * @param netif the netif under DHCP control - */ -static void -dhcp_handle_nak(struct netif *netif) -{ -  struct dhcp *dhcp = netif->dhcp; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_nak(netif=%p) %c%c%"U16_F"\n",  -    (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); -  /* Set the interface down since the address must no longer be used, as per RFC2131 */ -  netif_set_down(netif); -  /* remove IP address from interface */ -  netif_set_ipaddr(netif, IP_ADDR_ANY); -  netif_set_gw(netif, IP_ADDR_ANY); -  netif_set_netmask(netif, IP_ADDR_ANY);  -  /* Change to a defined state */ -  dhcp_set_state(dhcp, DHCP_BACKING_OFF); -  /* We can immediately restart discovery */ -  dhcp_discover(netif); -} - -#if DHCP_DOES_ARP_CHECK -/** - * Checks if the offered IP address is already in use. - * - * It does so by sending an ARP request for the offered address and - * entering CHECKING state. If no ARP reply is received within a small - * interval, the address is assumed to be free for use by us. - * - * @param netif the netif under DHCP control - */ -static void -dhcp_check(struct netif *netif) -{ -  struct dhcp *dhcp = netif->dhcp; -  err_t result; -  u16_t msecs; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_check(netif=%p) %c%c\n", (void *)netif, (s16_t)netif->name[0], -    (s16_t)netif->name[1])); -  dhcp_set_state(dhcp, DHCP_CHECKING); -  /* create an ARP query for the offered IP address, expecting that no host -     responds, as the IP address should not be in use. */ -  result = etharp_query(netif, &dhcp->offered_ip_addr, NULL); -  if (result != ERR_OK) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_check: could not perform ARP query\n")); -  } -  dhcp->tries++; -  msecs = 500; -  dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_check(): set request timeout %"U16_F" msecs\n", msecs)); -} -#endif /* DHCP_DOES_ARP_CHECK */ - -/** - * Remember the configuration offered by a DHCP server. - * - * @param netif the netif under DHCP control - */ -static void -dhcp_handle_offer(struct netif *netif) -{ -  struct dhcp *dhcp = netif->dhcp; -  /* obtain the server address */ -  u8_t *option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_SERVER_ID); -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_offer(netif=%p) %c%c%"U16_F"\n", -    (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); -  if (option_ptr != NULL) { -    dhcp->server_ip_addr.addr = htonl(dhcp_get_option_long(&option_ptr[2])); -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): server 0x%08"X32_F"\n", dhcp->server_ip_addr.addr)); -    /* remember offered address */ -    ip_addr_set(&dhcp->offered_ip_addr, (struct ip_addr *)&dhcp->msg_in->yiaddr); -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_handle_offer(): offer for 0x%08"X32_F"\n", dhcp->offered_ip_addr.addr)); - -    dhcp_select(netif); -  } -} - -/** - * Select a DHCP server offer out of all offers. - * - * Simply select the first offer received. - * - * @param netif the netif under DHCP control - * @return lwIP specific error (see error.h) - */ -static err_t -dhcp_select(struct netif *netif) -{ -  struct dhcp *dhcp = netif->dhcp; -  err_t result; -  u16_t msecs; -#if LWIP_NETIF_HOSTNAME -  const char *p; -#endif /* LWIP_NETIF_HOSTNAME */ - -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_select(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); -  dhcp_set_state(dhcp, DHCP_REQUESTING); - -  /* create and initialize the DHCP message header */ -  result = dhcp_create_request(netif); -  if (result == ERR_OK) { -    dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); -    dhcp_option_byte(dhcp, DHCP_REQUEST); - -    dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); -    dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); - -    /* MUST request the offered IP address */ -    dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); -    dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); - -    dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); -    dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); - -    dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/); -    dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK); -    dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER); -    dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST); -    dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER); - -#if LWIP_NETIF_HOSTNAME -    p = (const char*)netif->hostname; -    if (p != NULL) { -      dhcp_option(dhcp, DHCP_OPTION_HOSTNAME, strlen(p)); -      while (*p) { -        dhcp_option_byte(dhcp, *p++); -      } -    } -#endif /* LWIP_NETIF_HOSTNAME */ - -    dhcp_option_trailer(dhcp); -    /* shrink the pbuf to the actual content length */ -    pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - -    /* send broadcast to any DHCP server */ -    udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); -    dhcp_delete_request(netif); -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_select: REQUESTING\n")); -  } else { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("dhcp_select: could not allocate DHCP request\n")); -  } -  dhcp->tries++; -  msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000; -  dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_select(): set request timeout %"U16_F" msecs\n", msecs)); -  return result; -} - -/** - * The DHCP timer that checks for lease renewal/rebind timeouts. - * - */ -void -dhcp_coarse_tmr() -{ -  struct netif *netif = netif_list; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_coarse_tmr()\n")); -  /* iterate through all network interfaces */ -  while (netif != NULL) { -    /* only act on DHCP configured interfaces */ -    if (netif->dhcp != NULL) { -      /* timer is active (non zero), and triggers (zeroes) now? */ -      if (netif->dhcp->t2_timeout-- == 1) { -        LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t2 timeout\n")); -        /* this clients' rebind timeout triggered */ -        dhcp_t2_timeout(netif); -      /* timer is active (non zero), and triggers (zeroes) now */ -      } else if (netif->dhcp->t1_timeout-- == 1) { -        LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_coarse_tmr(): t1 timeout\n")); -        /* this clients' renewal timeout triggered */ -        dhcp_t1_timeout(netif); -      } -    } -    /* proceed to next netif */ -    netif = netif->next; -  } -} - -/** - * DHCP transaction timeout handling - * - * A DHCP server is expected to respond within a short period of time. - * This timer checks whether an outstanding DHCP request is timed out. - *  - */ -void -dhcp_fine_tmr() -{ -  struct netif *netif = netif_list; -  /* loop through netif's */ -  while (netif != NULL) { -    /* only act on DHCP configured interfaces */ -    if (netif->dhcp != NULL) { -      /* timer is active (non zero), and is about to trigger now */       -      if (netif->dhcp->request_timeout > 1) { -        netif->dhcp->request_timeout--; -      } -      else if (netif->dhcp->request_timeout == 1) { -        netif->dhcp->request_timeout--; -        /* { netif->dhcp->request_timeout == 0 } */ -        LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_fine_tmr(): request timeout\n")); -        /* this clients' request timeout triggered */ -        dhcp_timeout(netif); -      } -    } -    /* proceed to next network interface */ -    netif = netif->next; -  } -} - -/** - * A DHCP negotiation transaction, or ARP request, has timed out. - * - * The timer that was started with the DHCP or ARP request has - * timed out, indicating no response was received in time. - * - * @param netif the netif under DHCP control - */ -static void -dhcp_timeout(struct netif *netif) -{ -  struct dhcp *dhcp = netif->dhcp; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout()\n")); -  /* back-off period has passed, or server selection timed out */ -  if ((dhcp->state == DHCP_BACKING_OFF) || (dhcp->state == DHCP_SELECTING)) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout(): restarting discovery\n")); -    dhcp_discover(netif); -  /* receiving the requested lease timed out */ -  } else if (dhcp->state == DHCP_REQUESTING) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, DHCP request timed out\n")); -    if (dhcp->tries <= 5) { -      dhcp_select(netif); -    } else { -      LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REQUESTING, releasing, restarting\n")); -      dhcp_release(netif); -      dhcp_discover(netif); -    } -#if DHCP_DOES_ARP_CHECK -  /* received no ARP reply for the offered address (which is good) */ -  } else if (dhcp->state == DHCP_CHECKING) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): CHECKING, ARP request timed out\n")); -    if (dhcp->tries <= 1) { -      dhcp_check(netif); -    /* no ARP replies on the offered address, -       looks like the IP address is indeed free */ -    } else { -      /* bind the interface to the offered address */ -      dhcp_bind(netif); -    } -#endif /* DHCP_DOES_ARP_CHECK */ -  } -  /* did not get response to renew request? */ -  else if (dhcp->state == DHCP_RENEWING) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): RENEWING, DHCP request timed out\n")); -    /* just retry renewal */ -    /* note that the rebind timer will eventually time-out if renew does not work */ -    dhcp_renew(netif); -  /* did not get response to rebind request? */ -  } else if (dhcp->state == DHCP_REBINDING) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): REBINDING, DHCP request timed out\n")); -    if (dhcp->tries <= 8) { -      dhcp_rebind(netif); -    } else { -      LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_timeout(): RELEASING, DISCOVERING\n")); -      dhcp_release(netif); -      dhcp_discover(netif); -    } -  } else if (dhcp->state == DHCP_REBOOTING) { -    if (dhcp->tries < REBOOT_TRIES) { -      dhcp_reboot(netif); -    } else { -      dhcp_discover(netif); -    } -  } -} - -/** - * The renewal period has timed out. - * - * @param netif the netif under DHCP control - */ -static void -dhcp_t1_timeout(struct netif *netif) -{ -  struct dhcp *dhcp = netif->dhcp; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_t1_timeout()\n")); -  if ((dhcp->state == DHCP_REQUESTING) || (dhcp->state == DHCP_BOUND) || (dhcp->state == DHCP_RENEWING)) { -    /* just retry to renew - note that the rebind timer (t2) will -     * eventually time-out if renew tries fail. */ -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t1_timeout(): must renew\n")); -    dhcp_renew(netif); -  } -} - -/** - * The rebind period has timed out. - * - * @param netif the netif under DHCP control - */ -static void -dhcp_t2_timeout(struct netif *netif) -{ -  struct dhcp *dhcp = netif->dhcp; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t2_timeout()\n")); -  if ((dhcp->state == DHCP_REQUESTING) || (dhcp->state == DHCP_BOUND) || (dhcp->state == DHCP_RENEWING)) { -    /* just retry to rebind */ -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t2_timeout(): must rebind\n")); -    dhcp_rebind(netif); -  } -} - -/** - * Handle a DHCP ACK packet - * - * @param netif the netif under DHCP control - */ -static void -dhcp_handle_ack(struct netif *netif) -{ -  struct dhcp *dhcp = netif->dhcp; -  u8_t *option_ptr; -  /* clear options we might not get from the ACK */ -  dhcp->offered_sn_mask.addr = 0; -  dhcp->offered_gw_addr.addr = 0; -  dhcp->offered_bc_addr.addr = 0; - -  /* lease time given? */ -  option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_LEASE_TIME); -  if (option_ptr != NULL) { -    /* remember offered lease time */ -    dhcp->offered_t0_lease = dhcp_get_option_long(option_ptr + 2); -  } -  /* renewal period given? */ -  option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_T1); -  if (option_ptr != NULL) { -    /* remember given renewal period */ -    dhcp->offered_t1_renew = dhcp_get_option_long(option_ptr + 2); -  } else { -    /* calculate safe periods for renewal */ -    dhcp->offered_t1_renew = dhcp->offered_t0_lease / 2; -  } - -  /* renewal period given? */ -  option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_T2); -  if (option_ptr != NULL) { -    /* remember given rebind period */ -    dhcp->offered_t2_rebind = dhcp_get_option_long(option_ptr + 2); -  } else { -    /* calculate safe periods for rebinding */ -    dhcp->offered_t2_rebind = dhcp->offered_t0_lease; -  } - -  /* (y)our internet address */ -  ip_addr_set(&dhcp->offered_ip_addr, &dhcp->msg_in->yiaddr); - -/** - * Patch #1308 - * TODO: we must check if the file field is not overloaded by DHCP options! - */ -#if 0 -  /* boot server address */ -  ip_addr_set(&dhcp->offered_si_addr, &dhcp->msg_in->siaddr); -  /* boot file name */ -  if (dhcp->msg_in->file[0]) { -    dhcp->boot_file_name = mem_malloc(strlen(dhcp->msg_in->file) + 1); -    strcpy(dhcp->boot_file_name, dhcp->msg_in->file); -  } -#endif - -  /* subnet mask */ -  option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_SUBNET_MASK); -  /* subnet mask given? */ -  if (option_ptr != NULL) { -    dhcp->offered_sn_mask.addr = htonl(dhcp_get_option_long(&option_ptr[2])); -  } - -  /* gateway router */ -  option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_ROUTER); -  if (option_ptr != NULL) { -    dhcp->offered_gw_addr.addr = htonl(dhcp_get_option_long(&option_ptr[2])); -  } - -  /* broadcast address */ -  option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_BROADCAST); -  if (option_ptr != NULL) { -    dhcp->offered_bc_addr.addr = htonl(dhcp_get_option_long(&option_ptr[2])); -  } -   -  /* DNS servers */ -  option_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_DNS_SERVER); -  if (option_ptr != NULL) { -    u8_t n; -    dhcp->dns_count = dhcp_get_option_byte(&option_ptr[1]) / (u32_t)sizeof(struct ip_addr); -    /* limit to at most DHCP_MAX_DNS DNS servers */ -    if (dhcp->dns_count > DHCP_MAX_DNS) -      dhcp->dns_count = DHCP_MAX_DNS; -    for (n = 0; n < dhcp->dns_count; n++) { -      dhcp->offered_dns_addr[n].addr = htonl(dhcp_get_option_long(&option_ptr[2 + n * 4])); -#if LWIP_DNS -      dns_setserver( n, (struct ip_addr *)(&(dhcp->offered_dns_addr[n].addr))); -#endif /* LWIP_DNS */ -    } -#if LWIP_DNS -    dns_setserver( n, (struct ip_addr *)(&ip_addr_any)); -#endif /* LWIP_DNS */ -  } -} - -/** - * Start DHCP negotiation for a network interface. - * - * If no DHCP client instance was attached to this interface, - * a new client is created first. If a DHCP client instance - * was already present, it restarts negotiation. - * - * @param netif The lwIP network interface - * @return lwIP error code - * - ERR_OK - No error - * - ERR_MEM - Out of memory - */ -err_t -dhcp_start(struct netif *netif) -{ -  struct dhcp *dhcp; -  err_t result = ERR_OK; - -  LWIP_ERROR("netif != NULL", (netif != NULL), return ERR_ARG;); -  dhcp = netif->dhcp; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); -  /* Remove the flag that says this netif is handled by DHCP, -     it is set when we succeeded starting. */ -  netif->flags &= ~NETIF_FLAG_DHCP; - -  /* check MTU of the netif */ -  if (netif->mtu < DHCP_MAX_MSG_LEN_MIN_REQUIRED) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): Cannot use this netif with DHCP: MTU is too small\n")); -    return ERR_MEM; -  } - -  /* no DHCP client attached yet? */ -  if (dhcp == NULL) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting new DHCP client\n")); -    dhcp = mem_malloc(sizeof(struct dhcp)); -    if (dhcp == NULL) { -      LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): could not allocate dhcp\n")); -      return ERR_MEM; -    } -    /* store this dhcp client in the netif */ -    netif->dhcp = dhcp; -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): allocated dhcp")); -  /* already has DHCP client attached */ -  } else { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(): restarting DHCP configuration\n")); -    if (dhcp->pcb != NULL) { -      udp_remove(dhcp->pcb); -    } -    LWIP_ASSERT("pbuf p_out wasn't freed", dhcp->p_out == NULL); -    LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL && -      dhcp->options_in == NULL && dhcp->options_in_len == 0); -  } -     -  /* clear data structure */ -  memset(dhcp, 0, sizeof(struct dhcp)); -  /* allocate UDP PCB */ -  dhcp->pcb = udp_new(); -  if (dhcp->pcb == NULL) { -    LWIP_DEBUGF(DHCP_DEBUG  | LWIP_DBG_TRACE, ("dhcp_start(): could not obtain pcb\n")); -    mem_free((void *)dhcp); -    netif->dhcp = dhcp = NULL; -    return ERR_MEM; -  } -#if IP_SOF_BROADCAST -  dhcp->pcb->so_options|=SOF_BROADCAST; -#endif /* IP_SOF_BROADCAST */ -  /* set up local and remote port for the pcb */ -  udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); -  udp_connect(dhcp->pcb, IP_ADDR_ANY, DHCP_SERVER_PORT); -  /* set up the recv callback and argument */ -  udp_recv(dhcp->pcb, dhcp_recv, netif); -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): starting DHCP configuration\n")); -  /* (re)start the DHCP negotiation */ -  result = dhcp_discover(netif); -  if (result != ERR_OK) { -    /* free resources allocated above */ -    dhcp_stop(netif); -    return ERR_MEM; -  } -  /* Set the flag that says this netif is handled by DHCP. */ -  netif->flags |= NETIF_FLAG_DHCP; -  return result; -} - -/** - * Inform a DHCP server of our manual configuration. - * - * This informs DHCP servers of our fixed IP address configuration - * by sending an INFORM message. It does not involve DHCP address - * configuration, it is just here to be nice to the network. - * - * @param netif The lwIP network interface - */ -void -dhcp_inform(struct netif *netif) -{ -  struct dhcp *dhcp, *old_dhcp; -  err_t result = ERR_OK; -  dhcp = mem_malloc(sizeof(struct dhcp)); -  if (dhcp == NULL) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform(): could not allocate dhcp\n")); -    return; -  } -  memset(dhcp, 0, sizeof(struct dhcp)); - -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_inform(): allocated dhcp\n")); -  dhcp->pcb = udp_new(); -  if (dhcp->pcb == NULL) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform(): could not obtain pcb")); -    goto free_dhcp_and_return; -  } -  old_dhcp = netif->dhcp; -  netif->dhcp = dhcp; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_inform(): created new udp pcb\n")); -  /* create and initialize the DHCP message header */ -  result = dhcp_create_request(netif); -  if (result == ERR_OK) { - -    dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); -    dhcp_option_byte(dhcp, DHCP_INFORM); - -    dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); -    dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); - -    dhcp_option_trailer(dhcp); - -    pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - -#if IP_SOF_BROADCAST -    dhcp->pcb->so_options|=SOF_BROADCAST; -#endif /* IP_SOF_BROADCAST */ -    udp_bind(dhcp->pcb, IP_ADDR_ANY, DHCP_CLIENT_PORT); -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_inform: INFORMING\n")); -    udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); -    dhcp_delete_request(netif); -  } else { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_inform: could not allocate DHCP request\n")); -  } - -  udp_remove(dhcp->pcb); -  dhcp->pcb = NULL; -  netif->dhcp = old_dhcp; -free_dhcp_and_return: -  mem_free((void *)dhcp); -} - -/** Handle a possible change in the network configuration. - * - * This enters the REBOOTING state to verify that the currently bound - * address is still valid. - */ -void -dhcp_network_changed(struct netif *netif) -{ -  struct dhcp *dhcp = netif->dhcp; -  if (!dhcp) -    return; -  switch (dhcp->state) { -  case DHCP_REBINDING: -  case DHCP_RENEWING: -  case DHCP_BOUND: -  case DHCP_REBOOTING: -    netif_set_down(netif); -    dhcp->tries = 0; -    dhcp_reboot(netif); -    break; -  case DHCP_OFF: -    /* stay off */ -    break; -  default: -    dhcp->tries = 0; -    dhcp_discover(netif); -    break; -  } -} - -#if DHCP_DOES_ARP_CHECK -/** - * Match an ARP reply with the offered IP address. - * - * @param netif the network interface on which the reply was received - * @param addr The IP address we received a reply from - */ -void dhcp_arp_reply(struct netif *netif, struct ip_addr *addr) -{ -  LWIP_ERROR("netif != NULL", (netif != NULL), return;); -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_arp_reply()\n")); -  /* is a DHCP client doing an ARP check? */ -  if ((netif->dhcp != NULL) && (netif->dhcp->state == DHCP_CHECKING)) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_arp_reply(): CHECKING, arp reply for 0x%08"X32_F"\n", addr->addr)); -    /* did a host respond with the address we -       were offered by the DHCP server? */ -    if (ip_addr_cmp(addr, &netif->dhcp->offered_ip_addr)) { -      /* we will not accept the offered address */ -      LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, -        ("dhcp_arp_reply(): arp reply matched with offered address, declining\n")); -      dhcp_decline(netif); -    } -  } -} - -/** - * Decline an offered lease. - * - * Tell the DHCP server we do not accept the offered address. - * One reason to decline the lease is when we find out the address - * is already in use by another host (through ARP). - * - * @param netif the netif under DHCP control - */ -static err_t -dhcp_decline(struct netif *netif) -{ -  struct dhcp *dhcp = netif->dhcp; -  err_t result = ERR_OK; -  u16_t msecs; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline()\n")); -  dhcp_set_state(dhcp, DHCP_BACKING_OFF); -  /* create and initialize the DHCP message header */ -  result = dhcp_create_request(netif); -  if (result == ERR_OK) { -    dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); -    dhcp_option_byte(dhcp, DHCP_DECLINE); - -    dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); -    dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); - -    dhcp_option_trailer(dhcp); -    /* resize pbuf to reflect true size of options */ -    pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - -    /* per section 4.4.4, broadcast DECLINE messages */ -    udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); -    dhcp_delete_request(netif); -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_decline: BACKING OFF\n")); -  } else { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, -      ("dhcp_decline: could not allocate DHCP request\n")); -  } -  dhcp->tries++; -  msecs = 10*1000; -  dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline(): set request timeout %"U16_F" msecs\n", msecs)); -  return result; -} -#endif - - -/** - * Start the DHCP process, discover a DHCP server. - * - * @param netif the netif under DHCP control - */ -static err_t -dhcp_discover(struct netif *netif) -{ -  struct dhcp *dhcp = netif->dhcp; -  err_t result = ERR_OK; -  u16_t msecs; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover()\n")); -  ip_addr_set(&dhcp->offered_ip_addr, IP_ADDR_ANY); -  dhcp_set_state(dhcp, DHCP_SELECTING); -  /* create and initialize the DHCP message header */ -  result = dhcp_create_request(netif); -  if (result == ERR_OK) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: making request\n")); -    dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); -    dhcp_option_byte(dhcp, DHCP_DISCOVER); - -    dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); -    dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); - -    dhcp_option(dhcp, DHCP_OPTION_PARAMETER_REQUEST_LIST, 4/*num options*/); -    dhcp_option_byte(dhcp, DHCP_OPTION_SUBNET_MASK); -    dhcp_option_byte(dhcp, DHCP_OPTION_ROUTER); -    dhcp_option_byte(dhcp, DHCP_OPTION_BROADCAST); -    dhcp_option_byte(dhcp, DHCP_OPTION_DNS_SERVER); - -    dhcp_option_trailer(dhcp); - -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: realloc()ing\n")); -    pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: sendto(DISCOVER, IP_ADDR_BROADCAST, DHCP_SERVER_PORT)\n")); -    udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_discover: deleting()ing\n")); -    dhcp_delete_request(netif); -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover: SELECTING\n")); -  } else { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_discover: could not allocate DHCP request\n")); -  } -  dhcp->tries++; -#if LWIP_DHCP_AUTOIP_COOP -  if(dhcp->tries >= LWIP_DHCP_AUTOIP_COOP_TRIES && dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_OFF) { -    dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_ON; -    autoip_start(netif); -  } -#endif /* LWIP_DHCP_AUTOIP_COOP */ -  msecs = (dhcp->tries < 6 ? 1 << dhcp->tries : 60) * 1000; -  dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_discover(): set request timeout %"U16_F" msecs\n", msecs)); -  return result; -} - - -/** - * Bind the interface to the offered IP address. - * - * @param netif network interface to bind to the offered address - */ -static void -dhcp_bind(struct netif *netif) -{ -  u32_t timeout; -  struct dhcp *dhcp; -  struct ip_addr sn_mask, gw_addr; -  LWIP_ERROR("dhcp_bind: netif != NULL", (netif != NULL), return;); -  dhcp = netif->dhcp; -  LWIP_ERROR("dhcp_bind: dhcp != NULL", (dhcp != NULL), return;); -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); - -  /* temporary DHCP lease? */ -  if (dhcp->offered_t1_renew != 0xffffffffUL) { -    /* set renewal period timer */ -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t1 renewal timer %"U32_F" secs\n", dhcp->offered_t1_renew)); -    timeout = (dhcp->offered_t1_renew + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; -    if(timeout > 0xffff) { -      timeout = 0xffff; -    } -    dhcp->t1_timeout = (u16_t)timeout; -    if (dhcp->t1_timeout == 0) { -      dhcp->t1_timeout = 1; -    } -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t1_renew*1000)); -  } -  /* set renewal period timer */ -  if (dhcp->offered_t2_rebind != 0xffffffffUL) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(): t2 rebind timer %"U32_F" secs\n", dhcp->offered_t2_rebind)); -    timeout = (dhcp->offered_t2_rebind + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS; -    if(timeout > 0xffff) { -      timeout = 0xffff; -    } -    dhcp->t2_timeout = (u16_t)timeout; -    if (dhcp->t2_timeout == 0) { -      dhcp->t2_timeout = 1; -    } -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_bind(): set request timeout %"U32_F" msecs\n", dhcp->offered_t2_rebind*1000)); -  } -  /* copy offered network mask */ -  ip_addr_set(&sn_mask, &dhcp->offered_sn_mask); - -  /* subnet mask not given? */ -  /* TODO: this is not a valid check. what if the network mask is 0? */ -  if (sn_mask.addr == 0) { -    /* choose a safe subnet mask given the network class */ -    u8_t first_octet = ip4_addr1(&sn_mask); -    if (first_octet <= 127) { -      sn_mask.addr = htonl(0xff000000); -    } else if (first_octet >= 192) { -      sn_mask.addr = htonl(0xffffff00); -    } else { -      sn_mask.addr = htonl(0xffff0000); -    } -  } - -  ip_addr_set(&gw_addr, &dhcp->offered_gw_addr); -  /* gateway address not given? */ -  if (gw_addr.addr == 0) { -    /* copy network address */ -    gw_addr.addr = (dhcp->offered_ip_addr.addr & sn_mask.addr); -    /* use first host address on network as gateway */ -    gw_addr.addr |= htonl(0x00000001); -  } - -#if LWIP_DHCP_AUTOIP_COOP -  if(dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { -    autoip_stop(netif); -    dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; -  } -#endif /* LWIP_DHCP_AUTOIP_COOP */ - -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): IP: 0x%08"X32_F"\n", dhcp->offered_ip_addr.addr)); -  netif_set_ipaddr(netif, &dhcp->offered_ip_addr); -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): SN: 0x%08"X32_F"\n", sn_mask.addr)); -  netif_set_netmask(netif, &sn_mask); -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_bind(): GW: 0x%08"X32_F"\n", gw_addr.addr)); -  netif_set_gw(netif, &gw_addr); -  /* bring the interface up */ -  netif_set_up(netif); -  /* netif is now bound to DHCP leased address */ -  dhcp_set_state(dhcp, DHCP_BOUND); -} - -/** - * Renew an existing DHCP lease at the involved DHCP server. - * - * @param netif network interface which must renew its lease - */ -err_t -dhcp_renew(struct netif *netif) -{ -  struct dhcp *dhcp = netif->dhcp; -  err_t result; -  u16_t msecs; -#if LWIP_NETIF_HOSTNAME -  const char *p; -#endif /* LWIP_NETIF_HOSTNAME */ -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_renew()\n")); -  dhcp_set_state(dhcp, DHCP_RENEWING); - -  /* create and initialize the DHCP message header */ -  result = dhcp_create_request(netif); -  if (result == ERR_OK) { - -    dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); -    dhcp_option_byte(dhcp, DHCP_REQUEST); - -    dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); -    dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); - -#if LWIP_NETIF_HOSTNAME -    p = (const char*)netif->hostname; -    if (p != NULL) { -      dhcp_option(dhcp, DHCP_OPTION_HOSTNAME, strlen(p)); -      while (*p) { -        dhcp_option_byte(dhcp, *p++); -      } -    } -#endif /* LWIP_NETIF_HOSTNAME */ - -#if 0 -    dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); -    dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); -#endif - -#if 0 -    dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); -    dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); -#endif -    /* append DHCP message trailer */ -    dhcp_option_trailer(dhcp); - -    pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - -    udp_sendto_if(dhcp->pcb, dhcp->p_out, &dhcp->server_ip_addr, DHCP_SERVER_PORT, netif); -    dhcp_delete_request(netif); - -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew: RENEWING\n")); -  } else { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_renew: could not allocate DHCP request\n")); -  } -  dhcp->tries++; -  /* back-off on retries, but to a maximum of 20 seconds */ -  msecs = dhcp->tries < 10 ? dhcp->tries * 2000 : 20 * 1000; -  dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_renew(): set request timeout %"U16_F" msecs\n", msecs)); -  return result; -} - -/** - * Rebind with a DHCP server for an existing DHCP lease. - * - * @param netif network interface which must rebind with a DHCP server - */ -static err_t -dhcp_rebind(struct netif *netif) -{ -  struct dhcp *dhcp = netif->dhcp; -  err_t result; -  u16_t msecs; -#if LWIP_NETIF_HOSTNAME -  const char *p; -#endif /* LWIP_NETIF_HOSTNAME */ -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind()\n")); -  dhcp_set_state(dhcp, DHCP_REBINDING); - -  /* create and initialize the DHCP message header */ -  result = dhcp_create_request(netif); -  if (result == ERR_OK) { - -    dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); -    dhcp_option_byte(dhcp, DHCP_REQUEST); - -    dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); -    dhcp_option_short(dhcp, DHCP_MAX_MSG_LEN(netif)); - -#if LWIP_NETIF_HOSTNAME -    p = (const char*)netif->hostname; -    if (p != NULL) { -      dhcp_option(dhcp, DHCP_OPTION_HOSTNAME, strlen(p)); -      while (*p) { -        dhcp_option_byte(dhcp, *p++); -      } -    } -#endif /* LWIP_NETIF_HOSTNAME */ - -#if 0 -    dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); -    dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); - -    dhcp_option(dhcp, DHCP_OPTION_SERVER_ID, 4); -    dhcp_option_long(dhcp, ntohl(dhcp->server_ip_addr.addr)); -#endif - -    dhcp_option_trailer(dhcp); - -    pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - -    /* broadcast to server */ -    udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); -    dhcp_delete_request(netif); -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind: REBINDING\n")); -  } else { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_rebind: could not allocate DHCP request\n")); -  } -  dhcp->tries++; -  msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; -  dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_rebind(): set request timeout %"U16_F" msecs\n", msecs)); -  return result; -} - -/** - * Enter REBOOTING state to verify an existing lease - * - * @param netif network interface which must reboot - */ -static err_t -dhcp_reboot(struct netif *netif) -{ -  struct dhcp *dhcp = netif->dhcp; -  err_t result; -  u16_t msecs; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot()\n")); -  dhcp_set_state(dhcp, DHCP_REBOOTING); - -  /* create and initialize the DHCP message header */ -  result = dhcp_create_request(netif); -  if (result == ERR_OK) { - -    dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); -    dhcp_option_byte(dhcp, DHCP_REQUEST); - -    dhcp_option(dhcp, DHCP_OPTION_MAX_MSG_SIZE, DHCP_OPTION_MAX_MSG_SIZE_LEN); -    dhcp_option_short(dhcp, 576); - -    dhcp_option(dhcp, DHCP_OPTION_REQUESTED_IP, 4); -    dhcp_option_long(dhcp, ntohl(dhcp->offered_ip_addr.addr)); - -    dhcp_option_trailer(dhcp); - -    pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - -    /* broadcast to server */ -    udp_sendto_if(dhcp->pcb, dhcp->p_out, IP_ADDR_BROADCAST, DHCP_SERVER_PORT, netif); -    dhcp_delete_request(netif); -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot: REBOOTING\n")); -  } else { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_reboot: could not allocate DHCP request\n")); -  } -  dhcp->tries++; -  msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; -  dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_reboot(): set request timeout %"U16_F" msecs\n", msecs)); -  return result; -} - - -/** - * Release a DHCP lease. - * - * @param netif network interface which must release its lease - */ -err_t -dhcp_release(struct netif *netif) -{ -  struct dhcp *dhcp = netif->dhcp; -  err_t result; -  u16_t msecs; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_release()\n")); - -  /* idle DHCP client */ -  dhcp_set_state(dhcp, DHCP_OFF); -  /* clean old DHCP offer */ -  dhcp->server_ip_addr.addr = 0; -  dhcp->offered_ip_addr.addr = dhcp->offered_sn_mask.addr = 0; -  dhcp->offered_gw_addr.addr = dhcp->offered_bc_addr.addr = 0; -  dhcp->offered_t0_lease = dhcp->offered_t1_renew = dhcp->offered_t2_rebind = 0; -  dhcp->dns_count = 0; -   -  /* create and initialize the DHCP message header */ -  result = dhcp_create_request(netif); -  if (result == ERR_OK) { -    dhcp_option(dhcp, DHCP_OPTION_MESSAGE_TYPE, DHCP_OPTION_MESSAGE_TYPE_LEN); -    dhcp_option_byte(dhcp, DHCP_RELEASE); - -    dhcp_option_trailer(dhcp); - -    pbuf_realloc(dhcp->p_out, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN + dhcp->options_out_len); - -    udp_sendto_if(dhcp->pcb, dhcp->p_out, &dhcp->server_ip_addr, DHCP_SERVER_PORT, netif); -    dhcp_delete_request(netif); -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release: RELEASED, DHCP_OFF\n")); -  } else { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("dhcp_release: could not allocate DHCP request\n")); -  } -  dhcp->tries++; -  msecs = dhcp->tries < 10 ? dhcp->tries * 1000 : 10 * 1000; -  dhcp->request_timeout = (msecs + DHCP_FINE_TIMER_MSECS - 1) / DHCP_FINE_TIMER_MSECS; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_release(): set request timeout %"U16_F" msecs\n", msecs)); -  /* bring the interface down */ -  netif_set_down(netif); -  /* remove IP address from interface */ -  netif_set_ipaddr(netif, IP_ADDR_ANY); -  netif_set_gw(netif, IP_ADDR_ANY); -  netif_set_netmask(netif, IP_ADDR_ANY); -   -  /* TODO: netif_down(netif); */ -  return result; -} - -/** - * Remove the DHCP client from the interface. - * - * @param netif The network interface to stop DHCP on - */ -void -dhcp_stop(struct netif *netif) -{ -  struct dhcp *dhcp = netif->dhcp; -  LWIP_ERROR("dhcp_stop: netif != NULL", (netif != NULL), return;); -  /* Remove the flag that says this netif is handled by DHCP. */ -  netif->flags &= ~NETIF_FLAG_DHCP; - -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_stop()\n")); -  /* netif is DHCP configured? */ -  if (dhcp != NULL) { -#if LWIP_DHCP_AUTOIP_COOP -  if(dhcp->autoip_coop_state == DHCP_AUTOIP_COOP_STATE_ON) { -    autoip_stop(netif); -    dhcp->autoip_coop_state = DHCP_AUTOIP_COOP_STATE_OFF; -  } -#endif /* LWIP_DHCP_AUTOIP_COOP */ - -    if (dhcp->pcb != NULL) { -      udp_remove(dhcp->pcb); -      dhcp->pcb = NULL; -    } -    LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL && -      dhcp->options_in == NULL && dhcp->options_in_len == 0); -    mem_free((void *)dhcp); -    netif->dhcp = NULL; -  } -} - -/* - * Set the DHCP state of a DHCP client. - * - * If the state changed, reset the number of tries. - * - * TODO: we might also want to reset the timeout here? - */ -static void -dhcp_set_state(struct dhcp *dhcp, u8_t new_state) -{ -  if (new_state != dhcp->state) { -    dhcp->state = new_state; -    dhcp->tries = 0; -  } -} - -/* - * Concatenate an option type and length field to the outgoing - * DHCP message. - * - */ -static void -dhcp_option(struct dhcp *dhcp, u8_t option_type, u8_t option_len) -{ -  LWIP_ASSERT("dhcp_option: dhcp->options_out_len + 2 + option_len <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U + option_len <= DHCP_OPTIONS_LEN); -  dhcp->msg_out->options[dhcp->options_out_len++] = option_type; -  dhcp->msg_out->options[dhcp->options_out_len++] = option_len; -} -/* - * Concatenate a single byte to the outgoing DHCP message. - * - */ -static void -dhcp_option_byte(struct dhcp *dhcp, u8_t value) -{ -  LWIP_ASSERT("dhcp_option_byte: dhcp->options_out_len < DHCP_OPTIONS_LEN", dhcp->options_out_len < DHCP_OPTIONS_LEN); -  dhcp->msg_out->options[dhcp->options_out_len++] = value; -} - -static void -dhcp_option_short(struct dhcp *dhcp, u16_t value) -{ -  LWIP_ASSERT("dhcp_option_short: dhcp->options_out_len + 2 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 2U <= DHCP_OPTIONS_LEN); -  dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff00U) >> 8); -  dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t) (value & 0x00ffU); -} - -static void -dhcp_option_long(struct dhcp *dhcp, u32_t value) -{ -  LWIP_ASSERT("dhcp_option_long: dhcp->options_out_len + 4 <= DHCP_OPTIONS_LEN", dhcp->options_out_len + 4U <= DHCP_OPTIONS_LEN); -  dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0xff000000UL) >> 24); -  dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x00ff0000UL) >> 16); -  dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x0000ff00UL) >> 8); -  dhcp->msg_out->options[dhcp->options_out_len++] = (u8_t)((value & 0x000000ffUL)); -} - -/** - * Extract the DHCP message and the DHCP options. - * - * Extract the DHCP message and the DHCP options, each into a contiguous - * piece of memory. As a DHCP message is variable sized by its options, - * and also allows overriding some fields for options, the easy approach - * is to first unfold the options into a conitguous piece of memory, and - * use that further on. - * - */ -static err_t -dhcp_unfold_reply(struct dhcp *dhcp, struct pbuf *p) -{ -  u16_t ret; -  LWIP_ERROR("dhcp != NULL", (dhcp != NULL), return ERR_ARG;); -  /* free any left-overs from previous unfolds */ -  dhcp_free_reply(dhcp); -  /* options present? */ -  if (p->tot_len > (sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN)) { -    dhcp->options_in_len = p->tot_len - (sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN); -    dhcp->options_in = mem_malloc(dhcp->options_in_len); -    if (dhcp->options_in == NULL) { -      LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, -        ("dhcp_unfold_reply(): could not allocate dhcp->options\n")); -      dhcp->options_in_len = 0; -      return ERR_MEM; -    } -  } -  dhcp->msg_in = mem_malloc(sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN); -  if (dhcp->msg_in == NULL) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, -      ("dhcp_unfold_reply(): could not allocate dhcp->msg_in\n")); -    if (dhcp->options_in != NULL) { -      mem_free(dhcp->options_in); -      dhcp->options_in = NULL; -      dhcp->options_in_len = 0; -    } -    return ERR_MEM; -  } - -  /** copy the DHCP message without options */ -  ret = pbuf_copy_partial(p, dhcp->msg_in, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN, 0); -  LWIP_ASSERT("ret == sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN", ret == sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN); -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_unfold_reply(): copied %"U16_F" bytes into dhcp->msg_in[]\n", -     sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN)); - -  if (dhcp->options_in != NULL) { -    /** copy the DHCP options */ -    ret = pbuf_copy_partial(p, dhcp->options_in, dhcp->options_in_len, sizeof(struct dhcp_msg) - DHCP_OPTIONS_LEN); -    LWIP_ASSERT("ret == dhcp->options_in_len", ret == dhcp->options_in_len); -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_unfold_reply(): copied %"U16_F" bytes to dhcp->options_in[]\n", -      dhcp->options_in_len)); -  } -  LWIP_UNUSED_ARG(ret); -  return ERR_OK; -} - -/** - * Free the incoming DHCP message including contiguous copy of - * its DHCP options. - */ -static void dhcp_free_reply(struct dhcp *dhcp) -{ -  if (dhcp->msg_in != NULL) { -    mem_free((void *)dhcp->msg_in); -    dhcp->msg_in = NULL; -  } -  if (dhcp->options_in) { -    mem_free(dhcp->options_in); -    dhcp->options_in = NULL; -    dhcp->options_in_len = 0; -  } -  LWIP_DEBUGF(DHCP_DEBUG, ("dhcp_free_reply(): free'd\n")); -} - -/** - * If an incoming DHCP message is in response to us, then trigger the state machine - */ -static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port) -{ -  struct netif *netif = (struct netif *)arg; -  struct dhcp *dhcp = netif->dhcp; -  struct dhcp_msg *reply_msg = (struct dhcp_msg *)p->payload; -  u8_t *options_ptr; -  u8_t msg_type; -  u8_t i; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_recv(pbuf = %p) from DHCP server %"U16_F".%"U16_F".%"U16_F".%"U16_F" port %"U16_F"\n", (void*)p, -    (u16_t)(ntohl(addr->addr) >> 24 & 0xff), (u16_t)(ntohl(addr->addr) >> 16 & 0xff), -    (u16_t)(ntohl(addr->addr) >>  8 & 0xff), (u16_t)(ntohl(addr->addr) & 0xff), port)); -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("pbuf->len = %"U16_F"\n", p->len)); -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("pbuf->tot_len = %"U16_F"\n", p->tot_len)); -  /* prevent warnings about unused arguments */ -  LWIP_UNUSED_ARG(pcb); -  LWIP_UNUSED_ARG(addr); -  LWIP_UNUSED_ARG(port); - -  LWIP_ASSERT("reply wasn't freed", dhcp->msg_in == NULL && -    dhcp->options_in == NULL && dhcp->options_in_len == 0); - -  if (p->len < DHCP_MIN_REPLY_LEN) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP reply message too short\n")); -    goto free_pbuf_and_return; -  } - -  if (reply_msg->op != DHCP_BOOTREPLY) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("not a DHCP reply message, but type %"U16_F"\n", (u16_t)reply_msg->op)); -    goto free_pbuf_and_return; -  } -  /* iterate through hardware address and match against DHCP message */ -  for (i = 0; i < netif->hwaddr_len; i++) { -    if (netif->hwaddr[i] != reply_msg->chaddr[i]) { -      LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, -        ("netif->hwaddr[%"U16_F"]==%02"X16_F" != reply_msg->chaddr[%"U16_F"]==%02"X16_F"\n", -        (u16_t)i, (u16_t)netif->hwaddr[i], (u16_t)i, (u16_t)reply_msg->chaddr[i])); -      goto free_pbuf_and_return; -    } -  } -  /* match transaction ID against what we expected */ -  if (ntohl(reply_msg->xid) != dhcp->xid) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, -      ("transaction id mismatch reply_msg->xid(%"X32_F")!=dhcp->xid(%"X32_F")\n",ntohl(reply_msg->xid),dhcp->xid)); -    goto free_pbuf_and_return; -  } -  /* option fields could be unfold? */ -  if (dhcp_unfold_reply(dhcp, p) != ERR_OK) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, -      ("problem unfolding DHCP message - too short on memory?\n")); -    goto free_pbuf_and_return; -  } - -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("searching DHCP_OPTION_MESSAGE_TYPE\n")); -  /* obtain pointer to DHCP message type */ -  options_ptr = dhcp_get_option_ptr(dhcp, DHCP_OPTION_MESSAGE_TYPE); -  if (options_ptr == NULL) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("DHCP_OPTION_MESSAGE_TYPE option not found\n")); -    goto free_pbuf_and_return; -  } - -  /* read DHCP message type */ -  msg_type = dhcp_get_option_byte(options_ptr + 2); -  /* message type is DHCP ACK? */ -  if (msg_type == DHCP_ACK) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_ACK received\n")); -    /* in requesting state? */ -    if (dhcp->state == DHCP_REQUESTING) { -      dhcp_handle_ack(netif); -      dhcp->request_timeout = 0; -#if DHCP_DOES_ARP_CHECK -      /* check if the acknowledged lease address is already in use */ -      dhcp_check(netif); -#else -      /* bind interface to the acknowledged lease address */ -      dhcp_bind(netif); -#endif -    } -    /* already bound to the given lease address? */ -    else if ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING)) { -      dhcp->request_timeout = 0; -      dhcp_bind(netif); -    } -  } -  /* received a DHCP_NAK in appropriate state? */ -  else if ((msg_type == DHCP_NAK) && -    ((dhcp->state == DHCP_REBOOTING) || (dhcp->state == DHCP_REQUESTING) || -     (dhcp->state == DHCP_REBINDING) || (dhcp->state == DHCP_RENEWING  ))) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_NAK received\n")); -    dhcp->request_timeout = 0; -    dhcp_handle_nak(netif); -  } -  /* received a DHCP_OFFER in DHCP_SELECTING state? */ -  else if ((msg_type == DHCP_OFFER) && (dhcp->state == DHCP_SELECTING)) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("DHCP_OFFER received in DHCP_SELECTING state\n")); -    dhcp->request_timeout = 0; -    /* remember offered lease */ -    dhcp_handle_offer(netif); -  } -free_pbuf_and_return: -  dhcp_free_reply(dhcp); -  pbuf_free(p); -} - -/** - * Create a DHCP request, fill in common headers - * - * @param netif the netif under DHCP control - */ -static err_t -dhcp_create_request(struct netif *netif) -{ -  struct dhcp *dhcp; -  u16_t i; -#ifndef DHCP_GLOBAL_XID -  /** default global transaction identifier starting value (easy to match -   *  with a packet analyser). We simply increment for each new request. -   *  Predefine DHCP_GLOBAL_XID to a better value or a function call to generate one -   *  at runtime, any supporting function prototypes can be defined in DHCP_GLOBAL_XID_HEADER */ -  static u32_t xid = 0xABCD0000; -#else -  static u32_t xid; -  static u8_t xid_initialised = 0; -  if (!xid_initialised) { -    xid = DHCP_GLOBAL_XID; -    xid_initialised = !xid_initialised; -  } -#endif -  LWIP_ERROR("dhcp_create_request: netif != NULL", (netif != NULL), return ERR_ARG;); -  dhcp = netif->dhcp; -  LWIP_ERROR("dhcp_create_request: dhcp != NULL", (dhcp != NULL), return ERR_VAL;); -  LWIP_ASSERT("dhcp_create_request: dhcp->p_out == NULL", dhcp->p_out == NULL); -  LWIP_ASSERT("dhcp_create_request: dhcp->msg_out == NULL", dhcp->msg_out == NULL); -  dhcp->p_out = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcp_msg), PBUF_RAM); -  if (dhcp->p_out == NULL) { -    LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, -      ("dhcp_create_request(): could not allocate pbuf\n")); -    return ERR_MEM; -  } -  LWIP_ASSERT("dhcp_create_request: check that first pbuf can hold struct dhcp_msg", -           (dhcp->p_out->len >= sizeof(struct dhcp_msg))); - -  /* reuse transaction identifier in retransmissions */ -  if (dhcp->tries==0) -      xid++; -  dhcp->xid = xid; -  LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, -              ("transaction id xid(%"X32_F")\n", xid)); - -  dhcp->msg_out = (struct dhcp_msg *)dhcp->p_out->payload; - -  dhcp->msg_out->op = DHCP_BOOTREQUEST; -  /* TODO: make link layer independent */ -  dhcp->msg_out->htype = DHCP_HTYPE_ETH; -  /* TODO: make link layer independent */ -  dhcp->msg_out->hlen = DHCP_HLEN_ETH; -  dhcp->msg_out->hops = 0; -  dhcp->msg_out->xid = htonl(dhcp->xid); -  dhcp->msg_out->secs = 0; -  dhcp->msg_out->flags = 0; -  dhcp->msg_out->ciaddr.addr = 0; -  if (dhcp->state==DHCP_BOUND || dhcp->state==DHCP_RENEWING || dhcp->state==DHCP_REBINDING) { -    dhcp->msg_out->ciaddr.addr = netif->ip_addr.addr; -  } -  dhcp->msg_out->yiaddr.addr = 0; -  dhcp->msg_out->siaddr.addr = 0; -  dhcp->msg_out->giaddr.addr = 0; -  for (i = 0; i < DHCP_CHADDR_LEN; i++) { -    /* copy netif hardware address, pad with zeroes */ -    dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len) ? netif->hwaddr[i] : 0/* pad byte*/; -  } -  for (i = 0; i < DHCP_SNAME_LEN; i++) { -    dhcp->msg_out->sname[i] = 0; -  } -  for (i = 0; i < DHCP_FILE_LEN; i++) { -    dhcp->msg_out->file[i] = 0; -  } -  dhcp->msg_out->cookie = htonl(0x63825363UL); -  dhcp->options_out_len = 0; -  /* fill options field with an incrementing array (for debugging purposes) */ -  for (i = 0; i < DHCP_OPTIONS_LEN; i++) { -    dhcp->msg_out->options[i] = (u8_t)i; /* for debugging only, no matter if truncated */ -  } -  return ERR_OK; -} - -/** - * Free previously allocated memory used to send a DHCP request. - * - * @param netif the netif under DHCP control - */ -static void -dhcp_delete_request(struct netif *netif) -{ -  struct dhcp *dhcp; -  LWIP_ERROR("dhcp_delete_request: netif != NULL", (netif != NULL), return;); -  dhcp = netif->dhcp; -  LWIP_ERROR("dhcp_delete_request: dhcp != NULL", (dhcp != NULL), return;); -  LWIP_ASSERT("dhcp_delete_request: dhcp->p_out != NULL", dhcp->p_out != NULL); -  LWIP_ASSERT("dhcp_delete_request: dhcp->msg_out != NULL", dhcp->msg_out != NULL); -  if (dhcp->p_out != NULL) { -    pbuf_free(dhcp->p_out); -  } -  dhcp->p_out = NULL; -  dhcp->msg_out = NULL; -} - -/** - * Add a DHCP message trailer - * - * Adds the END option to the DHCP message, and if - * necessary, up to three padding bytes. - * - * @param dhcp DHCP state structure - */ -static void -dhcp_option_trailer(struct dhcp *dhcp) -{ -  LWIP_ERROR("dhcp_option_trailer: dhcp != NULL", (dhcp != NULL), return;); -  LWIP_ASSERT("dhcp_option_trailer: dhcp->msg_out != NULL\n", dhcp->msg_out != NULL); -  LWIP_ASSERT("dhcp_option_trailer: dhcp->options_out_len < DHCP_OPTIONS_LEN\n", dhcp->options_out_len < DHCP_OPTIONS_LEN); -  dhcp->msg_out->options[dhcp->options_out_len++] = DHCP_OPTION_END; -  /* packet is too small, or not 4 byte aligned? */ -  while ((dhcp->options_out_len < DHCP_MIN_OPTIONS_LEN) || (dhcp->options_out_len & 3)) { -    /* LWIP_DEBUGF(DHCP_DEBUG,("dhcp_option_trailer:dhcp->options_out_len=%"U16_F", DHCP_OPTIONS_LEN=%"U16_F, dhcp->options_out_len, DHCP_OPTIONS_LEN)); */ -    LWIP_ASSERT("dhcp_option_trailer: dhcp->options_out_len < DHCP_OPTIONS_LEN\n", dhcp->options_out_len < DHCP_OPTIONS_LEN); -    /* add a fill/padding byte */ -    dhcp->msg_out->options[dhcp->options_out_len++] = 0; -  } -} - -/** - * Find the offset of a DHCP option inside the DHCP message. - * - * @param dhcp DHCP client - * @param option_type - * - * @return a byte offset into the UDP message where the option was found, or - * zero if the given option was not found. - */ -static u8_t *dhcp_get_option_ptr(struct dhcp *dhcp, u8_t option_type) -{ -  u8_t overload = DHCP_OVERLOAD_NONE; - -  /* options available? */ -  if ((dhcp->options_in != NULL) && (dhcp->options_in_len > 0)) { -    /* start with options field */ -    u8_t *options = (u8_t *)dhcp->options_in; -    u16_t offset = 0; -    /* at least 1 byte to read and no end marker, then at least 3 bytes to read? */ -    while ((offset < dhcp->options_in_len) && (options[offset] != DHCP_OPTION_END)) { -      /* LWIP_DEBUGF(DHCP_DEBUG, ("msg_offset=%"U16_F", q->len=%"U16_F, msg_offset, q->len)); */ -      /* are the sname and/or file field overloaded with options? */ -      if (options[offset] == DHCP_OPTION_OVERLOAD) { -        LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded message detected\n")); -        /* skip option type and length */ -        offset += 2; -        overload = options[offset++]; -      } -      /* requested option found */ -      else if (options[offset] == option_type) { -        LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("option found at offset %"U16_F" in options\n", offset)); -        return &options[offset]; -      /* skip option */ -      } else { -         LWIP_DEBUGF(DHCP_DEBUG, ("skipping option %"U16_F" in options\n", options[offset])); -        /* skip option type */ -        offset++; -        /* skip option length, and then length bytes */ -        offset += 1 + options[offset]; -      } -    } -    /* is this an overloaded message? */ -    if (overload != DHCP_OVERLOAD_NONE) { -      u16_t field_len; -      if (overload == DHCP_OVERLOAD_FILE) { -        LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded file field\n")); -        options = (u8_t *)&dhcp->msg_in->file; -        field_len = DHCP_FILE_LEN; -      } else if (overload == DHCP_OVERLOAD_SNAME) { -        LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname field\n")); -        options = (u8_t *)&dhcp->msg_in->sname; -        field_len = DHCP_SNAME_LEN; -      /* TODO: check if else if () is necessary */ -      } else { -        LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("overloaded sname and file field\n")); -        options = (u8_t *)&dhcp->msg_in->sname; -        field_len = DHCP_FILE_LEN + DHCP_SNAME_LEN; -      } -      offset = 0; - -      /* at least 1 byte to read and no end marker */ -      while ((offset < field_len) && (options[offset] != DHCP_OPTION_END)) { -        if (options[offset] == option_type) { -           LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("option found at offset=%"U16_F"\n", offset)); -          return &options[offset]; -        /* skip option */ -        } else { -          LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("skipping option %"U16_F"\n", options[offset])); -          /* skip option type */ -          offset++; -          offset += 1 + options[offset]; -        } -      } -    } -  } -  return NULL; -} - -/** - * Return the byte of DHCP option data. - * - * @param client DHCP client. - * @param ptr pointer obtained by dhcp_get_option_ptr(). - * - * @return byte value at the given address. - */ -static u8_t -dhcp_get_option_byte(u8_t *ptr) -{ -  LWIP_DEBUGF(DHCP_DEBUG, ("option byte value=%"U16_F"\n", (u16_t)(*ptr))); -  return *ptr; -} - -#if 0 /* currently unused */ -/** - * Return the 16-bit value of DHCP option data. - * - * @param client DHCP client. - * @param ptr pointer obtained by dhcp_get_option_ptr(). - * - * @return byte value at the given address. - */ -static u16_t -dhcp_get_option_short(u8_t *ptr) -{ -  u16_t value; -  value = *ptr++ << 8; -  value |= *ptr; -  LWIP_DEBUGF(DHCP_DEBUG, ("option short value=%"U16_F"\n", value)); -  return value; -} -#endif - -/** - * Return the 32-bit value of DHCP option data. - * - * @param client DHCP client. - * @param ptr pointer obtained by dhcp_get_option_ptr(). - * - * @return byte value at the given address. - */ -static u32_t dhcp_get_option_long(u8_t *ptr) -{ -  u32_t value; -  value = (u32_t)(*ptr++) << 24; -  value |= (u32_t)(*ptr++) << 16; -  value |= (u32_t)(*ptr++) << 8; -  value |= (u32_t)(*ptr++); -  LWIP_DEBUGF(DHCP_DEBUG, ("option long value=%"U32_F"\n", value)); -  return value; -} - -#endif /* LWIP_DHCP */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dns.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dns.c deleted file mode 100644 index 62ccf63..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dns.c +++ /dev/null @@ -1,982 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * DNS - host name to IP address resolver. - * - */ - -/** - - * This file implements a DNS host name to IP address resolver. - - * Port to lwIP from uIP - * by Jim Pettinato April 2007 - - * uIP version Copyright (c) 2002-2003, Adam Dunkels. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - *    products derived from this software without specific prior - *    written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * - * DNS.C - * - * The lwIP DNS resolver functions are used to lookup a host name and - * map it to a numerical IP address. It maintains a list of resolved - * hostnames that can be queried with the dns_lookup() function. - * New hostnames can be resolved using the dns_query() function. - * - * The lwIP version of the resolver also adds a non-blocking version of - * gethostbyname() that will work with a raw API application. This function - * checks for an IP address string first and converts it if it is valid. - * gethostbyname() then does a dns_lookup() to see if the name is  - * already in the table. If so, the IP is returned. If not, a query is  - * issued and the function returns with a ERR_INPROGRESS status. The app - * using the dns client must then go into a waiting state. - * - * Once a hostname has been resolved (or found to be non-existent), - * the resolver code calls a specified callback function (which  - * must be implemented by the module that uses the resolver). - */ - -/*----------------------------------------------------------------------------- - * RFC 1035 - Domain names - implementation and specification - * RFC 2181 - Clarifications to the DNS Specification - *----------------------------------------------------------------------------*/ - -/** @todo: define good default values (rfc compliance) */ -/** @todo: improve answer parsing, more checkings... */ -/** @todo: check RFC1035 - 7.3. Processing responses */ - -/*----------------------------------------------------------------------------- - * Includes - *----------------------------------------------------------------------------*/ - -#include "lwip/opt.h" - -#if LWIP_DNS /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/udp.h" -#include "lwip/mem.h" -#include "lwip/dns.h" - -#include <string.h> - -/** DNS server IP address */ -#ifndef DNS_SERVER_ADDRESS -#define DNS_SERVER_ADDRESS        inet_addr("208.67.222.222") /* resolver1.opendns.com */ -#endif - -/** DNS server port address */ -#ifndef DNS_SERVER_PORT -#define DNS_SERVER_PORT           53 -#endif - -/** DNS maximum number of retries when asking for a name, before "timeout". */ -#ifndef DNS_MAX_RETRIES -#define DNS_MAX_RETRIES           4 -#endif - -/** DNS resource record max. TTL (one week as default) */ -#ifndef DNS_MAX_TTL -#define DNS_MAX_TTL               604800 -#endif - -/* DNS protocol flags */ -#define DNS_FLAG1_RESPONSE        0x80 -#define DNS_FLAG1_OPCODE_STATUS   0x10 -#define DNS_FLAG1_OPCODE_INVERSE  0x08 -#define DNS_FLAG1_OPCODE_STANDARD 0x00 -#define DNS_FLAG1_AUTHORATIVE     0x04 -#define DNS_FLAG1_TRUNC           0x02 -#define DNS_FLAG1_RD              0x01 -#define DNS_FLAG2_RA              0x80 -#define DNS_FLAG2_ERR_MASK        0x0f -#define DNS_FLAG2_ERR_NONE        0x00 -#define DNS_FLAG2_ERR_NAME        0x03 - -/* DNS protocol states */ -#define DNS_STATE_UNUSED          0 -#define DNS_STATE_NEW             1 -#define DNS_STATE_ASKING          2 -#define DNS_STATE_DONE            3 - -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -/** DNS message header */ -struct dns_hdr { -  PACK_STRUCT_FIELD(u16_t id); -  PACK_STRUCT_FIELD(u8_t flags1); -  PACK_STRUCT_FIELD(u8_t flags2); -  PACK_STRUCT_FIELD(u16_t numquestions); -  PACK_STRUCT_FIELD(u16_t numanswers); -  PACK_STRUCT_FIELD(u16_t numauthrr); -  PACK_STRUCT_FIELD(u16_t numextrarr); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif -#define SIZEOF_DNS_HDR 12 - -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -/** DNS query message structure */ -struct dns_query { -  /* DNS query record starts with either a domain name or a pointer -     to a name already present somewhere in the packet. */ -  PACK_STRUCT_FIELD(u16_t type); -  PACK_STRUCT_FIELD(u16_t class); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif -#define SIZEOF_DNS_QUERY 4 - -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -/** DNS answer message structure */ -struct dns_answer { -  /* DNS answer record starts with either a domain name or a pointer -     to a name already present somewhere in the packet. */ -  PACK_STRUCT_FIELD(u16_t type); -  PACK_STRUCT_FIELD(u16_t class); -  PACK_STRUCT_FIELD(u32_t ttl); -  PACK_STRUCT_FIELD(u16_t len); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif -#define SIZEOF_DNS_ANSWER 10 - -/** DNS table entry */ -struct dns_table_entry { -  u8_t  state; -  u8_t  numdns; -  u8_t  tmr; -  u8_t  retries; -  u8_t  seqno; -  u8_t  err; -  u32_t ttl; -  char name[DNS_MAX_NAME_LENGTH]; -  struct ip_addr ipaddr; -  /* pointer to callback on DNS query done */ -  dns_found_callback found; -  void *arg; -}; - -#if DNS_LOCAL_HOSTLIST -/** struct used for local host-list */ -struct local_hostlist_entry { -  /** static hostname */ -  const char *name; -  /** static host address in network byteorder */ -  u32_t addr; -  struct local_hostlist_entry *next; -}; - -#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC -/** Local host-list. For hostnames in this list, no - *  external name resolution is performed */ -static struct local_hostlist_entry *local_hostlist_dynamic; -#else /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ - -/** Defining this allows the local_hostlist_static to be placed in a different - * linker section (e.g. FLASH) */ -#ifndef DNS_LOCAL_HOSTLIST_STORAGE_PRE -#define DNS_LOCAL_HOSTLIST_STORAGE_PRE static -#endif /* DNS_LOCAL_HOSTLIST_STORAGE_PRE */ -/** Defining this allows the local_hostlist_static to be placed in a different - * linker section (e.g. FLASH) */ -#ifndef DNS_LOCAL_HOSTLIST_STORAGE_POST -#define DNS_LOCAL_HOSTLIST_STORAGE_POST -#endif /* DNS_LOCAL_HOSTLIST_STORAGE_POST */ -DNS_LOCAL_HOSTLIST_STORAGE_PRE struct local_hostlist_entry local_hostlist_static[] -  DNS_LOCAL_HOSTLIST_STORAGE_POST = DNS_LOCAL_HOSTLIST_INIT; - -#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ - -static void dns_init_local(); -#endif /* DNS_LOCAL_HOSTLIST */ - - -/* forward declarations */ -static void dns_recv(void *s, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port); -static void dns_check_entries(void); - -/*----------------------------------------------------------------------------- - * Globales - *----------------------------------------------------------------------------*/ - -/* DNS variables */ -static struct udp_pcb        *dns_pcb; -static u8_t                   dns_seqno; -static struct dns_table_entry dns_table[DNS_TABLE_SIZE]; -static struct ip_addr         dns_servers[DNS_MAX_SERVERS]; - -#if (DNS_USES_STATIC_BUF == 1) -static u8_t                   dns_payload[DNS_MSG_SIZE]; -#endif /* (DNS_USES_STATIC_BUF == 1) */ - -/** - * Initialize the resolver: set up the UDP pcb and configure the default server - * (DNS_SERVER_ADDRESS). - */ -void -dns_init() -{ -  struct ip_addr dnsserver; -   -  /* initialize default DNS server address */ -  dnsserver.addr = DNS_SERVER_ADDRESS; - -  LWIP_DEBUGF(DNS_DEBUG, ("dns_init: initializing\n")); - -  /* if dns client not yet initialized... */ -  if (dns_pcb == NULL) { -    dns_pcb = udp_new(); - -    if (dns_pcb != NULL) { -      /* initialize DNS table not needed (initialized to zero since it is a -       * global variable) */ -      LWIP_ASSERT("For implicit initialization to work, DNS_STATE_UNUSED needs to be 0", -        DNS_STATE_UNUSED == 0); - -      /* initialize DNS client */ -      udp_bind(dns_pcb, IP_ADDR_ANY, 0); -      udp_recv(dns_pcb, dns_recv, NULL); - -      /* initialize default DNS primary server */ -      dns_setserver(0, &dnsserver); -    } -  } -#if DNS_LOCAL_HOSTLIST -  dns_init_local(); -#endif -} - -/** - * Initialize one of the DNS servers. - * - * @param numdns the index of the DNS server to set must be < DNS_MAX_SERVERS - * @param dnsserver IP address of the DNS server to set - */ -void -dns_setserver(u8_t numdns, struct ip_addr *dnsserver) -{ -  if ((numdns < DNS_MAX_SERVERS) && (dns_pcb != NULL) && -      (dnsserver != NULL) && (dnsserver->addr !=0 )) { -    dns_servers[numdns] = (*dnsserver); -  } -} - -/** - * Obtain one of the currently configured DNS server. - * - * @param numdns the index of the DNS server - * @return IP address of the indexed DNS server or "ip_addr_any" if the DNS - *         server has not been configured. - */ -struct ip_addr -dns_getserver(u8_t numdns) -{ -  if (numdns < DNS_MAX_SERVERS) { -    return dns_servers[numdns]; -  } else { -    return *IP_ADDR_ANY; -  } -} - -/** - * The DNS resolver client timer - handle retries and timeouts and should - * be called every DNS_TMR_INTERVAL milliseconds (every second by default). - */ -void -dns_tmr(void) -{ -  if (dns_pcb != NULL) { -    LWIP_DEBUGF(DNS_DEBUG, ("dns_tmr: dns_check_entries\n")); -    dns_check_entries(); -  } -} - -#if DNS_LOCAL_HOSTLIST -static void -dns_init_local() -{ -#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC && defined(DNS_LOCAL_HOSTLIST_INIT) -  int i; -  struct local_hostlist_entry *entry; -  /* Dynamic: copy entries from DNS_LOCAL_HOSTLIST_INIT to list */ -  struct local_hostlist_entry local_hostlist_init[] = DNS_LOCAL_HOSTLIST_INIT; -  for (i = 0; i < sizeof(local_hostlist_init) / sizeof(struct local_hostlist_entry); i++) { -    entry = mem_malloc(sizeof(struct local_hostlist_entry)); -    LWIP_ASSERT("mem-error in dns_init_local", entry != NULL); -    if (entry != NULL) { -      struct local_hostlist_entry *init_entry = &local_hostlist_init[i]; -      entry->name = init_entry->name; -      entry->addr = init_entry->addr; -      entry->next = local_hostlist_dynamic; -      local_hostlist_dynamic = entry; -    } -  } -#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC && defined(DNS_LOCAL_HOSTLIST_INIT) */ -} - -/** - * Scans the local host-list for a hostname. - * - * @param hostname Hostname to look for in the local host-list - * @return The first IP address for the hostname in the local host-list or - *         INADDR_NONE if not found. - */ -static u32_t -dns_lookup_local(const char *hostname) -{ -#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC -  struct local_hostlist_entry *entry = local_hostlist_dynamic; -  while(entry != NULL) { -    if(strcmp(entry->name, hostname) == 0) { -      return entry->addr; -    } -    entry = entry->next; -  } -#else /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ -  int i; -  for (i = 0; i < sizeof(local_hostlist_static) / sizeof(struct local_hostlist_entry); i++) { -    if(strcmp(local_hostlist_static[i].name, hostname) == 0) { -      return local_hostlist_static[i].addr; -    } -  } -#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ -  return INADDR_NONE; -} - -#if DNS_LOCAL_HOSTLIST_IS_DYNAMIC -/** Remove all entries from the local host-list for a specific hostname - * and/or IP addess - * - * @param hostname hostname for which entries shall be removed from the local - *                 host-list - * @param addr address for which entries shall be removed from the local host-list - * @return the number of removed entries - */ -int -dns_local_removehost(const char *hostname, const struct ip_addr *addr) -{ -  int removed = 0; -  struct local_hostlist_entry *entry = local_hostlist_dynamic; -  struct local_hostlist_entry *last_entry = NULL; -  while (entry != NULL) { -    if (((hostname == NULL) || !strcmp(entry->name, hostname)) && -        ((addr == NULL) || (entry->addr == addr->addr))) { -      struct local_hostlist_entry *free_entry; -      if (last_entry != NULL) { -        last_entry->next = entry->next; -      } else { -        local_hostlist_dynamic = entry->next; -      } -      free_entry = entry; -      entry = entry->next; -      mem_free(free_entry); -      removed++; -    } else { -      last_entry = entry; -      entry = entry->next; -    } -  } -  return removed; -} - -/** - * Add a hostname/IP address pair to the local host-list. - * Duplicates are not checked. - * - * @param hostname hostname of the new entry - * @param addr IP address of the new entry - * @return ERR_OK if succeeded or ERR_MEM on memory error - */ -err_t -dns_local_addhost(const char *hostname, const struct ip_addr *addr) -{ -  struct local_hostlist_entry *entry; -  entry = mem_malloc(sizeof(struct local_hostlist_entry)); -  if (entry == NULL) { -    return ERR_MEM; -  } -  entry->name = hostname; -  entry->addr = addr->addr; -  entry->next = local_hostlist_dynamic; -  local_hostlist_dynamic = entry; -  return ERR_OK; -} -#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC*/ -#endif /* DNS_LOCAL_HOSTLIST */ - -/** - * Look up a hostname in the array of known hostnames. - * - * @note This function only looks in the internal array of known - * hostnames, it does not send out a query for the hostname if none - * was found. The function dns_enqueue() can be used to send a query - * for a hostname. - * - * @param name the hostname to look up - * @return the hostname's IP address, as u32_t (instead of struct ip_addr to - *         better check for failure: != INADDR_NONE) or INADDR_NONE if the hostname - *         was not found in the cached dns_table. - */ -static u32_t -dns_lookup(const char *name) -{ -  u8_t i; -#if DNS_LOCAL_HOSTLIST || defined(DNS_LOOKUP_LOCAL_EXTERN) -  u32_t addr; -#endif /* DNS_LOCAL_HOSTLIST || defined(DNS_LOOKUP_LOCAL_EXTERN) */ -#if DNS_LOCAL_HOSTLIST -  if ((addr = dns_lookup_local(name)) != INADDR_NONE) { -    return addr; -  } -#endif /* DNS_LOCAL_HOSTLIST */ -#ifdef DNS_LOOKUP_LOCAL_EXTERN -  if((addr = DNS_LOOKUP_LOCAL_EXTERN(name)) != INADDR_NONE) { -    return addr; -  } -#endif /* DNS_LOOKUP_LOCAL_EXTERN */ - -  /* Walk through name list, return entry if found. If not, return NULL. */ -  for (i = 0; i < DNS_TABLE_SIZE; ++i) { -    if ((dns_table[i].state == DNS_STATE_DONE) && -        (strcmp(name, dns_table[i].name) == 0)) { -      LWIP_DEBUGF(DNS_DEBUG, ("dns_lookup: \"%s\": found = ", name)); -      ip_addr_debug_print(DNS_DEBUG, &(dns_table[i].ipaddr)); -      LWIP_DEBUGF(DNS_DEBUG, ("\n")); -      return dns_table[i].ipaddr.addr; -    } -  } - -  return INADDR_NONE; -} - -#if DNS_DOES_NAME_CHECK -/** - * Compare the "dotted" name "query" with the encoded name "response" - * to make sure an answer from the DNS server matches the current dns_table - * entry (otherwise, answers might arrive late for hostname not on the list - * any more). - * - * @param query hostname (not encoded) from the dns_table - * @param response encoded hostname in the DNS response - * @return 0: names equal; 1: names differ - */ -static u8_t -dns_compare_name(unsigned char *query, unsigned char *response) -{ -  unsigned char n; - -  do { -    n = *response++; -    /** @see RFC 1035 - 4.1.4. Message compression */ -    if ((n & 0xc0) == 0xc0) { -      /* Compressed name */ -      break; -    } else { -      /* Not compressed name */ -      while (n > 0) { -        if ((*query) != (*response)) { -          return 1; -        } -        ++response; -        ++query; -        --n; -      }; -      ++query; -    } -  } while (*response != 0); - -  return 0; -} -#endif /* DNS_DOES_NAME_CHECK */ - -/** - * Walk through a compact encoded DNS name and return the end of the name. - * - * @param query encoded DNS name in the DNS server response - * @return end of the name - */ -static unsigned char * -dns_parse_name(unsigned char *query) -{ -  unsigned char n; - -  do { -    n = *query++; -    /** @see RFC 1035 - 4.1.4. Message compression */ -    if ((n & 0xc0) == 0xc0) { -      /* Compressed name */ -      break; -    } else { -      /* Not compressed name */ -      while (n > 0) { -        ++query; -        --n; -      }; -    } -  } while (*query != 0); - -  return query + 1; -} - -/** - * Send a DNS query packet. - * - * @param numdns index of the DNS server in the dns_servers table - * @param name hostname to query - * @param id index of the hostname in dns_table, used as transaction ID in the - *        DNS query packet - * @return ERR_OK if packet is sent; an err_t indicating the problem otherwise - */ -static err_t -dns_send(u8_t numdns, const char* name, u8_t id) -{ -  err_t err; -  struct dns_hdr *hdr; -  struct dns_query qry; -  struct pbuf *p; -  char *query, *nptr; -  const char *pHostname; -  u8_t n; - -  LWIP_DEBUGF(DNS_DEBUG, ("dns_send: dns_servers[%"U16_F"] \"%s\": request\n", -              (u16_t)(numdns), name)); -  LWIP_ASSERT("dns server out of array", numdns < DNS_MAX_SERVERS); -  LWIP_ASSERT("dns server has no IP address set", dns_servers[numdns].addr != 0); - -  /* if here, we have either a new query or a retry on a previous query to process */ -  p = pbuf_alloc(PBUF_TRANSPORT, SIZEOF_DNS_HDR + DNS_MAX_NAME_LENGTH + -                 SIZEOF_DNS_QUERY, PBUF_RAM); -  if (p != NULL) { -    LWIP_ASSERT("pbuf must be in one piece", p->next == NULL); -    /* fill dns header */ -    hdr = (struct dns_hdr*)p->payload; -    memset(hdr, 0, SIZEOF_DNS_HDR); -    hdr->id = htons(id); -    hdr->flags1 = DNS_FLAG1_RD; -    hdr->numquestions = htons(1); -    query = (char*)hdr + SIZEOF_DNS_HDR; -    pHostname = name; -    --pHostname; - -    /* convert hostname into suitable query format. */ -    do { -      ++pHostname; -      nptr = query; -      ++query; -      for(n = 0; *pHostname != '.' && *pHostname != 0; ++pHostname) { -        *query = *pHostname; -        ++query; -        ++n; -      } -      *nptr = n; -    } while(*pHostname != 0); -    *query++='\0'; - -    /* fill dns query */ -    qry.type  = htons(DNS_RRTYPE_A); -    qry.class = htons(DNS_RRCLASS_IN); -    MEMCPY( query, &qry, SIZEOF_DNS_QUERY); - -    /* resize pbuf to the exact dns query */ -    pbuf_realloc(p, (query + SIZEOF_DNS_QUERY) - ((char*)(p->payload))); - -    /* connect to the server for faster receiving */ -    udp_connect(dns_pcb, &dns_servers[numdns], DNS_SERVER_PORT); -    /* send dns packet */ -    err = udp_sendto(dns_pcb, p, &dns_servers[numdns], DNS_SERVER_PORT); - -    /* free pbuf */ -    pbuf_free(p); -  } else { -    err = ERR_MEM; -  } - -  return err; -} - -/** - * dns_check_entry() - see if pEntry has not yet been queried and, if so, sends out a query. - * Check an entry in the dns_table: - * - send out query for new entries - * - retry old pending entries on timeout (also with different servers) - * - remove completed entries from the table if their TTL has expired - * - * @param i index of the dns_table entry to check - */ -static void -dns_check_entry(u8_t i) -{ -  struct dns_table_entry *pEntry = &dns_table[i]; - -  LWIP_ASSERT("array index out of bounds", i < DNS_TABLE_SIZE); - -  switch(pEntry->state) { - -    case DNS_STATE_NEW: { -      /* initialize new entry */ -      pEntry->state   = DNS_STATE_ASKING; -      pEntry->numdns  = 0; -      pEntry->tmr     = 1; -      pEntry->retries = 0; -       -      /* send DNS packet for this entry */ -      dns_send(pEntry->numdns, pEntry->name, i); -      break; -    } - -    case DNS_STATE_ASKING: { -      if (--pEntry->tmr == 0) { -        if (++pEntry->retries == DNS_MAX_RETRIES) { -          if ((pEntry->numdns+1<DNS_MAX_SERVERS) && (dns_servers[pEntry->numdns+1].addr!=0)) { -            /* change of server */ -            pEntry->numdns++; -            pEntry->tmr     = 1; -            pEntry->retries = 0; -            break; -          } else { -            LWIP_DEBUGF(DNS_DEBUG, ("dns_check_entry: \"%s\": timeout\n", pEntry->name)); -            /* call specified callback function if provided */ -            if (pEntry->found) -              (*pEntry->found)(pEntry->name, NULL, pEntry->arg); -            /* flush this entry */ -            pEntry->state   = DNS_STATE_UNUSED; -            pEntry->found   = NULL; -            break; -          } -        } - -        /* wait longer for the next retry */ -        pEntry->tmr = pEntry->retries; - -        /* send DNS packet for this entry */ -        dns_send(pEntry->numdns, pEntry->name, i); -      } -      break; -    } - -    case DNS_STATE_DONE: { -      /* if the time to live is nul */ -      if (--pEntry->ttl == 0) { -        LWIP_DEBUGF(DNS_DEBUG, ("dns_check_entry: \"%s\": flush\n", pEntry->name)); -        /* flush this entry */ -        pEntry->state = DNS_STATE_UNUSED; -        pEntry->found = NULL; -      } -      break; -    } -    case DNS_STATE_UNUSED: -      /* nothing to do */ -      break; -    default: -      LWIP_ASSERT("unknown dns_table entry state:", 0); -      break; -  } -} - -/** - * Call dns_check_entry for each entry in dns_table - check all entries. - */ -static void -dns_check_entries(void) -{ -  u8_t i; - -  for (i = 0; i < DNS_TABLE_SIZE; ++i) { -    dns_check_entry(i); -  } -} - -/** - * Receive input function for DNS response packets arriving for the dns UDP pcb. - * - * @params see udp.h - */ -static void -dns_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port) -{ -  u8_t i; -  char *pHostname; -  struct dns_hdr *hdr; -  struct dns_answer ans; -  struct dns_table_entry *pEntry; -  u8_t nquestions, nanswers; -#if (DNS_USES_STATIC_BUF == 0) -  u8_t dns_payload[DNS_MSG_SIZE]; -#endif /* (DNS_USES_STATIC_BUF == 0) */ -#if (DNS_USES_STATIC_BUF == 2) -  u8_t* dns_payload; -#endif /* (DNS_USES_STATIC_BUF == 2) */ - -  LWIP_UNUSED_ARG(arg); -  LWIP_UNUSED_ARG(pcb); -  LWIP_UNUSED_ARG(addr); -  LWIP_UNUSED_ARG(port); - -  /* is the dns message too big ? */ -  if (p->tot_len > DNS_MSG_SIZE) { -    LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: pbuf too big\n")); -    /* free pbuf and return */ -    goto memerr1; -  } - -  /* is the dns message big enough ? */ -  if (p->tot_len < (SIZEOF_DNS_HDR + SIZEOF_DNS_QUERY + SIZEOF_DNS_ANSWER)) { -    LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: pbuf too small\n")); -    /* free pbuf and return */ -    goto memerr1; -  } - -#if (DNS_USES_STATIC_BUF == 2) -  dns_payload = mem_malloc(p->tot_len); -  if (dns_payload == NULL) { -    LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: mem_malloc error\n")); -    /* free pbuf and return */ -    goto memerr1; -  } -#endif /* (DNS_USES_STATIC_BUF == 2) */ - -  /* copy dns payload inside static buffer for processing */  -  if (pbuf_copy_partial(p, dns_payload, p->tot_len, 0) == p->tot_len) { -    /* The ID in the DNS header should be our entry into the name table. */ -    hdr = (struct dns_hdr*)dns_payload; -    i = htons(hdr->id); -    if (i < DNS_TABLE_SIZE) { -      pEntry = &dns_table[i]; -      if(pEntry->state == DNS_STATE_ASKING) { -        /* This entry is now completed. */ -        pEntry->state = DNS_STATE_DONE; -        pEntry->err   = hdr->flags2 & DNS_FLAG2_ERR_MASK; - -        /* We only care about the question(s) and the answers. The authrr -           and the extrarr are simply discarded. */ -        nquestions = htons(hdr->numquestions); -        nanswers   = htons(hdr->numanswers); - -        /* Check for error. If so, call callback to inform. */ -        if (((hdr->flags1 & DNS_FLAG1_RESPONSE) == 0) || (pEntry->err != 0) || (nquestions != 1)) { -          LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": error in flags\n", pEntry->name)); -          /* call callback to indicate error, clean up memory and return */ -          goto responseerr; -        } - -#if DNS_DOES_NAME_CHECK -        /* Check if the name in the "question" part match with the name in the entry. */ -        if (dns_compare_name((unsigned char *)(pEntry->name), (unsigned char *)dns_payload + SIZEOF_DNS_HDR) != 0) { -          LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response not match to query\n", pEntry->name)); -          /* call callback to indicate error, clean up memory and return */ -          goto responseerr; -        } -#endif /* DNS_DOES_NAME_CHECK */ - -        /* Skip the name in the "question" part */ -        pHostname = (char *) dns_parse_name((unsigned char *)dns_payload + SIZEOF_DNS_HDR) + SIZEOF_DNS_QUERY; - -        while(nanswers > 0) { -          /* skip answer resource record's host name */ -          pHostname = (char *) dns_parse_name((unsigned char *)pHostname); - -          /* Check for IP address type and Internet class. Others are discarded. */ -          MEMCPY(&ans, pHostname, SIZEOF_DNS_ANSWER); -          if((ntohs(ans.type) == DNS_RRTYPE_A) && (ntohs(ans.class) == DNS_RRCLASS_IN) && (ntohs(ans.len) == sizeof(struct ip_addr)) ) { -            /* read the answer resource record's TTL, and maximize it if needed */ -            pEntry->ttl = ntohl(ans.ttl); -            if (pEntry->ttl > DNS_MAX_TTL) { -              pEntry->ttl = DNS_MAX_TTL; -            } -            /* read the IP address after answer resource record's header */ -            MEMCPY( &(pEntry->ipaddr), (pHostname+SIZEOF_DNS_ANSWER), sizeof(struct ip_addr)); -            LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": response = ", pEntry->name)); -            ip_addr_debug_print(DNS_DEBUG, (&(pEntry->ipaddr))); -            LWIP_DEBUGF(DNS_DEBUG, ("\n")); -            /* call specified callback function if provided */ -            if (pEntry->found) { -              (*pEntry->found)(pEntry->name, &pEntry->ipaddr, pEntry->arg); -            } -            /* deallocate memory and return */ -            goto memerr2; -          } else { -            pHostname = pHostname + SIZEOF_DNS_ANSWER + htons(ans.len); -          } -          --nanswers; -        } -        LWIP_DEBUGF(DNS_DEBUG, ("dns_recv: \"%s\": error in response\n", pEntry->name)); -        /* call callback to indicate error, clean up memory and return */ -        goto responseerr; -      } -    } -  } - -  /* deallocate memory and return */ -  goto memerr2; - -responseerr: -  /* ERROR: call specified callback function with NULL as name to indicate an error */ -  if (pEntry->found) { -    (*pEntry->found)(pEntry->name, NULL, pEntry->arg); -  } -  /* flush this entry */ -  pEntry->state = DNS_STATE_UNUSED; -  pEntry->found = NULL; - -memerr2: -#if (DNS_USES_STATIC_BUF == 2) -  /* free dns buffer */ -  mem_free(dns_payload); -#endif /* (DNS_USES_STATIC_BUF == 2) */ - -memerr1: -  /* free pbuf */ -  pbuf_free(p); -  return; -} - -/** - * Queues a new hostname to resolve and sends out a DNS query for that hostname - * - * @param name the hostname that is to be queried - * @param found a callback founction to be called on success, failure or timeout - * @param callback_arg argument to pass to the callback function - * @return @return a err_t return code. - */ -static err_t -dns_enqueue(const char *name, dns_found_callback found, void *callback_arg) -{ -  u8_t i; -  u8_t lseq, lseqi; -  struct dns_table_entry *pEntry = NULL; - -  /* search an unused entry, or the oldest one */ -  lseq = lseqi = 0; -  for (i = 0; i < DNS_TABLE_SIZE; ++i) { -    pEntry = &dns_table[i]; -    /* is it an unused entry ? */ -    if (pEntry->state == DNS_STATE_UNUSED) -      break; - -    /* check if this is the oldest completed entry */ -    if (pEntry->state == DNS_STATE_DONE) { -      if ((dns_seqno - pEntry->seqno) > lseq) { -        lseq = dns_seqno - pEntry->seqno; -        lseqi = i; -      } -    } -  } - -  /* if we don't have found an unused entry, use the oldest completed one */ -  if (i == DNS_TABLE_SIZE) { -    if ((lseqi >= DNS_TABLE_SIZE) || (dns_table[lseqi].state != DNS_STATE_DONE)) { -      /* no entry can't be used now, table is full */ -      LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": DNS entries table is full\n", name)); -      return ERR_MEM; -    } else { -      /* use the oldest completed one */ -      i = lseqi; -      pEntry = &dns_table[i]; -    } -  } - -  /* use this entry */ -  LWIP_DEBUGF(DNS_DEBUG, ("dns_enqueue: \"%s\": use DNS entry %"U16_F"\n", name, (u16_t)(i))); - -  /* fill the entry */ -  pEntry->state = DNS_STATE_NEW; -  pEntry->seqno = dns_seqno++; -  pEntry->found = found; -  pEntry->arg   = callback_arg; -  strcpy(pEntry->name, name); - -  /* force to send query without waiting timer */ -  dns_check_entry(i); - -  /* dns query is enqueued */ -  return ERR_INPROGRESS; -} - -/** - * Resolve a hostname (string) into an IP address. - * NON-BLOCKING callback version for use with raw API!!! - * - * Returns immediately with one of err_t return codes: - * - ERR_OK if hostname is a valid IP address string or the host - *   name is already in the local names table. - * - ERR_INPROGRESS enqueue a request to be sent to the DNS server - *   for resolution if no errors are present. - * - * @param hostname the hostname that is to be queried - * @param addr pointer to a struct ip_addr where to store the address if it is already - *             cached in the dns_table (only valid if ERR_OK is returned!) - * @param found a callback function to be called on success, failure or timeout (only if - *              ERR_INPROGRESS is returned!) - * @param callback_arg argument to pass to the callback function - * @return a err_t return code. - */ -err_t -dns_gethostbyname(const char *hostname, struct ip_addr *addr, dns_found_callback found, -                  void *callback_arg) -{ -  /* not initialized or no valid server yet, or invalid addr pointer -   * or invalid hostname or invalid hostname length */ -  if ((dns_pcb == NULL) || (addr == NULL) || -      (!hostname) || (!hostname[0]) || -      (strlen(hostname) >= DNS_MAX_NAME_LENGTH)) { -    return ERR_VAL; -  } - -#if LWIP_HAVE_LOOPIF -  if (strcmp(hostname,"localhost")==0) { -    addr->addr = htonl(INADDR_LOOPBACK); -    return ERR_OK; -  } -#endif /* LWIP_HAVE_LOOPIF */ - -  /* host name already in octet notation? set ip addr and return ERR_OK -   * already have this address cached? */ -  if (((addr->addr = inet_addr(hostname)) != INADDR_NONE) || -      ((addr->addr = dns_lookup(hostname)) != INADDR_NONE)) { -    return ERR_OK; -  } - -  /* queue query with specified callback */ -  return dns_enqueue(hostname, found, callback_arg); -} - -#endif /* LWIP_DNS */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/init.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/init.c deleted file mode 100644 index b799527..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/init.c +++ /dev/null @@ -1,276 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * Modules initialization - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ - -#include "lwip/opt.h" - -#include "lwip/init.h" -#include "lwip/stats.h" -#include "lwip/sys.h" -#include "lwip/mem.h" -#include "lwip/memp.h" -#include "lwip/pbuf.h" -#include "lwip/netif.h" -#include "lwip/sockets.h" -#include "lwip/ip.h" -#include "lwip/raw.h" -#include "lwip/udp.h" -#include "lwip/tcp.h" -#include "lwip/snmp_msg.h" -#include "lwip/autoip.h" -#include "lwip/igmp.h" -#include "lwip/dns.h" -#include "netif/etharp.h" - -/* Compile-time sanity checks for configuration errors. - * These can be done independently of LWIP_DEBUG, without penalty. - */ -#ifndef BYTE_ORDER -  #error "BYTE_ORDER is not defined, you have to define it in your cc.h" -#endif -#if (!IP_SOF_BROADCAST && IP_SOF_BROADCAST_RECV) -  #error "If you want to use broadcast filter per pcb on recv operations, you have to define IP_SOF_BROADCAST=1 in your lwipopts.h" -#endif -#if (!LWIP_ARP && ARP_QUEUEING) -  #error "If you want to use ARP Queueing, you have to define LWIP_ARP=1 in your lwipopts.h" -#endif -#if (!LWIP_UDP && LWIP_UDPLITE) -  #error "If you want to use UDP Lite, you have to define LWIP_UDP=1 in your lwipopts.h" -#endif -#if (!LWIP_UDP && LWIP_SNMP) -  #error "If you want to use SNMP, you have to define LWIP_UDP=1 in your lwipopts.h" -#endif -#if (!LWIP_UDP && LWIP_DHCP) -  #error "If you want to use DHCP, you have to define LWIP_UDP=1 in your lwipopts.h" -#endif -#if (!LWIP_UDP && LWIP_IGMP) -  #error "If you want to use IGMP, you have to define LWIP_UDP=1 in your lwipopts.h" -#endif -#if (!LWIP_UDP && LWIP_DNS) -  #error "If you want to use DNS, you have to define LWIP_UDP=1 in your lwipopts.h" -#endif -#if (LWIP_ARP && (ARP_TABLE_SIZE > 0x7f)) -  #error "If you want to use ARP, ARP_TABLE_SIZE must fit in an s8_t, so, you have to reduce it in your lwipopts.h" -#endif -#if (LWIP_ARP && ARP_QUEUEING && (MEMP_NUM_ARP_QUEUE<=0)) -  #error "If you want to use ARP Queueing, you have to define MEMP_NUM_ARP_QUEUE>=1 in your lwipopts.h" -#endif -#if (LWIP_RAW && (MEMP_NUM_RAW_PCB<=0)) -  #error "If you want to use RAW, you have to define MEMP_NUM_RAW_PCB>=1 in your lwipopts.h" -#endif -#if (LWIP_UDP && (MEMP_NUM_UDP_PCB<=0)) -  #error "If you want to use UDP, you have to define MEMP_NUM_UDP_PCB>=1 in your lwipopts.h" -#endif -#if (LWIP_TCP && (MEMP_NUM_TCP_PCB<=0)) -  #error "If you want to use TCP, you have to define MEMP_NUM_TCP_PCB>=1 in your lwipopts.h" -#endif -#if (LWIP_TCP && (TCP_WND > 0xffff)) -  #error "If you want to use TCP, TCP_WND must fit in an u16_t, so, you have to reduce it in your lwipopts.h" -#endif -#if (LWIP_TCP && (TCP_SND_QUEUELEN > 0xffff)) -  #error "If you want to use TCP, TCP_SND_QUEUELEN must fit in an u16_t, so, you have to reduce it in your lwipopts.h" -#endif -#if (LWIP_TCP && ((TCP_MAXRTX > 12) || (TCP_SYNMAXRTX > 12))) -  #error "If you want to use TCP, TCP_MAXRTX and TCP_SYNMAXRTX must less or equal to 12 (due to tcp_backoff table), so, you have to reduce them in your lwipopts.h" -#endif -#if (LWIP_TCP && TCP_LISTEN_BACKLOG && (TCP_DEFAULT_LISTEN_BACKLOG < 0) || (TCP_DEFAULT_LISTEN_BACKLOG > 0xff)) -  #error "If you want to use TCP backlog, TCP_DEFAULT_LISTEN_BACKLOG must fit into an u8_t" -#endif -#if (LWIP_IGMP && (MEMP_NUM_IGMP_GROUP<=1)) -  #error "If you want to use IGMP, you have to define MEMP_NUM_IGMP_GROUP>1 in your lwipopts.h" -#endif -#if (PPP_SUPPORT && (NO_SYS==1)) -  #error "If you want to use PPP, you have to define NO_SYS=0 in your lwipopts.h" -#endif  -#if (LWIP_NETIF_API && (NO_SYS==1)) -  #error "If you want to use NETIF API, you have to define NO_SYS=0 in your lwipopts.h" -#endif -#if ((LWIP_SOCKET || LWIP_NETCONN) && (NO_SYS==1)) -  #error "If you want to use Sequential API, you have to define NO_SYS=0 in your lwipopts.h" -#endif -#if ((LWIP_NETCONN || LWIP_SOCKET) && (MEMP_NUM_TCPIP_MSG_API<=0)) -  #error "If you want to use Sequential API, you have to define MEMP_NUM_TCPIP_MSG_API>=1 in your lwipopts.h" -#endif -#if (!LWIP_NETCONN && LWIP_SOCKET) -  #error "If you want to use Socket API, you have to define LWIP_NETCONN=1 in your lwipopts.h" -#endif -#if (((!LWIP_DHCP) || (!LWIP_AUTOIP)) && LWIP_DHCP_AUTOIP_COOP) -  #error "If you want to use DHCP/AUTOIP cooperation mode, you have to define LWIP_DHCP=1 and LWIP_AUTOIP=1 in your lwipopts.h" -#endif -#if (((!LWIP_DHCP) || (!LWIP_ARP)) && DHCP_DOES_ARP_CHECK) -  #error "If you want to use DHCP ARP checking, you have to define LWIP_DHCP=1 and LWIP_ARP=1 in your lwipopts.h" -#endif -#if (!LWIP_ARP && LWIP_AUTOIP) -  #error "If you want to use AUTOIP, you have to define LWIP_ARP=1 in your lwipopts.h" -#endif -#if (LWIP_SNMP && (SNMP_CONCURRENT_REQUESTS<=0)) -  #error "If you want to use SNMP, you have to define SNMP_CONCURRENT_REQUESTS>=1 in your lwipopts.h" -#endif -#if (LWIP_SNMP && (SNMP_TRAP_DESTINATIONS<=0)) -  #error "If you want to use SNMP, you have to define SNMP_TRAP_DESTINATIONS>=1 in your lwipopts.h" -#endif -#if (LWIP_TCP && ((LWIP_EVENT_API && LWIP_CALLBACK_API) || (!LWIP_EVENT_API && !LWIP_CALLBACK_API))) -  #error "One and exactly one of LWIP_EVENT_API and LWIP_CALLBACK_API has to be enabled in your lwipopts.h" -#endif -/* There must be sufficient timeouts, taking into account requirements of the subsystems. */ -#if ((NO_SYS==0) && (MEMP_NUM_SYS_TIMEOUT < (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + PPP_SUPPORT))) -  #error "MEMP_NUM_SYS_TIMEOUT is too low to accomodate all required timeouts" -#endif -#if (IP_REASSEMBLY && (MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS)) -  #error "MEMP_NUM_REASSDATA > IP_REASS_MAX_PBUFS doesn't make sense since each struct ip_reassdata must hold 2 pbufs at least!" -#endif -#if (MEM_LIBC_MALLOC && MEM_USE_POOLS) -  #error "MEM_LIBC_MALLOC and MEM_USE_POOLS may not both be simultaneously enabled in your lwipopts.h" -#endif -#if (MEM_USE_POOLS && !MEMP_USE_CUSTOM_POOLS) -  #error "MEM_USE_POOLS requires custom pools (MEMP_USE_CUSTOM_POOLS) to be enabled in your lwipopts.h" -#endif -#if (PBUF_POOL_BUFSIZE <= MEM_ALIGNMENT) -  #error "PBUF_POOL_BUFSIZE must be greater than MEM_ALIGNMENT or the offset may take the full first pbuf" -#endif -#if (TCP_QUEUE_OOSEQ && !LWIP_TCP) -  #error "TCP_QUEUE_OOSEQ requires LWIP_TCP" -#endif -#if (DNS_LOCAL_HOSTLIST && !DNS_LOCAL_HOSTLIST_IS_DYNAMIC && !(defined(DNS_LOCAL_HOSTLIST_INIT))) -  #error "you have to define define DNS_LOCAL_HOSTLIST_INIT {{'host1', 0x123}, {'host2', 0x234}} to initialize DNS_LOCAL_HOSTLIST" -#endif -#if PPP_SUPPORT && !PPPOS_SUPPORT & !PPPOE_SUPPORT -  #error "PPP_SUPPORT needs either PPPOS_SUPPORT or PPPOE_SUPPORT turned on" -#endif - - -/* Compile-time checks for deprecated options. - */ -#ifdef MEMP_NUM_TCPIP_MSG -  #error "MEMP_NUM_TCPIP_MSG option is deprecated. Remove it from your lwipopts.h." -#endif -#ifdef MEMP_NUM_API_MSG -  #error "MEMP_NUM_API_MSG option is deprecated. Remove it from your lwipopts.h." -#endif -#ifdef TCP_REXMIT_DEBUG -  #error "TCP_REXMIT_DEBUG option is deprecated. Remove it from your lwipopts.h." -#endif -#ifdef RAW_STATS -  #error "RAW_STATS option is deprecated. Remove it from your lwipopts.h." -#endif -#ifdef ETHARP_QUEUE_FIRST -  #error "ETHARP_QUEUE_FIRST option is deprecated. Remove it from your lwipopts.h." -#endif -#ifdef ETHARP_ALWAYS_INSERT -  #error "ETHARP_ALWAYS_INSERT option is deprecated. Remove it from your lwipopts.h." -#endif -#if SO_REUSE -/* I removed the lot since this was an ugly hack. It broke the raw-API. -   It also came with many ugly goto's, Christiaan Simons. */ -  #error "SO_REUSE currently unavailable, this was a hack" -#endif - -#ifdef LWIP_DEBUG -static void -lwip_sanity_check(void) -{ -  /* Warnings */ -#if LWIP_NETCONN -  if (MEMP_NUM_NETCONN > (MEMP_NUM_TCP_PCB+MEMP_NUM_TCP_PCB_LISTEN+MEMP_NUM_UDP_PCB+MEMP_NUM_RAW_PCB)) -    LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: MEMP_NUM_NETCONN should be less than the sum of MEMP_NUM_{TCP,RAW,UDP}_PCB+MEMP_NUM_TCP_PCB_LISTEN\n")); -#endif /* LWIP_NETCONN */ -#if LWIP_TCP -  if (MEMP_NUM_TCP_SEG < TCP_SND_QUEUELEN) -    LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: MEMP_NUM_TCP_SEG should be at least as big as TCP_SND_QUEUELEN\n")); -  if (TCP_SND_BUF < 2 * TCP_MSS) -    LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_SND_BUF must be at least as much as (2 * TCP_MSS) for things to work smoothly\n")); -  if (TCP_SND_QUEUELEN < (2 * (TCP_SND_BUF/TCP_MSS))) -    LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_SND_QUEUELEN must be at least as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work\n")); -  if (TCP_SNDLOWAT > TCP_SND_BUF) -    LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_SNDLOWAT must be less than or equal to TCP_SND_BUF.\n")); -  if (TCP_WND > (PBUF_POOL_SIZE*PBUF_POOL_BUFSIZE)) -    LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_WND is larger than space provided by PBUF_POOL_SIZE*PBUF_POOL_BUFSIZE\n")); -  if (TCP_WND < TCP_MSS) -    LWIP_PLATFORM_DIAG(("lwip_sanity_check: WARNING: TCP_WND is smaller than MSS\n")); -#endif /* LWIP_TCP */ -} -#else  /* LWIP_DEBUG */ -#define lwip_sanity_check() -#endif /* LWIP_DEBUG */ - -/** - * Perform Sanity check of user-configurable values, and initialize all modules. - */ -void -lwip_init(void) -{ -  /* Sanity check user-configurable values */ -  lwip_sanity_check(); - -  /* Modules initialization */ -  stats_init(); -  sys_init(); -  mem_init(); -  memp_init(); -  pbuf_init(); -  netif_init(); -#if LWIP_SOCKET -  lwip_socket_init(); -#endif /* LWIP_SOCKET */ -  ip_init(); -#if LWIP_ARP -  etharp_init(); -#endif /* LWIP_ARP */ -#if LWIP_RAW -  raw_init(); -#endif /* LWIP_RAW */ -#if LWIP_UDP -  udp_init(); -#endif /* LWIP_UDP */ -#if LWIP_TCP -  tcp_init(); -#endif /* LWIP_TCP */ -#if LWIP_SNMP -  snmp_init(); -#endif /* LWIP_SNMP */ -#if LWIP_AUTOIP -  autoip_init(); -#endif /* LWIP_AUTOIP */ -#if LWIP_IGMP -  igmp_init(); -#endif /* LWIP_IGMP */ -#if LWIP_DNS -  dns_init(); -#endif /* LWIP_DNS */ -} diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/autoip.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/autoip.c deleted file mode 100644 index dde6b6d..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/autoip.c +++ /dev/null @@ -1,499 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * AutoIP Automatic LinkLocal IP Configuration - * - */ - -/* - * - * Copyright (c) 2007 Dominik Spies <kontakt@dspies.de> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * Author: Dominik Spies <kontakt@dspies.de> - * - * This is a AutoIP implementation for the lwIP TCP/IP stack. It aims to conform - * with RFC 3927. - * - * - * Please coordinate changes and requests with Dominik Spies - * <kontakt@dspies.de> - */ - -/******************************************************************************* - * USAGE: - *  - * define LWIP_AUTOIP 1  in your lwipopts.h - *  - * If you don't use tcpip.c (so, don't call, you don't call tcpip_init): - * - First, call autoip_init(). - * - call autoip_tmr() all AUTOIP_TMR_INTERVAL msces, - *   that should be defined in autoip.h. - *   I recommend a value of 100. The value must divide 1000 with a remainder almost 0. - *   Possible values are 1000, 500, 333, 250, 200, 166, 142, 125, 111, 100 .... - * - * Without DHCP: - * - Call autoip_start() after netif_add(). - *  - * With DHCP: - * - define LWIP_DHCP_AUTOIP_COOP 1 in your lwipopts.h. - * - Configure your DHCP Client. - * - */ - -#include "lwip/opt.h" - -#if LWIP_AUTOIP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/mem.h" -#include "lwip/udp.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/autoip.h" -#include "netif/etharp.h" - -#include <stdlib.h> -#include <string.h> - -/* 169.254.0.0 */ -#define AUTOIP_NET         0xA9FE0000 -/* 169.254.1.0 */ -#define AUTOIP_RANGE_START (AUTOIP_NET | 0x0100) -/* 169.254.254.255 */ -#define AUTOIP_RANGE_END   (AUTOIP_NET | 0xFEFF) - - -/** Pseudo random macro based on netif informations. - * You could use "rand()" from the C Library if you define LWIP_AUTOIP_RAND in lwipopts.h */ -#ifndef LWIP_AUTOIP_RAND -#define LWIP_AUTOIP_RAND(netif) ( (((u32_t)((netif->hwaddr[5]) & 0xff) << 24) | \ -                                   ((u32_t)((netif->hwaddr[3]) & 0xff) << 16) | \ -                                   ((u32_t)((netif->hwaddr[2]) & 0xff) << 8) | \ -                                   ((u32_t)((netif->hwaddr[4]) & 0xff))) + \ -                                   (netif->autoip?netif->autoip->tried_llipaddr:0)) -#endif /* LWIP_AUTOIP_RAND */ - -/** - * Macro that generates the initial IP address to be tried by AUTOIP. - * If you want to override this, define it to something else in lwipopts.h. - */ -#ifndef LWIP_AUTOIP_CREATE_SEED_ADDR -#define LWIP_AUTOIP_CREATE_SEED_ADDR(netif) \ -  htonl(AUTOIP_RANGE_START + ((u32_t)(((u8_t)(netif->hwaddr[4])) | \ -                 ((u32_t)((u8_t)(netif->hwaddr[5]))) << 8))) -#endif /* LWIP_AUTOIP_CREATE_SEED_ADDR */ - -/* static functions */ -static void autoip_handle_arp_conflict(struct netif *netif); - -/* creates a pseudo random LL IP-Address for a network interface */ -static void autoip_create_addr(struct netif *netif, struct ip_addr *ipaddr); - -/* sends an ARP probe */ -static err_t autoip_arp_probe(struct netif *netif); - -/* sends an ARP announce */ -static err_t autoip_arp_announce(struct netif *netif); - -/* configure interface for use with current LL IP-Address */ -static err_t autoip_bind(struct netif *netif); - -/* start sending probes for llipaddr */ -static void autoip_start_probing(struct netif *netif); - -/** - * Initialize this module - */ -void -autoip_init(void) -{ -  LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_init()\n")); -} - -/** - * Handle a IP address conflict after an ARP conflict detection - */ -static void -autoip_handle_arp_conflict(struct netif *netif) -{ -  /* Somehow detect if we are defending or retreating */ -  unsigned char defend = 1; /* tbd */ - -  if(defend) { -    if(netif->autoip->lastconflict > 0) { -      /* retreat, there was a conflicting ARP in the last -       * DEFEND_INTERVAL seconds -       */ -      LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, -        ("autoip_handle_arp_conflict(): we are defending, but in DEFEND_INTERVAL, retreating\n")); - -      /* TODO: close all TCP sessions */ -      autoip_start(netif); -    } else { -      LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, -        ("autoip_handle_arp_conflict(): we are defend, send ARP Announce\n")); -      autoip_arp_announce(netif); -      netif->autoip->lastconflict = DEFEND_INTERVAL * AUTOIP_TICKS_PER_SECOND; -    } -  } else { -    LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, -      ("autoip_handle_arp_conflict(): we do not defend, retreating\n")); -    /* TODO: close all TCP sessions */ -    autoip_start(netif); -  } -} - -/** - * Create an IP-Address out of range 169.254.1.0 to 169.254.254.255 - * - * @param netif network interface on which create the IP-Address - * @param ipaddr ip address to initialize - */ -static void -autoip_create_addr(struct netif *netif, struct ip_addr *ipaddr) -{ -  /* Here we create an IP-Address out of range 169.254.1.0 to 169.254.254.255 -   * compliant to RFC 3927 Section 2.1 -   * We have 254 * 256 possibilities */ - -  u32_t addr = ntohl(LWIP_AUTOIP_CREATE_SEED_ADDR(netif)); -  addr += netif->autoip->tried_llipaddr; -  addr = AUTOIP_NET | (addr & 0xffff); -  /* Now, 169.254.0.0 <= addr <= 169.254.255.255 */  - -  if (addr < AUTOIP_RANGE_START) { -    addr += AUTOIP_RANGE_END - AUTOIP_RANGE_START + 1; -  } -  if (addr > AUTOIP_RANGE_END) { -    addr -= AUTOIP_RANGE_END - AUTOIP_RANGE_START + 1; -  } -  LWIP_ASSERT("AUTOIP address not in range", (addr >= AUTOIP_RANGE_START) && -    (addr <= AUTOIP_RANGE_END)); -  ipaddr->addr = htonl(addr); -   -  LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, -    ("autoip_create_addr(): tried_llipaddr=%"U16_F", 0x%08"X32_F"\n", -    (u16_t)(netif->autoip->tried_llipaddr), (u32_t)(ipaddr->addr))); -} - -/** - * Sends an ARP probe from a network interface - * - * @param netif network interface used to send the probe - */ -static err_t -autoip_arp_probe(struct netif *netif) -{ -  return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast, -    (struct eth_addr *)netif->hwaddr, IP_ADDR_ANY, ðzero, -    &netif->autoip->llipaddr, ARP_REQUEST); -} - -/** - * Sends an ARP announce from a network interface - * - * @param netif network interface used to send the announce - */ -static err_t -autoip_arp_announce(struct netif *netif) -{ -  return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast, -    (struct eth_addr *)netif->hwaddr, &netif->autoip->llipaddr, ðzero, -    &netif->autoip->llipaddr, ARP_REQUEST); -} - -/** - * Configure interface for use with current LL IP-Address - * - * @param netif network interface to configure with current LL IP-Address - */ -static err_t -autoip_bind(struct netif *netif) -{ -  struct autoip *autoip = netif->autoip; -  struct ip_addr sn_mask, gw_addr; - -  LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, -    ("autoip_bind(netif=%p) %c%c%"U16_F" 0x%08"X32_F"\n", -    (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num, autoip->llipaddr.addr)); - -  IP4_ADDR(&sn_mask, 255, 255, 0, 0); -  IP4_ADDR(&gw_addr, 0, 0, 0, 0); - -  netif_set_ipaddr(netif, &autoip->llipaddr); -  netif_set_netmask(netif, &sn_mask); -  netif_set_gw(netif, &gw_addr);   - -  /* bring the interface up */ -  netif_set_up(netif); - -  return ERR_OK; -} - -/** - * Start AutoIP client - * - * @param netif network interface on which start the AutoIP client - */ -err_t -autoip_start(struct netif *netif) -{ -  struct autoip *autoip = netif->autoip; -  err_t result = ERR_OK; - -  if(netif_is_up(netif)) { -    netif_set_down(netif); -  } - -  /* Set IP-Address, Netmask and Gateway to 0 to make sure that -   * ARP Packets are formed correctly -   */ -  netif->ip_addr.addr = 0; -  netif->netmask.addr = 0; -  netif->gw.addr      = 0; - -  LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, -    ("autoip_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], -    netif->name[1], (u16_t)netif->num)); -  if(autoip == NULL) { -    /* no AutoIP client attached yet? */ -    LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, -      ("autoip_start(): starting new AUTOIP client\n")); -    autoip = mem_malloc(sizeof(struct autoip)); -    if(autoip == NULL) { -      LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, -        ("autoip_start(): could not allocate autoip\n")); -      return ERR_MEM; -    } -    memset( autoip, 0, sizeof(struct autoip)); -    /* store this AutoIP client in the netif */ -    netif->autoip = autoip; -    LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_start(): allocated autoip")); -  } else { -    autoip->state = AUTOIP_STATE_OFF; -    autoip->ttw = 0; -    autoip->sent_num = 0; -    memset(&autoip->llipaddr, 0, sizeof(struct ip_addr)); -    autoip->lastconflict = 0; -  } - -  autoip_create_addr(netif, &(autoip->llipaddr)); -  autoip->tried_llipaddr++; -  autoip_start_probing(netif); - -  return result; -} - -static void -autoip_start_probing(struct netif *netif) -{ -  struct autoip *autoip = netif->autoip; - -  autoip->state = AUTOIP_STATE_PROBING; -  autoip->sent_num = 0; - -  /* time to wait to first probe, this is randomly -   * choosen out of 0 to PROBE_WAIT seconds. -   * compliant to RFC 3927 Section 2.2.1 -   */ -  autoip->ttw = (u16_t)(LWIP_AUTOIP_RAND(netif) % (PROBE_WAIT * AUTOIP_TICKS_PER_SECOND)); - -  /* -   * if we tried more then MAX_CONFLICTS we must limit our rate for -   * accquiring and probing address -   * compliant to RFC 3927 Section 2.2.1 -   */ -  if(autoip->tried_llipaddr > MAX_CONFLICTS) { -    autoip->ttw = RATE_LIMIT_INTERVAL * AUTOIP_TICKS_PER_SECOND; -  } -} - -/** - * Handle a possible change in the network configuration. - * - * If there is an AutoIP address configured, take the interface down - * and begin probing with the same address. - */ -void -autoip_network_changed(struct netif *netif) -{ -  if (netif->autoip && netif->autoip->state != AUTOIP_STATE_OFF) { -    netif_set_down(netif); -    autoip_start_probing(netif); -  } -} - -/** - * Stop AutoIP client - * - * @param netif network interface on which stop the AutoIP client - */ -err_t -autoip_stop(struct netif *netif) -{ -  netif->autoip->state = AUTOIP_STATE_OFF; -  netif_set_down(netif); -  return ERR_OK; -} - -/** - * Has to be called in loop every AUTOIP_TMR_INTERVAL milliseconds - */ -void -autoip_tmr() -{ -  struct netif *netif = netif_list; -  /* loop through netif's */ -  while (netif != NULL) { -    /* only act on AutoIP configured interfaces */ -    if (netif->autoip != NULL) { -      if(netif->autoip->lastconflict > 0) { -        netif->autoip->lastconflict--; -      } - -      LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, -        ("autoip_tmr() AutoIP-State: %"U16_F", ttw=%"U16_F"\n", -        (u16_t)(netif->autoip->state), netif->autoip->ttw)); - -      switch(netif->autoip->state) { -        case AUTOIP_STATE_PROBING: -          if(netif->autoip->ttw > 0) { -            netif->autoip->ttw--; -          } else { -            if(netif->autoip->sent_num >= PROBE_NUM) { -              netif->autoip->state = AUTOIP_STATE_ANNOUNCING; -              netif->autoip->sent_num = 0; -              netif->autoip->ttw = ANNOUNCE_WAIT * AUTOIP_TICKS_PER_SECOND; -            } else { -              autoip_arp_probe(netif); -              LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, -                ("autoip_tmr() PROBING Sent Probe\n")); -              netif->autoip->sent_num++; -              /* calculate time to wait to next probe */ -              netif->autoip->ttw = (u16_t)((LWIP_AUTOIP_RAND(netif) % -                ((PROBE_MAX - PROBE_MIN) * AUTOIP_TICKS_PER_SECOND) ) + -                PROBE_MIN * AUTOIP_TICKS_PER_SECOND); -            } -          } -          break; - -        case AUTOIP_STATE_ANNOUNCING: -          if(netif->autoip->ttw > 0) { -            netif->autoip->ttw--; -          } else { -            if(netif->autoip->sent_num == 0) { -             /* We are here the first time, so we waited ANNOUNCE_WAIT seconds -              * Now we can bind to an IP address and use it. -              * -              * autoip_bind calls netif_set_up. This triggers a gratuitous ARP -              * which counts as an announcement. -              */ -              autoip_bind(netif); -            } else { -              autoip_arp_announce(netif); -              LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, -                ("autoip_tmr() ANNOUNCING Sent Announce\n")); -            } -            netif->autoip->ttw = ANNOUNCE_INTERVAL * AUTOIP_TICKS_PER_SECOND; -            netif->autoip->sent_num++; - -            if(netif->autoip->sent_num >= ANNOUNCE_NUM) { -                netif->autoip->state = AUTOIP_STATE_BOUND; -                netif->autoip->sent_num = 0; -                netif->autoip->ttw = 0; -            } -          } -          break; -      } -    } -    /* proceed to next network interface */ -    netif = netif->next; -  } -} - -/** - * Handles every incoming ARP Packet, called by etharp_arp_input. - * - * @param netif network interface to use for autoip processing - * @param hdr Incoming ARP packet - */ -void -autoip_arp_reply(struct netif *netif, struct etharp_hdr *hdr) -{ -  LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE, ("autoip_arp_reply()\n")); -  if ((netif->autoip != NULL) && (netif->autoip->state != AUTOIP_STATE_OFF)) { -   /* when ip.src == llipaddr && hw.src != netif->hwaddr -    * -    * when probing  ip.dst == llipaddr && hw.src != netif->hwaddr -    * we have a conflict and must solve it -    */ -    struct ip_addr sipaddr, dipaddr; -    struct eth_addr netifaddr; -    netifaddr.addr[0] = netif->hwaddr[0]; -    netifaddr.addr[1] = netif->hwaddr[1]; -    netifaddr.addr[2] = netif->hwaddr[2]; -    netifaddr.addr[3] = netif->hwaddr[3]; -    netifaddr.addr[4] = netif->hwaddr[4]; -    netifaddr.addr[5] = netif->hwaddr[5]; - -    /* Copy struct ip_addr2 to aligned ip_addr, to support compilers without -     * structure packing (not using structure copy which breaks strict-aliasing rules). -     */ -    SMEMCPY(&sipaddr, &hdr->sipaddr, sizeof(sipaddr)); -    SMEMCPY(&dipaddr, &hdr->dipaddr, sizeof(dipaddr)); -       -    if ((netif->autoip->state == AUTOIP_STATE_PROBING) || -        ((netif->autoip->state == AUTOIP_STATE_ANNOUNCING) && -         (netif->autoip->sent_num == 0))) { -     /* RFC 3927 Section 2.2.1: -      * from beginning to after ANNOUNCE_WAIT -      * seconds we have a conflict if -      * ip.src == llipaddr OR -      * ip.dst == llipaddr && hw.src != own hwaddr -      */ -      if ((ip_addr_cmp(&sipaddr, &netif->autoip->llipaddr)) || -          (ip_addr_cmp(&dipaddr, &netif->autoip->llipaddr) && -           !eth_addr_cmp(&netifaddr, &hdr->shwaddr))) { -        LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, -          ("autoip_arp_reply(): Probe Conflict detected\n")); -        autoip_start(netif); -      } -    } else { -     /* RFC 3927 Section 2.5: -      * in any state we have a conflict if -      * ip.src == llipaddr && hw.src != own hwaddr -      */ -      if (ip_addr_cmp(&sipaddr, &netif->autoip->llipaddr) && -          !eth_addr_cmp(&netifaddr, &hdr->shwaddr)) { -        LWIP_DEBUGF(AUTOIP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING, -          ("autoip_arp_reply(): Conflicting ARP-Packet detected\n")); -        autoip_handle_arp_conflict(netif); -      } -    } -  } -} - -#endif /* LWIP_AUTOIP */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/icmp.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/icmp.c deleted file mode 100644 index 3ee17ae..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/icmp.c +++ /dev/null @@ -1,333 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * ICMP - Internet Control Message Protocol - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels <adam@sics.se> - * - */ - -/* Some ICMP messages should be passed to the transport protocols. This -   is not implemented. */ - -#include "lwip/opt.h" - -#if LWIP_ICMP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/icmp.h" -#include "lwip/inet.h" -#include "lwip/inet_chksum.h" -#include "lwip/ip.h" -#include "lwip/def.h" -#include "lwip/stats.h" -#include "lwip/snmp.h" - -#include <string.h> - -/** Small optimization: set to 0 if incoming PBUF_POOL pbuf always can be - * used to modify and send a response packet (and to 1 if this is not the case, - * e.g. when link header is stripped of when receiving) */ -#ifndef LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN -#define LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN 1 -#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */ - -/* The amount of data from the original packet to return in a dest-unreachable */ -#define ICMP_DEST_UNREACH_DATASIZE 8 - -static void icmp_send_response(struct pbuf *p, u8_t type, u8_t code); - -/** - * Processes ICMP input packets, called from ip_input(). - * - * Currently only processes icmp echo requests and sends - * out the echo response. - * - * @param p the icmp echo request packet, p->payload pointing to the ip header - * @param inp the netif on which this packet was received - */ -void -icmp_input(struct pbuf *p, struct netif *inp) -{ -  u8_t type; -#ifdef LWIP_DEBUG -  u8_t code; -#endif /* LWIP_DEBUG */ -  struct icmp_echo_hdr *iecho; -  struct ip_hdr *iphdr; -  struct ip_addr tmpaddr; -  s16_t hlen; - -  ICMP_STATS_INC(icmp.recv); -  snmp_inc_icmpinmsgs(); - - -  iphdr = p->payload; -  hlen = IPH_HL(iphdr) * 4; -  if (pbuf_header(p, -hlen) || (p->tot_len < sizeof(u16_t)*2)) { -    LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: short ICMP (%"U16_F" bytes) received\n", p->tot_len)); -    goto lenerr; -  } - -  type = *((u8_t *)p->payload); -#ifdef LWIP_DEBUG -  code = *(((u8_t *)p->payload)+1); -#endif /* LWIP_DEBUG */ -  switch (type) { -  case ICMP_ECHO: -#if !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING -    { -      int accepted = 1; -#if !LWIP_MULTICAST_PING -      /* multicast destination address? */ -      if (ip_addr_ismulticast(&iphdr->dest)) { -        accepted = 0; -      } -#endif /* LWIP_MULTICAST_PING */ -#if !LWIP_BROADCAST_PING -      /* broadcast destination address? */ -      if (ip_addr_isbroadcast(&iphdr->dest, inp)) { -        accepted = 0; -      } -#endif /* LWIP_BROADCAST_PING */ -      /* broadcast or multicast destination address not acceptd? */ -      if (!accepted) { -        LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: Not echoing to multicast or broadcast pings\n")); -        ICMP_STATS_INC(icmp.err); -        pbuf_free(p); -        return; -      } -    } -#endif /* !LWIP_MULTICAST_PING || !LWIP_BROADCAST_PING */ -    LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ping\n")); -    if (p->tot_len < sizeof(struct icmp_echo_hdr)) { -      LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: bad ICMP echo received\n")); -      goto lenerr; -    } -    if (inet_chksum_pbuf(p) != 0) { -      LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: checksum failed for received ICMP echo\n")); -      pbuf_free(p); -      ICMP_STATS_INC(icmp.chkerr); -      snmp_inc_icmpinerrors(); -      return; -    } -#if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN -    if (pbuf_header(p, (PBUF_IP_HLEN + PBUF_LINK_HLEN))) { -      /* p is not big enough to contain link headers -       * allocate a new one and copy p into it -       */ -      struct pbuf *r; -      /* switch p->payload to ip header */ -      if (pbuf_header(p, hlen)) { -        LWIP_ASSERT("icmp_input: moving p->payload to ip header failed\n", 0); -        goto memerr; -      } -      /* allocate new packet buffer with space for link headers */ -      r = pbuf_alloc(PBUF_LINK, p->tot_len, PBUF_RAM); -      if (r == NULL) { -        LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: allocating new pbuf failed\n")); -        goto memerr; -      } -      LWIP_ASSERT("check that first pbuf can hold struct the ICMP header", -                  (r->len >= hlen + sizeof(struct icmp_echo_hdr))); -      /* copy the whole packet including ip header */ -      if (pbuf_copy(r, p) != ERR_OK) { -        LWIP_ASSERT("icmp_input: copying to new pbuf failed\n", 0); -        goto memerr; -      } -      iphdr = r->payload; -      /* switch r->payload back to icmp header */ -      if (pbuf_header(r, -hlen)) { -        LWIP_ASSERT("icmp_input: restoring original p->payload failed\n", 0); -        goto memerr; -      } -      /* free the original p */ -      pbuf_free(p); -      /* we now have an identical copy of p that has room for link headers */ -      p = r; -    } else { -      /* restore p->payload to point to icmp header */ -      if (pbuf_header(p, -(s16_t)(PBUF_IP_HLEN + PBUF_LINK_HLEN))) { -        LWIP_ASSERT("icmp_input: restoring original p->payload failed\n", 0); -        goto memerr; -      } -    } -#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */ -    /* At this point, all checks are OK. */ -    /* We generate an answer by switching the dest and src ip addresses, -     * setting the icmp type to ECHO_RESPONSE and updating the checksum. */ -    iecho = p->payload; -    tmpaddr.addr = iphdr->src.addr; -    iphdr->src.addr = iphdr->dest.addr; -    iphdr->dest.addr = tmpaddr.addr; -    ICMPH_TYPE_SET(iecho, ICMP_ER); -    /* adjust the checksum */ -    if (iecho->chksum >= htons(0xffff - (ICMP_ECHO << 8))) { -      iecho->chksum += htons(ICMP_ECHO << 8) + 1; -    } else { -      iecho->chksum += htons(ICMP_ECHO << 8); -    } - -    /* Set the correct TTL and recalculate the header checksum. */ -    IPH_TTL_SET(iphdr, ICMP_TTL); -    IPH_CHKSUM_SET(iphdr, 0); -#if CHECKSUM_GEN_IP -    IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN)); -#endif /* CHECKSUM_GEN_IP */ - -    ICMP_STATS_INC(icmp.xmit); -    /* increase number of messages attempted to send */ -    snmp_inc_icmpoutmsgs(); -    /* increase number of echo replies attempted to send */ -    snmp_inc_icmpoutechoreps(); - -    if(pbuf_header(p, hlen)) { -      LWIP_ASSERT("Can't move over header in packet", 0); -    } else { -      err_t ret; -      ret = ip_output_if(p, &(iphdr->src), IP_HDRINCL, -                   ICMP_TTL, 0, IP_PROTO_ICMP, inp); -      if (ret != ERR_OK) { -        LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ip_output_if returned an error: %c.\n", ret)); -      } -    } -    break; -  default: -    LWIP_DEBUGF(ICMP_DEBUG, ("icmp_input: ICMP type %"S16_F" code %"S16_F" not supported.\n",  -                (s16_t)type, (s16_t)code)); -    ICMP_STATS_INC(icmp.proterr); -    ICMP_STATS_INC(icmp.drop); -  } -  pbuf_free(p); -  return; -lenerr: -  pbuf_free(p); -  ICMP_STATS_INC(icmp.lenerr); -  snmp_inc_icmpinerrors(); -  return; -#if LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN -memerr: -  pbuf_free(p); -  ICMP_STATS_INC(icmp.err); -  snmp_inc_icmpinerrors(); -  return; -#endif /* LWIP_ICMP_ECHO_CHECK_INPUT_PBUF_LEN */ -} - -/** - * Send an icmp 'destination unreachable' packet, called from ip_input() if - * the transport layer protocol is unknown and from udp_input() if the local - * port is not bound. - * - * @param p the input packet for which the 'unreachable' should be sent, - *          p->payload pointing to the IP header - * @param t type of the 'unreachable' packet - */ -void -icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t) -{ -  icmp_send_response(p, ICMP_DUR, t); -} - -#if IP_FORWARD || IP_REASSEMBLY -/** - * Send a 'time exceeded' packet, called from ip_forward() if TTL is 0. - * - * @param p the input packet for which the 'time exceeded' should be sent, - *          p->payload pointing to the IP header - * @param t type of the 'time exceeded' packet - */ -void -icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t) -{ -  icmp_send_response(p, ICMP_TE, t); -} - -#endif /* IP_FORWARD || IP_REASSEMBLY */ - -/** - * Send an icmp packet in response to an incoming packet. - * - * @param p the input packet for which the 'unreachable' should be sent, - *          p->payload pointing to the IP header - * @param type Type of the ICMP header - * @param code Code of the ICMP header - */ -static void -icmp_send_response(struct pbuf *p, u8_t type, u8_t code) -{ -  struct pbuf *q; -  struct ip_hdr *iphdr; -  /* we can use the echo header here */ -  struct icmp_echo_hdr *icmphdr; - -  /* ICMP header + IP header + 8 bytes of data */ -  q = pbuf_alloc(PBUF_IP, sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE, -                 PBUF_RAM); -  if (q == NULL) { -    LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded: failed to allocate pbuf for ICMP packet.\n")); -    return; -  } -  LWIP_ASSERT("check that first pbuf can hold icmp message", -             (q->len >= (sizeof(struct icmp_echo_hdr) + IP_HLEN + ICMP_DEST_UNREACH_DATASIZE))); - -  iphdr = p->payload; -  LWIP_DEBUGF(ICMP_DEBUG, ("icmp_time_exceeded from ")); -  ip_addr_debug_print(ICMP_DEBUG, &(iphdr->src)); -  LWIP_DEBUGF(ICMP_DEBUG, (" to ")); -  ip_addr_debug_print(ICMP_DEBUG, &(iphdr->dest)); -  LWIP_DEBUGF(ICMP_DEBUG, ("\n")); - -  icmphdr = q->payload; -  icmphdr->type = type; -  icmphdr->code = code; -  icmphdr->id = 0; -  icmphdr->seqno = 0; - -  /* copy fields from original packet */ -  SMEMCPY((u8_t *)q->payload + sizeof(struct icmp_echo_hdr), (u8_t *)p->payload, -          IP_HLEN + ICMP_DEST_UNREACH_DATASIZE); - -  /* calculate checksum */ -  icmphdr->chksum = 0; -  icmphdr->chksum = inet_chksum(icmphdr, q->len); -  ICMP_STATS_INC(icmp.xmit); -  /* increase number of messages attempted to send */ -  snmp_inc_icmpoutmsgs(); -  /* increase number of destination unreachable messages attempted to send */ -  snmp_inc_icmpouttimeexcds(); -  ip_output(q, NULL, &(iphdr->src), ICMP_TTL, 0, IP_PROTO_ICMP); -  pbuf_free(q); -} - -#endif /* LWIP_ICMP */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/igmp.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/igmp.c deleted file mode 100644 index b302ef4..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/igmp.c +++ /dev/null @@ -1,759 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * IGMP - Internet Group Management Protocol - * - */ - -/* - * Copyright (c) 2002 CITEL Technologies Ltd. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without  - * modification, are permitted provided that the following conditions  - * are met:  - * 1. Redistributions of source code must retain the above copyright  - *    notice, this list of conditions and the following disclaimer.  - * 2. Redistributions in binary form must reproduce the above copyright  - *    notice, this list of conditions and the following disclaimer in the  - *    documentation and/or other materials provided with the distribution.  - * 3. Neither the name of CITEL Technologies Ltd nor the names of its contributors  - *    may be used to endorse or promote products derived from this software  - *    without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY CITEL TECHNOLOGIES AND CONTRIBUTORS ``AS IS'' - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE  - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE  - * ARE DISCLAIMED.  IN NO EVENT SHALL CITEL TECHNOLOGIES OR CONTRIBUTORS BE LIABLE  - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL  - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS  - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)  - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY  - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  - * SUCH DAMAGE.  - * - * This file is a contribution to the lwIP TCP/IP stack. - * The Swedish Institute of Computer Science and Adam Dunkels - * are specifically granted permission to redistribute this - * source code. -*/ - -/*------------------------------------------------------------- -Note 1) -Although the rfc requires V1 AND V2 capability -we will only support v2 since now V1 is very old (August 1989) -V1 can be added if required - -a debug print and statistic have been implemented to -show this up. -------------------------------------------------------------- -------------------------------------------------------------- -Note 2) -A query for a specific group address (as opposed to ALLHOSTS) -has now been implemented as I am unsure if it is required - -a debug print and statistic have been implemented to -show this up. -------------------------------------------------------------- -------------------------------------------------------------- -Note 3) -The router alert rfc 2113 is implemented in outgoing packets -but not checked rigorously incoming -------------------------------------------------------------- -Steve Reynolds -------------------------------------------------------------*/ - -/*----------------------------------------------------------------------------- - * RFC 988  - Host extensions for IP multicasting                         - V0 - * RFC 1054 - Host extensions for IP multicasting                         - - * RFC 1112 - Host extensions for IP multicasting                         - V1 - * RFC 2236 - Internet Group Management Protocol, Version 2               - V2  <- this code is based on this RFC (it's the "de facto" standard) - * RFC 3376 - Internet Group Management Protocol, Version 3               - V3 - * RFC 4604 - Using Internet Group Management Protocol Version 3...       - V3+ - * RFC 2113 - IP Router Alert Option                                      -  - *----------------------------------------------------------------------------*/ - -/*----------------------------------------------------------------------------- - * Includes - *----------------------------------------------------------------------------*/ - -#include "lwip/opt.h" - -#if LWIP_IGMP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/igmp.h" -#include "lwip/debug.h" -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/ip.h" -#include "lwip/inet.h" -#include "lwip/inet_chksum.h" -#include "lwip/netif.h" -#include "lwip/icmp.h" -#include "lwip/udp.h" -#include "lwip/tcp.h" -#include "lwip/stats.h" - -#include "string.h" - -/*----------------------------------------------------------------------------- - * Globales - *----------------------------------------------------------------------------*/ - -static struct igmp_group* igmp_group_list; -static struct ip_addr     allsystems; -static struct ip_addr     allrouters; - -/** - * Initialize the IGMP module - */ -void -igmp_init(void) -{ -  LWIP_DEBUGF(IGMP_DEBUG, ("igmp_init: initializing\n")); - -  IP4_ADDR(&allsystems, 224, 0, 0, 1); -  IP4_ADDR(&allrouters, 224, 0, 0, 2); -} - -#ifdef LWIP_DEBUG -/** - * Dump global IGMP groups list - */ -void -igmp_dump_group_list() -{  -  struct igmp_group *group = igmp_group_list; - -  while (group != NULL) { -    LWIP_DEBUGF(IGMP_DEBUG, ("igmp_dump_group_list: [%"U32_F"] ", (u32_t)(group->group_state))); -    ip_addr_debug_print(IGMP_DEBUG, &group->group_address); -    LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", group->interface)); -    group = group->next; -  } -  LWIP_DEBUGF(IGMP_DEBUG, ("\n")); -} -#else -#define igmp_dump_group_list() -#endif /* LWIP_DEBUG */ - -/** - * Start IGMP processing on interface - * - * @param netif network interface on which start IGMP processing - */ -err_t -igmp_start(struct netif *netif) -{ -  struct igmp_group* group; - -  LWIP_DEBUGF(IGMP_DEBUG, ("igmp_start: starting IGMP processing on if %p\n", netif)); - -  group = igmp_lookup_group(netif, &allsystems); - -  if (group != NULL) { -    group->group_state = IGMP_GROUP_IDLE_MEMBER; -    group->use++; - -    /* Allow the igmp messages at the MAC level */ -    if (netif->igmp_mac_filter != NULL) { -      LWIP_DEBUGF(IGMP_DEBUG, ("igmp_start: igmp_mac_filter(ADD ")); -      ip_addr_debug_print(IGMP_DEBUG, &allsystems); -      LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", netif)); -      netif->igmp_mac_filter( netif, &allsystems, IGMP_ADD_MAC_FILTER); -    } - -    return ERR_OK; -  } - -  return ERR_MEM; -} - -/** - * Stop IGMP processing on interface - * - * @param netif network interface on which stop IGMP processing - */ -err_t -igmp_stop(struct netif *netif) -{ -  struct igmp_group *group = igmp_group_list; -  struct igmp_group *prev  = NULL; -  struct igmp_group *next; - -  /* look for groups joined on this interface further down the list */ -  while (group != NULL) { -    next = group->next; -    /* is it a group joined on this interface? */ -    if (group->interface == netif) { -      /* is it the first group of the list? */ -      if (group == igmp_group_list) { -        igmp_group_list = next; -      } -      /* is there a "previous" group defined? */ -      if (prev != NULL) { -        prev->next = next; -      } -      /* disable the group at the MAC level */ -      if (netif->igmp_mac_filter != NULL) { -        LWIP_DEBUGF(IGMP_DEBUG, ("igmp_stop: igmp_mac_filter(DEL ")); -        ip_addr_debug_print(IGMP_DEBUG, &group->group_address); -        LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", netif)); -        netif->igmp_mac_filter(netif, &(group->group_address), IGMP_DEL_MAC_FILTER); -      } -      /* free group */ -      memp_free(MEMP_IGMP_GROUP, group); -    } else { -      /* change the "previous" */ -      prev = group; -    } -    /* move to "next" */ -    group = next; -  } -  return ERR_OK; -} - -/** - * Report IGMP memberships for this interface - * - * @param netif network interface on which report IGMP memberships - */ -void -igmp_report_groups( struct netif *netif) -{ -  struct igmp_group *group = igmp_group_list; - -  LWIP_DEBUGF(IGMP_DEBUG, ("igmp_report_groups: sending IGMP reports on if %p\n", netif)); - -  while (group != NULL) { -    if (group->interface == netif) { -      igmp_delaying_member( group, IGMP_JOIN_DELAYING_MEMBER_TMR); -    } -    group = group->next; -  } -} - -/** - * Search for a group in the global igmp_group_list - * - * @param ifp the network interface for which to look - * @param addr the group ip address to search for - * @return a struct igmp_group* if the group has been found, - *         NULL if the group wasn't found. - */ -struct igmp_group * -igmp_lookfor_group(struct netif *ifp, struct ip_addr *addr) -{ -  struct igmp_group *group = igmp_group_list; - -  while (group != NULL) { -    if ((group->interface == ifp) && (ip_addr_cmp(&(group->group_address), addr))) { -      return group; -    } -    group = group->next; -  } - -  /* to be clearer, we return NULL here instead of -   * 'group' (which is also NULL at this point). -   */ -  return NULL; -} - -/** - * Search for a specific igmp group and create a new one if not found- - * - * @param ifp the network interface for which to look - * @param addr the group ip address to search - * @return a struct igmp_group*, - *         NULL on memory error. - */ -struct igmp_group * -igmp_lookup_group(struct netif *ifp, struct ip_addr *addr) -{ -  struct igmp_group *group = igmp_group_list; -   -  /* Search if the group already exists */ -  group = igmp_lookfor_group(ifp, addr); -  if (group != NULL) { -    /* Group already exists. */ -    return group; -  } - -  /* Group doesn't exist yet, create a new one */ -  group = memp_malloc(MEMP_IGMP_GROUP); -  if (group != NULL) { -    group->interface          = ifp; -    ip_addr_set(&(group->group_address), addr); -    group->timer              = 0; /* Not running */ -    group->group_state        = IGMP_GROUP_NON_MEMBER; -    group->last_reporter_flag = 0; -    group->use                = 0; -    group->next               = igmp_group_list; -     -    igmp_group_list = group; -  } - -  LWIP_DEBUGF(IGMP_DEBUG, ("igmp_lookup_group: %sallocated a new group with address ", (group?"":"impossible to "))); -  ip_addr_debug_print(IGMP_DEBUG, addr); -  LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", ifp)); - -  return group; -} - -/** - * Remove a group in the global igmp_group_list - * - * @param group the group to remove from the global igmp_group_list - * @return ERR_OK if group was removed from the list, an err_t otherwise - */ -err_t -igmp_remove_group(struct igmp_group *group) -{ -  err_t err = ERR_OK; - -  /* Is it the first group? */ -  if (igmp_group_list == group) { -    igmp_group_list = group->next; -  } else { -    /* look for group further down the list */ -    struct igmp_group *tmpGroup; -    for (tmpGroup = igmp_group_list; tmpGroup != NULL; tmpGroup = tmpGroup->next) { -      if (tmpGroup->next == group) { -        tmpGroup->next = group->next; -        break; -      } -    } -    /* Group not found in the global igmp_group_list */ -    if (tmpGroup == NULL) -      err = ERR_ARG; -  } -  /* free group */ -  memp_free(MEMP_IGMP_GROUP, group); - -  return err; -} - -/** - * Called from ip_input() if a new IGMP packet is received. - * - * @param p received igmp packet, p->payload pointing to the ip header - * @param inp network interface on which the packet was received - * @param dest destination ip address of the igmp packet - */ -void -igmp_input(struct pbuf *p, struct netif *inp, struct ip_addr *dest) -{ -  struct ip_hdr *    iphdr; -  struct igmp_msg*   igmp; -  struct igmp_group* group; -  struct igmp_group* groupref; - -  /* Note that the length CAN be greater than 8 but only 8 are used - All are included in the checksum */     -  iphdr = p->payload; -  if (pbuf_header(p, -(s16_t)(IPH_HL(iphdr) * 4)) || (p->len < IGMP_MINLEN)) { -    pbuf_free(p); -    IGMP_STATS_INC(igmp.lenerr); -    LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: length error\n")); -    return; -  } - -  LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: message from ")); -  ip_addr_debug_print(IGMP_DEBUG, &(iphdr->src)); -  LWIP_DEBUGF(IGMP_DEBUG, (" to address ")); -  ip_addr_debug_print(IGMP_DEBUG, &(iphdr->dest)); -  LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", inp)); - -  /* Now calculate and check the checksum */ -  igmp = (struct igmp_msg *)p->payload; -  if (inet_chksum(igmp, p->len)) { -    pbuf_free(p); -    IGMP_STATS_INC(igmp.chkerr); -    LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: checksum error\n")); -    return; -  } - -  /* Packet is ok so find an existing group */ -  group = igmp_lookfor_group(inp, dest); /* use the incoming IP address! */ -   -  /* If group can be found or create... */ -  if (!group) { -    pbuf_free(p); -    LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP frame not for us\n")); -    return; -  } - -  /* NOW ACT ON THE INCOMING MESSAGE TYPE... */ -  switch (igmp->igmp_msgtype) { -   case IGMP_MEMB_QUERY: { -     /* IGMP_MEMB_QUERY to the "all systems" address ? */ -     if ((ip_addr_cmp(dest, &allsystems)) && (igmp->igmp_group_address.addr == 0)) { -       /* THIS IS THE GENERAL QUERY */ -       LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: General IGMP_MEMB_QUERY on \"ALL SYSTEMS\" address (224.0.0.1) [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp))); - -       if (igmp->igmp_maxresp == 0) { -         IGMP_STATS_INC(igmp.v1_rxed); -         LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: got an all hosts query with time== 0 - this is V1 and not implemented - treat as v2\n")); -         igmp->igmp_maxresp = IGMP_V1_DELAYING_MEMBER_TMR; -       } - -       IGMP_STATS_INC(igmp.group_query_rxed); -       groupref = igmp_group_list; -       while (groupref) { -         /* Do not send messages on the all systems group address! */ -         if ((groupref->interface == inp) && (!(ip_addr_cmp(&(groupref->group_address), &allsystems)))) { -           igmp_delaying_member( groupref, igmp->igmp_maxresp); -         } -         groupref = groupref->next; -       } -     } else { -       /* IGMP_MEMB_QUERY to a specific group ? */ -       if (group->group_address.addr != 0) { -         LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP_MEMB_QUERY to a specific group ")); -         ip_addr_debug_print(IGMP_DEBUG, &group->group_address); -         if (ip_addr_cmp (dest, &allsystems)) { -           LWIP_DEBUGF(IGMP_DEBUG, (" using \"ALL SYSTEMS\" address (224.0.0.1) [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp))); -           /* we first need to re-lookfor the group since we used dest last time */ -           group = igmp_lookfor_group(inp, &igmp->igmp_group_address); -         } else { -           LWIP_DEBUGF(IGMP_DEBUG, (" with the group address as destination [igmp_maxresp=%i]\n", (int)(igmp->igmp_maxresp))); -         } - -         if (group != NULL) { -           IGMP_STATS_INC(igmp.unicast_query); -           igmp_delaying_member( group, igmp->igmp_maxresp); -         } -       } -     } -     break; -   } -   case IGMP_V2_MEMB_REPORT: { -     LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: IGMP_V2_MEMB_REPORT\n")); - -     IGMP_STATS_INC(igmp.report_rxed); -     if (group->group_state == IGMP_GROUP_DELAYING_MEMBER) { -       /* This is on a specific group we have already looked up */ -       group->timer = 0; /* stopped */ -       group->group_state = IGMP_GROUP_IDLE_MEMBER; -       group->last_reporter_flag = 0; -     } -     break; -   } -   default: { -     LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: unexpected msg %d in state %d on group %p on if %p\n", -       igmp->igmp_msgtype, group->group_state, &group, group->interface)); -     break; -   } -  } - -  pbuf_free(p); -  return; -} - -/** - * Join a group on one network interface. - * - * @param ifaddr ip address of the network interface which should join a new group - * @param groupaddr the ip address of the group which to join - * @return ERR_OK if group was joined on the netif(s), an err_t otherwise - */ -err_t -igmp_joingroup(struct ip_addr *ifaddr, struct ip_addr *groupaddr) -{ -  err_t              err = ERR_VAL; /* no matching interface */ -  struct igmp_group *group; -  struct netif      *netif; - -  /* make sure it is multicast address */ -  LWIP_ERROR("igmp_joingroup: attempt to join non-multicast address", ip_addr_ismulticast(groupaddr), return ERR_VAL;); -  LWIP_ERROR("igmp_joingroup: attempt to join allsystems address", (!ip_addr_cmp(groupaddr, &allsystems)), return ERR_VAL;); - -  /* loop through netif's */ -  netif = netif_list; -  while (netif != NULL) { -    /* Should we join this interface ? */ -    if ((netif->flags & NETIF_FLAG_IGMP) && ((ip_addr_isany(ifaddr) || ip_addr_cmp(&(netif->ip_addr), ifaddr)))) { -      /* find group or create a new one if not found */ -      group = igmp_lookup_group(netif, groupaddr); - -      if (group != NULL) { -        /* This should create a new group, check the state to make sure */ -        if (group->group_state != IGMP_GROUP_NON_MEMBER) { -          LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup: join to group not in state IGMP_GROUP_NON_MEMBER\n")); -        } else { -          /* OK - it was new group */ -          LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup: join to new group: ")); -          ip_addr_debug_print(IGMP_DEBUG, groupaddr); -          LWIP_DEBUGF(IGMP_DEBUG, ("\n")); - -          /* If first use of the group, allow the group at the MAC level */ -          if ((group->use==0) && (netif->igmp_mac_filter != NULL)) { -            LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup: igmp_mac_filter(ADD ")); -            ip_addr_debug_print(IGMP_DEBUG, groupaddr); -            LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", netif)); -            netif->igmp_mac_filter(netif, groupaddr, IGMP_ADD_MAC_FILTER); -          } - -          IGMP_STATS_INC(igmp.join_sent); -          igmp_send(group, IGMP_V2_MEMB_REPORT); - -          igmp_start_timer(group, IGMP_JOIN_DELAYING_MEMBER_TMR); - -          /* Need to work out where this timer comes from */ -          group->group_state = IGMP_GROUP_DELAYING_MEMBER; -        } -        /* Increment group use */ -        group->use++; -        /* Join on this interface */ -        err = ERR_OK; -      } else { -        /* Return an error even if some network interfaces are joined */ -        /** @todo undo any other netif already joined */ -        LWIP_DEBUGF(IGMP_DEBUG, ("igmp_joingroup: Not enought memory to join to group\n")); -        return ERR_MEM; -      } -    } -    /* proceed to next network interface */ -    netif = netif->next; -  } - -  return err; -} - -/** - * Leave a group on one network interface. - * - * @param ifaddr ip address of the network interface which should leave a group - * @param groupaddr the ip address of the group which to leave - * @return ERR_OK if group was left on the netif(s), an err_t otherwise - */ -err_t -igmp_leavegroup(struct ip_addr *ifaddr, struct ip_addr *groupaddr) -{ -  err_t              err = ERR_VAL; /* no matching interface */ -  struct igmp_group *group; -  struct netif      *netif; - -  /* make sure it is multicast address */ -  LWIP_ERROR("igmp_leavegroup: attempt to leave non-multicast address", ip_addr_ismulticast(groupaddr), return ERR_VAL;); -  LWIP_ERROR("igmp_leavegroup: attempt to leave allsystems address", (!ip_addr_cmp(groupaddr, &allsystems)), return ERR_VAL;); - -  /* loop through netif's */ -  netif = netif_list; -  while (netif != NULL) { -    /* Should we leave this interface ? */ -    if ((netif->flags & NETIF_FLAG_IGMP) && ((ip_addr_isany(ifaddr) || ip_addr_cmp(&(netif->ip_addr), ifaddr)))) { -      /* find group */ -      group = igmp_lookfor_group(netif, groupaddr); - -      if (group != NULL) { -        /* Only send a leave if the flag is set according to the state diagram */ -        LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: Leaving group: ")); -        ip_addr_debug_print(IGMP_DEBUG, groupaddr); -        LWIP_DEBUGF(IGMP_DEBUG, ("\n")); - -        /* If there is no other use of the group */ -        if (group->use <= 1) { -          /* If we are the last reporter for this group */ -          if (group->last_reporter_flag) { -            LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: sending leaving group\n")); -            IGMP_STATS_INC(igmp.leave_sent); -            igmp_send(group, IGMP_LEAVE_GROUP); -          } -           -          /* Disable the group at the MAC level */ -          if (netif->igmp_mac_filter != NULL) { -            LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: igmp_mac_filter(DEL ")); -            ip_addr_debug_print(IGMP_DEBUG, groupaddr); -            LWIP_DEBUGF(IGMP_DEBUG, (") on if %p\n", netif)); -            netif->igmp_mac_filter(netif, groupaddr, IGMP_DEL_MAC_FILTER); -          } -           -          LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: remove group: ")); -          ip_addr_debug_print(IGMP_DEBUG, groupaddr); -          LWIP_DEBUGF(IGMP_DEBUG, ("\n"));           -           -          /* Free the group */ -          igmp_remove_group(group); -        } else { -          /* Decrement group use */ -          group->use--; -        } -        /* Leave on this interface */ -        err = ERR_OK; -      } else { -        /* It's not a fatal error on "leavegroup" */ -        LWIP_DEBUGF(IGMP_DEBUG, ("igmp_leavegroup: not member of group\n")); -      } -    } -    /* proceed to next network interface */ -    netif = netif->next; -  } - -  return err; -} - -/** - * The igmp timer function (both for NO_SYS=1 and =0) - * Should be called every IGMP_TMR_INTERVAL milliseconds (100 ms is default). - */ -void -igmp_tmr(void) -{ -  struct igmp_group *group = igmp_group_list; - -  while (group != NULL) { -    if (group->timer != 0) { -      group->timer -= 1; -      if (group->timer == 0) { -        igmp_timeout(group); -      } -    } -    group = group->next; -  } -} - -/** - * Called if a timeout for one group is reached. - * Sends a report for this group. - * - * @param group an igmp_group for which a timeout is reached - */ -void -igmp_timeout(struct igmp_group *group) -{ -  /* If the state is IGMP_GROUP_DELAYING_MEMBER then we send a report for this group */ -  if (group->group_state == IGMP_GROUP_DELAYING_MEMBER) { -    LWIP_DEBUGF(IGMP_DEBUG, ("igmp_timeout: report membership for group with address ")); -    ip_addr_debug_print(IGMP_DEBUG, &(group->group_address)); -    LWIP_DEBUGF(IGMP_DEBUG, (" on if %p\n", group->interface)); - -    igmp_send(group, IGMP_V2_MEMB_REPORT); -  } -} - -/** - * Start a timer for an igmp group - * - * @param group the igmp_group for which to start a timer - * @param max_time the time in multiples of IGMP_TMR_INTERVAL (decrease with - *        every call to igmp_tmr()) - */ -void -igmp_start_timer(struct igmp_group *group, u8_t max_time) -{ -  /** -   * @todo Important !! this should be random 0 -> max_time. Find out how to do this -   */ -  group->timer = max_time; -} - -/** - * Stop a timer for an igmp_group - * - * @param group the igmp_group for which to stop the timer - */ -void -igmp_stop_timer(struct igmp_group *group) -{ -  group->timer = 0; -} - -/** - * Delaying membership report for a group if necessary - * - * @param group the igmp_group for which "delaying" membership report - * @param maxresp query delay - */ -void -igmp_delaying_member( struct igmp_group *group, u8_t maxresp) -{ -  if ((group->group_state == IGMP_GROUP_IDLE_MEMBER) || -     ((group->group_state == IGMP_GROUP_DELAYING_MEMBER) && (maxresp > group->timer))) { -    igmp_start_timer(group, (maxresp)/2); -    group->group_state = IGMP_GROUP_DELAYING_MEMBER; -  } -} - - -/** - * Sends an IP packet on a network interface. This function constructs the IP header - * and calculates the IP header checksum. If the source IP address is NULL, - * the IP address of the outgoing network interface is filled in as source address. - * - * @param p the packet to send (p->payload points to the data, e.g. next -            protocol header; if dest == IP_HDRINCL, p already includes an IP -            header and p->payload points to that IP header) - * @param src the source IP address to send from (if src == IP_ADDR_ANY, the - *         IP  address of the netif used to send is used as source address) - * @param dest the destination IP address to send the packet to - * @param ttl the TTL value to be set in the IP header - * @param proto the PROTOCOL to be set in the IP header - * @param netif the netif on which to send this packet - * @return ERR_OK if the packet was sent OK - *         ERR_BUF if p doesn't have enough space for IP/LINK headers - *         returns errors returned by netif->output - */ -err_t -igmp_ip_output_if(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, -                  u8_t ttl, u8_t proto, struct netif *netif) -{ -  /* This is the "router alert" option */ -  u16_t ra[2]; -  ra[0] = htons (ROUTER_ALERT); -  ra[1] = 0x0000; /* Router shall examine packet */ -  return ip_output_if_opt(p, src, dest, ttl, 0, proto, netif, ra, ROUTER_ALERTLEN); -} - -/** - * Send an igmp packet to a specific group. - * - * @param group the group to which to send the packet - * @param type the type of igmp packet to send - */ -void -igmp_send(struct igmp_group *group, u8_t type) -{ -  struct pbuf*     p    = NULL; -  struct igmp_msg* igmp = NULL; -  struct ip_addr   src  = {0}; -  struct ip_addr*  dest = NULL; - -  /* IP header + "router alert" option + IGMP header */ -  p = pbuf_alloc(PBUF_TRANSPORT, IGMP_MINLEN, PBUF_RAM); -   -  if (p) { -    igmp = p->payload; -    LWIP_ASSERT("igmp_send: check that first pbuf can hold struct igmp_msg", -               (p->len >= sizeof(struct igmp_msg))); -    ip_addr_set(&src, &((group->interface)->ip_addr)); -      -    if (type == IGMP_V2_MEMB_REPORT) { -      dest = &(group->group_address); -      IGMP_STATS_INC(igmp.report_sent); -      ip_addr_set(&(igmp->igmp_group_address), &(group->group_address)); -      group->last_reporter_flag = 1; /* Remember we were the last to report */ -    } else { -      if (type == IGMP_LEAVE_GROUP) { -        dest = &allrouters; -        ip_addr_set(&(igmp->igmp_group_address), &(group->group_address)); -      } -    } - -    if ((type == IGMP_V2_MEMB_REPORT) || (type == IGMP_LEAVE_GROUP)) { -      igmp->igmp_msgtype  = type; -      igmp->igmp_maxresp  = 0; -      igmp->igmp_checksum = 0; -      igmp->igmp_checksum = inet_chksum( igmp, IGMP_MINLEN); - -      igmp_ip_output_if(p, &src, dest, IGMP_TTL, IP_PROTO_IGMP, group->interface); -    } - -    pbuf_free(p); -  } else { -    LWIP_DEBUGF(IGMP_DEBUG, ("igmp_send: not enough memory for igmp_send\n")); -  } -} - -#endif /* LWIP_IGMP */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet.c deleted file mode 100644 index 0d4f922..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet.c +++ /dev/null @@ -1,280 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * Functions common to all TCP/IPv4 modules, such as the byte order functions. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels <adam@sics.se> - * - */ - -#include "lwip/opt.h" - -#include "lwip/inet.h" - -/* Here for now until needed in other places in lwIP */ -#ifndef isprint -#define in_range(c, lo, up)  ((u8_t)c >= lo && (u8_t)c <= up) -#define isprint(c)           in_range(c, 0x20, 0x7f) -#define isdigit(c)           in_range(c, '0', '9') -#define isxdigit(c)          (isdigit(c) || in_range(c, 'a', 'f') || in_range(c, 'A', 'F')) -#define islower(c)           in_range(c, 'a', 'z') -#define isspace(c)           (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v') -#endif     -     -/** - * Ascii internet address interpretation routine. - * The value returned is in network order. - * - * @param cp IP address in ascii represenation (e.g. "127.0.0.1") - * @return ip address in network order - */ -u32_t -inet_addr(const char *cp) -{ -  struct in_addr val; - -  if (inet_aton(cp, &val)) { -    return (val.s_addr); -  } -  return (INADDR_NONE); -} - -/** - * Check whether "cp" is a valid ascii representation - * of an Internet address and convert to a binary address. - * Returns 1 if the address is valid, 0 if not. - * This replaces inet_addr, the return value from which - * cannot distinguish between failure and a local broadcast address. - * - * @param cp IP address in ascii represenation (e.g. "127.0.0.1") - * @param addr pointer to which to save the ip address in network order - * @return 1 if cp could be converted to addr, 0 on failure - */ -int -inet_aton(const char *cp, struct in_addr *addr) -{ -  u32_t val; -  u8_t base; -  char c; -  u32_t parts[4]; -  u32_t *pp = parts; - -  c = *cp; -  for (;;) { -    /* -     * Collect number up to ``.''. -     * Values are specified as for C: -     * 0x=hex, 0=octal, 1-9=decimal. -     */ -    if (!isdigit(c)) -      return (0); -    val = 0; -    base = 10; -    if (c == '0') { -      c = *++cp; -      if (c == 'x' || c == 'X') { -        base = 16; -        c = *++cp; -      } else -        base = 8; -    } -    for (;;) { -      if (isdigit(c)) { -        val = (val * base) + (int)(c - '0'); -        c = *++cp; -      } else if (base == 16 && isxdigit(c)) { -        val = (val << 4) | (int)(c + 10 - (islower(c) ? 'a' : 'A')); -        c = *++cp; -      } else -        break; -    } -    if (c == '.') { -      /* -       * Internet format: -       *  a.b.c.d -       *  a.b.c   (with c treated as 16 bits) -       *  a.b (with b treated as 24 bits) -       */ -      if (pp >= parts + 3) -        return (0); -      *pp++ = val; -      c = *++cp; -    } else -      break; -  } -  /* -   * Check for trailing characters. -   */ -  if (c != '\0' && !isspace(c)) -    return (0); -  /* -   * Concoct the address according to -   * the number of parts specified. -   */ -  switch (pp - parts + 1) { - -  case 0: -    return (0);       /* initial nondigit */ - -  case 1:             /* a -- 32 bits */ -    break; - -  case 2:             /* a.b -- 8.24 bits */ -    if (val > 0xffffffUL) -      return (0); -    val |= parts[0] << 24; -    break; - -  case 3:             /* a.b.c -- 8.8.16 bits */ -    if (val > 0xffff) -      return (0); -    val |= (parts[0] << 24) | (parts[1] << 16); -    break; - -  case 4:             /* a.b.c.d -- 8.8.8.8 bits */ -    if (val > 0xff) -      return (0); -    val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8); -    break; -  } -  if (addr) -    addr->s_addr = htonl(val); -  return (1); -} - -/** - * Convert numeric IP address into decimal dotted ASCII representation. - * returns ptr to static buffer; not reentrant! - * - * @param addr ip address in network order to convert - * @return pointer to a global static (!) buffer that holds the ASCII - *         represenation of addr - */ -char * -inet_ntoa(struct in_addr addr) -{ -  static char str[16]; -  u32_t s_addr = addr.s_addr; -  char inv[3]; -  char *rp; -  u8_t *ap; -  u8_t rem; -  u8_t n; -  u8_t i; - -  rp = str; -  ap = (u8_t *)&s_addr; -  for(n = 0; n < 4; n++) { -    i = 0; -    do { -      rem = *ap % (u8_t)10; -      *ap /= (u8_t)10; -      inv[i++] = '0' + rem; -    } while(*ap); -    while(i--) -      *rp++ = inv[i]; -    *rp++ = '.'; -    ap++; -  } -  *--rp = 0; -  return str; -} - -/** - * These are reference implementations of the byte swapping functions. - * Again with the aim of being simple, correct and fully portable. - * Byte swapping is the second thing you would want to optimize. You will - * need to port it to your architecture and in your cc.h: - *  - * #define LWIP_PLATFORM_BYTESWAP 1 - * #define LWIP_PLATFORM_HTONS(x) <your_htons> - * #define LWIP_PLATFORM_HTONL(x) <your_htonl> - * - * Note ntohs() and ntohl() are merely references to the htonx counterparts. - */ - -#if (LWIP_PLATFORM_BYTESWAP == 0) && (BYTE_ORDER == LITTLE_ENDIAN) - -/** - * Convert an u16_t from host- to network byte order. - * - * @param n u16_t in host byte order - * @return n in network byte order - */ -u16_t -htons(u16_t n) -{ -  return ((n & 0xff) << 8) | ((n & 0xff00) >> 8); -} - -/** - * Convert an u16_t from network- to host byte order. - * - * @param n u16_t in network byte order - * @return n in host byte order - */ -u16_t -ntohs(u16_t n) -{ -  return htons(n); -} - -/** - * Convert an u32_t from host- to network byte order. - * - * @param n u32_t in host byte order - * @return n in network byte order - */ -u32_t -htonl(u32_t n) -{ -  return ((n & 0xff) << 24) | -    ((n & 0xff00) << 8) | -    ((n & 0xff0000UL) >> 8) | -    ((n & 0xff000000UL) >> 24); -} - -/** - * Convert an u32_t from network- to host byte order. - * - * @param n u32_t in network byte order - * @return n in host byte order - */ -u32_t -ntohl(u32_t n) -{ -  return htonl(n); -} - -#endif /* (LWIP_PLATFORM_BYTESWAP == 0) && (BYTE_ORDER == LITTLE_ENDIAN) */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet_chksum.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet_chksum.c deleted file mode 100644 index 47a11d4..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet_chksum.c +++ /dev/null @@ -1,440 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * Incluse internet checksum functions. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels <adam@sics.se> - * - */ - -#include "lwip/opt.h" - -#include "lwip/inet_chksum.h" -#include "lwip/inet.h" - -#include <stddef.h> - -/* These are some reference implementations of the checksum algorithm, with the - * aim of being simple, correct and fully portable. Checksumming is the - * first thing you would want to optimize for your platform. If you create - * your own version, link it in and in your cc.h put: - *  - * #define LWIP_CHKSUM <your_checksum_routine>  - * - * Or you can select from the implementations below by defining - * LWIP_CHKSUM_ALGORITHM to 1, 2 or 3. - */ - -#ifndef LWIP_CHKSUM -# define LWIP_CHKSUM lwip_standard_chksum -# ifndef LWIP_CHKSUM_ALGORITHM -#  define LWIP_CHKSUM_ALGORITHM 1 -# endif -#endif -/* If none set: */ -#ifndef LWIP_CHKSUM_ALGORITHM -# define LWIP_CHKSUM_ALGORITHM 0 -#endif - -/** Like the name says... */ -#if LWIP_PLATFORM_BYTESWAP && (BYTE_ORDER == LITTLE_ENDIAN) -/* little endian and PLATFORM_BYTESWAP defined */ -#define SWAP_BYTES_IN_WORD(w) LWIP_PLATFORM_HTONS(w) -#else -/* can't use htons on big endian (or PLATFORM_BYTESWAP not defined)... */ -#define SWAP_BYTES_IN_WORD(w) ((w & 0xff) << 8) | ((w & 0xff00) >> 8) -#endif - -/** Split an u32_t in two u16_ts and add them up */ -#define FOLD_U32T(u)          ((u >> 16) + (u & 0x0000ffffUL)) - -#if (LWIP_CHKSUM_ALGORITHM == 1) /* Version #1 */ -/** - * lwip checksum - * - * @param dataptr points to start of data to be summed at any boundary - * @param len length of data to be summed - * @return host order (!) lwip checksum (non-inverted Internet sum)  - * - * @note accumulator size limits summable length to 64k - * @note host endianess is irrelevant (p3 RFC1071) - */ -static u16_t -lwip_standard_chksum(void *dataptr, u16_t len) -{ -  u32_t acc; -  u16_t src; -  u8_t *octetptr; - -  acc = 0; -  /* dataptr may be at odd or even addresses */ -  octetptr = (u8_t*)dataptr; -  while (len > 1) { -    /* declare first octet as most significant -       thus assume network order, ignoring host order */ -    src = (*octetptr) << 8; -    octetptr++; -    /* declare second octet as least significant */ -    src |= (*octetptr); -    octetptr++; -    acc += src; -    len -= 2; -  } -  if (len > 0) { -    /* accumulate remaining octet */ -    src = (*octetptr) << 8; -    acc += src; -  } -  /* add deferred carry bits */ -  acc = (acc >> 16) + (acc & 0x0000ffffUL); -  if ((acc & 0xffff0000UL) != 0) { -    acc = (acc >> 16) + (acc & 0x0000ffffUL); -  } -  /* This maybe a little confusing: reorder sum using htons() -     instead of ntohs() since it has a little less call overhead. -     The caller must invert bits for Internet sum ! */ -  return htons((u16_t)acc); -} -#endif - -#if (LWIP_CHKSUM_ALGORITHM == 2) /* Alternative version #2 */ -/* - * Curt McDowell - * Broadcom Corp. - * csm@broadcom.com - * - * IP checksum two bytes at a time with support for - * unaligned buffer. - * Works for len up to and including 0x20000. - * by Curt McDowell, Broadcom Corp. 12/08/2005 - * - * @param dataptr points to start of data to be summed at any boundary - * @param len length of data to be summed - * @return host order (!) lwip checksum (non-inverted Internet sum)  - */ - -static u16_t -lwip_standard_chksum(void *dataptr, int len) -{ -  u8_t *pb = dataptr; -  u16_t *ps, t = 0; -  u32_t sum = 0; -  int odd = ((u32_t)pb & 1); - -  /* Get aligned to u16_t */ -  if (odd && len > 0) { -    ((u8_t *)&t)[1] = *pb++; -    len--; -  } - -  /* Add the bulk of the data */ -  ps = (u16_t *)pb; -  while (len > 1) { -    sum += *ps++; -    len -= 2; -  } - -  /* Consume left-over byte, if any */ -  if (len > 0) { -    ((u8_t *)&t)[0] = *(u8_t *)ps;; -  } - -  /* Add end bytes */ -  sum += t; - -  /* Fold 32-bit sum to 16 bits -     calling this twice is propably faster than if statements... */ -  sum = FOLD_U32T(sum); -  sum = FOLD_U32T(sum); - -  /* Swap if alignment was odd */ -  if (odd) { -    sum = SWAP_BYTES_IN_WORD(sum); -  } - -  return sum; -} -#endif - -#if (LWIP_CHKSUM_ALGORITHM == 3) /* Alternative version #3 */ -/** - * An optimized checksum routine. Basically, it uses loop-unrolling on - * the checksum loop, treating the head and tail bytes specially, whereas - * the inner loop acts on 8 bytes at a time.  - * - * @arg start of buffer to be checksummed. May be an odd byte address. - * @len number of bytes in the buffer to be checksummed. - * @return host order (!) lwip checksum (non-inverted Internet sum)  - *  - * by Curt McDowell, Broadcom Corp. December 8th, 2005 - */ - -static u16_t -lwip_standard_chksum(void *dataptr, int len) -{ -  u8_t *pb = dataptr; -  u16_t *ps, t = 0; -  u32_t *pl; -  u32_t sum = 0, tmp; -  /* starts at odd byte address? */ -  int odd = ((u32_t)pb & 1); - -  if (odd && len > 0) { -    ((u8_t *)&t)[1] = *pb++; -    len--; -  } - -  ps = (u16_t *)pb; - -  if (((u32_t)ps & 3) && len > 1) { -    sum += *ps++; -    len -= 2; -  } - -  pl = (u32_t *)ps; - -  while (len > 7)  { -    tmp = sum + *pl++;          /* ping */ -    if (tmp < sum) { -      tmp++;                    /* add back carry */ -    } - -    sum = tmp + *pl++;          /* pong */ -    if (sum < tmp) { -      sum++;                    /* add back carry */ -    } - -    len -= 8; -  } - -  /* make room in upper bits */ -  sum = FOLD_U32T(sum); - -  ps = (u16_t *)pl; - -  /* 16-bit aligned word remaining? */ -  while (len > 1) { -    sum += *ps++; -    len -= 2; -  } - -  /* dangling tail byte remaining? */ -  if (len > 0) {                /* include odd byte */ -    ((u8_t *)&t)[0] = *(u8_t *)ps; -  } - -  sum += t;                     /* add end bytes */ - -  /* Fold 32-bit sum to 16 bits -     calling this twice is propably faster than if statements... */ -  sum = FOLD_U32T(sum); -  sum = FOLD_U32T(sum); - -  if (odd) { -    sum = SWAP_BYTES_IN_WORD(sum); -  } - -  return sum; -} -#endif - -/* inet_chksum_pseudo: - * - * Calculates the pseudo Internet checksum used by TCP and UDP for a pbuf chain. - * IP addresses are expected to be in network byte order. - * - * @param p chain of pbufs over that a checksum should be calculated (ip data part) - * @param src source ip address (used for checksum of pseudo header) - * @param dst destination ip address (used for checksum of pseudo header) - * @param proto ip protocol (used for checksum of pseudo header) - * @param proto_len length of the ip data part (used for checksum of pseudo header) - * @return checksum (as u16_t) to be saved directly in the protocol header - */ -u16_t -inet_chksum_pseudo(struct pbuf *p, -       struct ip_addr *src, struct ip_addr *dest, -       u8_t proto, u16_t proto_len) -{ -  u32_t acc; -  struct pbuf *q; -  u8_t swapped; - -  acc = 0; -  swapped = 0; -  /* iterate through all pbuf in chain */ -  for(q = p; q != NULL; q = q->next) { -    LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", -      (void *)q, (void *)q->next)); -    acc += LWIP_CHKSUM(q->payload, q->len); -    /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/ -    /* just executing this next line is probably faster that the if statement needed -       to check whether we really need to execute it, and does no harm */ -    acc = FOLD_U32T(acc); -    if (q->len % 2 != 0) { -      swapped = 1 - swapped; -      acc = SWAP_BYTES_IN_WORD(acc); -    } -    /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/ -  } - -  if (swapped) { -    acc = SWAP_BYTES_IN_WORD(acc); -  } -  acc += (src->addr & 0xffffUL); -  acc += ((src->addr >> 16) & 0xffffUL); -  acc += (dest->addr & 0xffffUL); -  acc += ((dest->addr >> 16) & 0xffffUL); -  acc += (u32_t)htons((u16_t)proto); -  acc += (u32_t)htons(proto_len); - -  /* Fold 32-bit sum to 16 bits -     calling this twice is propably faster than if statements... */ -  acc = FOLD_U32T(acc); -  acc = FOLD_U32T(acc); -  LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc)); -  return (u16_t)~(acc & 0xffffUL); -} - -/* inet_chksum_pseudo: - * - * Calculates the pseudo Internet checksum used by TCP and UDP for a pbuf chain. - * IP addresses are expected to be in network byte order. - * - * @param p chain of pbufs over that a checksum should be calculated (ip data part) - * @param src source ip address (used for checksum of pseudo header) - * @param dst destination ip address (used for checksum of pseudo header) - * @param proto ip protocol (used for checksum of pseudo header) - * @param proto_len length of the ip data part (used for checksum of pseudo header) - * @return checksum (as u16_t) to be saved directly in the protocol header - */ -/* Currently only used by UDPLITE, although this could change in the future. */ -#if LWIP_UDPLITE -u16_t -inet_chksum_pseudo_partial(struct pbuf *p, -       struct ip_addr *src, struct ip_addr *dest, -       u8_t proto, u16_t proto_len, u16_t chksum_len) -{ -  u32_t acc; -  struct pbuf *q; -  u8_t swapped; -  u16_t chklen; - -  acc = 0; -  swapped = 0; -  /* iterate through all pbuf in chain */ -  for(q = p; (q != NULL) && (chksum_len > 0); q = q->next) { -    LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", -      (void *)q, (void *)q->next)); -    chklen = q->len; -    if (chklen > chksum_len) { -      chklen = chksum_len; -    } -    acc += LWIP_CHKSUM(q->payload, chklen); -    chksum_len -= chklen; -    LWIP_ASSERT("delete me", chksum_len < 0x7fff); -    /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/ -    /* fold the upper bit down */ -    acc = FOLD_U32T(acc); -    if (q->len % 2 != 0) { -      swapped = 1 - swapped; -      acc = SWAP_BYTES_IN_WORD(acc); -    } -    /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/ -  } - -  if (swapped) { -    acc = SWAP_BYTES_IN_WORD(acc); -  } -  acc += (src->addr & 0xffffUL); -  acc += ((src->addr >> 16) & 0xffffUL); -  acc += (dest->addr & 0xffffUL); -  acc += ((dest->addr >> 16) & 0xffffUL); -  acc += (u32_t)htons((u16_t)proto); -  acc += (u32_t)htons(proto_len); - -  /* Fold 32-bit sum to 16 bits -     calling this twice is propably faster than if statements... */ -  acc = FOLD_U32T(acc); -  acc = FOLD_U32T(acc); -  LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc)); -  return (u16_t)~(acc & 0xffffUL); -} -#endif /* LWIP_UDPLITE */ - -/* inet_chksum: - * - * Calculates the Internet checksum over a portion of memory. Used primarily for IP - * and ICMP. - * - * @param dataptr start of the buffer to calculate the checksum (no alignment needed) - * @param len length of the buffer to calculate the checksum - * @return checksum (as u16_t) to be saved directly in the protocol header - */ - -u16_t -inet_chksum(void *dataptr, u16_t len) -{ -  return ~LWIP_CHKSUM(dataptr, len); -} - -/** - * Calculate a checksum over a chain of pbufs (without pseudo-header, much like - * inet_chksum only pbufs are used). - * - * @param p pbuf chain over that the checksum should be calculated - * @return checksum (as u16_t) to be saved directly in the protocol header - */ -u16_t -inet_chksum_pbuf(struct pbuf *p) -{ -  u32_t acc; -  struct pbuf *q; -  u8_t swapped; - -  acc = 0; -  swapped = 0; -  for(q = p; q != NULL; q = q->next) { -    acc += LWIP_CHKSUM(q->payload, q->len); -    acc = FOLD_U32T(acc); -    if (q->len % 2 != 0) { -      swapped = 1 - swapped; -      acc = SWAP_BYTES_IN_WORD(acc); -    } -  } - -  if (swapped) { -    acc = SWAP_BYTES_IN_WORD(acc); -  } -  return (u16_t)~(acc & 0xffffUL); -} diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip.c deleted file mode 100644 index a958242..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip.c +++ /dev/null @@ -1,725 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * This is the IPv4 layer implementation for incoming and outgoing IP traffic. - *  - * @see ip_frag.c - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels <adam@sics.se> - * - */ - -#include "lwip/opt.h" -#include "lwip/ip.h" -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/ip_frag.h" -#include "lwip/inet.h" -#include "lwip/inet_chksum.h" -#include "lwip/netif.h" -#include "lwip/icmp.h" -#include "lwip/igmp.h" -#include "lwip/raw.h" -#include "lwip/udp.h" -#include "lwip/tcp.h" -#include "lwip/snmp.h" -#include "lwip/dhcp.h" -#include "lwip/stats.h" -#include "arch/perf.h" - -#include <string.h> - -/** - * The interface that provided the packet for the current callback - * invocation. - */ -struct netif *current_netif; - -/** - * Header of the input packet currently being processed. - */ -const struct ip_hdr *current_header; - -/** - * Finds the appropriate network interface for a given IP address. It - * searches the list of network interfaces linearly. A match is found - * if the masked IP address of the network interface equals the masked - * IP address given to the function. - * - * @param dest the destination IP address for which to find the route - * @return the netif on which to send to reach dest - */ -struct netif * -ip_route(struct ip_addr *dest) -{ -  struct netif *netif; - -  /* iterate through netifs */ -  for(netif = netif_list; netif != NULL; netif = netif->next) { -    /* network mask matches? */ -    if (netif_is_up(netif)) { -      if (ip_addr_netcmp(dest, &(netif->ip_addr), &(netif->netmask))) { -        /* return netif on which to forward IP packet */ -        return netif; -      } -    } -  } -  if ((netif_default == NULL) || (!netif_is_up(netif_default))) { -    LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_route: No route to 0x%"X32_F"\n", dest->addr)); -    IP_STATS_INC(ip.rterr); -    snmp_inc_ipoutnoroutes(); -    return NULL; -  } -  /* no matching netif found, use default netif */ -  return netif_default; -} - -#if IP_FORWARD -/** - * Forwards an IP packet. It finds an appropriate route for the - * packet, decrements the TTL value of the packet, adjusts the - * checksum and outputs the packet on the appropriate interface. - * - * @param p the packet to forward (p->payload points to IP header) - * @param iphdr the IP header of the input packet - * @param inp the netif on which this packet was received - * @return the netif on which the packet was sent (NULL if it wasn't sent) - */ -static struct netif * -ip_forward(struct pbuf *p, struct ip_hdr *iphdr, struct netif *inp) -{ -  struct netif *netif; - -  PERF_START; -  /* Find network interface where to forward this IP packet to. */ -  netif = ip_route((struct ip_addr *)&(iphdr->dest)); -  if (netif == NULL) { -    LWIP_DEBUGF(IP_DEBUG, ("ip_forward: no forwarding route for 0x%"X32_F" found\n", -                      iphdr->dest.addr)); -    snmp_inc_ipoutnoroutes(); -    return (struct netif *)NULL; -  } -  /* Do not forward packets onto the same network interface on which -   * they arrived. */ -  if (netif == inp) { -    LWIP_DEBUGF(IP_DEBUG, ("ip_forward: not bouncing packets back on incoming interface.\n")); -    snmp_inc_ipoutnoroutes(); -    return (struct netif *)NULL; -  } - -  /* decrement TTL */ -  IPH_TTL_SET(iphdr, IPH_TTL(iphdr) - 1); -  /* send ICMP if TTL == 0 */ -  if (IPH_TTL(iphdr) == 0) { -    snmp_inc_ipinhdrerrors(); -#if LWIP_ICMP -    /* Don't send ICMP messages in response to ICMP messages */ -    if (IPH_PROTO(iphdr) != IP_PROTO_ICMP) { -      icmp_time_exceeded(p, ICMP_TE_TTL); -    } -#endif /* LWIP_ICMP */ -    return (struct netif *)NULL; -  } - -  /* Incrementally update the IP checksum. */ -  if (IPH_CHKSUM(iphdr) >= htons(0xffff - 0x100)) { -    IPH_CHKSUM_SET(iphdr, IPH_CHKSUM(iphdr) + htons(0x100) + 1); -  } else { -    IPH_CHKSUM_SET(iphdr, IPH_CHKSUM(iphdr) + htons(0x100)); -  } - -  LWIP_DEBUGF(IP_DEBUG, ("ip_forward: forwarding packet to 0x%"X32_F"\n", -                    iphdr->dest.addr)); - -  IP_STATS_INC(ip.fw); -  IP_STATS_INC(ip.xmit); -  snmp_inc_ipforwdatagrams(); - -  PERF_STOP("ip_forward"); -  /* transmit pbuf on chosen interface */ -  netif->output(netif, p, (struct ip_addr *)&(iphdr->dest)); -  return netif; -} -#endif /* IP_FORWARD */ - -/** - * This function is called by the network interface device driver when - * an IP packet is received. The function does the basic checks of the - * IP header such as packet size being at least larger than the header - * size etc. If the packet was not destined for us, the packet is - * forwarded (using ip_forward). The IP checksum is always checked. - * - * Finally, the packet is sent to the upper layer protocol input function. - *  - * @param p the received IP packet (p->payload points to IP header) - * @param inp the netif on which this packet was received - * @return ERR_OK if the packet was processed (could return ERR_* if it wasn't - *         processed, but currently always returns ERR_OK) - */ -err_t -ip_input(struct pbuf *p, struct netif *inp) -{ -  struct ip_hdr *iphdr; -  struct netif *netif; -  u16_t iphdr_hlen; -  u16_t iphdr_len; -#if LWIP_DHCP -  int check_ip_src=1; -#endif /* LWIP_DHCP */ - -  IP_STATS_INC(ip.recv); -  snmp_inc_ipinreceives(); - -  /* identify the IP header */ -  iphdr = p->payload; -  if (IPH_V(iphdr) != 4) { -    LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_WARNING, ("IP packet dropped due to bad version number %"U16_F"\n", IPH_V(iphdr))); -    ip_debug_print(p); -    pbuf_free(p); -    IP_STATS_INC(ip.err); -    IP_STATS_INC(ip.drop); -    snmp_inc_ipinhdrerrors(); -    return ERR_OK; -  } - -  /* obtain IP header length in number of 32-bit words */ -  iphdr_hlen = IPH_HL(iphdr); -  /* calculate IP header length in bytes */ -  iphdr_hlen *= 4; -  /* obtain ip length in bytes */ -  iphdr_len = ntohs(IPH_LEN(iphdr)); - -  /* header length exceeds first pbuf length, or ip length exceeds total pbuf length? */ -  if ((iphdr_hlen > p->len) || (iphdr_len > p->tot_len)) { -    if (iphdr_hlen > p->len) { -      LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, -        ("IP header (len %"U16_F") does not fit in first pbuf (len %"U16_F"), IP packet dropped.\n", -        iphdr_hlen, p->len)); -    } -    if (iphdr_len > p->tot_len) { -      LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, -        ("IP (len %"U16_F") is longer than pbuf (len %"U16_F"), IP packet dropped.\n", -        iphdr_len, p->tot_len)); -    } -    /* free (drop) packet pbufs */ -    pbuf_free(p); -    IP_STATS_INC(ip.lenerr); -    IP_STATS_INC(ip.drop); -    snmp_inc_ipindiscards(); -    return ERR_OK; -  } - -  /* verify checksum */ -#if CHECKSUM_CHECK_IP -  if (inet_chksum(iphdr, iphdr_hlen) != 0) { - -    LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, -      ("Checksum (0x%"X16_F") failed, IP packet dropped.\n", inet_chksum(iphdr, iphdr_hlen))); -    ip_debug_print(p); -    pbuf_free(p); -    IP_STATS_INC(ip.chkerr); -    IP_STATS_INC(ip.drop); -    snmp_inc_ipinhdrerrors(); -    return ERR_OK; -  } -#endif - -  /* Trim pbuf. This should have been done at the netif layer, -   * but we'll do it anyway just to be sure that its done. */ -  pbuf_realloc(p, iphdr_len); - -  /* match packet against an interface, i.e. is this packet for us? */ -#if LWIP_IGMP -  if (ip_addr_ismulticast(&(iphdr->dest))) { -    if ((inp->flags & NETIF_FLAG_IGMP) && (igmp_lookfor_group(inp, &(iphdr->dest)))) { -      netif = inp; -    } else { -      netif = NULL; -    } -  } else -#endif /* LWIP_IGMP */ -  { -    /* start trying with inp. if that's not acceptable, start walking the -       list of configured netifs. -       'first' is used as a boolean to mark whether we started walking the list */ -    int first = 1; -    netif = inp; -    do { -      LWIP_DEBUGF(IP_DEBUG, ("ip_input: iphdr->dest 0x%"X32_F" netif->ip_addr 0x%"X32_F" (0x%"X32_F", 0x%"X32_F", 0x%"X32_F")\n", -          iphdr->dest.addr, netif->ip_addr.addr, -          iphdr->dest.addr & netif->netmask.addr, -          netif->ip_addr.addr & netif->netmask.addr, -          iphdr->dest.addr & ~(netif->netmask.addr))); - -      /* interface is up and configured? */ -      if ((netif_is_up(netif)) && (!ip_addr_isany(&(netif->ip_addr)))) { -        /* unicast to this interface address? */ -        if (ip_addr_cmp(&(iphdr->dest), &(netif->ip_addr)) || -            /* or broadcast on this interface network address? */ -            ip_addr_isbroadcast(&(iphdr->dest), netif)) { -          LWIP_DEBUGF(IP_DEBUG, ("ip_input: packet accepted on interface %c%c\n", -              netif->name[0], netif->name[1])); -          /* break out of for loop */ -          break; -        } -      } -      if (first) { -        first = 0; -        netif = netif_list; -      } else { -        netif = netif->next; -      } -      if (netif == inp) { -        netif = netif->next; -      } -    } while(netif != NULL); -  } - -#if LWIP_DHCP -  /* Pass DHCP messages regardless of destination address. DHCP traffic is addressed -   * using link layer addressing (such as Ethernet MAC) so we must not filter on IP. -   * According to RFC 1542 section 3.1.1, referred by RFC 2131). -   */ -  if (netif == NULL) { -    /* remote port is DHCP server? */ -    if (IPH_PROTO(iphdr) == IP_PROTO_UDP) { -      LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip_input: UDP packet to DHCP client port %"U16_F"\n", -        ntohs(((struct udp_hdr *)((u8_t *)iphdr + iphdr_hlen))->dest))); -      if (ntohs(((struct udp_hdr *)((u8_t *)iphdr + iphdr_hlen))->dest) == DHCP_CLIENT_PORT) { -        LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip_input: DHCP packet accepted.\n")); -        netif = inp; -        check_ip_src = 0; -      } -    } -  } -#endif /* LWIP_DHCP */ - -  /* broadcast or multicast packet source address? Compliant with RFC 1122: 3.2.1.3 */ -#if LWIP_DHCP -  /* DHCP servers need 0.0.0.0 to be allowed as source address (RFC 1.1.2.2: 3.2.1.3/a) */ -  if (check_ip_src && (iphdr->src.addr != 0)) -#endif /* LWIP_DHCP */ -  {  if ((ip_addr_isbroadcast(&(iphdr->src), inp)) || -         (ip_addr_ismulticast(&(iphdr->src)))) { -      /* packet source is not valid */ -      LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, ("ip_input: packet source is not valid.\n")); -      /* free (drop) packet pbufs */ -      pbuf_free(p); -      IP_STATS_INC(ip.drop); -      snmp_inc_ipinaddrerrors(); -      snmp_inc_ipindiscards(); -      return ERR_OK; -    } -  } - -  /* packet not for us? */ -  if (netif == NULL) { -    /* packet not for us, route or discard */ -    LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_TRACE, ("ip_input: packet not for us.\n")); -#if IP_FORWARD -    /* non-broadcast packet? */ -    if (!ip_addr_isbroadcast(&(iphdr->dest), inp)) { -      /* try to forward IP packet on (other) interfaces */ -      ip_forward(p, iphdr, inp); -    } else -#endif /* IP_FORWARD */ -    { -      snmp_inc_ipinaddrerrors(); -      snmp_inc_ipindiscards(); -    } -    pbuf_free(p); -    return ERR_OK; -  } -  /* packet consists of multiple fragments? */ -  if ((IPH_OFFSET(iphdr) & htons(IP_OFFMASK | IP_MF)) != 0) { -#if IP_REASSEMBLY /* packet fragment reassembly code present? */ -    LWIP_DEBUGF(IP_DEBUG, ("IP packet is a fragment (id=0x%04"X16_F" tot_len=%"U16_F" len=%"U16_F" MF=%"U16_F" offset=%"U16_F"), calling ip_reass()\n", -      ntohs(IPH_ID(iphdr)), p->tot_len, ntohs(IPH_LEN(iphdr)), !!(IPH_OFFSET(iphdr) & htons(IP_MF)), (ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK)*8)); -    /* reassemble the packet*/ -    p = ip_reass(p); -    /* packet not fully reassembled yet? */ -    if (p == NULL) { -      return ERR_OK; -    } -    iphdr = p->payload; -#else /* IP_REASSEMBLY == 0, no packet fragment reassembly code present */ -    pbuf_free(p); -    LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("IP packet dropped since it was fragmented (0x%"X16_F") (while IP_REASSEMBLY == 0).\n", -      ntohs(IPH_OFFSET(iphdr)))); -    IP_STATS_INC(ip.opterr); -    IP_STATS_INC(ip.drop); -    /* unsupported protocol feature */ -    snmp_inc_ipinunknownprotos(); -    return ERR_OK; -#endif /* IP_REASSEMBLY */ -  } - -#if IP_OPTIONS_ALLOWED == 0 /* no support for IP options in the IP header? */ - -#if LWIP_IGMP -  /* there is an extra "router alert" option in IGMP messages which we allow for but do not police */ -  if((iphdr_hlen > IP_HLEN &&  (IPH_PROTO(iphdr) != IP_PROTO_IGMP)) { -#else -  if (iphdr_hlen > IP_HLEN) { -#endif /* LWIP_IGMP */ -    LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("IP packet dropped since there were IP options (while IP_OPTIONS_ALLOWED == 0).\n")); -    pbuf_free(p); -    IP_STATS_INC(ip.opterr); -    IP_STATS_INC(ip.drop); -    /* unsupported protocol feature */ -    snmp_inc_ipinunknownprotos(); -    return ERR_OK; -  } -#endif /* IP_OPTIONS_ALLOWED == 0 */ - -  /* send to upper layers */ -  LWIP_DEBUGF(IP_DEBUG, ("ip_input: \n")); -  ip_debug_print(p); -  LWIP_DEBUGF(IP_DEBUG, ("ip_input: p->len %"U16_F" p->tot_len %"U16_F"\n", p->len, p->tot_len)); - -  current_netif = inp; -  current_header = iphdr; - -#if LWIP_RAW -  /* raw input did not eat the packet? */ -  if (raw_input(p, inp) == 0) -#endif /* LWIP_RAW */ -  { - -    switch (IPH_PROTO(iphdr)) { -#if LWIP_UDP -    case IP_PROTO_UDP: -#if LWIP_UDPLITE -    case IP_PROTO_UDPLITE: -#endif /* LWIP_UDPLITE */ -      snmp_inc_ipindelivers(); -      udp_input(p, inp); -      break; -#endif /* LWIP_UDP */ -#if LWIP_TCP -    case IP_PROTO_TCP: -      snmp_inc_ipindelivers(); -      tcp_input(p, inp); -      break; -#endif /* LWIP_TCP */ -#if LWIP_ICMP -    case IP_PROTO_ICMP: -      snmp_inc_ipindelivers(); -      icmp_input(p, inp); -      break; -#endif /* LWIP_ICMP */ -#if LWIP_IGMP -    case IP_PROTO_IGMP: -      igmp_input(p,inp,&(iphdr->dest)); -      break; -#endif /* LWIP_IGMP */ -    default: -#if LWIP_ICMP -      /* send ICMP destination protocol unreachable unless is was a broadcast */ -      if (!ip_addr_isbroadcast(&(iphdr->dest), inp) && -          !ip_addr_ismulticast(&(iphdr->dest))) { -        p->payload = iphdr; -        icmp_dest_unreach(p, ICMP_DUR_PROTO); -      } -#endif /* LWIP_ICMP */ -      pbuf_free(p); - -      LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("Unsupported transport protocol %"U16_F"\n", IPH_PROTO(iphdr))); - -      IP_STATS_INC(ip.proterr); -      IP_STATS_INC(ip.drop); -      snmp_inc_ipinunknownprotos(); -    } -  } - -  current_netif = NULL; -  current_header = NULL; - -  return ERR_OK; -} - -/** - * Sends an IP packet on a network interface. This function constructs - * the IP header and calculates the IP header checksum. If the source - * IP address is NULL, the IP address of the outgoing network - * interface is filled in as source address. - * If the destination IP address is IP_HDRINCL, p is assumed to already - * include an IP header and p->payload points to it instead of the data. - * - * @param p the packet to send (p->payload points to the data, e.g. next -            protocol header; if dest == IP_HDRINCL, p already includes an IP -            header and p->payload points to that IP header) - * @param src the source IP address to send from (if src == IP_ADDR_ANY, the - *         IP  address of the netif used to send is used as source address) - * @param dest the destination IP address to send the packet to - * @param ttl the TTL value to be set in the IP header - * @param tos the TOS value to be set in the IP header - * @param proto the PROTOCOL to be set in the IP header - * @param netif the netif on which to send this packet - * @return ERR_OK if the packet was sent OK - *         ERR_BUF if p doesn't have enough space for IP/LINK headers - *         returns errors returned by netif->output - * - * @note ip_id: RFC791 "some host may be able to simply use - *  unique identifiers independent of destination" - */ -err_t -ip_output_if(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, -             u8_t ttl, u8_t tos, -             u8_t proto, struct netif *netif) -{ -#if IP_OPTIONS_SEND -  return ip_output_if_opt(p, src, dest, ttl, tos, proto, netif, NULL, 0); -} - -/** - * Same as ip_output_if() but with the possibility to include IP options: - * - * @ param ip_options pointer to the IP options, copied into the IP header - * @ param optlen length of ip_options - */ -err_t ip_output_if_opt(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, -       u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options, -       u16_t optlen) -{ -#endif /* IP_OPTIONS_SEND */ -  struct ip_hdr *iphdr; -  static u16_t ip_id = 0; - -  snmp_inc_ipoutrequests(); - -  /* Should the IP header be generated or is it already included in p? */ -  if (dest != IP_HDRINCL) { -    u16_t ip_hlen = IP_HLEN; -#if IP_OPTIONS_SEND -    u16_t optlen_aligned = 0; -    if (optlen != 0) { -      /* round up to a multiple of 4 */ -      optlen_aligned = ((optlen + 3) & ~3); -      ip_hlen += optlen_aligned; -      /* First write in the IP options */ -      if (pbuf_header(p, optlen_aligned)) { -        LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_output_if_opt: not enough room for IP options in pbuf\n")); -        IP_STATS_INC(ip.err); -        snmp_inc_ipoutdiscards(); -        return ERR_BUF; -      } -      MEMCPY(p->payload, ip_options, optlen); -      if (optlen < optlen_aligned) { -        /* zero the remaining bytes */ -        memset(((char*)p->payload) + optlen, 0, optlen_aligned - optlen); -      } -    } -#endif /* IP_OPTIONS_SEND */ -    /* generate IP header */ -    if (pbuf_header(p, IP_HLEN)) { -      LWIP_DEBUGF(IP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("ip_output: not enough room for IP header in pbuf\n")); - -      IP_STATS_INC(ip.err); -      snmp_inc_ipoutdiscards(); -      return ERR_BUF; -    } - -    iphdr = p->payload; -    LWIP_ASSERT("check that first pbuf can hold struct ip_hdr", -               (p->len >= sizeof(struct ip_hdr))); - -    IPH_TTL_SET(iphdr, ttl); -    IPH_PROTO_SET(iphdr, proto); - -    ip_addr_set(&(iphdr->dest), dest); - -    IPH_VHLTOS_SET(iphdr, 4, ip_hlen / 4, tos); -    IPH_LEN_SET(iphdr, htons(p->tot_len)); -    IPH_OFFSET_SET(iphdr, 0); -    IPH_ID_SET(iphdr, htons(ip_id)); -    ++ip_id; - -    if (ip_addr_isany(src)) { -      ip_addr_set(&(iphdr->src), &(netif->ip_addr)); -    } else { -      ip_addr_set(&(iphdr->src), src); -    } - -    IPH_CHKSUM_SET(iphdr, 0); -#if CHECKSUM_GEN_IP -    IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, ip_hlen)); -#endif -  } else { -    /* IP header already included in p */ -    iphdr = p->payload; -    dest = &(iphdr->dest); -  } - -  IP_STATS_INC(ip.xmit); - -  LWIP_DEBUGF(IP_DEBUG, ("ip_output_if: %c%c%"U16_F"\n", netif->name[0], netif->name[1], netif->num)); -  ip_debug_print(p); - -#if ENABLE_LOOPBACK -  if (ip_addr_cmp(dest, &netif->ip_addr)) { -    /* Packet to self, enqueue it for loopback */ -    LWIP_DEBUGF(IP_DEBUG, ("netif_loop_output()")); -    return netif_loop_output(netif, p, dest); -  } -#endif /* ENABLE_LOOPBACK */ -#if IP_FRAG -  /* don't fragment if interface has mtu set to 0 [loopif] */ -  if (netif->mtu && (p->tot_len > netif->mtu)) { -    return ip_frag(p,netif,dest); -  } -#endif - -  LWIP_DEBUGF(IP_DEBUG, ("netif->output()")); -  return netif->output(netif, p, dest); -} - -/** - * Simple interface to ip_output_if. It finds the outgoing network - * interface and calls upon ip_output_if to do the actual work. - * - * @param p the packet to send (p->payload points to the data, e.g. next -            protocol header; if dest == IP_HDRINCL, p already includes an IP -            header and p->payload points to that IP header) - * @param src the source IP address to send from (if src == IP_ADDR_ANY, the - *         IP  address of the netif used to send is used as source address) - * @param dest the destination IP address to send the packet to - * @param ttl the TTL value to be set in the IP header - * @param tos the TOS value to be set in the IP header - * @param proto the PROTOCOL to be set in the IP header - * - * @return ERR_RTE if no route is found - *         see ip_output_if() for more return values - */ -err_t -ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, -          u8_t ttl, u8_t tos, u8_t proto) -{ -  struct netif *netif; - -  if ((netif = ip_route(dest)) == NULL) { -    LWIP_DEBUGF(IP_DEBUG, ("ip_output: No route to 0x%"X32_F"\n", dest->addr)); -    IP_STATS_INC(ip.rterr); -    return ERR_RTE; -  } - -  return ip_output_if(p, src, dest, ttl, tos, proto, netif); -} - -#if LWIP_NETIF_HWADDRHINT -/** Like ip_output, but takes and addr_hint pointer that is passed on to netif->addr_hint - *  before calling ip_output_if. - * - * @param p the packet to send (p->payload points to the data, e.g. next -            protocol header; if dest == IP_HDRINCL, p already includes an IP -            header and p->payload points to that IP header) - * @param src the source IP address to send from (if src == IP_ADDR_ANY, the - *         IP  address of the netif used to send is used as source address) - * @param dest the destination IP address to send the packet to - * @param ttl the TTL value to be set in the IP header - * @param tos the TOS value to be set in the IP header - * @param proto the PROTOCOL to be set in the IP header - * @param addr_hint address hint pointer set to netif->addr_hint before - *        calling ip_output_if() - * - * @return ERR_RTE if no route is found - *         see ip_output_if() for more return values - */ -err_t -ip_output_hinted(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, -          u8_t ttl, u8_t tos, u8_t proto, u8_t *addr_hint) -{ -  struct netif *netif; -  err_t err; - -  if ((netif = ip_route(dest)) == NULL) { -    LWIP_DEBUGF(IP_DEBUG, ("ip_output: No route to 0x%"X32_F"\n", dest->addr)); -    IP_STATS_INC(ip.rterr); -    return ERR_RTE; -  } - -  netif->addr_hint = addr_hint; -  err = ip_output_if(p, src, dest, ttl, tos, proto, netif); -  netif->addr_hint = NULL; - -  return err; -} -#endif /* LWIP_NETIF_HWADDRHINT*/ - -#if IP_DEBUG -/* Print an IP header by using LWIP_DEBUGF - * @param p an IP packet, p->payload pointing to the IP header - */ -void -ip_debug_print(struct pbuf *p) -{ -  struct ip_hdr *iphdr = p->payload; -  u8_t *payload; - -  payload = (u8_t *)iphdr + IP_HLEN; - -  LWIP_DEBUGF(IP_DEBUG, ("IP header:\n")); -  LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); -  LWIP_DEBUGF(IP_DEBUG, ("|%2"S16_F" |%2"S16_F" |  0x%02"X16_F" |     %5"U16_F"     | (v, hl, tos, len)\n", -                    IPH_V(iphdr), -                    IPH_HL(iphdr), -                    IPH_TOS(iphdr), -                    ntohs(IPH_LEN(iphdr)))); -  LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); -  LWIP_DEBUGF(IP_DEBUG, ("|    %5"U16_F"      |%"U16_F"%"U16_F"%"U16_F"|    %4"U16_F"   | (id, flags, offset)\n", -                    ntohs(IPH_ID(iphdr)), -                    ntohs(IPH_OFFSET(iphdr)) >> 15 & 1, -                    ntohs(IPH_OFFSET(iphdr)) >> 14 & 1, -                    ntohs(IPH_OFFSET(iphdr)) >> 13 & 1, -                    ntohs(IPH_OFFSET(iphdr)) & IP_OFFMASK)); -  LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); -  LWIP_DEBUGF(IP_DEBUG, ("|  %3"U16_F"  |  %3"U16_F"  |    0x%04"X16_F"     | (ttl, proto, chksum)\n", -                    IPH_TTL(iphdr), -                    IPH_PROTO(iphdr), -                    ntohs(IPH_CHKSUM(iphdr)))); -  LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); -  LWIP_DEBUGF(IP_DEBUG, ("|  %3"U16_F"  |  %3"U16_F"  |  %3"U16_F"  |  %3"U16_F"  | (src)\n", -                    ip4_addr1(&iphdr->src), -                    ip4_addr2(&iphdr->src), -                    ip4_addr3(&iphdr->src), -                    ip4_addr4(&iphdr->src))); -  LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); -  LWIP_DEBUGF(IP_DEBUG, ("|  %3"U16_F"  |  %3"U16_F"  |  %3"U16_F"  |  %3"U16_F"  | (dest)\n", -                    ip4_addr1(&iphdr->dest), -                    ip4_addr2(&iphdr->dest), -                    ip4_addr3(&iphdr->dest), -                    ip4_addr4(&iphdr->dest))); -  LWIP_DEBUGF(IP_DEBUG, ("+-------------------------------+\n")); -} -#endif /* IP_DEBUG */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_addr.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_addr.c deleted file mode 100644 index 33e0aad..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_addr.c +++ /dev/null @@ -1,86 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * This is the IPv4 address tools implementation. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ - -#include "lwip/opt.h" -#include "lwip/ip_addr.h" -#include "lwip/inet.h" -#include "lwip/netif.h" - -#define IP_ADDR_ANY_VALUE 0x00000000UL -#define IP_ADDR_BROADCAST_VALUE 0xffffffffUL - -/* used by IP_ADDR_ANY and IP_ADDR_BROADCAST in ip_addr.h */ -const struct ip_addr ip_addr_any = { IP_ADDR_ANY_VALUE }; -const struct ip_addr ip_addr_broadcast = { IP_ADDR_BROADCAST_VALUE }; - -/** - * Determine if an address is a broadcast address on a network interface  - *  - * @param addr address to be checked - * @param netif the network interface against which the address is checked - * @return returns non-zero if the address is a broadcast address - */ -u8_t ip_addr_isbroadcast(struct ip_addr *addr, struct netif *netif) -{ -  u32_t addr2test; - -  addr2test = addr->addr; -  /* all ones (broadcast) or all zeroes (old skool broadcast) */ -  if ((~addr2test == IP_ADDR_ANY_VALUE) || -      (addr2test == IP_ADDR_ANY_VALUE)) -    return 1; -  /* no broadcast support on this network interface? */ -  else if ((netif->flags & NETIF_FLAG_BROADCAST) == 0) -    /* the given address cannot be a broadcast address -     * nor can we check against any broadcast addresses */ -    return 0; -  /* address matches network interface address exactly? => no broadcast */ -  else if (addr2test == netif->ip_addr.addr) -    return 0; -  /*  on the same (sub) network... */ -  else if (ip_addr_netcmp(addr, &(netif->ip_addr), &(netif->netmask)) -         /* ...and host identifier bits are all ones? =>... */ -          && ((addr2test & ~netif->netmask.addr) == -           (IP_ADDR_BROADCAST_VALUE & ~netif->netmask.addr))) -    /* => network broadcast address */ -    return 1; -  else -    return 0; -} diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_frag.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_frag.c deleted file mode 100644 index ab35572..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_frag.c +++ /dev/null @@ -1,794 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * This is the IPv4 packet segmentation and reassembly implementation. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Jani Monoses <jani@iv.ro>  - *         Simon Goldschmidt - * original reassembly code by Adam Dunkels <adam@sics.se> - *  - */ - -#include "lwip/opt.h" -#include "lwip/ip_frag.h" -#include "lwip/ip.h" -#include "lwip/inet.h" -#include "lwip/inet_chksum.h" -#include "lwip/netif.h" -#include "lwip/snmp.h" -#include "lwip/stats.h" -#include "lwip/icmp.h" - -#include <string.h> - -#if IP_REASSEMBLY -/** - * The IP reassembly code currently has the following limitations: - * - IP header options are not supported - * - fragments must not overlap (e.g. due to different routes), - *   currently, overlapping or duplicate fragments are thrown away - *   if IP_REASS_CHECK_OVERLAP=1 (the default)! - * - * @todo: work with IP header options - */ - -/** Setting this to 0, you can turn off checking the fragments for overlapping - * regions. The code gets a little smaller. Only use this if you know that - * overlapping won't occur on your network! */ -#ifndef IP_REASS_CHECK_OVERLAP -#define IP_REASS_CHECK_OVERLAP 1 -#endif /* IP_REASS_CHECK_OVERLAP */ - -/** Set to 0 to prevent freeing the oldest datagram when the reassembly buffer is - * full (IP_REASS_MAX_PBUFS pbufs are enqueued). The code gets a little smaller. - * Datagrams will be freed by timeout only. Especially useful when MEMP_NUM_REASSDATA - * is set to 1, so one datagram can be reassembled at a time, only. */ -#ifndef IP_REASS_FREE_OLDEST -#define IP_REASS_FREE_OLDEST 1 -#endif /* IP_REASS_FREE_OLDEST */ - -#define IP_REASS_FLAG_LASTFRAG 0x01 - -/** This is a helper struct which holds the starting - * offset and the ending offset of this fragment to - * easily chain the fragments. - * It has to be packed since it has to fit inside the IP header. - */ -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct ip_reass_helper { -  PACK_STRUCT_FIELD(struct pbuf *next_pbuf); -  PACK_STRUCT_FIELD(u16_t start); -  PACK_STRUCT_FIELD(u16_t end); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif - -#define IP_ADDRESSES_AND_ID_MATCH(iphdrA, iphdrB)  \ -  (ip_addr_cmp(&(iphdrA)->src, &(iphdrB)->src) && \ -   ip_addr_cmp(&(iphdrA)->dest, &(iphdrB)->dest) && \ -   IPH_ID(iphdrA) == IPH_ID(iphdrB)) ? 1 : 0 - -/* global variables */ -static struct ip_reassdata *reassdatagrams; -static u16_t ip_reass_pbufcount; - -/* function prototypes */ -static void ip_reass_dequeue_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev); -static int ip_reass_free_complete_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev); - -/** - * Reassembly timer base function - * for both NO_SYS == 0 and 1 (!). - * - * Should be called every 1000 msec (defined by IP_TMR_INTERVAL). - */ -void -ip_reass_tmr(void) -{ -  struct ip_reassdata *r, *prev = NULL; - -  r = reassdatagrams; -  while (r != NULL) { -    /* Decrement the timer. Once it reaches 0, -     * clean up the incomplete fragment assembly */ -    if (r->timer > 0) { -      r->timer--; -      LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer dec %"U16_F"\n",(u16_t)r->timer)); -      prev = r; -      r = r->next; -    } else { -      /* reassembly timed out */ -      struct ip_reassdata *tmp; -      LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass_tmr: timer timed out\n")); -      tmp = r; -      /* get the next pointer before freeing */ -      r = r->next; -      /* free the helper struct and all enqueued pbufs */ -      ip_reass_free_complete_datagram(tmp, prev); -     } -   } -} - -/** - * Free a datagram (struct ip_reassdata) and all its pbufs. - * Updates the total count of enqueued pbufs (ip_reass_pbufcount), - * SNMP counters and sends an ICMP time exceeded packet. - * - * @param ipr datagram to free - * @param prev the previous datagram in the linked list - * @return the number of pbufs freed - */ -static int -ip_reass_free_complete_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev) -{ -  int pbufs_freed = 0; -  struct pbuf *p; -  struct ip_reass_helper *iprh; - -  LWIP_ASSERT("prev != ipr", prev != ipr); -  if (prev != NULL) { -    LWIP_ASSERT("prev->next == ipr", prev->next == ipr); -  } - -  snmp_inc_ipreasmfails(); -#if LWIP_ICMP -  iprh = (struct ip_reass_helper *)ipr->p->payload; -  if (iprh->start == 0) { -    /* The first fragment was received, send ICMP time exceeded. */ -    /* First, de-queue the first pbuf from r->p. */ -    p = ipr->p; -    ipr->p = iprh->next_pbuf; -    /* Then, copy the original header into it. */ -    SMEMCPY(p->payload, &ipr->iphdr, IP_HLEN); -    icmp_time_exceeded(p, ICMP_TE_FRAG); -    pbufs_freed += pbuf_clen(p); -    pbuf_free(p); -  } -#endif /* LWIP_ICMP */ - -  /* First, free all received pbufs.  The individual pbufs need to be released  -     separately as they have not yet been chained */ -  p = ipr->p; -  while (p != NULL) { -    struct pbuf *pcur; -    iprh = (struct ip_reass_helper *)p->payload; -    pcur = p; -    /* get the next pointer before freeing */ -    p = iprh->next_pbuf; -    pbufs_freed += pbuf_clen(pcur); -    pbuf_free(pcur);     -  } -  /* Then, unchain the struct ip_reassdata from the list and free it. */ -  ip_reass_dequeue_datagram(ipr, prev); -  LWIP_ASSERT("ip_reass_pbufcount >= clen", ip_reass_pbufcount >= pbufs_freed); -  ip_reass_pbufcount -= pbufs_freed; - -  return pbufs_freed; -} - -#if IP_REASS_FREE_OLDEST -/** - * Free the oldest datagram to make room for enqueueing new fragments. - * The datagram 'fraghdr' belongs to is not freed! - * - * @param fraghdr IP header of the current fragment - * @param pbufs_needed number of pbufs needed to enqueue - *        (used for freeing other datagrams if not enough space) - * @return the number of pbufs freed - */ -static int -ip_reass_remove_oldest_datagram(struct ip_hdr *fraghdr, int pbufs_needed) -{ -  /* @todo Can't we simply remove the last datagram in the -   *       linked list behind reassdatagrams? -   */ -  struct ip_reassdata *r, *oldest, *prev; -  int pbufs_freed = 0, pbufs_freed_current; -  int other_datagrams; - -  /* Free datagrams until being allowed to enqueue 'pbufs_needed' pbufs, -   * but don't free the datagram that 'fraghdr' belongs to! */ -  do { -    oldest = NULL; -    prev = NULL; -    other_datagrams = 0; -    r = reassdatagrams; -    while (r != NULL) { -      if (!IP_ADDRESSES_AND_ID_MATCH(&r->iphdr, fraghdr)) { -        /* Not the same datagram as fraghdr */ -        other_datagrams++; -        if (oldest == NULL) { -          oldest = r; -        } else if (r->timer <= oldest->timer) { -          /* older than the previous oldest */ -          oldest = r; -        } -      } -      if (r->next != NULL) { -        prev = r; -      } -      r = r->next; -    } -    if (oldest != NULL) { -      pbufs_freed_current = ip_reass_free_complete_datagram(oldest, prev); -      pbufs_freed += pbufs_freed_current; -    } -  } while ((pbufs_freed < pbufs_needed) && (other_datagrams > 1)); -  return pbufs_freed; -} -#endif /* IP_REASS_FREE_OLDEST */ - -/** - * Enqueues a new fragment into the fragment queue - * @param fraghdr points to the new fragments IP hdr - * @param clen number of pbufs needed to enqueue (used for freeing other datagrams if not enough space) - * @return A pointer to the queue location into which the fragment was enqueued - */ -static struct ip_reassdata* -ip_reass_enqueue_new_datagram(struct ip_hdr *fraghdr, int clen) -{ -  struct ip_reassdata* ipr; -  /* No matching previous fragment found, allocate a new reassdata struct */ -  ipr = memp_malloc(MEMP_REASSDATA); -  if (ipr == NULL) { -#if IP_REASS_FREE_OLDEST -    if (ip_reass_remove_oldest_datagram(fraghdr, clen) >= clen) { -      ipr = memp_malloc(MEMP_REASSDATA); -    } -    if (ipr == NULL) -#endif /* IP_REASS_FREE_OLDEST */ -    { -      IPFRAG_STATS_INC(ip_frag.memerr); -      LWIP_DEBUGF(IP_REASS_DEBUG,("Failed to alloc reassdata struct\n")); -      return NULL; -    } -  } -  memset(ipr, 0, sizeof(struct ip_reassdata)); -  ipr->timer = IP_REASS_MAXAGE; - -  /* enqueue the new structure to the front of the list */ -  ipr->next = reassdatagrams; -  reassdatagrams = ipr; -  /* copy the ip header for later tests and input */ -  /* @todo: no ip options supported? */ -  SMEMCPY(&(ipr->iphdr), fraghdr, IP_HLEN); -  return ipr; -} - -/** - * Dequeues a datagram from the datagram queue. Doesn't deallocate the pbufs. - * @param ipr points to the queue entry to dequeue - */ -static void -ip_reass_dequeue_datagram(struct ip_reassdata *ipr, struct ip_reassdata *prev) -{ -   -  /* dequeue the reass struct  */ -  if (reassdatagrams == ipr) { -    /* it was the first in the list */ -    reassdatagrams = ipr->next; -  } else { -    /* it wasn't the first, so it must have a valid 'prev' */ -    LWIP_ASSERT("sanity check linked list", prev != NULL); -    prev->next = ipr->next; -  } - -  /* now we can free the ip_reass struct */ -  memp_free(MEMP_REASSDATA, ipr); -} - -/** - * Chain a new pbuf into the pbuf list that composes the datagram.  The pbuf list - * will grow over time as  new pbufs are rx. - * Also checks that the datagram passes basic continuity checks (if the last - * fragment was received at least once). - * @param root_p points to the 'root' pbuf for the current datagram being assembled. - * @param new_p points to the pbuf for the current fragment - * @return 0 if invalid, >0 otherwise - */ -static int -ip_reass_chain_frag_into_datagram_and_validate(struct ip_reassdata *ipr, struct pbuf *new_p) -{ -  struct ip_reass_helper *iprh, *iprh_tmp, *iprh_prev=NULL; -  struct pbuf *q; -  u16_t offset,len; -  struct ip_hdr *fraghdr; -  int valid = 1; - -  /* Extract length and fragment offset from current fragment */ -  fraghdr = (struct ip_hdr*)new_p->payload;  -  len = ntohs(IPH_LEN(fraghdr)) - IPH_HL(fraghdr) * 4; -  offset = (ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) * 8; - -  /* overwrite the fragment's ip header from the pbuf with our helper struct, -   * and setup the embedded helper structure. */ -  /* make sure the struct ip_reass_helper fits into the IP header */ -  LWIP_ASSERT("sizeof(struct ip_reass_helper) <= IP_HLEN", -              sizeof(struct ip_reass_helper) <= IP_HLEN); -  iprh = (struct ip_reass_helper*)new_p->payload; -  iprh->next_pbuf = NULL; -  iprh->start = offset; -  iprh->end = offset + len; - -  /* Iterate through until we either get to the end of the list (append), -   * or we find on with a larger offset (insert). */ -  for (q = ipr->p; q != NULL;) { -    iprh_tmp = (struct ip_reass_helper*)q->payload; -    if (iprh->start < iprh_tmp->start) { -      /* the new pbuf should be inserted before this */ -      iprh->next_pbuf = q; -      if (iprh_prev != NULL) { -        /* not the fragment with the lowest offset */ -#if IP_REASS_CHECK_OVERLAP -        if ((iprh->start < iprh_prev->end) || (iprh->end > iprh_tmp->start)) { -          /* fragment overlaps with previous or following, throw away */ -          goto freepbuf; -        } -#endif /* IP_REASS_CHECK_OVERLAP */ -        iprh_prev->next_pbuf = new_p; -      } else { -        /* fragment with the lowest offset */ -        ipr->p = new_p; -      } -      break; -    } else if(iprh->start == iprh_tmp->start) { -      /* received the same datagram twice: no need to keep the datagram */ -      goto freepbuf; -#if IP_REASS_CHECK_OVERLAP -    } else if(iprh->start < iprh_tmp->end) { -      /* overlap: no need to keep the new datagram */ -      goto freepbuf; -#endif /* IP_REASS_CHECK_OVERLAP */ -    } else { -      /* Check if the fragments received so far have no wholes. */ -      if (iprh_prev != NULL) { -        if (iprh_prev->end != iprh_tmp->start) { -          /* There is a fragment missing between the current -           * and the previous fragment */ -          valid = 0; -        } -      } -    } -    q = iprh_tmp->next_pbuf; -    iprh_prev = iprh_tmp; -  } - -  /* If q is NULL, then we made it to the end of the list. Determine what to do now */ -  if (q == NULL) { -    if (iprh_prev != NULL) { -      /* this is (for now), the fragment with the highest offset: -       * chain it to the last fragment */ -#if IP_REASS_CHECK_OVERLAP -      LWIP_ASSERT("check fragments don't overlap", iprh_prev->end <= iprh->start); -#endif /* IP_REASS_CHECK_OVERLAP */ -      iprh_prev->next_pbuf = new_p; -      if (iprh_prev->end != iprh->start) { -        valid = 0; -      } -    } else { -#if IP_REASS_CHECK_OVERLAP -      LWIP_ASSERT("no previous fragment, this must be the first fragment!", -        ipr->p == NULL); -#endif /* IP_REASS_CHECK_OVERLAP */ -      /* this is the first fragment we ever received for this ip datagram */ -      ipr->p = new_p; -    } -  } - -  /* At this point, the validation part begins: */ -  /* If we already received the last fragment */ -  if ((ipr->flags & IP_REASS_FLAG_LASTFRAG) != 0) { -    /* and had no wholes so far */ -    if (valid) { -      /* then check if the rest of the fragments is here */ -      /* Check if the queue starts with the first datagram */ -      if (((struct ip_reass_helper*)ipr->p->payload)->start != 0) { -        valid = 0; -      } else { -        /* and check that there are no wholes after this datagram */ -        iprh_prev = iprh; -        q = iprh->next_pbuf; -        while (q != NULL) { -          iprh = (struct ip_reass_helper*)q->payload; -          if (iprh_prev->end != iprh->start) { -            valid = 0; -            break; -          } -          iprh_prev = iprh; -          q = iprh->next_pbuf; -        } -        /* if still valid, all fragments are received -         * (because to the MF==0 already arrived */ -        if (valid) { -          LWIP_ASSERT("sanity check", ipr->p != NULL); -          LWIP_ASSERT("sanity check", -            ((struct ip_reass_helper*)ipr->p->payload) != iprh); -          LWIP_ASSERT("validate_datagram:next_pbuf!=NULL", -            iprh->next_pbuf == NULL); -          LWIP_ASSERT("validate_datagram:datagram end!=datagram len", -            iprh->end == ipr->datagram_len); -        } -      } -    } -    /* If valid is 0 here, there are some fragments missing in the middle -     * (since MF == 0 has already arrived). Such datagrams simply time out if -     * no more fragments are received... */ -    return valid; -  } -  /* If we come here, not all fragments were received, yet! */ -  return 0; /* not yet valid! */ -#if IP_REASS_CHECK_OVERLAP -freepbuf: -  ip_reass_pbufcount -= pbuf_clen(new_p); -  pbuf_free(new_p); -  return 0; -#endif /* IP_REASS_CHECK_OVERLAP */ -} - -/** - * Reassembles incoming IP fragments into an IP datagram. - * - * @param p points to a pbuf chain of the fragment - * @return NULL if reassembly is incomplete, ? otherwise - */ -struct pbuf * -ip_reass(struct pbuf *p) -{ -  struct pbuf *r; -  struct ip_hdr *fraghdr; -  struct ip_reassdata *ipr; -  struct ip_reass_helper *iprh; -  u16_t offset, len; -  u8_t clen; -  struct ip_reassdata *ipr_prev = NULL; - -  IPFRAG_STATS_INC(ip_frag.recv); -  snmp_inc_ipreasmreqds(); - -  fraghdr = (struct ip_hdr*)p->payload; - -  if ((IPH_HL(fraghdr) * 4) != IP_HLEN) { -    LWIP_DEBUGF(IP_REASS_DEBUG,("ip_reass: IP options currently not supported!\n")); -    IPFRAG_STATS_INC(ip_frag.err); -    goto nullreturn; -  } - -  offset = (ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) * 8; -  len = ntohs(IPH_LEN(fraghdr)) - IPH_HL(fraghdr) * 4; - -  /* Check if we are allowed to enqueue more datagrams. */ -  clen = pbuf_clen(p); -  if ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS) { -#if IP_REASS_FREE_OLDEST -    if (!ip_reass_remove_oldest_datagram(fraghdr, clen) || -        ((ip_reass_pbufcount + clen) > IP_REASS_MAX_PBUFS)) -#endif /* IP_REASS_FREE_OLDEST */ -    { -      /* No datagram could be freed and still too many pbufs enqueued */ -      LWIP_DEBUGF(IP_REASS_DEBUG,("ip_reass: Overflow condition: pbufct=%d, clen=%d, MAX=%d\n", -        ip_reass_pbufcount, clen, IP_REASS_MAX_PBUFS)); -      IPFRAG_STATS_INC(ip_frag.memerr); -      /* @todo: send ICMP time exceeded here? */ -      /* drop this pbuf */ -      goto nullreturn; -    } -  } - -  /* Look for the datagram the fragment belongs to in the current datagram queue, -   * remembering the previous in the queue for later dequeueing. */ -  for (ipr = reassdatagrams; ipr != NULL; ipr = ipr->next) { -    /* Check if the incoming fragment matches the one currently present -       in the reassembly buffer. If so, we proceed with copying the -       fragment into the buffer. */ -    if (IP_ADDRESSES_AND_ID_MATCH(&ipr->iphdr, fraghdr)) { -      LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_reass: matching previous fragment ID=%"X16_F"\n", -        ntohs(IPH_ID(fraghdr)))); -      IPFRAG_STATS_INC(ip_frag.cachehit); -      break; -    } -    ipr_prev = ipr; -  } - -  if (ipr == NULL) { -  /* Enqueue a new datagram into the datagram queue */ -    ipr = ip_reass_enqueue_new_datagram(fraghdr, clen); -    /* Bail if unable to enqueue */ -    if(ipr == NULL) { -      goto nullreturn; -    } -  } else { -    if (((ntohs(IPH_OFFSET(fraghdr)) & IP_OFFMASK) == 0) &&  -      ((ntohs(IPH_OFFSET(&ipr->iphdr)) & IP_OFFMASK) != 0)) { -      /* ipr->iphdr is not the header from the first fragment, but fraghdr is -       * -> copy fraghdr into ipr->iphdr since we want to have the header -       * of the first fragment (for ICMP time exceeded and later, for copying -       * all options, if supported)*/ -      SMEMCPY(&ipr->iphdr, fraghdr, IP_HLEN); -    } -  } -  /* Track the current number of pbufs current 'in-flight', in order to limit  -  the number of fragments that may be enqueued at any one time */ -  ip_reass_pbufcount += clen; - -  /* At this point, we have either created a new entry or pointing  -   * to an existing one */ - -  /* check for 'no more fragments', and update queue entry*/ -  if ((ntohs(IPH_OFFSET(fraghdr)) & IP_MF) == 0) { -    ipr->flags |= IP_REASS_FLAG_LASTFRAG; -    ipr->datagram_len = offset + len; -    LWIP_DEBUGF(IP_REASS_DEBUG, -     ("ip_reass: last fragment seen, total len %"S16_F"\n", -      ipr->datagram_len)); -  } -  /* find the right place to insert this pbuf */ -  /* @todo: trim pbufs if fragments are overlapping */ -  if (ip_reass_chain_frag_into_datagram_and_validate(ipr, p)) { -    /* the totally last fragment (flag more fragments = 0) was received at least -     * once AND all fragments are received */ -    ipr->datagram_len += IP_HLEN; - -    /* save the second pbuf before copying the header over the pointer */ -    r = ((struct ip_reass_helper*)ipr->p->payload)->next_pbuf; - -    /* copy the original ip header back to the first pbuf */ -    fraghdr = (struct ip_hdr*)(ipr->p->payload); -    SMEMCPY(fraghdr, &ipr->iphdr, IP_HLEN); -    IPH_LEN_SET(fraghdr, htons(ipr->datagram_len)); -    IPH_OFFSET_SET(fraghdr, 0); -    IPH_CHKSUM_SET(fraghdr, 0); -    /* @todo: do we need to set calculate the correct checksum? */ -    IPH_CHKSUM_SET(fraghdr, inet_chksum(fraghdr, IP_HLEN)); - -    p = ipr->p; - -    /* chain together the pbufs contained within the reass_data list. */ -    while(r != NULL) { -      iprh = (struct ip_reass_helper*)r->payload; - -      /* hide the ip header for every succeding fragment */ -      pbuf_header(r, -IP_HLEN); -      pbuf_cat(p, r); -      r = iprh->next_pbuf; -    } -    /* release the sources allocate for the fragment queue entry */ -    ip_reass_dequeue_datagram(ipr, ipr_prev); - -    /* and adjust the number of pbufs currently queued for reassembly. */ -    ip_reass_pbufcount -= pbuf_clen(p); - -    /* Return the pbuf chain */ -    return p; -  } -  /* the datagram is not (yet?) reassembled completely */ -  LWIP_DEBUGF(IP_REASS_DEBUG,("ip_reass_pbufcount: %d out\n", ip_reass_pbufcount)); -  return NULL; - -nullreturn: -  LWIP_DEBUGF(IP_REASS_DEBUG,("ip_reass: nullreturn\n")); -  IPFRAG_STATS_INC(ip_frag.drop); -  pbuf_free(p); -  return NULL; -} -#endif /* IP_REASSEMBLY */ - -#if IP_FRAG -#if IP_FRAG_USES_STATIC_BUF -static u8_t buf[LWIP_MEM_ALIGN_SIZE(IP_FRAG_MAX_MTU + MEM_ALIGNMENT - 1)]; -#endif /* IP_FRAG_USES_STATIC_BUF */ - -/** - * Fragment an IP datagram if too large for the netif. - * - * Chop the datagram in MTU sized chunks and send them in order - * by using a fixed size static memory buffer (PBUF_REF) or - * point PBUF_REFs into p (depending on IP_FRAG_USES_STATIC_BUF). - * - * @param p ip packet to send - * @param netif the netif on which to send - * @param dest destination ip address to which to send - * - * @return ERR_OK if sent successfully, err_t otherwise - */ -err_t  -ip_frag(struct pbuf *p, struct netif *netif, struct ip_addr *dest) -{ -  struct pbuf *rambuf; -#if IP_FRAG_USES_STATIC_BUF -  struct pbuf *header; -#else -  struct pbuf *newpbuf; -  struct ip_hdr *original_iphdr; -#endif -  struct ip_hdr *iphdr; -  u16_t nfb; -  u16_t left, cop; -  u16_t mtu = netif->mtu; -  u16_t ofo, omf; -  u16_t last; -  u16_t poff = IP_HLEN; -  u16_t tmp; -#if !IP_FRAG_USES_STATIC_BUF -  u16_t newpbuflen = 0; -  u16_t left_to_copy; -#endif - -  /* Get a RAM based MTU sized pbuf */ -#if IP_FRAG_USES_STATIC_BUF -  /* When using a static buffer, we use a PBUF_REF, which we will -   * use to reference the packet (without link header). -   * Layer and length is irrelevant. -   */ -  rambuf = pbuf_alloc(PBUF_LINK, 0, PBUF_REF); -  if (rambuf == NULL) { -    LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_frag: pbuf_alloc(PBUF_LINK, 0, PBUF_REF) failed\n")); -    return ERR_MEM; -  } -  rambuf->tot_len = rambuf->len = mtu; -  rambuf->payload = LWIP_MEM_ALIGN((void *)buf); - -  /* Copy the IP header in it */ -  iphdr = rambuf->payload; -  SMEMCPY(iphdr, p->payload, IP_HLEN); -#else /* IP_FRAG_USES_STATIC_BUF */ -  original_iphdr = p->payload; -  iphdr = original_iphdr; -#endif /* IP_FRAG_USES_STATIC_BUF */ - -  /* Save original offset */ -  tmp = ntohs(IPH_OFFSET(iphdr)); -  ofo = tmp & IP_OFFMASK; -  omf = tmp & IP_MF; - -  left = p->tot_len - IP_HLEN; - -  nfb = (mtu - IP_HLEN) / 8; - -  while (left) { -    last = (left <= mtu - IP_HLEN); - -    /* Set new offset and MF flag */ -    tmp = omf | (IP_OFFMASK & (ofo)); -    if (!last) -      tmp = tmp | IP_MF; - -    /* Fill this fragment */ -    cop = last ? left : nfb * 8; - -#if IP_FRAG_USES_STATIC_BUF -    poff += pbuf_copy_partial(p, (u8_t*)iphdr + IP_HLEN, cop, poff); -#else /* IP_FRAG_USES_STATIC_BUF */ -    /* When not using a static buffer, create a chain of pbufs. -     * The first will be a PBUF_RAM holding the link and IP header. -     * The rest will be PBUF_REFs mirroring the pbuf chain to be fragged, -     * but limited to the size of an mtu. -     */ -    rambuf = pbuf_alloc(PBUF_LINK, IP_HLEN, PBUF_RAM); -    if (rambuf == NULL) { -      return ERR_MEM; -    } -    LWIP_ASSERT("this needs a pbuf in one piece!", -                (p->len >= (IP_HLEN))); -    SMEMCPY(rambuf->payload, original_iphdr, IP_HLEN); -    iphdr = rambuf->payload; - -    /* Can just adjust p directly for needed offset. */ -    p->payload = (u8_t *)p->payload + poff; -    p->len -= poff; - -    left_to_copy = cop; -    while (left_to_copy) { -      newpbuflen = (left_to_copy < p->len) ? left_to_copy : p->len; -      /* Is this pbuf already empty? */ -      if (!newpbuflen) { -        p = p->next; -        continue; -      } -      newpbuf = pbuf_alloc(PBUF_RAW, 0, PBUF_REF); -      if (newpbuf == NULL) { -        pbuf_free(rambuf); -        return ERR_MEM; -      } -      /* Mirror this pbuf, although we might not need all of it. */ -      newpbuf->payload = p->payload; -      newpbuf->len = newpbuf->tot_len = newpbuflen; -      /* Add it to end of rambuf's chain, but using pbuf_cat, not pbuf_chain -       * so that it is removed when pbuf_dechain is later called on rambuf. -       */ -      pbuf_cat(rambuf, newpbuf); -      left_to_copy -= newpbuflen; -      if (left_to_copy) -        p = p->next; -    } -    poff = newpbuflen; -#endif /* IP_FRAG_USES_STATIC_BUF */ - -    /* Correct header */ -    IPH_OFFSET_SET(iphdr, htons(tmp)); -    IPH_LEN_SET(iphdr, htons(cop + IP_HLEN)); -    IPH_CHKSUM_SET(iphdr, 0); -    IPH_CHKSUM_SET(iphdr, inet_chksum(iphdr, IP_HLEN)); - -#if IP_FRAG_USES_STATIC_BUF -    if (last) -      pbuf_realloc(rambuf, left + IP_HLEN); - -    /* This part is ugly: we alloc a RAM based pbuf for  -     * the link level header for each chunk and then  -     * free it.A PBUF_ROM style pbuf for which pbuf_header -     * worked would make things simpler. -     */ -    header = pbuf_alloc(PBUF_LINK, 0, PBUF_RAM); -    if (header != NULL) { -      pbuf_chain(header, rambuf); -      netif->output(netif, header, dest); -      IPFRAG_STATS_INC(ip_frag.xmit); -      snmp_inc_ipfragcreates(); -      pbuf_free(header); -    } else { -      LWIP_DEBUGF(IP_REASS_DEBUG, ("ip_frag: pbuf_alloc() for header failed\n")); -      pbuf_free(rambuf); -      return ERR_MEM; -    } -#else /* IP_FRAG_USES_STATIC_BUF */ -    /* No need for separate header pbuf - we allowed room for it in rambuf -     * when allocated. -     */ -    netif->output(netif, rambuf, dest); -    IPFRAG_STATS_INC(ip_frag.xmit); - -    /* Unfortunately we can't reuse rambuf - the hardware may still be -     * using the buffer. Instead we free it (and the ensuing chain) and -     * recreate it next time round the loop. If we're lucky the hardware -     * will have already sent the packet, the free will really free, and -     * there will be zero memory penalty. -     */ -     -    pbuf_free(rambuf); -#endif /* IP_FRAG_USES_STATIC_BUF */ -    left -= cop; -    ofo += nfb; -  } -#if IP_FRAG_USES_STATIC_BUF -  pbuf_free(rambuf); -#endif /* IP_FRAG_USES_STATIC_BUF */ -  snmp_inc_ipfragoks(); -  return ERR_OK; -} -#endif /* IP_FRAG */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/mem.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/mem.c deleted file mode 100644 index ea3f4a6..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/mem.c +++ /dev/null @@ -1,635 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * Dynamic memory manager - * - * This is a lightweight replacement for the standard C library malloc(). - * - * If you want to use the standard C library malloc() instead, define - * MEM_LIBC_MALLOC to 1 in your lwipopts.h - * - * To let mem_malloc() use pools (prevents fragmentation and is much faster than - * a heap but might waste some memory), define MEM_USE_POOLS to 1, define - * MEM_USE_CUSTOM_POOLS to 1 and create a file "lwippools.h" that includes a list - * of pools like this (more pools can be added between _START and _END): - * - * Define three pools with sizes 256, 512, and 1512 bytes - * LWIP_MALLOC_MEMPOOL_START - * LWIP_MALLOC_MEMPOOL(20, 256) - * LWIP_MALLOC_MEMPOOL(10, 512) - * LWIP_MALLOC_MEMPOOL(5, 1512) - * LWIP_MALLOC_MEMPOOL_END - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels <adam@sics.se> - *         Simon Goldschmidt - * - */ - -#include "lwip/opt.h" - -#if !MEM_LIBC_MALLOC /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/sys.h" -#include "lwip/stats.h" - -#include <string.h> - -#if MEM_USE_POOLS -/* lwIP head implemented with different sized pools */ - -/** - * Allocate memory: determine the smallest pool that is big enough - * to contain an element of 'size' and get an element from that pool. - * - * @param size the size in bytes of the memory needed - * @return a pointer to the allocated memory or NULL if the pool is empty - */ -void * -mem_malloc(mem_size_t size) -{ -  struct memp_malloc_helper *element; -  memp_t poolnr; -  mem_size_t required_size = size + sizeof(struct memp_malloc_helper); - -  for (poolnr = MEMP_POOL_FIRST; poolnr <= MEMP_POOL_LAST; poolnr++) { -#if MEM_USE_POOLS_TRY_BIGGER_POOL -again: -#endif /* MEM_USE_POOLS_TRY_BIGGER_POOL */ -    /* is this pool big enough to hold an element of the required size -       plus a struct memp_malloc_helper that saves the pool this element came from? */ -    if (required_size <= memp_sizes[poolnr]) { -      break; -    } -  } -  if (poolnr > MEMP_POOL_LAST) { -    LWIP_ASSERT("mem_malloc(): no pool is that big!", 0); -    return NULL; -  } -  element = (struct memp_malloc_helper*)memp_malloc(poolnr); -  if (element == NULL) { -    /* No need to DEBUGF or ASSERT: This error is already -       taken care of in memp.c */ -#if MEM_USE_POOLS_TRY_BIGGER_POOL -    /** Try a bigger pool if this one is empty! */ -    if (poolnr < MEMP_POOL_LAST) { -      poolnr++; -      goto again; -    } -#endif /* MEM_USE_POOLS_TRY_BIGGER_POOL */ -    return NULL; -  } - -  /* save the pool number this element came from */ -  element->poolnr = poolnr; -  /* and return a pointer to the memory directly after the struct memp_malloc_helper */ -  element++; - -  return element; -} - -/** - * Free memory previously allocated by mem_malloc. Loads the pool number - * and calls memp_free with that pool number to put the element back into - * its pool - * - * @param rmem the memory element to free - */ -void -mem_free(void *rmem) -{ -  struct memp_malloc_helper *hmem = (struct memp_malloc_helper*)rmem; - -  LWIP_ASSERT("rmem != NULL", (rmem != NULL)); -  LWIP_ASSERT("rmem == MEM_ALIGN(rmem)", (rmem == LWIP_MEM_ALIGN(rmem))); - -  /* get the original struct memp_malloc_helper */ -  hmem--; - -  LWIP_ASSERT("hmem != NULL", (hmem != NULL)); -  LWIP_ASSERT("hmem == MEM_ALIGN(hmem)", (hmem == LWIP_MEM_ALIGN(hmem))); -  LWIP_ASSERT("hmem->poolnr < MEMP_MAX", (hmem->poolnr < MEMP_MAX)); - -  /* and put it in the pool we saved earlier */ -  memp_free(hmem->poolnr, hmem); -} - -#else /* MEM_USE_POOLS */ -/* lwIP replacement for your libc malloc() */ - -/** - * The heap is made up as a list of structs of this type. - * This does not have to be aligned since for getting its size, - * we only use the macro SIZEOF_STRUCT_MEM, which automatically alignes. - */ -struct mem { -  /** index (-> ram[next]) of the next struct */ -  mem_size_t next; -  /** index (-> ram[next]) of the next struct */ -  mem_size_t prev; -  /** 1: this area is used; 0: this area is unused */ -  u8_t used; -}; - -/** All allocated blocks will be MIN_SIZE bytes big, at least! - * MIN_SIZE can be overridden to suit your needs. Smaller values save space, - * larger values could prevent too small blocks to fragment the RAM too much. */ -#ifndef MIN_SIZE -#define MIN_SIZE             12 -#endif /* MIN_SIZE */ -/* some alignment macros: we define them here for better source code layout */ -#define MIN_SIZE_ALIGNED     LWIP_MEM_ALIGN_SIZE(MIN_SIZE) -#define SIZEOF_STRUCT_MEM    LWIP_MEM_ALIGN_SIZE(sizeof(struct mem)) -#define MEM_SIZE_ALIGNED     LWIP_MEM_ALIGN_SIZE(MEM_SIZE) - -/** the heap. we need one struct mem at the end and some room for alignment */ -static u8_t ram_heap[MEM_SIZE_ALIGNED + (2*SIZEOF_STRUCT_MEM) + MEM_ALIGNMENT]; -/** pointer to the heap (ram_heap): for alignment, ram is now a pointer instead of an array */ -static u8_t *ram; -/** the last entry, always unused! */ -static struct mem *ram_end; -/** pointer to the lowest free block, this is used for faster search */ -static struct mem *lfree; - -/** concurrent access protection */ -static sys_sem_t mem_sem; - -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT - -static volatile u8_t mem_free_count; - -/* Allow mem_free from other (e.g. interrupt) context */ -#define LWIP_MEM_FREE_DECL_PROTECT()  SYS_ARCH_DECL_PROTECT(lev_free) -#define LWIP_MEM_FREE_PROTECT()       SYS_ARCH_PROTECT(lev_free) -#define LWIP_MEM_FREE_UNPROTECT()     SYS_ARCH_UNPROTECT(lev_free) -#define LWIP_MEM_ALLOC_DECL_PROTECT() SYS_ARCH_DECL_PROTECT(lev_alloc) -#define LWIP_MEM_ALLOC_PROTECT()      SYS_ARCH_PROTECT(lev_alloc) -#define LWIP_MEM_ALLOC_UNPROTECT()    SYS_ARCH_UNPROTECT(lev_alloc) - -#else /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - -/* Protect the heap only by using a semaphore */ -#define LWIP_MEM_FREE_DECL_PROTECT() -#define LWIP_MEM_FREE_PROTECT()    sys_arch_sem_wait(mem_sem, 0) -#define LWIP_MEM_FREE_UNPROTECT()  sys_sem_signal(mem_sem) -/* mem_malloc is protected using semaphore AND LWIP_MEM_ALLOC_PROTECT */ -#define LWIP_MEM_ALLOC_DECL_PROTECT() -#define LWIP_MEM_ALLOC_PROTECT() -#define LWIP_MEM_ALLOC_UNPROTECT() - -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - - -/** - * "Plug holes" by combining adjacent empty struct mems. - * After this function is through, there should not exist - * one empty struct mem pointing to another empty struct mem. - * - * @param mem this points to a struct mem which just has been freed - * @internal this function is only called by mem_free() and mem_realloc() - * - * This assumes access to the heap is protected by the calling function - * already. - */ -static void -plug_holes(struct mem *mem) -{ -  struct mem *nmem; -  struct mem *pmem; - -  LWIP_ASSERT("plug_holes: mem >= ram", (u8_t *)mem >= ram); -  LWIP_ASSERT("plug_holes: mem < ram_end", (u8_t *)mem < (u8_t *)ram_end); -  LWIP_ASSERT("plug_holes: mem->used == 0", mem->used == 0); - -  /* plug hole forward */ -  LWIP_ASSERT("plug_holes: mem->next <= MEM_SIZE_ALIGNED", mem->next <= MEM_SIZE_ALIGNED); - -  nmem = (struct mem *)&ram[mem->next]; -  if (mem != nmem && nmem->used == 0 && (u8_t *)nmem != (u8_t *)ram_end) { -    /* if mem->next is unused and not end of ram, combine mem and mem->next */ -    if (lfree == nmem) { -      lfree = mem; -    } -    mem->next = nmem->next; -    ((struct mem *)&ram[nmem->next])->prev = (u8_t *)mem - ram; -  } - -  /* plug hole backward */ -  pmem = (struct mem *)&ram[mem->prev]; -  if (pmem != mem && pmem->used == 0) { -    /* if mem->prev is unused, combine mem and mem->prev */ -    if (lfree == mem) { -      lfree = pmem; -    } -    pmem->next = mem->next; -    ((struct mem *)&ram[mem->next])->prev = (u8_t *)pmem - ram; -  } -} - -/** - * Zero the heap and initialize start, end and lowest-free - */ -void -mem_init(void) -{ -  struct mem *mem; - -  LWIP_ASSERT("Sanity check alignment", -    (SIZEOF_STRUCT_MEM & (MEM_ALIGNMENT-1)) == 0); - -  /* align the heap */ -  ram = LWIP_MEM_ALIGN(ram_heap); -  /* initialize the start of the heap */ -  mem = (struct mem *)ram; -  mem->next = MEM_SIZE_ALIGNED; -  mem->prev = 0; -  mem->used = 0; -  /* initialize the end of the heap */ -  ram_end = (struct mem *)&ram[MEM_SIZE_ALIGNED]; -  ram_end->used = 1; -  ram_end->next = MEM_SIZE_ALIGNED; -  ram_end->prev = MEM_SIZE_ALIGNED; - -  mem_sem = sys_sem_new(1); - -  /* initialize the lowest-free pointer to the start of the heap */ -  lfree = (struct mem *)ram; - -  MEM_STATS_AVAIL(avail, MEM_SIZE_ALIGNED); -} - -/** - * Put a struct mem back on the heap - * - * @param rmem is the data portion of a struct mem as returned by a previous - *             call to mem_malloc() - */ -void -mem_free(void *rmem) -{ -  struct mem *mem; -  LWIP_MEM_FREE_DECL_PROTECT(); - -  if (rmem == NULL) { -    LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("mem_free(p == NULL) was called.\n")); -    return; -  } -  LWIP_ASSERT("mem_free: sanity check alignment", (((mem_ptr_t)rmem) & (MEM_ALIGNMENT-1)) == 0); - -  LWIP_ASSERT("mem_free: legal memory", (u8_t *)rmem >= (u8_t *)ram && -    (u8_t *)rmem < (u8_t *)ram_end); - -  if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) { -    SYS_ARCH_DECL_PROTECT(lev); -    LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_free: illegal memory\n")); -    /* protect mem stats from concurrent access */ -    SYS_ARCH_PROTECT(lev); -    MEM_STATS_INC(illegal); -    SYS_ARCH_UNPROTECT(lev); -    return; -  } -  /* protect the heap from concurrent access */ -  LWIP_MEM_FREE_PROTECT(); -  /* Get the corresponding struct mem ... */ -  mem = (struct mem *)((u8_t *)rmem - SIZEOF_STRUCT_MEM); -  /* ... which has to be in a used state ... */ -  LWIP_ASSERT("mem_free: mem->used", mem->used); -  /* ... and is now unused. */ -  mem->used = 0; - -  if (mem < lfree) { -    /* the newly freed struct is now the lowest */ -    lfree = mem; -  } - -  MEM_STATS_DEC_USED(used, mem->next - ((u8_t *)mem - ram)); - -  /* finally, see if prev or next are free also */ -  plug_holes(mem); -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT -  mem_free_count = 1; -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ -  LWIP_MEM_FREE_UNPROTECT(); -} - -/** - * In contrast to its name, mem_realloc can only shrink memory, not expand it. - * Since the only use (for now) is in pbuf_realloc (which also can only shrink), - * this shouldn't be a problem! - * - * @param rmem pointer to memory allocated by mem_malloc the is to be shrinked - * @param newsize required size after shrinking (needs to be smaller than or - *                equal to the previous size) - * @return for compatibility reasons: is always == rmem, at the moment - *         or NULL if newsize is > old size, in which case rmem is NOT touched - *         or freed! - */ -void * -mem_realloc(void *rmem, mem_size_t newsize) -{ -  mem_size_t size; -  mem_size_t ptr, ptr2; -  struct mem *mem, *mem2; -  /* use the FREE_PROTECT here: it protects with sem OR SYS_ARCH_PROTECT */ -  LWIP_MEM_FREE_DECL_PROTECT(); - -  /* Expand the size of the allocated memory region so that we can -     adjust for alignment. */ -  newsize = LWIP_MEM_ALIGN_SIZE(newsize); - -  if(newsize < MIN_SIZE_ALIGNED) { -    /* every data block must be at least MIN_SIZE_ALIGNED long */ -    newsize = MIN_SIZE_ALIGNED; -  } - -  if (newsize > MEM_SIZE_ALIGNED) { -    return NULL; -  } - -  LWIP_ASSERT("mem_realloc: legal memory", (u8_t *)rmem >= (u8_t *)ram && -   (u8_t *)rmem < (u8_t *)ram_end); - -  if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) { -    SYS_ARCH_DECL_PROTECT(lev); -    LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SEVERE, ("mem_realloc: illegal memory\n")); -    /* protect mem stats from concurrent access */ -    SYS_ARCH_PROTECT(lev); -    MEM_STATS_INC(illegal); -    SYS_ARCH_UNPROTECT(lev); -    return rmem; -  } -  /* Get the corresponding struct mem ... */ -  mem = (struct mem *)((u8_t *)rmem - SIZEOF_STRUCT_MEM); -  /* ... and its offset pointer */ -  ptr = (u8_t *)mem - ram; - -  size = mem->next - ptr - SIZEOF_STRUCT_MEM; -  LWIP_ASSERT("mem_realloc can only shrink memory", newsize <= size); -  if (newsize > size) { -    /* not supported */ -    return NULL; -  } -  if (newsize == size) { -    /* No change in size, simply return */ -    return rmem; -  } - -  /* protect the heap from concurrent access */ -  LWIP_MEM_FREE_PROTECT(); - -  MEM_STATS_DEC_USED(used, (size - newsize)); - -  mem2 = (struct mem *)&ram[mem->next]; -  if(mem2->used == 0) { -    /* The next struct is unused, we can simply move it at little */ -    mem_size_t next; -    /* remember the old next pointer */ -    next = mem2->next; -    /* create new struct mem which is moved directly after the shrinked mem */ -    ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize; -    if (lfree == mem2) { -      lfree = (struct mem *)&ram[ptr2]; -    } -    mem2 = (struct mem *)&ram[ptr2]; -    mem2->used = 0; -    /* restore the next pointer */ -    mem2->next = next; -    /* link it back to mem */ -    mem2->prev = ptr; -    /* link mem to it */ -    mem->next = ptr2; -    /* last thing to restore linked list: as we have moved mem2, -     * let 'mem2->next->prev' point to mem2 again. but only if mem2->next is not -     * the end of the heap */ -    if (mem2->next != MEM_SIZE_ALIGNED) { -      ((struct mem *)&ram[mem2->next])->prev = ptr2; -    } -    /* no need to plug holes, we've already done that */ -  } else if (newsize + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED <= size) { -    /* Next struct is used but there's room for another struct mem with -     * at least MIN_SIZE_ALIGNED of data. -     * Old size ('size') must be big enough to contain at least 'newsize' plus a struct mem -     * ('SIZEOF_STRUCT_MEM') with some data ('MIN_SIZE_ALIGNED'). -     * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty -     *       region that couldn't hold data, but when mem->next gets freed, -     *       the 2 regions would be combined, resulting in more free memory */ -    ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize; -    mem2 = (struct mem *)&ram[ptr2]; -    if (mem2 < lfree) { -      lfree = mem2; -    } -    mem2->used = 0; -    mem2->next = mem->next; -    mem2->prev = ptr; -    mem->next = ptr2; -    if (mem2->next != MEM_SIZE_ALIGNED) { -      ((struct mem *)&ram[mem2->next])->prev = ptr2; -    } -    /* the original mem->next is used, so no need to plug holes! */ -  } -  /* else { -    next struct mem is used but size between mem and mem2 is not big enough -    to create another struct mem -    -> don't do anyhting.  -    -> the remaining space stays unused since it is too small -  } */ -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT -  mem_free_count = 1; -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ -  LWIP_MEM_FREE_UNPROTECT(); -  return rmem; -} - -/** - * Adam's mem_malloc() plus solution for bug #17922 - * Allocate a block of memory with a minimum of 'size' bytes. - * - * @param size is the minimum size of the requested block in bytes. - * @return pointer to allocated memory or NULL if no free memory was found. - * - * Note that the returned value will always be aligned (as defined by MEM_ALIGNMENT). - */ -void * -mem_malloc(mem_size_t size) -{ -  mem_size_t ptr, ptr2; -  struct mem *mem, *mem2; -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT -  u8_t local_mem_free_count = 0; -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ -  LWIP_MEM_ALLOC_DECL_PROTECT(); - -  if (size == 0) { -    return NULL; -  } - -  /* Expand the size of the allocated memory region so that we can -     adjust for alignment. */ -  size = LWIP_MEM_ALIGN_SIZE(size); - -  if(size < MIN_SIZE_ALIGNED) { -    /* every data block must be at least MIN_SIZE_ALIGNED long */ -    size = MIN_SIZE_ALIGNED; -  } - -  if (size > MEM_SIZE_ALIGNED) { -    return NULL; -  } - -  /* protect the heap from concurrent access */ -  sys_arch_sem_wait(mem_sem, 0); -  LWIP_MEM_ALLOC_PROTECT(); -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT -  /* run as long as a mem_free disturbed mem_malloc */ -  do { -    local_mem_free_count = 0; -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - -    /* Scan through the heap searching for a free block that is big enough, -     * beginning with the lowest free block. -     */ -    for (ptr = (u8_t *)lfree - ram; ptr < MEM_SIZE_ALIGNED - size; -         ptr = ((struct mem *)&ram[ptr])->next) { -      mem = (struct mem *)&ram[ptr]; -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT -      mem_free_count = 0; -      LWIP_MEM_ALLOC_UNPROTECT(); -      /* allow mem_free to run */ -      LWIP_MEM_ALLOC_PROTECT(); -      if (mem_free_count != 0) { -        local_mem_free_count = mem_free_count; -      } -      mem_free_count = 0; -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ - -      if ((!mem->used) && -          (mem->next - (ptr + SIZEOF_STRUCT_MEM)) >= size) { -        /* mem is not used and at least perfect fit is possible: -         * mem->next - (ptr + SIZEOF_STRUCT_MEM) gives us the 'user data size' of mem */ - -        if (mem->next - (ptr + SIZEOF_STRUCT_MEM) >= (size + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED)) { -          /* (in addition to the above, we test if another struct mem (SIZEOF_STRUCT_MEM) containing -           * at least MIN_SIZE_ALIGNED of data also fits in the 'user data space' of 'mem') -           * -> split large block, create empty remainder, -           * remainder must be large enough to contain MIN_SIZE_ALIGNED data: if -           * mem->next - (ptr + (2*SIZEOF_STRUCT_MEM)) == size, -           * struct mem would fit in but no data between mem2 and mem2->next -           * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty -           *       region that couldn't hold data, but when mem->next gets freed, -           *       the 2 regions would be combined, resulting in more free memory -           */ -          ptr2 = ptr + SIZEOF_STRUCT_MEM + size; -          /* create mem2 struct */ -          mem2 = (struct mem *)&ram[ptr2]; -          mem2->used = 0; -          mem2->next = mem->next; -          mem2->prev = ptr; -          /* and insert it between mem and mem->next */ -          mem->next = ptr2; -          mem->used = 1; - -          if (mem2->next != MEM_SIZE_ALIGNED) { -            ((struct mem *)&ram[mem2->next])->prev = ptr2; -          } -          MEM_STATS_INC_USED(used, (size + SIZEOF_STRUCT_MEM)); -        } else { -          /* (a mem2 struct does no fit into the user data space of mem and mem->next will always -           * be used at this point: if not we have 2 unused structs in a row, plug_holes should have -           * take care of this). -           * -> near fit or excact fit: do not split, no mem2 creation -           * also can't move mem->next directly behind mem, since mem->next -           * will always be used at this point! -           */ -          mem->used = 1; -          MEM_STATS_INC_USED(used, mem->next - ((u8_t *)mem - ram)); -        } - -        if (mem == lfree) { -          /* Find next free block after mem and update lowest free pointer */ -          while (lfree->used && lfree != ram_end) { -            LWIP_MEM_ALLOC_UNPROTECT(); -            /* prevent high interrupt latency... */ -            LWIP_MEM_ALLOC_PROTECT(); -            lfree = (struct mem *)&ram[lfree->next]; -          } -          LWIP_ASSERT("mem_malloc: !lfree->used", ((lfree == ram_end) || (!lfree->used))); -        } -        LWIP_MEM_ALLOC_UNPROTECT(); -        sys_sem_signal(mem_sem); -        LWIP_ASSERT("mem_malloc: allocated memory not above ram_end.", -         (mem_ptr_t)mem + SIZEOF_STRUCT_MEM + size <= (mem_ptr_t)ram_end); -        LWIP_ASSERT("mem_malloc: allocated memory properly aligned.", -         ((mem_ptr_t)mem + SIZEOF_STRUCT_MEM) % MEM_ALIGNMENT == 0); -        LWIP_ASSERT("mem_malloc: sanity check alignment", -          (((mem_ptr_t)mem) & (MEM_ALIGNMENT-1)) == 0); - -        return (u8_t *)mem + SIZEOF_STRUCT_MEM; -      } -    } -#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT -    /* if we got interrupted by a mem_free, try again */ -  } while(local_mem_free_count != 0); -#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ -  LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("mem_malloc: could not allocate %"S16_F" bytes\n", (s16_t)size)); -  MEM_STATS_INC(err); -  LWIP_MEM_ALLOC_UNPROTECT(); -  sys_sem_signal(mem_sem); -  return NULL; -} - -#endif /* MEM_USE_POOLS */ -/** - * Contiguously allocates enough space for count objects that are size bytes - * of memory each and returns a pointer to the allocated memory. - * - * The allocated memory is filled with bytes of value zero. - * - * @param count number of objects to allocate - * @param size size of the objects to allocate - * @return pointer to allocated memory / NULL pointer if there is an error - */ -void *mem_calloc(mem_size_t count, mem_size_t size) -{ -  void *p; - -  /* allocate 'count' objects of size 'size' */ -  p = mem_malloc(count * size); -  if (p) { -    /* zero the memory */ -    memset(p, 0, count * size); -  } -  return p; -} - -#endif /* !MEM_LIBC_MALLOC */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/memp.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/memp.c deleted file mode 100644 index bd2fd26..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/memp.c +++ /dev/null @@ -1,388 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * Dynamic pool memory manager - * - * lwIP has dedicated pools for many structures (netconn, protocol control blocks, - * packet buffers, ...). All these pools are managed here. - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ - -#include "lwip/opt.h" - -#include "lwip/memp.h" -#include "lwip/pbuf.h" -#include "lwip/udp.h" -#include "lwip/raw.h" -#include "lwip/tcp.h" -#include "lwip/igmp.h" -#include "lwip/api.h" -#include "lwip/api_msg.h" -#include "lwip/tcpip.h" -#include "lwip/sys.h" -#include "lwip/stats.h" -#include "netif/etharp.h" -#include "lwip/ip_frag.h" - -#include <string.h> - -#if !MEMP_MEM_MALLOC /* don't build if not configured for use in lwipopts.h */ - -struct memp { -  struct memp *next; -#if MEMP_OVERFLOW_CHECK -  const char *file; -  int line; -#endif /* MEMP_OVERFLOW_CHECK */ -}; - -#if MEMP_OVERFLOW_CHECK -/* if MEMP_OVERFLOW_CHECK is turned on, we reserve some bytes at the beginning - * and at the end of each element, initialize them as 0xcd and check - * them later. */ -/* If MEMP_OVERFLOW_CHECK is >= 2, on every call to memp_malloc or memp_free, - * every single element in each pool is checked! - * This is VERY SLOW but also very helpful. */ -/* MEMP_SANITY_REGION_BEFORE and MEMP_SANITY_REGION_AFTER can be overridden in - * lwipopts.h to change the amount reserved for checking. */ -#ifndef MEMP_SANITY_REGION_BEFORE -#define MEMP_SANITY_REGION_BEFORE  16 -#endif /* MEMP_SANITY_REGION_BEFORE*/ -#if MEMP_SANITY_REGION_BEFORE > 0 -#define MEMP_SANITY_REGION_BEFORE_ALIGNED    LWIP_MEM_ALIGN_SIZE(MEMP_SANITY_REGION_BEFORE) -#else -#define MEMP_SANITY_REGION_BEFORE_ALIGNED    0 -#endif /* MEMP_SANITY_REGION_BEFORE*/ -#ifndef MEMP_SANITY_REGION_AFTER -#define MEMP_SANITY_REGION_AFTER   16 -#endif /* MEMP_SANITY_REGION_AFTER*/ -#if MEMP_SANITY_REGION_AFTER > 0 -#define MEMP_SANITY_REGION_AFTER_ALIGNED     LWIP_MEM_ALIGN_SIZE(MEMP_SANITY_REGION_AFTER) -#else -#define MEMP_SANITY_REGION_AFTER_ALIGNED     0 -#endif /* MEMP_SANITY_REGION_AFTER*/ - -/* MEMP_SIZE: save space for struct memp and for sanity check */ -#define MEMP_SIZE          (LWIP_MEM_ALIGN_SIZE(sizeof(struct memp)) + MEMP_SANITY_REGION_BEFORE_ALIGNED) -#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x) + MEMP_SANITY_REGION_AFTER_ALIGNED) - -#else /* MEMP_OVERFLOW_CHECK */ - -/* No sanity checks - * We don't need to preserve the struct memp while not allocated, so we - * can save a little space and set MEMP_SIZE to 0. - */ -#define MEMP_SIZE           0 -#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x)) - -#endif /* MEMP_OVERFLOW_CHECK */ - -/** This array holds the first free element of each pool. - *  Elements form a linked list. */ -static struct memp *memp_tab[MEMP_MAX]; - -#else /* MEMP_MEM_MALLOC */ - -#define MEMP_ALIGN_SIZE(x) (LWIP_MEM_ALIGN_SIZE(x)) - -#endif /* MEMP_MEM_MALLOC */ - -/** This array holds the element sizes of each pool. */ -#if !MEM_USE_POOLS && !MEMP_MEM_MALLOC -static -#endif -const u16_t memp_sizes[MEMP_MAX] = { -#define LWIP_MEMPOOL(name,num,size,desc)  LWIP_MEM_ALIGN_SIZE(size), -#include "lwip/memp_std.h" -}; - -#if !MEMP_MEM_MALLOC /* don't build if not configured for use in lwipopts.h */ - -/** This array holds the number of elements in each pool. */ -static const u16_t memp_num[MEMP_MAX] = { -#define LWIP_MEMPOOL(name,num,size,desc)  (num), -#include "lwip/memp_std.h" -}; - -/** This array holds a textual description of each pool. */ -#ifdef LWIP_DEBUG -static const char *memp_desc[MEMP_MAX] = { -#define LWIP_MEMPOOL(name,num,size,desc)  (desc), -#include "lwip/memp_std.h" -}; -#endif /* LWIP_DEBUG */ - -/** This is the actual memory used by the pools. */ -static u8_t memp_memory[MEM_ALIGNMENT - 1  -#define LWIP_MEMPOOL(name,num,size,desc) + ( (num) * (MEMP_SIZE + MEMP_ALIGN_SIZE(size) ) ) -#include "lwip/memp_std.h" -]; - -#if MEMP_SANITY_CHECK -/** - * Check that memp-lists don't form a circle - */ -static int -memp_sanity(void) -{ -  s16_t i, c; -  struct memp *m, *n; - -  for (i = 0; i < MEMP_MAX; i++) { -    for (m = memp_tab[i]; m != NULL; m = m->next) { -      c = 1; -      for (n = memp_tab[i]; n != NULL; n = n->next) { -        if (n == m && --c < 0) { -          return 0; -        } -      } -    } -  } -  return 1; -} -#endif /* MEMP_SANITY_CHECK*/ -#if MEMP_OVERFLOW_CHECK -/** - * Check if a memp element was victim of an overflow - * (e.g. the restricted area after it has been altered) - * - * @param p the memp element to check - * @param memp_size the element size of the pool p comes from - */ -static void -memp_overflow_check_element(struct memp *p, u16_t memp_size) -{ -  u16_t k; -  u8_t *m; -#if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0 -  m = (u8_t*)p + MEMP_SIZE - MEMP_SANITY_REGION_BEFORE_ALIGNED; -  for (k = 0; k < MEMP_SANITY_REGION_BEFORE_ALIGNED; k++) { -    if (m[k] != 0xcd) { -      LWIP_ASSERT("detected memp underflow!", 0); -    } -  } -#endif -#if MEMP_SANITY_REGION_AFTER_ALIGNED > 0 -  m = (u8_t*)p + MEMP_SIZE + memp_size; -  for (k = 0; k < MEMP_SANITY_REGION_AFTER_ALIGNED; k++) { -    if (m[k] != 0xcd) { -      LWIP_ASSERT("detected memp overflow!", 0); -    } -  } -#endif -} - -/** - * Do an overflow check for all elements in every pool. - * - * @see memp_overflow_check_element for a description of the check - */ -static void -memp_overflow_check_all(void) -{ -  u16_t i, j; -  struct memp *p; - -  p = LWIP_MEM_ALIGN(memp_memory); -  for (i = 0; i < MEMP_MAX; ++i) { -    p = p; -    for (j = 0; j < memp_num[i]; ++j) { -      memp_overflow_check_element(p, memp_sizes[i]); -      p = (struct memp*)((u8_t*)p + MEMP_SIZE + memp_sizes[i] + MEMP_SANITY_REGION_AFTER_ALIGNED); -    } -  } -} - -/** - * Initialize the restricted areas of all memp elements in every pool. - */ -static void -memp_overflow_init(void) -{ -  u16_t i, j; -  struct memp *p; -  u8_t *m; - -  p = LWIP_MEM_ALIGN(memp_memory); -  for (i = 0; i < MEMP_MAX; ++i) { -    p = p; -    for (j = 0; j < memp_num[i]; ++j) { -#if MEMP_SANITY_REGION_BEFORE_ALIGNED > 0 -      m = (u8_t*)p + MEMP_SIZE - MEMP_SANITY_REGION_BEFORE_ALIGNED; -      memset(m, 0xcd, MEMP_SANITY_REGION_BEFORE_ALIGNED); -#endif -#if MEMP_SANITY_REGION_AFTER_ALIGNED > 0 -      m = (u8_t*)p + MEMP_SIZE + memp_sizes[i]; -      memset(m, 0xcd, MEMP_SANITY_REGION_AFTER_ALIGNED); -#endif -      p = (struct memp*)((u8_t*)p + MEMP_SIZE + memp_sizes[i] + MEMP_SANITY_REGION_AFTER_ALIGNED); -    } -  } -} -#endif /* MEMP_OVERFLOW_CHECK */ - -/** - * Initialize this module. - *  - * Carves out memp_memory into linked lists for each pool-type. - */ -void -memp_init(void) -{ -  struct memp *memp; -  u16_t i, j; - -  for (i = 0; i < MEMP_MAX; ++i) { -    MEMP_STATS_AVAIL(used, i, 0); -    MEMP_STATS_AVAIL(max, i, 0); -    MEMP_STATS_AVAIL(err, i, 0); -    MEMP_STATS_AVAIL(avail, i, memp_num[i]); -  } - -  memp = LWIP_MEM_ALIGN(memp_memory); -  /* for every pool: */ -  for (i = 0; i < MEMP_MAX; ++i) { -    memp_tab[i] = NULL; -    /* create a linked list of memp elements */ -    for (j = 0; j < memp_num[i]; ++j) { -      memp->next = memp_tab[i]; -      memp_tab[i] = memp; -      memp = (struct memp *)((u8_t *)memp + MEMP_SIZE + memp_sizes[i] -#if MEMP_OVERFLOW_CHECK -        + MEMP_SANITY_REGION_AFTER_ALIGNED -#endif -      ); -    } -  } -#if MEMP_OVERFLOW_CHECK -  memp_overflow_init(); -  /* check everything a first time to see if it worked */ -  memp_overflow_check_all(); -#endif /* MEMP_OVERFLOW_CHECK */ -} - -/** - * Get an element from a specific pool. - * - * @param type the pool to get an element from - * - * the debug version has two more parameters: - * @param file file name calling this function - * @param line number of line where this function is called - * - * @return a pointer to the allocated memory or a NULL pointer on error - */ -void * -#if !MEMP_OVERFLOW_CHECK -memp_malloc(memp_t type) -#else -memp_malloc_fn(memp_t type, const char* file, const int line) -#endif -{ -  struct memp *memp; -  SYS_ARCH_DECL_PROTECT(old_level); -  -  LWIP_ERROR("memp_malloc: type < MEMP_MAX", (type < MEMP_MAX), return NULL;); - -  SYS_ARCH_PROTECT(old_level); -#if MEMP_OVERFLOW_CHECK >= 2 -  memp_overflow_check_all(); -#endif /* MEMP_OVERFLOW_CHECK >= 2 */ - -  memp = memp_tab[type]; -   -  if (memp != NULL) { -    memp_tab[type] = memp->next; -#if MEMP_OVERFLOW_CHECK -    memp->next = NULL; -    memp->file = file; -    memp->line = line; -#endif /* MEMP_OVERFLOW_CHECK */ -    MEMP_STATS_INC_USED(used, type); -    LWIP_ASSERT("memp_malloc: memp properly aligned", -                ((mem_ptr_t)memp % MEM_ALIGNMENT) == 0); -    memp = (struct memp*)((u8_t*)memp + MEMP_SIZE); -  } else { -    LWIP_DEBUGF(MEMP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("memp_malloc: out of memory in pool %s\n", memp_desc[type])); -    MEMP_STATS_INC(err, type); -  } - -  SYS_ARCH_UNPROTECT(old_level); - -  return memp; -} - -/** - * Put an element back into its pool. - * - * @param type the pool where to put mem - * @param mem the memp element to free - */ -void -memp_free(memp_t type, void *mem) -{ -  struct memp *memp; -  SYS_ARCH_DECL_PROTECT(old_level); - -  if (mem == NULL) { -    return; -  } -  LWIP_ASSERT("memp_free: mem properly aligned", -                ((mem_ptr_t)mem % MEM_ALIGNMENT) == 0); - -  memp = (struct memp *)((u8_t*)mem - MEMP_SIZE); - -  SYS_ARCH_PROTECT(old_level); -#if MEMP_OVERFLOW_CHECK -#if MEMP_OVERFLOW_CHECK >= 2 -  memp_overflow_check_all(); -#else -  memp_overflow_check_element(memp, memp_sizes[type]); -#endif /* MEMP_OVERFLOW_CHECK >= 2 */ -#endif /* MEMP_OVERFLOW_CHECK */ - -  MEMP_STATS_DEC(used, type);  -   -  memp->next = memp_tab[type];  -  memp_tab[type] = memp; - -#if MEMP_SANITY_CHECK -  LWIP_ASSERT("memp sanity", memp_sanity()); -#endif /* MEMP_SANITY_CHECK */ - -  SYS_ARCH_UNPROTECT(old_level); -} - -#endif /* MEMP_MEM_MALLOC */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/netif.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/netif.c deleted file mode 100644 index cf3815c..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/netif.c +++ /dev/null @@ -1,683 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * lwIP network interface abstraction - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels <adam@sics.se> - * - */ - -#include "lwip/opt.h" - -#include "lwip/def.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/tcp.h" -#include "lwip/snmp.h" -#include "lwip/igmp.h" -#include "netif/etharp.h" -#if ENABLE_LOOPBACK -#include "lwip/sys.h" -#if LWIP_NETIF_LOOPBACK_MULTITHREADING -#include "lwip/tcpip.h" -#endif /* LWIP_NETIF_LOOPBACK_MULTITHREADING */ -#endif /* ENABLE_LOOPBACK */ - -#if LWIP_AUTOIP -#include "lwip/autoip.h" -#endif /* LWIP_AUTOIP */ -#if LWIP_DHCP -#include "lwip/dhcp.h" -#endif /* LWIP_DHCP */ - -#if LWIP_NETIF_STATUS_CALLBACK -#define NETIF_STATUS_CALLBACK(n) { if (n->status_callback) (n->status_callback)(n); } -#else -#define NETIF_STATUS_CALLBACK(n) { /* NOP */ } -#endif /* LWIP_NETIF_STATUS_CALLBACK */  - -#if LWIP_NETIF_LINK_CALLBACK -#define NETIF_LINK_CALLBACK(n) { if (n->link_callback) (n->link_callback)(n); } -#else -#define NETIF_LINK_CALLBACK(n) { /* NOP */ } -#endif /* LWIP_NETIF_LINK_CALLBACK */  - -struct netif *netif_list; -struct netif *netif_default; - -/** - * Add a network interface to the list of lwIP netifs. - * - * @param netif a pre-allocated netif structure - * @param ipaddr IP address for the new netif - * @param netmask network mask for the new netif - * @param gw default gateway IP address for the new netif - * @param state opaque data passed to the new netif - * @param init callback function that initializes the interface - * @param input callback function that is called to pass - * ingress packets up in the protocol layer stack. - * - * @return netif, or NULL if failed. - */ -struct netif * -netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, -  struct ip_addr *gw, -  void *state, -  err_t (* init)(struct netif *netif), -  err_t (* input)(struct pbuf *p, struct netif *netif)) -{ -  static u8_t netifnum = 0; - -  /* reset new interface configuration state */ -  netif->ip_addr.addr = 0; -  netif->netmask.addr = 0; -  netif->gw.addr = 0; -  netif->flags = 0; -#if LWIP_DHCP -  /* netif not under DHCP control by default */ -  netif->dhcp = NULL; -#endif /* LWIP_DHCP */ -#if LWIP_AUTOIP -  /* netif not under AutoIP control by default */ -  netif->autoip = NULL; -#endif /* LWIP_AUTOIP */ -#if LWIP_NETIF_STATUS_CALLBACK -  netif->status_callback = NULL; -#endif /* LWIP_NETIF_STATUS_CALLBACK */ -#if LWIP_NETIF_LINK_CALLBACK -  netif->link_callback = NULL; -#endif /* LWIP_NETIF_LINK_CALLBACK */ -#if LWIP_IGMP -  netif->igmp_mac_filter = NULL; -#endif /* LWIP_IGMP */ -#if ENABLE_LOOPBACK -  netif->loop_first = NULL; -  netif->loop_last = NULL; -#endif /* ENABLE_LOOPBACK */ - -  /* remember netif specific state information data */ -  netif->state = state; -  netif->num = netifnum++; -  netif->input = input; -#if LWIP_NETIF_HWADDRHINT -  netif->addr_hint = NULL; -#endif /* LWIP_NETIF_HWADDRHINT*/ -#if ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS -  netif->loop_cnt_current = 0; -#endif /* ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS */ - -  netif_set_addr(netif, ipaddr, netmask, gw); - -  /* call user specified initialization function for netif */ -  if (init(netif) != ERR_OK) { -    return NULL; -  } - -  /* add this netif to the list */ -  netif->next = netif_list; -  netif_list = netif; -  snmp_inc_iflist(); - -#if LWIP_IGMP -  /* start IGMP processing */ -  if (netif->flags & NETIF_FLAG_IGMP) { -    igmp_start( netif); -  } -#endif /* LWIP_IGMP */ - -  LWIP_DEBUGF(NETIF_DEBUG, ("netif: added interface %c%c IP addr ", -    netif->name[0], netif->name[1])); -  ip_addr_debug_print(NETIF_DEBUG, ipaddr); -  LWIP_DEBUGF(NETIF_DEBUG, (" netmask ")); -  ip_addr_debug_print(NETIF_DEBUG, netmask); -  LWIP_DEBUGF(NETIF_DEBUG, (" gw ")); -  ip_addr_debug_print(NETIF_DEBUG, gw); -  LWIP_DEBUGF(NETIF_DEBUG, ("\n")); -  return netif; -} - -/** - * Change IP address configuration for a network interface (including netmask - * and default gateway). - * - * @param netif the network interface to change - * @param ipaddr the new IP address - * @param netmask the new netmask - * @param gw the new default gateway - */ -void -netif_set_addr(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, -    struct ip_addr *gw) -{ -  netif_set_ipaddr(netif, ipaddr); -  netif_set_netmask(netif, netmask); -  netif_set_gw(netif, gw); -} - -/** - * Remove a network interface from the list of lwIP netifs. - * - * @param netif the network interface to remove - */ -void netif_remove(struct netif * netif) -{ -  if ( netif == NULL ) return; - -#if LWIP_IGMP -  /* stop IGMP processing */ -  if (netif->flags & NETIF_FLAG_IGMP) { -    igmp_stop( netif); -  } -#endif /* LWIP_IGMP */ - -  snmp_delete_ipaddridx_tree(netif); - -  /*  is it the first netif? */ -  if (netif_list == netif) { -    netif_list = netif->next; -    snmp_dec_iflist(); -  } -  else { -    /*  look for netif further down the list */ -    struct netif * tmpNetif; -    for (tmpNetif = netif_list; tmpNetif != NULL; tmpNetif = tmpNetif->next) { -      if (tmpNetif->next == netif) { -        tmpNetif->next = netif->next; -        snmp_dec_iflist(); -        break; -      } -    } -    if (tmpNetif == NULL) -      return; /*  we didn't find any netif today */ -  } -  /* this netif is default? */ -  if (netif_default == netif) -    /* reset default netif */ -    netif_set_default(NULL); -  LWIP_DEBUGF( NETIF_DEBUG, ("netif_remove: removed netif\n") ); -} - -/** - * Find a network interface by searching for its name - * - * @param name the name of the netif (like netif->name) plus concatenated number - * in ascii representation (e.g. 'en0') - */ -struct netif * -netif_find(char *name) -{ -  struct netif *netif; -  u8_t num; - -  if (name == NULL) { -    return NULL; -  } - -  num = name[2] - '0'; - -  for(netif = netif_list; netif != NULL; netif = netif->next) { -    if (num == netif->num && -       name[0] == netif->name[0] && -       name[1] == netif->name[1]) { -      LWIP_DEBUGF(NETIF_DEBUG, ("netif_find: found %c%c\n", name[0], name[1])); -      return netif; -    } -  } -  LWIP_DEBUGF(NETIF_DEBUG, ("netif_find: didn't find %c%c\n", name[0], name[1])); -  return NULL; -} - -/** - * Change the IP address of a network interface - * - * @param netif the network interface to change - * @param ipaddr the new IP address - * - * @note call netif_set_addr() if you also want to change netmask and - * default gateway - */ -void -netif_set_ipaddr(struct netif *netif, struct ip_addr *ipaddr) -{ -  /* TODO: Handling of obsolete pcbs */ -  /* See:  http://mail.gnu.org/archive/html/lwip-users/2003-03/msg00118.html */ -#if LWIP_TCP -  struct tcp_pcb *pcb; -  struct tcp_pcb_listen *lpcb; - -  /* address is actually being changed? */ -  if ((ip_addr_cmp(ipaddr, &(netif->ip_addr))) == 0) -  { -    /* extern struct tcp_pcb *tcp_active_pcbs; defined by tcp.h */ -    LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_set_ipaddr: netif address being changed\n")); -    pcb = tcp_active_pcbs; -    while (pcb != NULL) { -      /* PCB bound to current local interface address? */ -      if (ip_addr_cmp(&(pcb->local_ip), &(netif->ip_addr))) { -        /* this connection must be aborted */ -        struct tcp_pcb *next = pcb->next; -        LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_STATE, ("netif_set_ipaddr: aborting TCP pcb %p\n", (void *)pcb)); -        tcp_abort(pcb); -        pcb = next; -      } else { -        pcb = pcb->next; -      } -    } -    for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { -      /* PCB bound to current local interface address? */ -      if ((!(ip_addr_isany(&(lpcb->local_ip)))) && -          (ip_addr_cmp(&(lpcb->local_ip), &(netif->ip_addr)))) { -        /* The PCB is listening to the old ipaddr and -         * is set to listen to the new one instead */ -        ip_addr_set(&(lpcb->local_ip), ipaddr); -      } -    } -  } -#endif -  snmp_delete_ipaddridx_tree(netif); -  snmp_delete_iprteidx_tree(0,netif); -  /* set new IP address to netif */ -  ip_addr_set(&(netif->ip_addr), ipaddr); -  snmp_insert_ipaddridx_tree(netif); -  snmp_insert_iprteidx_tree(0,netif); - -  LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: IP address of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", -    netif->name[0], netif->name[1], -    ip4_addr1(&netif->ip_addr), -    ip4_addr2(&netif->ip_addr), -    ip4_addr3(&netif->ip_addr), -    ip4_addr4(&netif->ip_addr))); -} - -/** - * Change the default gateway for a network interface - * - * @param netif the network interface to change - * @param gw the new default gateway - * - * @note call netif_set_addr() if you also want to change ip address and netmask - */ -void -netif_set_gw(struct netif *netif, struct ip_addr *gw) -{ -  ip_addr_set(&(netif->gw), gw); -  LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: GW address of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", -    netif->name[0], netif->name[1], -    ip4_addr1(&netif->gw), -    ip4_addr2(&netif->gw), -    ip4_addr3(&netif->gw), -    ip4_addr4(&netif->gw))); -} - -/** - * Change the netmask of a network interface - * - * @param netif the network interface to change - * @param netmask the new netmask - * - * @note call netif_set_addr() if you also want to change ip address and - * default gateway - */ -void -netif_set_netmask(struct netif *netif, struct ip_addr *netmask) -{ -  snmp_delete_iprteidx_tree(0, netif); -  /* set new netmask to netif */ -  ip_addr_set(&(netif->netmask), netmask); -  snmp_insert_iprteidx_tree(0, netif); -  LWIP_DEBUGF(NETIF_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("netif: netmask of interface %c%c set to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", -    netif->name[0], netif->name[1], -    ip4_addr1(&netif->netmask), -    ip4_addr2(&netif->netmask), -    ip4_addr3(&netif->netmask), -    ip4_addr4(&netif->netmask))); -} - -/** - * Set a network interface as the default network interface - * (used to output all packets for which no specific route is found) - * - * @param netif the default network interface - */ -void -netif_set_default(struct netif *netif) -{ -  if (netif == NULL) -  { -    /* remove default route */ -    snmp_delete_iprteidx_tree(1, netif); -  } -  else -  { -    /* install default route */ -    snmp_insert_iprteidx_tree(1, netif); -  } -  netif_default = netif; -  LWIP_DEBUGF(NETIF_DEBUG, ("netif: setting default interface %c%c\n", -           netif ? netif->name[0] : '\'', netif ? netif->name[1] : '\'')); -} - -/** - * Bring an interface up, available for processing - * traffic. - *  - * @note: Enabling DHCP on a down interface will make it come - * up once configured. - *  - * @see dhcp_start() - */  -void netif_set_up(struct netif *netif) -{ -  if ( !(netif->flags & NETIF_FLAG_UP )) { -    netif->flags |= NETIF_FLAG_UP; -     -#if LWIP_SNMP -    snmp_get_sysuptime(&netif->ts); -#endif /* LWIP_SNMP */ - -    NETIF_LINK_CALLBACK(netif); -    NETIF_STATUS_CALLBACK(netif); - -#if LWIP_ARP -    /* For Ethernet network interfaces, we would like to send a "gratuitous ARP" */  -    if (netif->flags & NETIF_FLAG_ETHARP) { -      etharp_gratuitous(netif); -    } -#endif /* LWIP_ARP */ - -#if LWIP_IGMP -    /* resend IGMP memberships */ -    if (netif->flags & NETIF_FLAG_IGMP) { -      igmp_report_groups( netif); -    } -#endif /* LWIP_IGMP */ -  } -} - -/** - * Bring an interface down, disabling any traffic processing. - * - * @note: Enabling DHCP on a down interface will make it come - * up once configured. - *  - * @see dhcp_start() - */  -void netif_set_down(struct netif *netif) -{ -  if ( netif->flags & NETIF_FLAG_UP ) -    { -      netif->flags &= ~NETIF_FLAG_UP; -#if LWIP_SNMP -      snmp_get_sysuptime(&netif->ts); -#endif -       -      NETIF_LINK_CALLBACK(netif); -      NETIF_STATUS_CALLBACK(netif); -    } -} - -/** - * Ask if an interface is up - */  -u8_t netif_is_up(struct netif *netif) -{ -  return (netif->flags & NETIF_FLAG_UP)?1:0; -} - -#if LWIP_NETIF_STATUS_CALLBACK -/** - * Set callback to be called when interface is brought up/down - */ -void netif_set_status_callback(struct netif *netif, void (* status_callback)(struct netif *netif )) -{ -    if ( netif ) -        netif->status_callback = status_callback; -} -#endif /* LWIP_NETIF_STATUS_CALLBACK */ - -#if LWIP_NETIF_LINK_CALLBACK -/** - * Called by a driver when its link goes up - */ -void netif_set_link_up(struct netif *netif ) -{ -  netif->flags |= NETIF_FLAG_LINK_UP; - -#if LWIP_DHCP -  if (netif->dhcp) { -    dhcp_network_changed(netif); -  } -#endif /* LWIP_DHCP */ - -#if LWIP_AUTOIP -  if (netif->autoip) { -    autoip_network_changed(netif); -  } -#endif /* LWIP_AUTOIP */ - -  if (netif->flags & NETIF_FLAG_UP) { -#if LWIP_ARP -  /* For Ethernet network interfaces, we would like to send a "gratuitous ARP" */  -  if (netif->flags & NETIF_FLAG_ETHARP) { -    etharp_gratuitous(netif); -  } -#endif /* LWIP_ARP */ - -#if LWIP_IGMP -    /* resend IGMP memberships */ -    if (netif->flags & NETIF_FLAG_IGMP) { -      igmp_report_groups( netif); -    } -#endif /* LWIP_IGMP */ -  } -  NETIF_LINK_CALLBACK(netif); -} - -/** - * Called by a driver when its link goes down - */ -void netif_set_link_down(struct netif *netif ) -{ -  netif->flags &= ~NETIF_FLAG_LINK_UP; -  NETIF_LINK_CALLBACK(netif); -} - -/** - * Ask if a link is up - */  -u8_t netif_is_link_up(struct netif *netif) -{ -  return (netif->flags & NETIF_FLAG_LINK_UP) ? 1 : 0; -} - -/** - * Set callback to be called when link is brought up/down - */ -void netif_set_link_callback(struct netif *netif, void (* link_callback)(struct netif *netif )) -{ -  if (netif) { -    netif->link_callback = link_callback; -  } -} -#endif /* LWIP_NETIF_LINK_CALLBACK */ - -#if ENABLE_LOOPBACK -/** - * Send an IP packet to be received on the same netif (loopif-like). - * The pbuf is simply copied and handed back to netif->input. - * In multithreaded mode, this is done directly since netif->input must put - * the packet on a queue. - * In callback mode, the packet is put on an internal queue and is fed to - * netif->input by netif_poll(). - * - * @param netif the lwip network interface structure - * @param p the (IP) packet to 'send' - * @param ipaddr the ip address to send the packet to (not used) - * @return ERR_OK if the packet has been sent - *         ERR_MEM if the pbuf used to copy the packet couldn't be allocated - */ -err_t -netif_loop_output(struct netif *netif, struct pbuf *p, -       struct ip_addr *ipaddr) -{ -  struct pbuf *r; -  err_t err; -  struct pbuf *last; -#if LWIP_LOOPBACK_MAX_PBUFS -  u8_t clen = 0; -#endif /* LWIP_LOOPBACK_MAX_PBUFS */ -  SYS_ARCH_DECL_PROTECT(lev); -  LWIP_UNUSED_ARG(ipaddr); - -  /* Allocate a new pbuf */ -  r = pbuf_alloc(PBUF_LINK, p->tot_len, PBUF_RAM); -  if (r == NULL) { -    return ERR_MEM; -  } -#if LWIP_LOOPBACK_MAX_PBUFS -  clen = pbuf_clen(r); -  /* check for overflow or too many pbuf on queue */ -  if(((netif->loop_cnt_current + clen) < netif->loop_cnt_current) || -    ((netif->loop_cnt_current + clen) > LWIP_LOOPBACK_MAX_PBUFS)) { -      pbuf_free(r); -      r = NULL; -      return ERR_MEM; -  } -  netif->loop_cnt_current += clen; -#endif /* LWIP_LOOPBACK_MAX_PBUFS */ - -  /* Copy the whole pbuf queue p into the single pbuf r */ -  if ((err = pbuf_copy(r, p)) != ERR_OK) { -    pbuf_free(r); -    r = NULL; -    return err; -  } - -  /* Put the packet on a linked list which gets emptied through calling -     netif_poll(). */ - -  /* let last point to the last pbuf in chain r */ -  for (last = r; last->next != NULL; last = last->next); - -  SYS_ARCH_PROTECT(lev); -  if(netif->loop_first != NULL) { -    LWIP_ASSERT("if first != NULL, last must also be != NULL", netif->loop_last != NULL); -    netif->loop_last->next = r; -    netif->loop_last = last; -  } else { -    netif->loop_first = r; -    netif->loop_last = last; -  } -  SYS_ARCH_UNPROTECT(lev); - -#if LWIP_NETIF_LOOPBACK_MULTITHREADING -  /* For multithreading environment, schedule a call to netif_poll */ -  tcpip_callback((void (*)(void *))(netif_poll), netif); -#endif /* LWIP_NETIF_LOOPBACK_MULTITHREADING */ - -  return ERR_OK; -} - -/** - * Call netif_poll() in the main loop of your application. This is to prevent - * reentering non-reentrant functions like tcp_input(). Packets passed to - * netif_loop_output() are put on a list that is passed to netif->input() by - * netif_poll(). - */ -void -netif_poll(struct netif *netif) -{ -  struct pbuf *in; -  SYS_ARCH_DECL_PROTECT(lev); - -  do { -    /* Get a packet from the list. With SYS_LIGHTWEIGHT_PROT=1, this is protected */ -    SYS_ARCH_PROTECT(lev); -    in = netif->loop_first; -    if(in != NULL) { -      struct pbuf *in_end = in; -#if LWIP_LOOPBACK_MAX_PBUFS -      u8_t clen = pbuf_clen(in); -      /* adjust the number of pbufs on queue */ -      LWIP_ASSERT("netif->loop_cnt_current underflow", -        ((netif->loop_cnt_current - clen) < netif->loop_cnt_current)); -      netif->loop_cnt_current -= clen; -#endif /* LWIP_LOOPBACK_MAX_PBUFS */ -      while(in_end->len != in_end->tot_len) { -        LWIP_ASSERT("bogus pbuf: len != tot_len but next == NULL!", in_end->next != NULL); -        in_end = in_end->next; -      } -      /* 'in_end' now points to the last pbuf from 'in' */ -      if(in_end == netif->loop_last) { -        /* this was the last pbuf in the list */ -        netif->loop_first = netif->loop_last = NULL; -      } else { -        /* pop the pbuf off the list */ -        netif->loop_first = in_end->next; -        LWIP_ASSERT("should not be null since first != last!", netif->loop_first != NULL); -      } -      /* De-queue the pbuf from its successors on the 'loop_' list. */ -      in_end->next = NULL; -    } -    SYS_ARCH_UNPROTECT(lev); - -    if(in != NULL) { -      /* loopback packets are always IP packets! */ -      if(ip_input(in, netif) != ERR_OK) { -        pbuf_free(in); -      } -      /* Don't reference the packet any more! */ -      in = NULL; -    } -  /* go on while there is a packet on the list */ -  } while(netif->loop_first != NULL); -} - -#if !LWIP_NETIF_LOOPBACK_MULTITHREADING -/** - * Calls netif_poll() for every netif on the netif_list. - */ -void -netif_poll_all(void) -{ -  struct netif *netif = netif_list; -  /* loop through netifs */ -  while (netif != NULL) { -    netif_poll(netif); -    /* proceed to next network interface */ -    netif = netif->next; -  } -} -#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ -#endif /* ENABLE_LOOPBACK */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/pbuf.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/pbuf.c deleted file mode 100644 index 6284b9a..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/pbuf.c +++ /dev/null @@ -1,931 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * Packet buffer management - * - * Packets are built from the pbuf data structure. It supports dynamic - * memory allocation for packet contents or can reference externally - * managed packet contents both in RAM and ROM. Quick allocation for - * incoming packets is provided through pools with fixed sized pbufs. - * - * A packet may span over multiple pbufs, chained as a singly linked - * list. This is called a "pbuf chain". - * - * Multiple packets may be queued, also using this singly linked list. - * This is called a "packet queue". - *  - * So, a packet queue consists of one or more pbuf chains, each of - * which consist of one or more pbufs. CURRENTLY, PACKET QUEUES ARE - * NOT SUPPORTED!!! Use helper structs to queue multiple packets. - *  - * The differences between a pbuf chain and a packet queue are very - * precise but subtle.  - * - * The last pbuf of a packet has a ->tot_len field that equals the - * ->len field. It can be found by traversing the list. If the last - * pbuf of a packet has a ->next field other than NULL, more packets - * are on the queue. - * - * Therefore, looping through a pbuf of a single packet, has an - * loop end condition (tot_len == p->len), NOT (next == NULL). - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels <adam@sics.se> - * - */ - -#include "lwip/opt.h" - -#include "lwip/stats.h" -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/memp.h" -#include "lwip/pbuf.h" -#include "lwip/sys.h" -#include "arch/perf.h" -#if TCP_QUEUE_OOSEQ -#include "lwip/tcp.h" -#endif - -#include <string.h> - -#define SIZEOF_STRUCT_PBUF        LWIP_MEM_ALIGN_SIZE(sizeof(struct pbuf)) -/* Since the pool is created in memp, PBUF_POOL_BUFSIZE will be automatically -   aligned there. Therefore, PBUF_POOL_BUFSIZE_ALIGNED can be used here. */ -#define PBUF_POOL_BUFSIZE_ALIGNED LWIP_MEM_ALIGN_SIZE(PBUF_POOL_BUFSIZE) - -#if !TCP_QUEUE_OOSEQ || NO_SYS -#define PBUF_POOL_IS_EMPTY() -#else /* !TCP_QUEUE_OOSEQ || NO_SYS */ -/** Define this to 0 to prevent freeing ooseq pbufs when the PBUF_POOL is empty */ -#ifndef PBUF_POOL_FREE_OOSEQ -#define PBUF_POOL_FREE_OOSEQ 1 -#endif /* PBUF_POOL_FREE_OOSEQ */ - -#if PBUF_POOL_FREE_OOSEQ -#include "lwip/tcpip.h" -#define PBUF_POOL_IS_EMPTY() pbuf_pool_is_empty() -static u8_t pbuf_free_ooseq_queued; -/** - * Attempt to reclaim some memory from queued out-of-sequence TCP segments - * if we run out of pool pbufs. It's better to give priority to new packets - * if we're running out. - * - * This must be done in the correct thread context therefore this function - * can only be used with NO_SYS=0 and through tcpip_callback. - */ -static void -pbuf_free_ooseq(void* arg) -{ -  struct tcp_pcb* pcb; -  SYS_ARCH_DECL_PROTECT(old_level); -  LWIP_UNUSED_ARG(arg); - -  SYS_ARCH_PROTECT(old_level); -  pbuf_free_ooseq_queued = 0; -  SYS_ARCH_UNPROTECT(old_level); - -  for (pcb = tcp_active_pcbs; NULL != pcb; pcb = pcb->next) { -    if (NULL != pcb->ooseq) { -      /** Free the ooseq pbufs of one PCB only */ -      LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free_ooseq: freeing out-of-sequence pbufs\n")); -      tcp_segs_free(pcb->ooseq); -      pcb->ooseq = NULL; -      return; -    } -  } -} - -/** Queue a call to pbuf_free_ooseq if not already queued. */ -static void -pbuf_pool_is_empty(void) -{ -  u8_t queued; -  SYS_ARCH_DECL_PROTECT(old_level); - -  SYS_ARCH_PROTECT(old_level); -  queued = pbuf_free_ooseq_queued; -  pbuf_free_ooseq_queued = 1; -  SYS_ARCH_UNPROTECT(old_level); - -  if(!queued) { -    /* queue a call to pbuf_free_ooseq if not already queued */ -    if(tcpip_callback_with_block(pbuf_free_ooseq, NULL, 0) != ERR_OK) { -      SYS_ARCH_PROTECT(old_level); -      pbuf_free_ooseq_queued = 0; -      SYS_ARCH_UNPROTECT(old_level); -    } -  } -} -#endif /* PBUF_POOL_FREE_OOSEQ */ -#endif /* !TCP_QUEUE_OOSEQ || NO_SYS */ - -/** - * Allocates a pbuf of the given type (possibly a chain for PBUF_POOL type). - * - * The actual memory allocated for the pbuf is determined by the - * layer at which the pbuf is allocated and the requested size - * (from the size parameter). - * - * @param layer flag to define header size - * @param length size of the pbuf's payload - * @param type this parameter decides how and where the pbuf - * should be allocated as follows: - * - * - PBUF_RAM: buffer memory for pbuf is allocated as one large - *             chunk. This includes protocol headers as well. - * - PBUF_ROM: no buffer memory is allocated for the pbuf, even for - *             protocol headers. Additional headers must be prepended - *             by allocating another pbuf and chain in to the front of - *             the ROM pbuf. It is assumed that the memory used is really - *             similar to ROM in that it is immutable and will not be - *             changed. Memory which is dynamic should generally not - *             be attached to PBUF_ROM pbufs. Use PBUF_REF instead. - * - PBUF_REF: no buffer memory is allocated for the pbuf, even for - *             protocol headers. It is assumed that the pbuf is only - *             being used in a single thread. If the pbuf gets queued, - *             then pbuf_take should be called to copy the buffer. - * - PBUF_POOL: the pbuf is allocated as a pbuf chain, with pbufs from - *              the pbuf pool that is allocated during pbuf_init(). - * - * @return the allocated pbuf. If multiple pbufs where allocated, this - * is the first pbuf of a pbuf chain. - */ -struct pbuf * -pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type) -{ -  struct pbuf *p, *q, *r; -  u16_t offset; -  s32_t rem_len; /* remaining length */ -  LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F")\n", length)); - -  /* determine header offset */ -  offset = 0; -  switch (layer) { -  case PBUF_TRANSPORT: -    /* add room for transport (often TCP) layer header */ -    offset += PBUF_TRANSPORT_HLEN; -    /* FALLTHROUGH */ -  case PBUF_IP: -    /* add room for IP layer header */ -    offset += PBUF_IP_HLEN; -    /* FALLTHROUGH */ -  case PBUF_LINK: -    /* add room for link layer header */ -    offset += PBUF_LINK_HLEN; -    break; -  case PBUF_RAW: -    break; -  default: -    LWIP_ASSERT("pbuf_alloc: bad pbuf layer", 0); -    return NULL; -  } - -  switch (type) { -  case PBUF_POOL: -    /* allocate head of pbuf chain into p */ -    p = memp_malloc(MEMP_PBUF_POOL); -    LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc: allocated pbuf %p\n", (void *)p)); -    if (p == NULL) { -      PBUF_POOL_IS_EMPTY(); -      return NULL; -    } -    p->type = type; -    p->next = NULL; - -    /* make the payload pointer point 'offset' bytes into pbuf data memory */ -    p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + (SIZEOF_STRUCT_PBUF + offset))); -    LWIP_ASSERT("pbuf_alloc: pbuf p->payload properly aligned", -            ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0); -    /* the total length of the pbuf chain is the requested size */ -    p->tot_len = length; -    /* set the length of the first pbuf in the chain */ -    p->len = LWIP_MIN(length, PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset)); -    LWIP_ASSERT("check p->payload + p->len does not overflow pbuf", -                ((u8_t*)p->payload + p->len <= -                 (u8_t*)p + SIZEOF_STRUCT_PBUF + PBUF_POOL_BUFSIZE_ALIGNED)); -    LWIP_ASSERT("PBUF_POOL_BUFSIZE must be bigger than MEM_ALIGNMENT", -      (PBUF_POOL_BUFSIZE_ALIGNED - LWIP_MEM_ALIGN_SIZE(offset)) > 0 ); -    /* set reference count (needed here in case we fail) */ -    p->ref = 1; - -    /* now allocate the tail of the pbuf chain */ - -    /* remember first pbuf for linkage in next iteration */ -    r = p; -    /* remaining length to be allocated */ -    rem_len = length - p->len; -    /* any remaining pbufs to be allocated? */ -    while (rem_len > 0) { -      q = memp_malloc(MEMP_PBUF_POOL); -      if (q == NULL) { -        PBUF_POOL_IS_EMPTY(); -        /* free chain so far allocated */ -        pbuf_free(p); -        /* bail out unsuccesfully */ -        return NULL; -      } -      q->type = type; -      q->flags = 0; -      q->next = NULL; -      /* make previous pbuf point to this pbuf */ -      r->next = q; -      /* set total length of this pbuf and next in chain */ -      LWIP_ASSERT("rem_len < max_u16_t", rem_len < 0xffff); -      q->tot_len = (u16_t)rem_len; -      /* this pbuf length is pool size, unless smaller sized tail */ -      q->len = LWIP_MIN((u16_t)rem_len, PBUF_POOL_BUFSIZE_ALIGNED); -      q->payload = (void *)((u8_t *)q + SIZEOF_STRUCT_PBUF); -      LWIP_ASSERT("pbuf_alloc: pbuf q->payload properly aligned", -              ((mem_ptr_t)q->payload % MEM_ALIGNMENT) == 0); -      LWIP_ASSERT("check p->payload + p->len does not overflow pbuf", -                  ((u8_t*)p->payload + p->len <= -                   (u8_t*)p + SIZEOF_STRUCT_PBUF + PBUF_POOL_BUFSIZE_ALIGNED)); -      q->ref = 1; -      /* calculate remaining length to be allocated */ -      rem_len -= q->len; -      /* remember this pbuf for linkage in next iteration */ -      r = q; -    } -    /* end of chain */ -    /*r->next = NULL;*/ - -    break; -  case PBUF_RAM: -    /* If pbuf is to be allocated in RAM, allocate memory for it. */ -    p = (struct pbuf*)mem_malloc(LWIP_MEM_ALIGN_SIZE(SIZEOF_STRUCT_PBUF + offset) + LWIP_MEM_ALIGN_SIZE(length)); -    if (p == NULL) { -      return NULL; -    } -    /* Set up internal structure of the pbuf. */ -    p->payload = LWIP_MEM_ALIGN((void *)((u8_t *)p + SIZEOF_STRUCT_PBUF + offset)); -    p->len = p->tot_len = length; -    p->next = NULL; -    p->type = type; - -    LWIP_ASSERT("pbuf_alloc: pbuf->payload properly aligned", -           ((mem_ptr_t)p->payload % MEM_ALIGNMENT) == 0); -    break; -  /* pbuf references existing (non-volatile static constant) ROM payload? */ -  case PBUF_ROM: -  /* pbuf references existing (externally allocated) RAM payload? */ -  case PBUF_REF: -    /* only allocate memory for the pbuf structure */ -    p = memp_malloc(MEMP_PBUF); -    if (p == NULL) { -      LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, -                  ("pbuf_alloc: Could not allocate MEMP_PBUF for PBUF_%s.\n", -                  (type == PBUF_ROM) ? "ROM" : "REF")); -      return NULL; -    } -    /* caller must set this field properly, afterwards */ -    p->payload = NULL; -    p->len = p->tot_len = length; -    p->next = NULL; -    p->type = type; -    break; -  default: -    LWIP_ASSERT("pbuf_alloc: erroneous type", 0); -    return NULL; -  } -  /* set reference count */ -  p->ref = 1; -  /* set flags */ -  p->flags = 0; -  LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_alloc(length=%"U16_F") == %p\n", length, (void *)p)); -  return p; -} - - -/** - * Shrink a pbuf chain to a desired length. - * - * @param p pbuf to shrink. - * @param new_len desired new length of pbuf chain - * - * Depending on the desired length, the first few pbufs in a chain might - * be skipped and left unchanged. The new last pbuf in the chain will be - * resized, and any remaining pbufs will be freed. - * - * @note If the pbuf is ROM/REF, only the ->tot_len and ->len fields are adjusted. - * @note May not be called on a packet queue. - * - * @note Despite its name, pbuf_realloc cannot grow the size of a pbuf (chain). - */ -void -pbuf_realloc(struct pbuf *p, u16_t new_len) -{ -  struct pbuf *q; -  u16_t rem_len; /* remaining length */ -  s32_t grow; - -  LWIP_ASSERT("pbuf_realloc: p != NULL", p != NULL); -  LWIP_ASSERT("pbuf_realloc: sane p->type", p->type == PBUF_POOL || -              p->type == PBUF_ROM || -              p->type == PBUF_RAM || -              p->type == PBUF_REF); - -  /* desired length larger than current length? */ -  if (new_len >= p->tot_len) { -    /* enlarging not yet supported */ -    return; -  } - -  /* the pbuf chain grows by (new_len - p->tot_len) bytes -   * (which may be negative in case of shrinking) */ -  grow = new_len - p->tot_len; - -  /* first, step over any pbufs that should remain in the chain */ -  rem_len = new_len; -  q = p; -  /* should this pbuf be kept? */ -  while (rem_len > q->len) { -    /* decrease remaining length by pbuf length */ -    rem_len -= q->len; -    /* decrease total length indicator */ -    LWIP_ASSERT("grow < max_u16_t", grow < 0xffff); -    q->tot_len += (u16_t)grow; -    /* proceed to next pbuf in chain */ -    q = q->next; -    LWIP_ASSERT("pbuf_realloc: q != NULL", q != NULL); -  } -  /* we have now reached the new last pbuf (in q) */ -  /* rem_len == desired length for pbuf q */ - -  /* shrink allocated memory for PBUF_RAM */ -  /* (other types merely adjust their length fields */ -  if ((q->type == PBUF_RAM) && (rem_len != q->len)) { -    /* reallocate and adjust the length of the pbuf that will be split */ -    q = mem_realloc(q, (u8_t *)q->payload - (u8_t *)q + rem_len); -    LWIP_ASSERT("mem_realloc give q == NULL", q != NULL); -  } -  /* adjust length fields for new last pbuf */ -  q->len = rem_len; -  q->tot_len = q->len; - -  /* any remaining pbufs in chain? */ -  if (q->next != NULL) { -    /* free remaining pbufs in chain */ -    pbuf_free(q->next); -  } -  /* q is last packet in chain */ -  q->next = NULL; - -} - -/** - * Adjusts the payload pointer to hide or reveal headers in the payload. - * - * Adjusts the ->payload pointer so that space for a header - * (dis)appears in the pbuf payload. - * - * The ->payload, ->tot_len and ->len fields are adjusted. - * - * @param p pbuf to change the header size. - * @param header_size_increment Number of bytes to increment header size which - * increases the size of the pbuf. New space is on the front. - * (Using a negative value decreases the header size.) - * If hdr_size_inc is 0, this function does nothing and returns succesful. - * - * PBUF_ROM and PBUF_REF type buffers cannot have their sizes increased, so - * the call will fail. A check is made that the increase in header size does - * not move the payload pointer in front of the start of the buffer. - * @return non-zero on failure, zero on success. - * - */ -u8_t -pbuf_header(struct pbuf *p, s16_t header_size_increment) -{ -  u16_t type; -  void *payload; -  u16_t increment_magnitude; - -  LWIP_ASSERT("p != NULL", p != NULL); -  if ((header_size_increment == 0) || (p == NULL)) -    return 0; -  -  if (header_size_increment < 0){ -    increment_magnitude = -header_size_increment; -    /* Check that we aren't going to move off the end of the pbuf */ -    LWIP_ERROR("increment_magnitude <= p->len", (increment_magnitude <= p->len), return 1;); -  } else { -    increment_magnitude = header_size_increment; -#if 0 -    /* Can't assert these as some callers speculatively call -         pbuf_header() to see if it's OK.  Will return 1 below instead. */ -    /* Check that we've got the correct type of pbuf to work with */ -    LWIP_ASSERT("p->type == PBUF_RAM || p->type == PBUF_POOL",  -                p->type == PBUF_RAM || p->type == PBUF_POOL); -    /* Check that we aren't going to move off the beginning of the pbuf */ -    LWIP_ASSERT("p->payload - increment_magnitude >= p + SIZEOF_STRUCT_PBUF", -                (u8_t *)p->payload - increment_magnitude >= (u8_t *)p + SIZEOF_STRUCT_PBUF); -#endif -  } - -  type = p->type; -  /* remember current payload pointer */ -  payload = p->payload; - -  /* pbuf types containing payloads? */ -  if (type == PBUF_RAM || type == PBUF_POOL) { -    /* set new payload pointer */ -    p->payload = (u8_t *)p->payload - header_size_increment; -    /* boundary check fails? */ -    if ((u8_t *)p->payload < (u8_t *)p + SIZEOF_STRUCT_PBUF) { -      LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, -        ("pbuf_header: failed as %p < %p (not enough space for new header size)\n", -        (void *)p->payload, (void *)(p + 1))); -      /* restore old payload pointer */ -      p->payload = payload; -      /* bail out unsuccesfully */ -      return 1; -    } -  /* pbuf types refering to external payloads? */ -  } else if (type == PBUF_REF || type == PBUF_ROM) { -    /* hide a header in the payload? */ -    if ((header_size_increment < 0) && (increment_magnitude <= p->len)) { -      /* increase payload pointer */ -      p->payload = (u8_t *)p->payload - header_size_increment; -    } else { -      /* cannot expand payload to front (yet!) -       * bail out unsuccesfully */ -      return 1; -    } -  } -  else { -    /* Unknown type */ -    LWIP_ASSERT("bad pbuf type", 0); -    return 1; -  } -  /* modify pbuf length fields */ -  p->len += header_size_increment; -  p->tot_len += header_size_increment; - -  LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_header: old %p new %p (%"S16_F")\n", -    (void *)payload, (void *)p->payload, header_size_increment)); - -  return 0; -} - -/** - * Dereference a pbuf chain or queue and deallocate any no-longer-used - * pbufs at the head of this chain or queue. - * - * Decrements the pbuf reference count. If it reaches zero, the pbuf is - * deallocated. - * - * For a pbuf chain, this is repeated for each pbuf in the chain, - * up to the first pbuf which has a non-zero reference count after - * decrementing. So, when all reference counts are one, the whole - * chain is free'd. - * - * @param p The pbuf (chain) to be dereferenced. - * - * @return the number of pbufs that were de-allocated - * from the head of the chain. - * - * @note MUST NOT be called on a packet queue (Not verified to work yet). - * @note the reference counter of a pbuf equals the number of pointers - * that refer to the pbuf (or into the pbuf). - * - * @internal examples: - * - * Assuming existing chains a->b->c with the following reference - * counts, calling pbuf_free(a) results in: - *  - * 1->2->3 becomes ...1->3 - * 3->3->3 becomes 2->3->3 - * 1->1->2 becomes ......1 - * 2->1->1 becomes 1->1->1 - * 1->1->1 becomes ....... - * - */ -u8_t -pbuf_free(struct pbuf *p) -{ -  u16_t type; -  struct pbuf *q; -  u8_t count; - -  if (p == NULL) { -    LWIP_ASSERT("p != NULL", p != NULL); -    /* if assertions are disabled, proceed with debug output */ -    LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_LEVEL_SERIOUS, -      ("pbuf_free(p == NULL) was called.\n")); -    return 0; -  } -  LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free(%p)\n", (void *)p)); - -  PERF_START; - -  LWIP_ASSERT("pbuf_free: sane type", -    p->type == PBUF_RAM || p->type == PBUF_ROM || -    p->type == PBUF_REF || p->type == PBUF_POOL); - -  count = 0; -  /* de-allocate all consecutive pbufs from the head of the chain that -   * obtain a zero reference count after decrementing*/ -  while (p != NULL) { -    u16_t ref; -    SYS_ARCH_DECL_PROTECT(old_level); -    /* Since decrementing ref cannot be guaranteed to be a single machine operation -     * we must protect it. We put the new ref into a local variable to prevent -     * further protection. */ -    SYS_ARCH_PROTECT(old_level); -    /* all pbufs in a chain are referenced at least once */ -    LWIP_ASSERT("pbuf_free: p->ref > 0", p->ref > 0); -    /* decrease reference count (number of pointers to pbuf) */ -    ref = --(p->ref); -    SYS_ARCH_UNPROTECT(old_level); -    /* this pbuf is no longer referenced to? */ -    if (ref == 0) { -      /* remember next pbuf in chain for next iteration */ -      q = p->next; -      LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free: deallocating %p\n", (void *)p)); -      type = p->type; -      /* is this a pbuf from the pool? */ -      if (type == PBUF_POOL) { -        memp_free(MEMP_PBUF_POOL, p); -      /* is this a ROM or RAM referencing pbuf? */ -      } else if (type == PBUF_ROM || type == PBUF_REF) { -        memp_free(MEMP_PBUF, p); -      /* type == PBUF_RAM */ -      } else { -        mem_free(p); -      } -      count++; -      /* proceed to next pbuf */ -      p = q; -    /* p->ref > 0, this pbuf is still referenced to */ -    /* (and so the remaining pbufs in chain as well) */ -    } else { -      LWIP_DEBUGF( PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_free: %p has ref %"U16_F", ending here.\n", (void *)p, ref)); -      /* stop walking through the chain */ -      p = NULL; -    } -  } -  PERF_STOP("pbuf_free"); -  /* return number of de-allocated pbufs */ -  return count; -} - -/** - * Count number of pbufs in a chain - * - * @param p first pbuf of chain - * @return the number of pbufs in a chain - */ - -u8_t -pbuf_clen(struct pbuf *p) -{ -  u8_t len; - -  len = 0; -  while (p != NULL) { -    ++len; -    p = p->next; -  } -  return len; -} - -/** - * Increment the reference count of the pbuf. - * - * @param p pbuf to increase reference counter of - * - */ -void -pbuf_ref(struct pbuf *p) -{ -  SYS_ARCH_DECL_PROTECT(old_level); -  /* pbuf given? */ -  if (p != NULL) { -    SYS_ARCH_PROTECT(old_level); -    ++(p->ref); -    SYS_ARCH_UNPROTECT(old_level); -  } -} - -/** - * Concatenate two pbufs (each may be a pbuf chain) and take over - * the caller's reference of the tail pbuf. - *  - * @note The caller MAY NOT reference the tail pbuf afterwards. - * Use pbuf_chain() for that purpose. - *  - * @see pbuf_chain() - */ - -void -pbuf_cat(struct pbuf *h, struct pbuf *t) -{ -  struct pbuf *p; - -  LWIP_ERROR("(h != NULL) && (t != NULL) (programmer violates API)", -             ((h != NULL) && (t != NULL)), return;); - -  /* proceed to last pbuf of chain */ -  for (p = h; p->next != NULL; p = p->next) { -    /* add total length of second chain to all totals of first chain */ -    p->tot_len += t->tot_len; -  } -  /* { p is last pbuf of first h chain, p->next == NULL } */ -  LWIP_ASSERT("p->tot_len == p->len (of last pbuf in chain)", p->tot_len == p->len); -  LWIP_ASSERT("p->next == NULL", p->next == NULL); -  /* add total length of second chain to last pbuf total of first chain */ -  p->tot_len += t->tot_len; -  /* chain last pbuf of head (p) with first of tail (t) */ -  p->next = t; -  /* p->next now references t, but the caller will drop its reference to t, -   * so netto there is no change to the reference count of t. -   */ -} - -/** - * Chain two pbufs (or pbuf chains) together. - *  - * The caller MUST call pbuf_free(t) once it has stopped - * using it. Use pbuf_cat() instead if you no longer use t. - *  - * @param h head pbuf (chain) - * @param t tail pbuf (chain) - * @note The pbufs MUST belong to the same packet. - * @note MAY NOT be called on a packet queue. - * - * The ->tot_len fields of all pbufs of the head chain are adjusted. - * The ->next field of the last pbuf of the head chain is adjusted. - * The ->ref field of the first pbuf of the tail chain is adjusted. - * - */ -void -pbuf_chain(struct pbuf *h, struct pbuf *t) -{ -  pbuf_cat(h, t); -  /* t is now referenced by h */ -  pbuf_ref(t); -  LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_chain: %p references %p\n", (void *)h, (void *)t)); -} - -/** - * Dechains the first pbuf from its succeeding pbufs in the chain. - * - * Makes p->tot_len field equal to p->len. - * @param p pbuf to dechain - * @return remainder of the pbuf chain, or NULL if it was de-allocated. - * @note May not be called on a packet queue. - */ -struct pbuf * -pbuf_dechain(struct pbuf *p) -{ -  struct pbuf *q; -  u8_t tail_gone = 1; -  /* tail */ -  q = p->next; -  /* pbuf has successor in chain? */ -  if (q != NULL) { -    /* assert tot_len invariant: (p->tot_len == p->len + (p->next? p->next->tot_len: 0) */ -    LWIP_ASSERT("p->tot_len == p->len + q->tot_len", q->tot_len == p->tot_len - p->len); -    /* enforce invariant if assertion is disabled */ -    q->tot_len = p->tot_len - p->len; -    /* decouple pbuf from remainder */ -    p->next = NULL; -    /* total length of pbuf p is its own length only */ -    p->tot_len = p->len; -    /* q is no longer referenced by p, free it */ -    LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_dechain: unreferencing %p\n", (void *)q)); -    tail_gone = pbuf_free(q); -    if (tail_gone > 0) { -      LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, -                  ("pbuf_dechain: deallocated %p (as it is no longer referenced)\n", (void *)q)); -    } -    /* return remaining tail or NULL if deallocated */ -  } -  /* assert tot_len invariant: (p->tot_len == p->len + (p->next? p->next->tot_len: 0) */ -  LWIP_ASSERT("p->tot_len == p->len", p->tot_len == p->len); -  return ((tail_gone > 0) ? NULL : q); -} - -/** - * - * Create PBUF_RAM copies of pbufs. - * - * Used to queue packets on behalf of the lwIP stack, such as - * ARP based queueing. - * - * @note You MUST explicitly use p = pbuf_take(p); - * - * @note Only one packet is copied, no packet queue! - * - * @param p_to pbuf destination of the copy - * @param p_from pbuf source of the copy - * - * @return ERR_OK if pbuf was copied - *         ERR_ARG if one of the pbufs is NULL or p_to is not big - *                 enough to hold p_from - */ -err_t -pbuf_copy(struct pbuf *p_to, struct pbuf *p_from) -{ -  u16_t offset_to=0, offset_from=0, len; - -  LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy(%p, %p)\n", -    (void*)p_to, (void*)p_from)); - -  /* is the target big enough to hold the source? */ -  LWIP_ERROR("pbuf_copy: target not big enough to hold source", ((p_to != NULL) && -             (p_from != NULL) && (p_to->tot_len >= p_from->tot_len)), return ERR_ARG;); - -  /* iterate through pbuf chain */ -  do -  { -    LWIP_ASSERT("p_to != NULL", p_to != NULL); -    /* copy one part of the original chain */ -    if ((p_to->len - offset_to) >= (p_from->len - offset_from)) { -      /* complete current p_from fits into current p_to */ -      len = p_from->len - offset_from; -    } else { -      /* current p_from does not fit into current p_to */ -      len = p_to->len - offset_to; -    } -    MEMCPY((u8_t*)p_to->payload + offset_to, (u8_t*)p_from->payload + offset_from, len); -    offset_to += len; -    offset_from += len; -    LWIP_ASSERT("offset_to <= p_to->len", offset_to <= p_to->len); -    if (offset_to == p_to->len) { -      /* on to next p_to (if any) */ -      offset_to = 0; -      p_to = p_to->next; -    } -    LWIP_ASSERT("offset_from <= p_from->len", offset_from <= p_from->len); -    if (offset_from >= p_from->len) { -      /* on to next p_from (if any) */ -      offset_from = 0; -      p_from = p_from->next; -    } - -    if((p_from != NULL) && (p_from->len == p_from->tot_len)) { -      /* don't copy more than one packet! */ -      LWIP_ERROR("pbuf_copy() does not allow packet queues!\n", -                 (p_from->next == NULL), return ERR_VAL;); -    } -    if((p_to != NULL) && (p_to->len == p_to->tot_len)) { -      /* don't copy more than one packet! */ -      LWIP_ERROR("pbuf_copy() does not allow packet queues!\n", -                  (p_to->next == NULL), return ERR_VAL;); -    } -  } while (p_from); -  LWIP_DEBUGF(PBUF_DEBUG | LWIP_DBG_TRACE, ("pbuf_copy: end of chain reached.\n")); -  return ERR_OK; -} - -/** - * Copy (part of) the contents of a packet buffer - * to an application supplied buffer. - * - * @param buf the pbuf from which to copy data - * @param dataptr the application supplied buffer - * @param len length of data to copy (dataptr must be big enough). No more  - * than buf->tot_len will be copied, irrespective of len - * @param offset offset into the packet buffer from where to begin copying len bytes - * @return the number of bytes copied, or 0 on failure - */ -u16_t -pbuf_copy_partial(struct pbuf *buf, void *dataptr, u16_t len, u16_t offset) -{ -  struct pbuf *p; -  u16_t left; -  u16_t buf_copy_len; -  u16_t copied_total = 0; - -  LWIP_ERROR("pbuf_copy_partial: invalid buf", (buf != NULL), return 0;); -  LWIP_ERROR("pbuf_copy_partial: invalid dataptr", (dataptr != NULL), return 0;); - -  left = 0; - -  if((buf == NULL) || (dataptr == NULL)) { -    return 0; -  } - -  /* Note some systems use byte copy if dataptr or one of the pbuf payload pointers are unaligned. */ -  for(p = buf; len != 0 && p != NULL; p = p->next) { -    if ((offset != 0) && (offset >= p->len)) { -      /* don't copy from this buffer -> on to the next */ -      offset -= p->len; -    } else { -      /* copy from this buffer. maybe only partially. */ -      buf_copy_len = p->len - offset; -      if (buf_copy_len > len) -          buf_copy_len = len; -      /* copy the necessary parts of the buffer */ -      MEMCPY(&((char*)dataptr)[left], &((char*)p->payload)[offset], buf_copy_len); -      copied_total += buf_copy_len; -      left += buf_copy_len; -      len -= buf_copy_len; -      offset = 0; -    } -  } -  return copied_total; -} - -/** - * Copy application supplied data into a pbuf. - * This function can only be used to copy the equivalent of buf->tot_len data. - * - * @param buf pbuf to fill with data - * @param dataptr application supplied data buffer - * @param len length of the application supplied data buffer - * - * @return ERR_OK if successful, ERR_MEM if the pbuf is not big enough - */ -err_t -pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len) -{ -  struct pbuf *p; -  u16_t buf_copy_len; -  u16_t total_copy_len = len; -  u16_t copied_total = 0; - -  LWIP_ERROR("pbuf_take: invalid buf", (buf != NULL), return 0;); -  LWIP_ERROR("pbuf_take: invalid dataptr", (dataptr != NULL), return 0;); - -  if ((buf == NULL) || (dataptr == NULL) || (buf->tot_len < len)) { -    return ERR_ARG; -  } - -  /* Note some systems use byte copy if dataptr or one of the pbuf payload pointers are unaligned. */ -  for(p = buf; total_copy_len != 0; p = p->next) { -    LWIP_ASSERT("pbuf_take: invalid pbuf", p != NULL); -    buf_copy_len = total_copy_len; -    if (buf_copy_len > p->len) { -      /* this pbuf cannot hold all remaining data */ -      buf_copy_len = p->len; -    } -    /* copy the necessary parts of the buffer */ -    MEMCPY(p->payload, &((char*)dataptr)[copied_total], buf_copy_len); -    total_copy_len -= buf_copy_len; -    copied_total += buf_copy_len; -  } -  LWIP_ASSERT("did not copy all data", total_copy_len == 0 && copied_total == len); -  return ERR_OK; -} - -/** - * Creates a single pbuf out of a queue of pbufs. - * - * @remark: The source pbuf 'p' is not freed by this function because that can - *          be illegal in some places! - * - * @param p the source pbuf - * @param layer pbuf_layer of the new pbuf - * - * @return a new, single pbuf (p->next is NULL) - *         or the old pbuf if allocation fails - */ -struct pbuf* -pbuf_coalesce(struct pbuf *p, pbuf_layer layer) -{ -  struct pbuf *q; -  err_t err; -  if (p->next == NULL) { -    return p; -  } -  q = pbuf_alloc(layer, p->tot_len, PBUF_RAM); -  if (q == NULL) { -    /* @todo: what do we do now? */ -    return p; -  } -  err = pbuf_copy(q, p); -  LWIP_ASSERT("pbuf_copy failed", err == ERR_OK); -  pbuf_free(p); -  return q; -} diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/raw.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/raw.c deleted file mode 100644 index 6966bbc..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/raw.c +++ /dev/null @@ -1,355 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * Implementation of raw protocol PCBs for low-level handling of - * different types of protocols besides (or overriding) those - * already available in lwIP. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels <adam@sics.se> - * - */ - -#include "lwip/opt.h" - -#if LWIP_RAW /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/def.h" -#include "lwip/memp.h" -#include "lwip/inet.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/raw.h" -#include "lwip/stats.h" -#include "lwip/snmp.h" -#include "arch/perf.h" - -#include <string.h> - -/** The list of RAW PCBs */ -static struct raw_pcb *raw_pcbs; - -/** - * Determine if in incoming IP packet is covered by a RAW PCB - * and if so, pass it to a user-provided receive callback function. - * - * Given an incoming IP datagram (as a chain of pbufs) this function - * finds a corresponding RAW PCB and calls the corresponding receive - * callback function. - * - * @param p pbuf to be demultiplexed to a RAW PCB. - * @param inp network interface on which the datagram was received. - * @return - 1 if the packet has been eaten by a RAW PCB receive - *           callback function. The caller MAY NOT not reference the - *           packet any longer, and MAY NOT call pbuf_free(). - * @return - 0 if packet is not eaten (pbuf is still referenced by the - *           caller). - * - */ -u8_t -raw_input(struct pbuf *p, struct netif *inp) -{ -  struct raw_pcb *pcb, *prev; -  struct ip_hdr *iphdr; -  s16_t proto; -  u8_t eaten = 0; - -  LWIP_UNUSED_ARG(inp); - -  iphdr = p->payload; -  proto = IPH_PROTO(iphdr); - -  prev = NULL; -  pcb = raw_pcbs; -  /* loop through all raw pcbs until the packet is eaten by one */ -  /* this allows multiple pcbs to match against the packet by design */ -  while ((eaten == 0) && (pcb != NULL)) { -    if (pcb->protocol == proto) { -#if IP_SOF_BROADCAST_RECV -      /* broadcast filter? */ -      if ((pcb->so_options & SOF_BROADCAST) || !ip_addr_isbroadcast(&(iphdr->dest), inp)) -#endif /* IP_SOF_BROADCAST_RECV */ -      { -        /* receive callback function available? */ -        if (pcb->recv != NULL) { -          /* the receive callback function did not eat the packet? */ -          if (pcb->recv(pcb->recv_arg, pcb, p, &(iphdr->src)) != 0) { -            /* receive function ate the packet */ -            p = NULL; -            eaten = 1; -            if (prev != NULL) { -            /* move the pcb to the front of raw_pcbs so that is -               found faster next time */ -              prev->next = pcb->next; -              pcb->next = raw_pcbs; -              raw_pcbs = pcb; -            } -          } -        } -        /* no receive callback function was set for this raw PCB */ -      } -      /* drop the packet */ -    } -    prev = pcb; -    pcb = pcb->next; -  } -  return eaten; -} - -/** - * Bind a RAW PCB. - * - * @param pcb RAW PCB to be bound with a local address ipaddr. - * @param ipaddr local IP address to bind with. Use IP_ADDR_ANY to - * bind to all local interfaces. - * - * @return lwIP error code. - * - ERR_OK. Successful. No error occured. - * - ERR_USE. The specified IP address is already bound to by - * another RAW PCB. - * - * @see raw_disconnect() - */ -err_t -raw_bind(struct raw_pcb *pcb, struct ip_addr *ipaddr) -{ -  ip_addr_set(&pcb->local_ip, ipaddr); -  return ERR_OK; -} - -/** - * Connect an RAW PCB. This function is required by upper layers - * of lwip. Using the raw api you could use raw_sendto() instead - * - * This will associate the RAW PCB with the remote address. - * - * @param pcb RAW PCB to be connected with remote address ipaddr and port. - * @param ipaddr remote IP address to connect with. - * - * @return lwIP error code - * - * @see raw_disconnect() and raw_sendto() - */ -err_t -raw_connect(struct raw_pcb *pcb, struct ip_addr *ipaddr) -{ -  ip_addr_set(&pcb->remote_ip, ipaddr); -  return ERR_OK; -} - - -/** - * Set the callback function for received packets that match the - * raw PCB's protocol and binding.  - *  - * The callback function MUST either - * - eat the packet by calling pbuf_free() and returning non-zero. The - *   packet will not be passed to other raw PCBs or other protocol layers. - * - not free the packet, and return zero. The packet will be matched - *   against further PCBs and/or forwarded to another protocol layers. - *  - * @return non-zero if the packet was free()d, zero if the packet remains - * available for others. - */ -void -raw_recv(struct raw_pcb *pcb, -         u8_t (* recv)(void *arg, struct raw_pcb *upcb, struct pbuf *p, -                      struct ip_addr *addr), -         void *recv_arg) -{ -  /* remember recv() callback and user data */ -  pcb->recv = recv; -  pcb->recv_arg = recv_arg; -} - -/** - * Send the raw IP packet to the given address. Note that actually you cannot - * modify the IP headers (this is inconsistent with the receive callback where - * you actually get the IP headers), you can only specify the IP payload here. - * It requires some more changes in lwIP. (there will be a raw_send() function - * then.) - * - * @param pcb the raw pcb which to send - * @param p the IP payload to send - * @param ipaddr the destination address of the IP packet - * - */ -err_t -raw_sendto(struct raw_pcb *pcb, struct pbuf *p, struct ip_addr *ipaddr) -{ -  err_t err; -  struct netif *netif; -  struct ip_addr *src_ip; -  struct pbuf *q; /* q will be sent down the stack */ -   -  LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE, ("raw_sendto\n")); -   -  /* not enough space to add an IP header to first pbuf in given p chain? */ -  if (pbuf_header(p, IP_HLEN)) { -    /* allocate header in new pbuf */ -    q = pbuf_alloc(PBUF_IP, 0, PBUF_RAM); -    /* new header pbuf could not be allocated? */ -    if (q == NULL) { -      LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("raw_sendto: could not allocate header\n")); -      return ERR_MEM; -    } -    /* chain header q in front of given pbuf p */ -    pbuf_chain(q, p); -    /* { first pbuf q points to header pbuf } */ -    LWIP_DEBUGF(RAW_DEBUG, ("raw_sendto: added header pbuf %p before given pbuf %p\n", (void *)q, (void *)p)); -  }  else { -    /* first pbuf q equals given pbuf */ -    q = p; -    if(pbuf_header(q, -IP_HLEN)) { -      LWIP_ASSERT("Can't restore header we just removed!", 0); -      return ERR_MEM; -    } -  } - -  if ((netif = ip_route(ipaddr)) == NULL) { -    LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_LEVEL_WARNING, ("raw_sendto: No route to 0x%"X32_F"\n", ipaddr->addr)); -    /* free any temporary header pbuf allocated by pbuf_header() */ -    if (q != p) { -      pbuf_free(q); -    } -    return ERR_RTE; -  } - -#if IP_SOF_BROADCAST -  /* broadcast filter? */ -  if ( ((pcb->so_options & SOF_BROADCAST) == 0) && ip_addr_isbroadcast(ipaddr, netif) ) { -    LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_LEVEL_WARNING, ("raw_sendto: SOF_BROADCAST not enabled on pcb %p\n", (void *)pcb)); -    /* free any temporary header pbuf allocated by pbuf_header() */ -    if (q != p) { -      pbuf_free(q); -    } -    return ERR_VAL; -  } -#endif /* IP_SOF_BROADCAST */ - -  if (ip_addr_isany(&pcb->local_ip)) { -    /* use outgoing network interface IP address as source address */ -    src_ip = &(netif->ip_addr); -  } else { -    /* use RAW PCB local IP address as source address */ -    src_ip = &(pcb->local_ip); -  } - -#if LWIP_NETIF_HWADDRHINT -  netif->addr_hint = &(pcb->addr_hint); -#endif /* LWIP_NETIF_HWADDRHINT*/ -  err = ip_output_if (q, src_ip, ipaddr, pcb->ttl, pcb->tos, pcb->protocol, netif); -#if LWIP_NETIF_HWADDRHINT -  netif->addr_hint = NULL; -#endif /* LWIP_NETIF_HWADDRHINT*/ - -  /* did we chain a header earlier? */ -  if (q != p) { -    /* free the header */ -    pbuf_free(q); -  } -  return err; -} - -/** - * Send the raw IP packet to the address given by raw_connect() - * - * @param pcb the raw pcb which to send - * @param p the IP payload to send - * - */ -err_t -raw_send(struct raw_pcb *pcb, struct pbuf *p) -{ -  return raw_sendto(pcb, p, &pcb->remote_ip); -} - -/** - * Remove an RAW PCB. - * - * @param pcb RAW PCB to be removed. The PCB is removed from the list of - * RAW PCB's and the data structure is freed from memory. - * - * @see raw_new() - */ -void -raw_remove(struct raw_pcb *pcb) -{ -  struct raw_pcb *pcb2; -  /* pcb to be removed is first in list? */ -  if (raw_pcbs == pcb) { -    /* make list start at 2nd pcb */ -    raw_pcbs = raw_pcbs->next; -    /* pcb not 1st in list */ -  } else { -    for(pcb2 = raw_pcbs; pcb2 != NULL; pcb2 = pcb2->next) { -      /* find pcb in raw_pcbs list */ -      if (pcb2->next != NULL && pcb2->next == pcb) { -        /* remove pcb from list */ -        pcb2->next = pcb->next; -      } -    } -  } -  memp_free(MEMP_RAW_PCB, pcb); -} - -/** - * Create a RAW PCB. - * - * @return The RAW PCB which was created. NULL if the PCB data structure - * could not be allocated. - * - * @param proto the protocol number of the IPs payload (e.g. IP_PROTO_ICMP) - * - * @see raw_remove() - */ -struct raw_pcb * -raw_new(u8_t proto) { -  struct raw_pcb *pcb; - -  LWIP_DEBUGF(RAW_DEBUG | LWIP_DBG_TRACE, ("raw_new\n")); - -  pcb = memp_malloc(MEMP_RAW_PCB); -  /* could allocate RAW PCB? */ -  if (pcb != NULL) { -    /* initialize PCB to all zeroes */ -    memset(pcb, 0, sizeof(struct raw_pcb)); -    pcb->protocol = proto; -    pcb->ttl = RAW_TTL; -    pcb->next = raw_pcbs; -    raw_pcbs = pcb; -  } -  return pcb; -} - -#endif /* LWIP_RAW */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/stats.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/stats.c deleted file mode 100644 index 4299a94..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/stats.c +++ /dev/null @@ -1,151 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * Statistics module - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ - -#include "lwip/opt.h" - -#if LWIP_STATS /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/def.h" -#include "lwip/stats.h" -#include "lwip/mem.h" - -#include <string.h> - -struct stats_ lwip_stats; - -#if LWIP_STATS_DISPLAY -void -stats_display_proto(struct stats_proto *proto, char *name) -{ -  LWIP_PLATFORM_DIAG(("\n%s\n\t", name)); -  LWIP_PLATFORM_DIAG(("xmit: %"STAT_COUNTER_F"\n\t", proto->xmit));  -  LWIP_PLATFORM_DIAG(("recv: %"STAT_COUNTER_F"\n\t", proto->recv));  -  LWIP_PLATFORM_DIAG(("fw: %"STAT_COUNTER_F"\n\t", proto->fw));  -  LWIP_PLATFORM_DIAG(("drop: %"STAT_COUNTER_F"\n\t", proto->drop));  -  LWIP_PLATFORM_DIAG(("chkerr: %"STAT_COUNTER_F"\n\t", proto->chkerr));  -  LWIP_PLATFORM_DIAG(("lenerr: %"STAT_COUNTER_F"\n\t", proto->lenerr));  -  LWIP_PLATFORM_DIAG(("memerr: %"STAT_COUNTER_F"\n\t", proto->memerr));  -  LWIP_PLATFORM_DIAG(("rterr: %"STAT_COUNTER_F"\n\t", proto->rterr));  -  LWIP_PLATFORM_DIAG(("proterr: %"STAT_COUNTER_F"\n\t", proto->proterr));  -  LWIP_PLATFORM_DIAG(("opterr: %"STAT_COUNTER_F"\n\t", proto->opterr));  -  LWIP_PLATFORM_DIAG(("err: %"STAT_COUNTER_F"\n\t", proto->err));  -  LWIP_PLATFORM_DIAG(("cachehit: %"STAT_COUNTER_F"\n", proto->cachehit));  -} - -#if IGMP_STATS -void -stats_display_igmp(struct stats_igmp *igmp) -{ -  LWIP_PLATFORM_DIAG(("\nIGMP\n\t")); -  LWIP_PLATFORM_DIAG(("lenerr: %"STAT_COUNTER_F"\n\t", igmp->lenerr));  -  LWIP_PLATFORM_DIAG(("chkerr: %"STAT_COUNTER_F"\n\t", igmp->chkerr));  -  LWIP_PLATFORM_DIAG(("v1_rxed: %"STAT_COUNTER_F"\n\t", igmp->v1_rxed));  -  LWIP_PLATFORM_DIAG(("join_sent: %"STAT_COUNTER_F"\n\t", igmp->join_sent));  -  LWIP_PLATFORM_DIAG(("leave_sent: %"STAT_COUNTER_F"\n\t", igmp->leave_sent));  -  LWIP_PLATFORM_DIAG(("unicast_query: %"STAT_COUNTER_F"\n\t", igmp->unicast_query));  -  LWIP_PLATFORM_DIAG(("report_sent: %"STAT_COUNTER_F"\n\t", igmp->report_sent));  -  LWIP_PLATFORM_DIAG(("report_rxed: %"STAT_COUNTER_F"\n\t", igmp->report_rxed));  -  LWIP_PLATFORM_DIAG(("group_query_rxed: %"STAT_COUNTER_F"\n", igmp->group_query_rxed)); -} -#endif /* IGMP_STATS */ - -#if MEM_STATS || MEMP_STATS -void -stats_display_mem(struct stats_mem *mem, char *name) -{ -  LWIP_PLATFORM_DIAG(("\nMEM %s\n\t", name)); -  LWIP_PLATFORM_DIAG(("avail: %"U32_F"\n\t", (u32_t)mem->avail));  -  LWIP_PLATFORM_DIAG(("used: %"U32_F"\n\t", (u32_t)mem->used));  -  LWIP_PLATFORM_DIAG(("max: %"U32_F"\n\t", (u32_t)mem->max));  -  LWIP_PLATFORM_DIAG(("err: %"U32_F"\n", (u32_t)mem->err)); -} - -#if MEMP_STATS -void -stats_display_memp(struct stats_mem *mem, int index) -{ -  char * memp_names[] = { -#define LWIP_MEMPOOL(name,num,size,desc) desc, -#include "lwip/memp_std.h" -  }; -  if(index < MEMP_MAX) { -    stats_display_mem(mem, memp_names[index]); -  } -} -#endif /* MEMP_STATS */ -#endif /* MEM_STATS || MEMP_STATS */ - -#if SYS_STATS -void -stats_display_sys(struct stats_sys *sys) -{ -  LWIP_PLATFORM_DIAG(("\nSYS\n\t")); -  LWIP_PLATFORM_DIAG(("sem.used: %"U32_F"\n\t", (u32_t)sys->sem.used));  -  LWIP_PLATFORM_DIAG(("sem.max:  %"U32_F"\n\t", (u32_t)sys->sem.max));  -  LWIP_PLATFORM_DIAG(("sem.err:  %"U32_F"\n\t", (u32_t)sys->sem.err));  -  LWIP_PLATFORM_DIAG(("mbox.used: %"U32_F"\n\t", (u32_t)sys->mbox.used));  -  LWIP_PLATFORM_DIAG(("mbox.max:  %"U32_F"\n\t", (u32_t)sys->mbox.max));  -  LWIP_PLATFORM_DIAG(("mbox.err:  %"U32_F"\n\t", (u32_t)sys->mbox.err));  -} -#endif /* SYS_STATS */ - -void -stats_display(void) -{ -  s16_t i; - -  LINK_STATS_DISPLAY(); -  ETHARP_STATS_DISPLAY(); -  IPFRAG_STATS_DISPLAY(); -  IP_STATS_DISPLAY(); -  IGMP_STATS_DISPLAY(); -  ICMP_STATS_DISPLAY(); -  UDP_STATS_DISPLAY(); -  TCP_STATS_DISPLAY(); -  MEM_STATS_DISPLAY(); -  for (i = 0; i < MEMP_MAX; i++) { -    MEMP_STATS_DISPLAY(i); -  } -  SYS_STATS_DISPLAY(); -} -#endif /* LWIP_STATS_DISPLAY */ - -#endif /* LWIP_STATS */ - diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp.c deleted file mode 100644 index c588d21..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp.c +++ /dev/null @@ -1,1463 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * Transmission Control Protocol for IP - * - * This file contains common functions for the TCP implementation, such as functinos - * for manipulating the data structures and the TCP timer functions. TCP functions - * related to input and output is found in tcp_in.c and tcp_out.c respectively. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ - -#include "lwip/opt.h" - -#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/memp.h" -#include "lwip/snmp.h" -#include "lwip/tcp.h" -#include "lwip/debug.h" -#include "lwip/stats.h" - -#include <string.h> - -const char *tcp_state_str[] = { -  "CLOSED",       -  "LISTEN",       -  "SYN_SENT",     -  "SYN_RCVD",     -  "ESTABLISHED",  -  "FIN_WAIT_1",   -  "FIN_WAIT_2",   -  "CLOSE_WAIT",   -  "CLOSING",      -  "LAST_ACK",     -  "TIME_WAIT"    -}; - -/* Incremented every coarse grained timer shot (typically every 500 ms). */ -u32_t tcp_ticks; -const u8_t tcp_backoff[13] = -    { 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 7, 7, 7}; - /* Times per slowtmr hits */ -const u8_t tcp_persist_backoff[7] = { 3, 6, 12, 24, 48, 96, 120 }; - -/* The TCP PCB lists. */ - -/** List of all TCP PCBs bound but not yet (connected || listening) */ -struct tcp_pcb *tcp_bound_pcbs;   -/** List of all TCP PCBs in LISTEN state */ -union tcp_listen_pcbs_t tcp_listen_pcbs; -/** List of all TCP PCBs that are in a state in which - * they accept or send data. */ -struct tcp_pcb *tcp_active_pcbs;   -/** List of all TCP PCBs in TIME-WAIT state */ -struct tcp_pcb *tcp_tw_pcbs; - -struct tcp_pcb *tcp_tmp_pcb; - -static u8_t tcp_timer; -static u16_t tcp_new_port(void); - -/** - * Called periodically to dispatch TCP timers. - * - */ -void -tcp_tmr(void) -{ -  /* Call tcp_fasttmr() every 250 ms */ -  tcp_fasttmr(); - -  if (++tcp_timer & 1) { -    /* Call tcp_tmr() every 500 ms, i.e., every other timer -       tcp_tmr() is called. */ -    tcp_slowtmr(); -  } -} - -/** - * Closes the connection held by the PCB. - * - * Listening pcbs are freed and may not be referenced any more. - * Connection pcbs are freed if not yet connected and may not be referenced - * any more. If a connection is established (at least SYN received or in - * a closing state), the connection is closed, and put in a closing state. - * The pcb is then automatically freed in tcp_slowtmr(). It is therefore - * unsafe to reference it. - * - * @param pcb the tcp_pcb to close - * @return ERR_OK if connection has been closed - *         another err_t if closing failed and pcb is not freed - */ -err_t -tcp_close(struct tcp_pcb *pcb) -{ -  err_t err; - -#if TCP_DEBUG -  LWIP_DEBUGF(TCP_DEBUG, ("tcp_close: closing in ")); -  tcp_debug_print_state(pcb->state); -#endif /* TCP_DEBUG */ - -  switch (pcb->state) { -  case CLOSED: -    /* Closing a pcb in the CLOSED state might seem erroneous, -     * however, it is in this state once allocated and as yet unused -     * and the user needs some way to free it should the need arise. -     * Calling tcp_close() with a pcb that has already been closed, (i.e. twice) -     * or for a pcb that has been used and then entered the CLOSED state  -     * is erroneous, but this should never happen as the pcb has in those cases -     * been freed, and so any remaining handles are bogus. */ -    err = ERR_OK; -    TCP_RMV(&tcp_bound_pcbs, pcb); -    memp_free(MEMP_TCP_PCB, pcb); -    pcb = NULL; -    break; -  case LISTEN: -    err = ERR_OK; -    tcp_pcb_remove((struct tcp_pcb **)&tcp_listen_pcbs.pcbs, pcb); -    memp_free(MEMP_TCP_PCB_LISTEN, pcb); -    pcb = NULL; -    break; -  case SYN_SENT: -    err = ERR_OK; -    tcp_pcb_remove(&tcp_active_pcbs, pcb); -    memp_free(MEMP_TCP_PCB, pcb); -    pcb = NULL; -    snmp_inc_tcpattemptfails(); -    break; -  case SYN_RCVD: -    err = tcp_send_ctrl(pcb, TCP_FIN); -    if (err == ERR_OK) { -      snmp_inc_tcpattemptfails(); -      pcb->state = FIN_WAIT_1; -    } -    break; -  case ESTABLISHED: -    err = tcp_send_ctrl(pcb, TCP_FIN); -    if (err == ERR_OK) { -      snmp_inc_tcpestabresets(); -      pcb->state = FIN_WAIT_1; -    } -    break; -  case CLOSE_WAIT: -    err = tcp_send_ctrl(pcb, TCP_FIN); -    if (err == ERR_OK) { -      snmp_inc_tcpestabresets(); -      pcb->state = LAST_ACK; -    } -    break; -  default: -    /* Has already been closed, do nothing. */ -    err = ERR_OK; -    pcb = NULL; -    break; -  } - -  if (pcb != NULL && err == ERR_OK) { -    /* To ensure all data has been sent when tcp_close returns, we have -       to make sure tcp_output doesn't fail. -       Since we don't really have to ensure all data has been sent when tcp_close -       returns (unsent data is sent from tcp timer functions, also), we don't care -       for the return value of tcp_output for now. */ -    /* @todo: When implementing SO_LINGER, this must be changed somehow: -       If SOF_LINGER is set, the data should be sent when tcp_close returns. */ -    tcp_output(pcb); -  } -  return err; -} - -/** - * Abandons a connection and optionally sends a RST to the remote - * host.  Deletes the local protocol control block. This is done when - * a connection is killed because of shortage of memory. - * - * @param pcb the tcp_pcb to abort - * @param reset boolean to indicate whether a reset should be sent - */ -void -tcp_abandon(struct tcp_pcb *pcb, int reset) -{ -  u32_t seqno, ackno; -  u16_t remote_port, local_port; -  struct ip_addr remote_ip, local_ip; -#if LWIP_CALLBACK_API   -  void (* errf)(void *arg, err_t err); -#endif /* LWIP_CALLBACK_API */ -  void *errf_arg; - -   -  /* Figure out on which TCP PCB list we are, and remove us. If we -     are in an active state, call the receive function associated with -     the PCB with a NULL argument, and send an RST to the remote end. */ -  if (pcb->state == TIME_WAIT) { -    tcp_pcb_remove(&tcp_tw_pcbs, pcb); -    memp_free(MEMP_TCP_PCB, pcb); -  } else { -    seqno = pcb->snd_nxt; -    ackno = pcb->rcv_nxt; -    ip_addr_set(&local_ip, &(pcb->local_ip)); -    ip_addr_set(&remote_ip, &(pcb->remote_ip)); -    local_port = pcb->local_port; -    remote_port = pcb->remote_port; -#if LWIP_CALLBACK_API -    errf = pcb->errf; -#endif /* LWIP_CALLBACK_API */ -    errf_arg = pcb->callback_arg; -    tcp_pcb_remove(&tcp_active_pcbs, pcb); -    if (pcb->unacked != NULL) { -      tcp_segs_free(pcb->unacked); -    } -    if (pcb->unsent != NULL) { -      tcp_segs_free(pcb->unsent); -    } -#if TCP_QUEUE_OOSEQ     -    if (pcb->ooseq != NULL) { -      tcp_segs_free(pcb->ooseq); -    } -#endif /* TCP_QUEUE_OOSEQ */ -    memp_free(MEMP_TCP_PCB, pcb); -    TCP_EVENT_ERR(errf, errf_arg, ERR_ABRT); -    if (reset) { -      LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_abandon: sending RST\n")); -      tcp_rst(seqno, ackno, &local_ip, &remote_ip, local_port, remote_port); -    } -  } -} - -/** - * Binds the connection to a local portnumber and IP address. If the - * IP address is not given (i.e., ipaddr == NULL), the IP address of - * the outgoing network interface is used instead. - * - * @param pcb the tcp_pcb to bind (no check is done whether this pcb is - *        already bound!) - * @param ipaddr the local ip address to bind to (use IP_ADDR_ANY to bind - *        to any local address - * @param port the local port to bind to - * @return ERR_USE if the port is already in use - *         ERR_OK if bound - */ -err_t -tcp_bind(struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) -{ -  struct tcp_pcb *cpcb; - -  LWIP_ERROR("tcp_bind: can only bind in state CLOSED", pcb->state == CLOSED, return ERR_ISCONN); - -  if (port == 0) { -    port = tcp_new_port(); -  } -  /* Check if the address already is in use. */ -  /* Check the listen pcbs. */ -  for(cpcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; -      cpcb != NULL; cpcb = cpcb->next) { -    if (cpcb->local_port == port) { -      if (ip_addr_isany(&(cpcb->local_ip)) || -          ip_addr_isany(ipaddr) || -          ip_addr_cmp(&(cpcb->local_ip), ipaddr)) { -        return ERR_USE; -      } -    } -  } -  /* Check the connected pcbs. */ -  for(cpcb = tcp_active_pcbs; -      cpcb != NULL; cpcb = cpcb->next) { -    if (cpcb->local_port == port) { -      if (ip_addr_isany(&(cpcb->local_ip)) || -          ip_addr_isany(ipaddr) || -          ip_addr_cmp(&(cpcb->local_ip), ipaddr)) { -        return ERR_USE; -      } -    } -  } -  /* Check the bound, not yet connected pcbs. */ -  for(cpcb = tcp_bound_pcbs; cpcb != NULL; cpcb = cpcb->next) { -    if (cpcb->local_port == port) { -      if (ip_addr_isany(&(cpcb->local_ip)) || -          ip_addr_isany(ipaddr) || -          ip_addr_cmp(&(cpcb->local_ip), ipaddr)) { -        return ERR_USE; -      } -    } -  } -  /* @todo: until SO_REUSEADDR is implemented (see task #6995 on savannah), -   * we have to check the pcbs in TIME-WAIT state, also: */ -  for(cpcb = tcp_tw_pcbs; cpcb != NULL; cpcb = cpcb->next) { -    if (cpcb->local_port == port) { -      if (ip_addr_cmp(&(cpcb->local_ip), ipaddr)) { -        return ERR_USE; -      } -    } -  } - -  if (!ip_addr_isany(ipaddr)) { -    pcb->local_ip = *ipaddr; -  } -  pcb->local_port = port; -  TCP_REG(&tcp_bound_pcbs, pcb); -  LWIP_DEBUGF(TCP_DEBUG, ("tcp_bind: bind to port %"U16_F"\n", port)); -  return ERR_OK; -} -#if LWIP_CALLBACK_API -/** - * Default accept callback if no accept callback is specified by the user. - */ -static err_t -tcp_accept_null(void *arg, struct tcp_pcb *pcb, err_t err) -{ -  LWIP_UNUSED_ARG(arg); -  LWIP_UNUSED_ARG(pcb); -  LWIP_UNUSED_ARG(err); - -  return ERR_ABRT; -} -#endif /* LWIP_CALLBACK_API */ - -/** - * Set the state of the connection to be LISTEN, which means that it - * is able to accept incoming connections. The protocol control block - * is reallocated in order to consume less memory. Setting the - * connection to LISTEN is an irreversible process. - * - * @param pcb the original tcp_pcb - * @param backlog the incoming connections queue limit - * @return tcp_pcb used for listening, consumes less memory. - * - * @note The original tcp_pcb is freed. This function therefore has to be - *       called like this: - *             tpcb = tcp_listen(tpcb); - */ -struct tcp_pcb * -tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog) -{ -  struct tcp_pcb_listen *lpcb; - -  LWIP_UNUSED_ARG(backlog); -  LWIP_ERROR("tcp_listen: pcb already connected", pcb->state == CLOSED, return NULL); - -  /* already listening? */ -  if (pcb->state == LISTEN) { -    return pcb; -  } -  lpcb = memp_malloc(MEMP_TCP_PCB_LISTEN); -  if (lpcb == NULL) { -    return NULL; -  } -  lpcb->callback_arg = pcb->callback_arg; -  lpcb->local_port = pcb->local_port; -  lpcb->state = LISTEN; -  lpcb->so_options = pcb->so_options; -  lpcb->so_options |= SOF_ACCEPTCONN; -  lpcb->ttl = pcb->ttl; -  lpcb->tos = pcb->tos; -  ip_addr_set(&lpcb->local_ip, &pcb->local_ip); -  TCP_RMV(&tcp_bound_pcbs, pcb); -  memp_free(MEMP_TCP_PCB, pcb); -#if LWIP_CALLBACK_API -  lpcb->accept = tcp_accept_null; -#endif /* LWIP_CALLBACK_API */ -#if TCP_LISTEN_BACKLOG -  lpcb->accepts_pending = 0; -  lpcb->backlog = (backlog ? backlog : 1); -#endif /* TCP_LISTEN_BACKLOG */ -  TCP_REG(&tcp_listen_pcbs.listen_pcbs, lpcb); -  return (struct tcp_pcb *)lpcb; -} - -/**  - * Update the state that tracks the available window space to advertise. - * - * Returns how much extra window would be advertised if we sent an - * update now. - */ -u32_t tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb) -{ -  u32_t new_right_edge = pcb->rcv_nxt + pcb->rcv_wnd; - -  if (TCP_SEQ_GEQ(new_right_edge, pcb->rcv_ann_right_edge + LWIP_MIN((TCP_WND / 2), pcb->mss))) { -    /* we can advertise more window */ -    pcb->rcv_ann_wnd = pcb->rcv_wnd; -    return new_right_edge - pcb->rcv_ann_right_edge; -  } else { -    if (TCP_SEQ_GT(pcb->rcv_nxt, pcb->rcv_ann_right_edge)) { -      /* Can happen due to other end sending out of advertised window, -       * but within actual available (but not yet advertised) window */ -      pcb->rcv_ann_wnd = 0; -    } else { -      /* keep the right edge of window constant */ -      pcb->rcv_ann_wnd = pcb->rcv_ann_right_edge - pcb->rcv_nxt; -    } -    return 0; -  } -} - -/** - * This function should be called by the application when it has - * processed the data. The purpose is to advertise a larger window - * when the data has been processed. - * - * @param pcb the tcp_pcb for which data is read - * @param len the amount of bytes that have been read by the application - */ -void -tcp_recved(struct tcp_pcb *pcb, u16_t len) -{ -  int wnd_inflation; - -  LWIP_ASSERT("tcp_recved: len would wrap rcv_wnd\n", -              len <= 0xffff - pcb->rcv_wnd ); - -  pcb->rcv_wnd += len; -  if (pcb->rcv_wnd > TCP_WND) -    pcb->rcv_wnd = TCP_WND; - -  wnd_inflation = tcp_update_rcv_ann_wnd(pcb); - -  /* If the change in the right edge of window is significant (default -   * watermark is TCP_WND/2), then send an explicit update now. -   * Otherwise wait for a packet to be sent in the normal course of -   * events (or more window to be available later) */ -  if (wnd_inflation >= TCP_WND_UPDATE_THRESHOLD)  -    tcp_ack_now(pcb); - -  LWIP_DEBUGF(TCP_DEBUG, ("tcp_recved: recveived %"U16_F" bytes, wnd %"U16_F" (%"U16_F").\n", -         len, pcb->rcv_wnd, TCP_WND - pcb->rcv_wnd)); -} - -/** - * A nastly hack featuring 'goto' statements that allocates a - * new TCP local port. - * - * @return a new (free) local TCP port number - */ -static u16_t -tcp_new_port(void) -{ -  struct tcp_pcb *pcb; -#ifndef TCP_LOCAL_PORT_RANGE_START -#define TCP_LOCAL_PORT_RANGE_START 4096 -#define TCP_LOCAL_PORT_RANGE_END   0x7fff -#endif -  static u16_t port = TCP_LOCAL_PORT_RANGE_START; -   - again: -  if (++port > TCP_LOCAL_PORT_RANGE_END) { -    port = TCP_LOCAL_PORT_RANGE_START; -  } -   -  for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { -    if (pcb->local_port == port) { -      goto again; -    } -  } -  for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { -    if (pcb->local_port == port) { -      goto again; -    } -  } -  for(pcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; pcb != NULL; pcb = pcb->next) { -    if (pcb->local_port == port) { -      goto again; -    } -  } -  return port; -} - -/** - * Connects to another host. The function given as the "connected" - * argument will be called when the connection has been established. - * - * @param pcb the tcp_pcb used to establish the connection - * @param ipaddr the remote ip address to connect to - * @param port the remote tcp port to connect to - * @param connected callback function to call when connected (or on error) - * @return ERR_VAL if invalid arguments are given - *         ERR_OK if connect request has been sent - *         other err_t values if connect request couldn't be sent - */ -err_t -tcp_connect(struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port, -      err_t (* connected)(void *arg, struct tcp_pcb *tpcb, err_t err)) -{ -  err_t ret; -  u32_t iss; - -  LWIP_ERROR("tcp_connect: can only connected from state CLOSED", pcb->state == CLOSED, return ERR_ISCONN); - -  LWIP_DEBUGF(TCP_DEBUG, ("tcp_connect to port %"U16_F"\n", port)); -  if (ipaddr != NULL) { -    pcb->remote_ip = *ipaddr; -  } else { -    return ERR_VAL; -  } -  pcb->remote_port = port; -  if (pcb->local_port == 0) { -    pcb->local_port = tcp_new_port(); -  } -  iss = tcp_next_iss(); -  pcb->rcv_nxt = 0; -  pcb->snd_nxt = iss; -  pcb->lastack = iss - 1; -  pcb->snd_lbb = iss - 1; -  pcb->rcv_wnd = TCP_WND; -  pcb->rcv_ann_wnd = TCP_WND; -  pcb->rcv_ann_right_edge = pcb->rcv_nxt; -  pcb->snd_wnd = TCP_WND; -  /* As initial send MSS, we use TCP_MSS but limit it to 536. -     The send MSS is updated when an MSS option is received. */ -  pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS; -#if TCP_CALCULATE_EFF_SEND_MSS -  pcb->mss = tcp_eff_send_mss(pcb->mss, ipaddr); -#endif /* TCP_CALCULATE_EFF_SEND_MSS */ -  pcb->cwnd = 1; -  pcb->ssthresh = pcb->mss * 10; -  pcb->state = SYN_SENT; -#if LWIP_CALLBACK_API   -  pcb->connected = connected; -#endif /* LWIP_CALLBACK_API */ -  TCP_RMV(&tcp_bound_pcbs, pcb); -  TCP_REG(&tcp_active_pcbs, pcb); - -  snmp_inc_tcpactiveopens(); -   -  ret = tcp_enqueue(pcb, NULL, 0, TCP_SYN, 0, TF_SEG_OPTS_MSS -#if LWIP_TCP_TIMESTAMPS -                    | TF_SEG_OPTS_TS -#endif -                    ); -  if (ret == ERR_OK) {  -    tcp_output(pcb); -  } -  return ret; -}  - -/** - * Called every 500 ms and implements the retransmission timer and the timer that - * removes PCBs that have been in TIME-WAIT for enough time. It also increments - * various timers such as the inactivity timer in each PCB. - * - * Automatically called from tcp_tmr(). - */ -void -tcp_slowtmr(void) -{ -  struct tcp_pcb *pcb, *pcb2, *prev; -  u16_t eff_wnd; -  u8_t pcb_remove;      /* flag if a PCB should be removed */ -  u8_t pcb_reset;       /* flag if a RST should be sent when removing */ -  err_t err; - -  err = ERR_OK; - -  ++tcp_ticks; - -  /* Steps through all of the active PCBs. */ -  prev = NULL; -  pcb = tcp_active_pcbs; -  if (pcb == NULL) { -    LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: no active pcbs\n")); -  } -  while (pcb != NULL) { -    LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: processing active pcb\n")); -    LWIP_ASSERT("tcp_slowtmr: active pcb->state != CLOSED\n", pcb->state != CLOSED); -    LWIP_ASSERT("tcp_slowtmr: active pcb->state != LISTEN\n", pcb->state != LISTEN); -    LWIP_ASSERT("tcp_slowtmr: active pcb->state != TIME-WAIT\n", pcb->state != TIME_WAIT); - -    pcb_remove = 0; -    pcb_reset = 0; - -    if (pcb->state == SYN_SENT && pcb->nrtx == TCP_SYNMAXRTX) { -      ++pcb_remove; -      LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max SYN retries reached\n")); -    } -    else if (pcb->nrtx == TCP_MAXRTX) { -      ++pcb_remove; -      LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: max DATA retries reached\n")); -    } else { -      if (pcb->persist_backoff > 0) { -        /* If snd_wnd is zero, use persist timer to send 1 byte probes -         * instead of using the standard retransmission mechanism. */ -        pcb->persist_cnt++; -        if (pcb->persist_cnt >= tcp_persist_backoff[pcb->persist_backoff-1]) { -          pcb->persist_cnt = 0; -          if (pcb->persist_backoff < sizeof(tcp_persist_backoff)) { -            pcb->persist_backoff++; -          } -          tcp_zero_window_probe(pcb); -        } -      } else { -        /* Increase the retransmission timer if it is running */ -        if(pcb->rtime >= 0) -          ++pcb->rtime; - -        if (pcb->unacked != NULL && pcb->rtime >= pcb->rto) { -          /* Time for a retransmission. */ -          LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_slowtmr: rtime %"S16_F -                                      " pcb->rto %"S16_F"\n", -                                      pcb->rtime, pcb->rto)); - -          /* Double retransmission time-out unless we are trying to -           * connect to somebody (i.e., we are in SYN_SENT). */ -          if (pcb->state != SYN_SENT) { -            pcb->rto = ((pcb->sa >> 3) + pcb->sv) << tcp_backoff[pcb->nrtx]; -          } - -          /* Reset the retransmission timer. */ -          pcb->rtime = 0; - -          /* Reduce congestion window and ssthresh. */ -          eff_wnd = LWIP_MIN(pcb->cwnd, pcb->snd_wnd); -          pcb->ssthresh = eff_wnd >> 1; -          if (pcb->ssthresh < pcb->mss) { -            pcb->ssthresh = pcb->mss * 2; -          } -          pcb->cwnd = pcb->mss; -          LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_slowtmr: cwnd %"U16_F -                                       " ssthresh %"U16_F"\n", -                                       pcb->cwnd, pcb->ssthresh)); -  -          /* The following needs to be called AFTER cwnd is set to one -             mss - STJ */ -          tcp_rexmit_rto(pcb); -        } -      } -    } -    /* Check if this PCB has stayed too long in FIN-WAIT-2 */ -    if (pcb->state == FIN_WAIT_2) { -      if ((u32_t)(tcp_ticks - pcb->tmr) > -          TCP_FIN_WAIT_TIMEOUT / TCP_SLOW_INTERVAL) { -        ++pcb_remove; -        LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in FIN-WAIT-2\n")); -      } -    } - -    /* Check if KEEPALIVE should be sent */ -    if((pcb->so_options & SOF_KEEPALIVE) &&  -       ((pcb->state == ESTABLISHED) ||  -        (pcb->state == CLOSE_WAIT))) { -#if LWIP_TCP_KEEPALIVE -      if((u32_t)(tcp_ticks - pcb->tmr) >  -         (pcb->keep_idle + (pcb->keep_cnt*pcb->keep_intvl)) -         / TCP_SLOW_INTERVAL) -#else       -      if((u32_t)(tcp_ticks - pcb->tmr) >  -         (pcb->keep_idle + TCP_MAXIDLE) / TCP_SLOW_INTERVAL) -#endif /* LWIP_TCP_KEEPALIVE */ -      { -        LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: KEEPALIVE timeout. Aborting connection to %"U16_F".%"U16_F".%"U16_F".%"U16_F".\n", -                                ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip), -                                ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip))); -         -        ++pcb_remove; -        ++pcb_reset; -      } -#if LWIP_TCP_KEEPALIVE -      else if((u32_t)(tcp_ticks - pcb->tmr) >  -              (pcb->keep_idle + pcb->keep_cnt_sent * pcb->keep_intvl) -              / TCP_SLOW_INTERVAL) -#else -      else if((u32_t)(tcp_ticks - pcb->tmr) >  -              (pcb->keep_idle + pcb->keep_cnt_sent * TCP_KEEPINTVL_DEFAULT)  -              / TCP_SLOW_INTERVAL) -#endif /* LWIP_TCP_KEEPALIVE */ -      { -        tcp_keepalive(pcb); -        pcb->keep_cnt_sent++; -      } -    } - -    /* If this PCB has queued out of sequence data, but has been -       inactive for too long, will drop the data (it will eventually -       be retransmitted). */ -#if TCP_QUEUE_OOSEQ     -    if (pcb->ooseq != NULL && -        (u32_t)tcp_ticks - pcb->tmr >= pcb->rto * TCP_OOSEQ_TIMEOUT) { -      tcp_segs_free(pcb->ooseq); -      pcb->ooseq = NULL; -      LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_slowtmr: dropping OOSEQ queued data\n")); -    } -#endif /* TCP_QUEUE_OOSEQ */ - -    /* Check if this PCB has stayed too long in SYN-RCVD */ -    if (pcb->state == SYN_RCVD) { -      if ((u32_t)(tcp_ticks - pcb->tmr) > -          TCP_SYN_RCVD_TIMEOUT / TCP_SLOW_INTERVAL) { -        ++pcb_remove; -        LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in SYN-RCVD\n")); -      } -    } - -    /* Check if this PCB has stayed too long in LAST-ACK */ -    if (pcb->state == LAST_ACK) { -      if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { -        ++pcb_remove; -        LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: removing pcb stuck in LAST-ACK\n")); -      } -    } - -    /* If the PCB should be removed, do it. */ -    if (pcb_remove) { -      tcp_pcb_purge(pcb);       -      /* Remove PCB from tcp_active_pcbs list. */ -      if (prev != NULL) { -        LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_active_pcbs", pcb != tcp_active_pcbs); -        prev->next = pcb->next; -      } else { -        /* This PCB was the first. */ -        LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_active_pcbs", tcp_active_pcbs == pcb); -        tcp_active_pcbs = pcb->next; -      } - -      TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_ABRT); -      if (pcb_reset) { -        tcp_rst(pcb->snd_nxt, pcb->rcv_nxt, &pcb->local_ip, &pcb->remote_ip, -          pcb->local_port, pcb->remote_port); -      } - -      pcb2 = pcb->next; -      memp_free(MEMP_TCP_PCB, pcb); -      pcb = pcb2; -    } else { - -      /* We check if we should poll the connection. */ -      ++pcb->polltmr; -      if (pcb->polltmr >= pcb->pollinterval) { -        pcb->polltmr = 0; -        LWIP_DEBUGF(TCP_DEBUG, ("tcp_slowtmr: polling application\n")); -        TCP_EVENT_POLL(pcb, err); -        if (err == ERR_OK) { -          tcp_output(pcb); -        } -      } -       -      prev = pcb; -      pcb = pcb->next; -    } -  } - -   -  /* Steps through all of the TIME-WAIT PCBs. */ -  prev = NULL;     -  pcb = tcp_tw_pcbs; -  while (pcb != NULL) { -    LWIP_ASSERT("tcp_slowtmr: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); -    pcb_remove = 0; - -    /* Check if this PCB has stayed long enough in TIME-WAIT */ -    if ((u32_t)(tcp_ticks - pcb->tmr) > 2 * TCP_MSL / TCP_SLOW_INTERVAL) { -      ++pcb_remove; -    } -     - - -    /* If the PCB should be removed, do it. */ -    if (pcb_remove) { -      tcp_pcb_purge(pcb);       -      /* Remove PCB from tcp_tw_pcbs list. */ -      if (prev != NULL) { -        LWIP_ASSERT("tcp_slowtmr: middle tcp != tcp_tw_pcbs", pcb != tcp_tw_pcbs); -        prev->next = pcb->next; -      } else { -        /* This PCB was the first. */ -        LWIP_ASSERT("tcp_slowtmr: first pcb == tcp_tw_pcbs", tcp_tw_pcbs == pcb); -        tcp_tw_pcbs = pcb->next; -      } -      pcb2 = pcb->next; -      memp_free(MEMP_TCP_PCB, pcb); -      pcb = pcb2; -    } else { -      prev = pcb; -      pcb = pcb->next; -    } -  } -} - -/** - * Is called every TCP_FAST_INTERVAL (250 ms) and process data previously - * "refused" by upper layer (application) and sends delayed ACKs. - * - * Automatically called from tcp_tmr(). - */ -void -tcp_fasttmr(void) -{ -  struct tcp_pcb *pcb; - -  for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { -    /* If there is data which was previously "refused" by upper layer */ -    if (pcb->refused_data != NULL) { -      /* Notify again application with data previously received. */ -      err_t err; -      LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_fasttmr: notify kept packet\n")); -      TCP_EVENT_RECV(pcb, pcb->refused_data, ERR_OK, err); -      if (err == ERR_OK) { -        pcb->refused_data = NULL; -      } -    } - -    /* send delayed ACKs */   -    if (pcb->flags & TF_ACK_DELAY) { -      LWIP_DEBUGF(TCP_DEBUG, ("tcp_fasttmr: delayed ACK\n")); -      tcp_ack_now(pcb); -      pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW); -    } -  } -} - -/** - * Deallocates a list of TCP segments (tcp_seg structures). - * - * @param seg tcp_seg list of TCP segments to free - * @return the number of pbufs that were deallocated - */ -u8_t -tcp_segs_free(struct tcp_seg *seg) -{ -  u8_t count = 0; -  struct tcp_seg *next; -  while (seg != NULL) { -    next = seg->next; -    count += tcp_seg_free(seg); -    seg = next; -  } -  return count; -} - -/** - * Frees a TCP segment (tcp_seg structure). - * - * @param seg single tcp_seg to free - * @return the number of pbufs that were deallocated - */ -u8_t -tcp_seg_free(struct tcp_seg *seg) -{ -  u8_t count = 0; -   -  if (seg != NULL) { -    if (seg->p != NULL) { -      count = pbuf_free(seg->p); -#if TCP_DEBUG -      seg->p = NULL; -#endif /* TCP_DEBUG */ -    } -    memp_free(MEMP_TCP_SEG, seg); -  } -  return count; -} - -/** - * Sets the priority of a connection. - * - * @param pcb the tcp_pcb to manipulate - * @param prio new priority - */ -void -tcp_setprio(struct tcp_pcb *pcb, u8_t prio) -{ -  pcb->prio = prio; -} -#if TCP_QUEUE_OOSEQ - -/** - * Returns a copy of the given TCP segment. - * The pbuf and data are not copied, only the pointers - * - * @param seg the old tcp_seg - * @return a copy of seg - */  -struct tcp_seg * -tcp_seg_copy(struct tcp_seg *seg) -{ -  struct tcp_seg *cseg; - -  cseg = memp_malloc(MEMP_TCP_SEG); -  if (cseg == NULL) { -    return NULL; -  } -  SMEMCPY((u8_t *)cseg, (const u8_t *)seg, sizeof(struct tcp_seg));  -  pbuf_ref(cseg->p); -  return cseg; -} -#endif - -#if LWIP_CALLBACK_API -/** - * Default receive callback that is called if the user didn't register - * a recv callback for the pcb. - */ -err_t -tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) -{ -  LWIP_UNUSED_ARG(arg); -  if (p != NULL) { -    tcp_recved(pcb, p->tot_len); -    pbuf_free(p); -  } else if (err == ERR_OK) { -    return tcp_close(pcb); -  } -  return ERR_OK; -} -#endif /* LWIP_CALLBACK_API */ - -/** - * Kills the oldest active connection that has lower priority than prio. - * - * @param prio minimum priority - */ -static void -tcp_kill_prio(u8_t prio) -{ -  struct tcp_pcb *pcb, *inactive; -  u32_t inactivity; -  u8_t mprio; - - -  mprio = TCP_PRIO_MAX; -   -  /* We kill the oldest active connection that has lower priority than prio. */ -  inactivity = 0; -  inactive = NULL; -  for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { -    if (pcb->prio <= prio && -       pcb->prio <= mprio && -       (u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { -      inactivity = tcp_ticks - pcb->tmr; -      inactive = pcb; -      mprio = pcb->prio; -    } -  } -  if (inactive != NULL) { -    LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_prio: killing oldest PCB %p (%"S32_F")\n", -           (void *)inactive, inactivity)); -    tcp_abort(inactive); -  }       -} - -/** - * Kills the oldest connection that is in TIME_WAIT state. - * Called from tcp_alloc() if no more connections are available. - */ -static void -tcp_kill_timewait(void) -{ -  struct tcp_pcb *pcb, *inactive; -  u32_t inactivity; - -  inactivity = 0; -  inactive = NULL; -  /* Go through the list of TIME_WAIT pcbs and get the oldest pcb. */ -  for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { -    if ((u32_t)(tcp_ticks - pcb->tmr) >= inactivity) { -      inactivity = tcp_ticks - pcb->tmr; -      inactive = pcb; -    } -  } -  if (inactive != NULL) { -    LWIP_DEBUGF(TCP_DEBUG, ("tcp_kill_timewait: killing oldest TIME-WAIT PCB %p (%"S32_F")\n", -           (void *)inactive, inactivity)); -    tcp_abort(inactive); -  }       -} - -/** - * Allocate a new tcp_pcb structure. - * - * @param prio priority for the new pcb - * @return a new tcp_pcb that initially is in state CLOSED - */ -struct tcp_pcb * -tcp_alloc(u8_t prio) -{ -  struct tcp_pcb *pcb; -  u32_t iss; -   -  pcb = memp_malloc(MEMP_TCP_PCB); -  if (pcb == NULL) { -    /* Try killing oldest connection in TIME-WAIT. */ -    LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing off oldest TIME-WAIT connection\n")); -    tcp_kill_timewait(); -    /* Try to allocate a tcp_pcb again. */ -    pcb = memp_malloc(MEMP_TCP_PCB); -    if (pcb == NULL) { -      /* Try killing active connections with lower priority than the new one. */ -      LWIP_DEBUGF(TCP_DEBUG, ("tcp_alloc: killing connection with prio lower than %d\n", prio)); -      tcp_kill_prio(prio); -      /* Try to allocate a tcp_pcb again. */ -      pcb = memp_malloc(MEMP_TCP_PCB); -      if (pcb != NULL) { -        /* adjust err stats: memp_malloc failed twice before */ -        MEMP_STATS_DEC(err, MEMP_TCP_PCB); -      } -    } -    if (pcb != NULL) { -      /* adjust err stats: timewait PCB was freed above */ -      MEMP_STATS_DEC(err, MEMP_TCP_PCB); -    } -  } -  if (pcb != NULL) { -    memset(pcb, 0, sizeof(struct tcp_pcb)); -    pcb->prio = TCP_PRIO_NORMAL; -    pcb->snd_buf = TCP_SND_BUF; -    pcb->snd_queuelen = 0; -    pcb->rcv_wnd = TCP_WND; -    pcb->rcv_ann_wnd = TCP_WND; -    pcb->tos = 0; -    pcb->ttl = TCP_TTL; -    /* As initial send MSS, we use TCP_MSS but limit it to 536. -       The send MSS is updated when an MSS option is received. */ -    pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS; -    pcb->rto = 3000 / TCP_SLOW_INTERVAL; -    pcb->sa = 0; -    pcb->sv = 3000 / TCP_SLOW_INTERVAL; -    pcb->rtime = -1; -    pcb->cwnd = 1; -    iss = tcp_next_iss(); -    pcb->snd_wl2 = iss; -    pcb->snd_nxt = iss; -    pcb->lastack = iss; -    pcb->snd_lbb = iss;    -    pcb->tmr = tcp_ticks; - -    pcb->polltmr = 0; - -#if LWIP_CALLBACK_API -    pcb->recv = tcp_recv_null; -#endif /* LWIP_CALLBACK_API */   -     -    /* Init KEEPALIVE timer */ -    pcb->keep_idle  = TCP_KEEPIDLE_DEFAULT; -     -#if LWIP_TCP_KEEPALIVE -    pcb->keep_intvl = TCP_KEEPINTVL_DEFAULT; -    pcb->keep_cnt   = TCP_KEEPCNT_DEFAULT; -#endif /* LWIP_TCP_KEEPALIVE */ - -    pcb->keep_cnt_sent = 0; -  } -  return pcb; -} - -/** - * Creates a new TCP protocol control block but doesn't place it on - * any of the TCP PCB lists. - * The pcb is not put on any list until binding using tcp_bind(). - * - * @internal: Maybe there should be a idle TCP PCB list where these - * PCBs are put on. Port reservation using tcp_bind() is implemented but - * allocated pcbs that are not bound can't be killed automatically if wanting - * to allocate a pcb with higher prio (@see tcp_kill_prio()) - * - * @return a new tcp_pcb that initially is in state CLOSED - */ -struct tcp_pcb * -tcp_new(void) -{ -  return tcp_alloc(TCP_PRIO_NORMAL); -} - -/** - * Used to specify the argument that should be passed callback - * functions. - * - * @param pcb tcp_pcb to set the callback argument - * @param arg void pointer argument to pass to callback functions - */  -void -tcp_arg(struct tcp_pcb *pcb, void *arg) -{   -  pcb->callback_arg = arg; -} -#if LWIP_CALLBACK_API - -/** - * Used to specify the function that should be called when a TCP - * connection receives data. - * - * @param pcb tcp_pcb to set the recv callback - * @param recv callback function to call for this pcb when data is received - */  -void -tcp_recv(struct tcp_pcb *pcb, -   err_t (* recv)(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)) -{ -  pcb->recv = recv; -} - -/** - * Used to specify the function that should be called when TCP data - * has been successfully delivered to the remote host. - * - * @param pcb tcp_pcb to set the sent callback - * @param sent callback function to call for this pcb when data is successfully sent - */  -void -tcp_sent(struct tcp_pcb *pcb, -   err_t (* sent)(void *arg, struct tcp_pcb *tpcb, u16_t len)) -{ -  pcb->sent = sent; -} - -/** - * Used to specify the function that should be called when a fatal error - * has occured on the connection. - * - * @param pcb tcp_pcb to set the err callback - * @param errf callback function to call for this pcb when a fatal error - *        has occured on the connection - */  -void -tcp_err(struct tcp_pcb *pcb, -   void (* errf)(void *arg, err_t err)) -{ -  pcb->errf = errf; -} - -/** - * Used for specifying the function that should be called when a - * LISTENing connection has been connected to another host. - * - * @param pcb tcp_pcb to set the accept callback - * @param accept callback function to call for this pcb when LISTENing - *        connection has been connected to another host - */  -void -tcp_accept(struct tcp_pcb *pcb, -     err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err)) -{ -  pcb->accept = accept; -} -#endif /* LWIP_CALLBACK_API */ - - -/** - * Used to specify the function that should be called periodically - * from TCP. The interval is specified in terms of the TCP coarse - * timer interval, which is called twice a second. - * - */  -void -tcp_poll(struct tcp_pcb *pcb, -   err_t (* poll)(void *arg, struct tcp_pcb *tpcb), u8_t interval) -{ -#if LWIP_CALLBACK_API -  pcb->poll = poll; -#endif /* LWIP_CALLBACK_API */   -  pcb->pollinterval = interval; -} - -/** - * Purges a TCP PCB. Removes any buffered data and frees the buffer memory - * (pcb->ooseq, pcb->unsent and pcb->unacked are freed). - * - * @param pcb tcp_pcb to purge. The pcb itself is not deallocated! - */ -void -tcp_pcb_purge(struct tcp_pcb *pcb) -{ -  if (pcb->state != CLOSED && -     pcb->state != TIME_WAIT && -     pcb->state != LISTEN) { - -    LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge\n")); - -#if TCP_LISTEN_BACKLOG -    if (pcb->state == SYN_RCVD) { -      /* Need to find the corresponding listen_pcb and decrease its accepts_pending */ -      struct tcp_pcb_listen *lpcb; -      LWIP_ASSERT("tcp_pcb_purge: pcb->state == SYN_RCVD but tcp_listen_pcbs is NULL", -        tcp_listen_pcbs.listen_pcbs != NULL); -      for (lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { -        if ((lpcb->local_port == pcb->local_port) && -            (ip_addr_isany(&lpcb->local_ip) || -             ip_addr_cmp(&pcb->local_ip, &lpcb->local_ip))) { -            /* port and address of the listen pcb match the timed-out pcb */ -            LWIP_ASSERT("tcp_pcb_purge: listen pcb does not have accepts pending", -              lpcb->accepts_pending > 0); -            lpcb->accepts_pending--; -            break; -          } -      } -    } -#endif /* TCP_LISTEN_BACKLOG */ - - -    if (pcb->refused_data != NULL) { -      LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->refused_data\n")); -      pbuf_free(pcb->refused_data); -      pcb->refused_data = NULL; -    } -    if (pcb->unsent != NULL) { -      LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: not all data sent\n")); -    } -    if (pcb->unacked != NULL) { -      LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->unacked\n")); -    } -#if TCP_QUEUE_OOSEQ /* LW */ -    if (pcb->ooseq != NULL) { -      LWIP_DEBUGF(TCP_DEBUG, ("tcp_pcb_purge: data left on ->ooseq\n")); -    } - -    /* Stop the retransmission timer as it will expect data on unacked -       queue if it fires */ -    pcb->rtime = -1; - -    tcp_segs_free(pcb->ooseq); -    pcb->ooseq = NULL; -#endif /* TCP_QUEUE_OOSEQ */ -    tcp_segs_free(pcb->unsent); -    tcp_segs_free(pcb->unacked); -    pcb->unacked = pcb->unsent = NULL; -  } -} - -/** - * Purges the PCB and removes it from a PCB list. Any delayed ACKs are sent first. - * - * @param pcblist PCB list to purge. - * @param pcb tcp_pcb to purge. The pcb itself is NOT deallocated! - */ -void -tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb) -{ -  TCP_RMV(pcblist, pcb); - -  tcp_pcb_purge(pcb); -   -  /* if there is an outstanding delayed ACKs, send it */ -  if (pcb->state != TIME_WAIT && -     pcb->state != LISTEN && -     pcb->flags & TF_ACK_DELAY) { -    pcb->flags |= TF_ACK_NOW; -    tcp_output(pcb); -  } - -  if (pcb->state != LISTEN) { -    LWIP_ASSERT("unsent segments leaking", pcb->unsent == NULL); -    LWIP_ASSERT("unacked segments leaking", pcb->unacked == NULL); -#if TCP_QUEUE_OOSEQ -    LWIP_ASSERT("ooseq segments leaking", pcb->ooseq == NULL); -#endif /* TCP_QUEUE_OOSEQ */ -  } - -  pcb->state = CLOSED; - -  LWIP_ASSERT("tcp_pcb_remove: tcp_pcbs_sane()", tcp_pcbs_sane()); -} - -/** - * Calculates a new initial sequence number for new connections. - * - * @return u32_t pseudo random sequence number - */ -u32_t -tcp_next_iss(void) -{ -  static u32_t iss = 6510; -   -  iss += tcp_ticks;       /* XXX */ -  return iss; -} - -#if TCP_CALCULATE_EFF_SEND_MSS -/** - * Calcluates the effective send mss that can be used for a specific IP address - * by using ip_route to determin the netif used to send to the address and - * calculating the minimum of TCP_MSS and that netif's mtu (if set). - */ -u16_t -tcp_eff_send_mss(u16_t sendmss, struct ip_addr *addr) -{ -  u16_t mss_s; -  struct netif *outif; - -  outif = ip_route(addr); -  if ((outif != NULL) && (outif->mtu != 0)) { -    mss_s = outif->mtu - IP_HLEN - TCP_HLEN; -    /* RFC 1122, chap 4.2.2.6: -     * Eff.snd.MSS = min(SendMSS+20, MMS_S) - TCPhdrsize - IPoptionsize -     * We correct for TCP options in tcp_enqueue(), and don't support -     * IP options -     */ -    sendmss = LWIP_MIN(sendmss, mss_s); -  } -  return sendmss; -} -#endif /* TCP_CALCULATE_EFF_SEND_MSS */ - -const char* -tcp_debug_state_str(enum tcp_state s) -{ -  return tcp_state_str[s]; -} - -#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG -/** - * Print a tcp header for debugging purposes. - * - * @param tcphdr pointer to a struct tcp_hdr - */ -void -tcp_debug_print(struct tcp_hdr *tcphdr) -{ -  LWIP_DEBUGF(TCP_DEBUG, ("TCP header:\n")); -  LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); -  LWIP_DEBUGF(TCP_DEBUG, ("|    %5"U16_F"      |    %5"U16_F"      | (src port, dest port)\n", -         ntohs(tcphdr->src), ntohs(tcphdr->dest))); -  LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); -  LWIP_DEBUGF(TCP_DEBUG, ("|           %010"U32_F"          | (seq no)\n", -          ntohl(tcphdr->seqno))); -  LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); -  LWIP_DEBUGF(TCP_DEBUG, ("|           %010"U32_F"          | (ack no)\n", -         ntohl(tcphdr->ackno))); -  LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); -  LWIP_DEBUGF(TCP_DEBUG, ("| %2"U16_F" |   |%"U16_F"%"U16_F"%"U16_F"%"U16_F"%"U16_F"%"U16_F"|     %5"U16_F"     | (hdrlen, flags (", -       TCPH_HDRLEN(tcphdr), -         TCPH_FLAGS(tcphdr) >> 5 & 1, -         TCPH_FLAGS(tcphdr) >> 4 & 1, -         TCPH_FLAGS(tcphdr) >> 3 & 1, -         TCPH_FLAGS(tcphdr) >> 2 & 1, -         TCPH_FLAGS(tcphdr) >> 1 & 1, -         TCPH_FLAGS(tcphdr) & 1, -         ntohs(tcphdr->wnd))); -  tcp_debug_print_flags(TCPH_FLAGS(tcphdr)); -  LWIP_DEBUGF(TCP_DEBUG, ("), win)\n")); -  LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); -  LWIP_DEBUGF(TCP_DEBUG, ("|    0x%04"X16_F"     |     %5"U16_F"     | (chksum, urgp)\n", -         ntohs(tcphdr->chksum), ntohs(tcphdr->urgp))); -  LWIP_DEBUGF(TCP_DEBUG, ("+-------------------------------+\n")); -} - -/** - * Print a tcp state for debugging purposes. - * - * @param s enum tcp_state to print - */ -void -tcp_debug_print_state(enum tcp_state s) -{ -  LWIP_DEBUGF(TCP_DEBUG, ("State: %s\n", tcp_state_str[s])); -} - -/** - * Print tcp flags for debugging purposes. - * - * @param flags tcp flags, all active flags are printed - */ -void -tcp_debug_print_flags(u8_t flags) -{ -  if (flags & TCP_FIN) { -    LWIP_DEBUGF(TCP_DEBUG, ("FIN ")); -  } -  if (flags & TCP_SYN) { -    LWIP_DEBUGF(TCP_DEBUG, ("SYN ")); -  } -  if (flags & TCP_RST) { -    LWIP_DEBUGF(TCP_DEBUG, ("RST ")); -  } -  if (flags & TCP_PSH) { -    LWIP_DEBUGF(TCP_DEBUG, ("PSH ")); -  } -  if (flags & TCP_ACK) { -    LWIP_DEBUGF(TCP_DEBUG, ("ACK ")); -  } -  if (flags & TCP_URG) { -    LWIP_DEBUGF(TCP_DEBUG, ("URG ")); -  } -  if (flags & TCP_ECE) { -    LWIP_DEBUGF(TCP_DEBUG, ("ECE ")); -  } -  if (flags & TCP_CWR) { -    LWIP_DEBUGF(TCP_DEBUG, ("CWR ")); -  } -  LWIP_DEBUGF(TCP_DEBUG, ("\n")); -} - -/** - * Print all tcp_pcbs in every list for debugging purposes. - */ -void -tcp_debug_print_pcbs(void) -{ -  struct tcp_pcb *pcb; -  LWIP_DEBUGF(TCP_DEBUG, ("Active PCB states:\n")); -  for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { -    LWIP_DEBUGF(TCP_DEBUG, ("[%p]Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", -                       pcb, pcb->local_port, pcb->remote_port, -                       pcb->snd_nxt, pcb->rcv_nxt)); -    tcp_debug_print_state(pcb->state); -  }     -  LWIP_DEBUGF(TCP_DEBUG, ("Listen PCB states:\n")); -  for(pcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; pcb != NULL; pcb = pcb->next) { -    LWIP_DEBUGF(TCP_DEBUG, ("[%p]Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", -                       pcb, pcb->local_port, pcb->remote_port, -                       pcb->snd_nxt, pcb->rcv_nxt)); -    tcp_debug_print_state(pcb->state); -  }     -  LWIP_DEBUGF(TCP_DEBUG, ("TIME-WAIT PCB states:\n")); -  for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { -    LWIP_DEBUGF(TCP_DEBUG, ("[%p]Local port %"U16_F", foreign port %"U16_F" snd_nxt %"U32_F" rcv_nxt %"U32_F" ", -                       pcb, pcb->local_port, pcb->remote_port, -                       pcb->snd_nxt, pcb->rcv_nxt)); -    tcp_debug_print_state(pcb->state); -  }     -} - -/** - * Check state consistency of the tcp_pcb lists. - */ -s16_t -tcp_pcbs_sane(void) -{ -  struct tcp_pcb *pcb; -  for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { -    LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != CLOSED", pcb->state != CLOSED); -    LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != LISTEN", pcb->state != LISTEN); -    LWIP_ASSERT("tcp_pcbs_sane: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); -  } -  for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { -    LWIP_ASSERT("tcp_pcbs_sane: tw pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); -  } -  return 1; -} -#endif /* TCP_DEBUG */ - -#endif /* LWIP_TCP */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_in.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_in.c deleted file mode 100644 index 3930b40..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_in.c +++ /dev/null @@ -1,1508 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * Transmission Control Protocol, incoming traffic - * - * The input processing functions of the TCP layer. - * - * These functions are generally called in the order (ip_input() ->) - * tcp_input() -> * tcp_process() -> tcp_receive() (-> application). - *  - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels <adam@sics.se> - * - */ - -#include "lwip/opt.h" - -#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/tcp.h" -#include "lwip/def.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/mem.h" -#include "lwip/memp.h" -#include "lwip/inet.h" -#include "lwip/inet_chksum.h" -#include "lwip/stats.h" -#include "lwip/snmp.h" -#include "arch/perf.h" - -/* These variables are global to all functions involved in the input -   processing of TCP segments. They are set by the tcp_input() -   function. */ -static struct tcp_seg inseg; -static struct tcp_hdr *tcphdr; -static struct ip_hdr *iphdr; -static u32_t seqno, ackno; -static u8_t flags; -static u16_t tcplen; - -static u8_t recv_flags; -static struct pbuf *recv_data; - -struct tcp_pcb *tcp_input_pcb; - -/* Forward declarations. */ -static err_t tcp_process(struct tcp_pcb *pcb); -static void tcp_receive(struct tcp_pcb *pcb); -static void tcp_parseopt(struct tcp_pcb *pcb); - -static err_t tcp_listen_input(struct tcp_pcb_listen *pcb); -static err_t tcp_timewait_input(struct tcp_pcb *pcb); - -/** - * The initial input processing of TCP. It verifies the TCP header, demultiplexes - * the segment between the PCBs and passes it on to tcp_process(), which implements - * the TCP finite state machine. This function is called by the IP layer (in - * ip_input()). - * - * @param p received TCP segment to process (p->payload pointing to the IP header) - * @param inp network interface on which this segment was received - */ -void -tcp_input(struct pbuf *p, struct netif *inp) -{ -  struct tcp_pcb *pcb, *prev; -  struct tcp_pcb_listen *lpcb; -  u8_t hdrlen; -  err_t err; - -  PERF_START; - -  TCP_STATS_INC(tcp.recv); -  snmp_inc_tcpinsegs(); - -  iphdr = p->payload; -  tcphdr = (struct tcp_hdr *)((u8_t *)p->payload + IPH_HL(iphdr) * 4); - -#if TCP_INPUT_DEBUG -  tcp_debug_print(tcphdr); -#endif - -  /* remove header from payload */ -  if (pbuf_header(p, -((s16_t)(IPH_HL(iphdr) * 4))) || (p->tot_len < sizeof(struct tcp_hdr))) { -    /* drop short packets */ -    LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: short packet (%"U16_F" bytes) discarded\n", p->tot_len)); -    TCP_STATS_INC(tcp.lenerr); -    TCP_STATS_INC(tcp.drop); -    snmp_inc_tcpinerrs(); -    pbuf_free(p); -    return; -  } - -  /* Don't even process incoming broadcasts/multicasts. */ -  if (ip_addr_isbroadcast(&(iphdr->dest), inp) || -      ip_addr_ismulticast(&(iphdr->dest))) { -    TCP_STATS_INC(tcp.proterr); -    TCP_STATS_INC(tcp.drop); -    snmp_inc_tcpinerrs(); -    pbuf_free(p); -    return; -  } - -#if CHECKSUM_CHECK_TCP -  /* Verify TCP checksum. */ -  if (inet_chksum_pseudo(p, (struct ip_addr *)&(iphdr->src), -      (struct ip_addr *)&(iphdr->dest), -      IP_PROTO_TCP, p->tot_len) != 0) { -      LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packet discarded due to failing checksum 0x%04"X16_F"\n", -        inet_chksum_pseudo(p, (struct ip_addr *)&(iphdr->src), (struct ip_addr *)&(iphdr->dest), -      IP_PROTO_TCP, p->tot_len))); -#if TCP_DEBUG -    tcp_debug_print(tcphdr); -#endif /* TCP_DEBUG */ -    TCP_STATS_INC(tcp.chkerr); -    TCP_STATS_INC(tcp.drop); -    snmp_inc_tcpinerrs(); -    pbuf_free(p); -    return; -  } -#endif - -  /* Move the payload pointer in the pbuf so that it points to the -     TCP data instead of the TCP header. */ -  hdrlen = TCPH_HDRLEN(tcphdr); -  if(pbuf_header(p, -(hdrlen * 4))){ -    /* drop short packets */ -    LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: short packet\n")); -    TCP_STATS_INC(tcp.lenerr); -    TCP_STATS_INC(tcp.drop); -    snmp_inc_tcpinerrs(); -    pbuf_free(p); -    return; -  } - -  /* Convert fields in TCP header to host byte order. */ -  tcphdr->src = ntohs(tcphdr->src); -  tcphdr->dest = ntohs(tcphdr->dest); -  seqno = tcphdr->seqno = ntohl(tcphdr->seqno); -  ackno = tcphdr->ackno = ntohl(tcphdr->ackno); -  tcphdr->wnd = ntohs(tcphdr->wnd); - -  flags = TCPH_FLAGS(tcphdr); -  tcplen = p->tot_len + ((flags & (TCP_FIN | TCP_SYN)) ? 1 : 0); - -  /* Demultiplex an incoming segment. First, we check if it is destined -     for an active connection. */ -  prev = NULL; - -   -  for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) { -    LWIP_ASSERT("tcp_input: active pcb->state != CLOSED", pcb->state != CLOSED); -    LWIP_ASSERT("tcp_input: active pcb->state != TIME-WAIT", pcb->state != TIME_WAIT); -    LWIP_ASSERT("tcp_input: active pcb->state != LISTEN", pcb->state != LISTEN); -    if (pcb->remote_port == tcphdr->src && -       pcb->local_port == tcphdr->dest && -       ip_addr_cmp(&(pcb->remote_ip), &(iphdr->src)) && -       ip_addr_cmp(&(pcb->local_ip), &(iphdr->dest))) { - -      /* Move this PCB to the front of the list so that subsequent -         lookups will be faster (we exploit locality in TCP segment -         arrivals). */ -      LWIP_ASSERT("tcp_input: pcb->next != pcb (before cache)", pcb->next != pcb); -      if (prev != NULL) { -        prev->next = pcb->next; -        pcb->next = tcp_active_pcbs; -        tcp_active_pcbs = pcb; -      } -      LWIP_ASSERT("tcp_input: pcb->next != pcb (after cache)", pcb->next != pcb); -      break; -    } -    prev = pcb; -  } - -  if (pcb == NULL) { -    /* If it did not go to an active connection, we check the connections -       in the TIME-WAIT state. */ -    for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) { -      LWIP_ASSERT("tcp_input: TIME-WAIT pcb->state == TIME-WAIT", pcb->state == TIME_WAIT); -      if (pcb->remote_port == tcphdr->src && -         pcb->local_port == tcphdr->dest && -         ip_addr_cmp(&(pcb->remote_ip), &(iphdr->src)) && -         ip_addr_cmp(&(pcb->local_ip), &(iphdr->dest))) { -        /* We don't really care enough to move this PCB to the front -           of the list since we are not very likely to receive that -           many segments for connections in TIME-WAIT. */ -        LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packed for TIME_WAITing connection.\n")); -        tcp_timewait_input(pcb); -        pbuf_free(p); -        return; -      } -    } - -  /* Finally, if we still did not get a match, we check all PCBs that -     are LISTENing for incoming connections. */ -    prev = NULL; -    for(lpcb = tcp_listen_pcbs.listen_pcbs; lpcb != NULL; lpcb = lpcb->next) { -      if ((ip_addr_isany(&(lpcb->local_ip)) || -        ip_addr_cmp(&(lpcb->local_ip), &(iphdr->dest))) && -        lpcb->local_port == tcphdr->dest) { -        /* Move this PCB to the front of the list so that subsequent -           lookups will be faster (we exploit locality in TCP segment -           arrivals). */ -        if (prev != NULL) { -          ((struct tcp_pcb_listen *)prev)->next = lpcb->next; -                /* our successor is the remainder of the listening list */ -          lpcb->next = tcp_listen_pcbs.listen_pcbs; -                /* put this listening pcb at the head of the listening list */ -          tcp_listen_pcbs.listen_pcbs = lpcb; -        } -       -        LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: packed for LISTENing connection.\n")); -        tcp_listen_input(lpcb); -        pbuf_free(p); -        return; -      } -      prev = (struct tcp_pcb *)lpcb; -    } -  } - -#if TCP_INPUT_DEBUG -  LWIP_DEBUGF(TCP_INPUT_DEBUG, ("+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags ")); -  tcp_debug_print_flags(TCPH_FLAGS(tcphdr)); -  LWIP_DEBUGF(TCP_INPUT_DEBUG, ("-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n")); -#endif /* TCP_INPUT_DEBUG */ - - -  if (pcb != NULL) { -    /* The incoming segment belongs to a connection. */ -#if TCP_INPUT_DEBUG -#if TCP_DEBUG -    tcp_debug_print_state(pcb->state); -#endif /* TCP_DEBUG */ -#endif /* TCP_INPUT_DEBUG */ - -    /* Set up a tcp_seg structure. */ -    inseg.next = NULL; -    inseg.len = p->tot_len; -    inseg.dataptr = p->payload; -    inseg.p = p; -    inseg.tcphdr = tcphdr; - -    recv_data = NULL; -    recv_flags = 0; - -    /* If there is data which was previously "refused" by upper layer */ -    if (pcb->refused_data != NULL) { -      /* Notify again application with data previously received. */ -      LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: notify kept packet\n")); -      TCP_EVENT_RECV(pcb, pcb->refused_data, ERR_OK, err); -      if (err == ERR_OK) { -        pcb->refused_data = NULL; -      } else { -        /* drop incoming packets, because pcb is "full" */ -        LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: drop incoming packets, because pcb is \"full\"\n")); -        TCP_STATS_INC(tcp.drop); -        snmp_inc_tcpinerrs(); -        pbuf_free(p); -        return; -      } -    } -    tcp_input_pcb = pcb; -    err = tcp_process(pcb); -    /* A return value of ERR_ABRT means that tcp_abort() was called -       and that the pcb has been freed. If so, we don't do anything. */ -    if (err != ERR_ABRT) { -      if (recv_flags & TF_RESET) { -        /* TF_RESET means that the connection was reset by the other -           end. We then call the error callback to inform the -           application that the connection is dead before we -           deallocate the PCB. */ -        TCP_EVENT_ERR(pcb->errf, pcb->callback_arg, ERR_RST); -        tcp_pcb_remove(&tcp_active_pcbs, pcb); -        memp_free(MEMP_TCP_PCB, pcb); -      } else if (recv_flags & TF_CLOSED) { -        /* The connection has been closed and we will deallocate the -           PCB. */ -        tcp_pcb_remove(&tcp_active_pcbs, pcb); -        memp_free(MEMP_TCP_PCB, pcb); -      } else { -        err = ERR_OK; -        /* If the application has registered a "sent" function to be -           called when new send buffer space is available, we call it -           now. */ -        if (pcb->acked > 0) { -          TCP_EVENT_SENT(pcb, pcb->acked, err); -        } -       -        if (recv_data != NULL) { -          if(flags & TCP_PSH) { -            recv_data->flags |= PBUF_FLAG_PUSH; -          } - -          /* Notify application that data has been received. */ -          TCP_EVENT_RECV(pcb, recv_data, ERR_OK, err); - -          /* If the upper layer can't receive this data, store it */ -          if (err != ERR_OK) { -            pcb->refused_data = recv_data; -            LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_input: keep incoming packet, because pcb is \"full\"\n")); -          } -        } - -        /* If a FIN segment was received, we call the callback -           function with a NULL buffer to indicate EOF. */ -        if (recv_flags & TF_GOT_FIN) { -          TCP_EVENT_RECV(pcb, NULL, ERR_OK, err); -        } - -        tcp_input_pcb = NULL; -        /* Try to send something out. */ -        tcp_output(pcb); -#if TCP_INPUT_DEBUG -#if TCP_DEBUG -        tcp_debug_print_state(pcb->state); -#endif /* TCP_DEBUG */ -#endif /* TCP_INPUT_DEBUG */ -      } -    } -    tcp_input_pcb = NULL; - - -    /* give up our reference to inseg.p */ -    if (inseg.p != NULL) -    { -      pbuf_free(inseg.p); -      inseg.p = NULL; -    } -  } else { - -    /* If no matching PCB was found, send a TCP RST (reset) to the -       sender. */ -    LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_input: no PCB match found, resetting.\n")); -    if (!(TCPH_FLAGS(tcphdr) & TCP_RST)) { -      TCP_STATS_INC(tcp.proterr); -      TCP_STATS_INC(tcp.drop); -      tcp_rst(ackno, seqno + tcplen, -        &(iphdr->dest), &(iphdr->src), -        tcphdr->dest, tcphdr->src); -    } -    pbuf_free(p); -  } - -  LWIP_ASSERT("tcp_input: tcp_pcbs_sane()", tcp_pcbs_sane()); -  PERF_STOP("tcp_input"); -} - -/** - * Called by tcp_input() when a segment arrives for a listening - * connection (from tcp_input()). - * - * @param pcb the tcp_pcb_listen for which a segment arrived - * @return ERR_OK if the segment was processed - *         another err_t on error - * - * @note the return value is not (yet?) used in tcp_input() - * @note the segment which arrived is saved in global variables, therefore only the pcb - *       involved is passed as a parameter to this function - */ -static err_t -tcp_listen_input(struct tcp_pcb_listen *pcb) -{ -  struct tcp_pcb *npcb; -  err_t rc; - -  /* In the LISTEN state, we check for incoming SYN segments, -     creates a new PCB, and responds with a SYN|ACK. */ -  if (flags & TCP_ACK) { -    /* For incoming segments with the ACK flag set, respond with a -       RST. */ -    LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_listen_input: ACK in LISTEN, sending reset\n")); -    tcp_rst(ackno + 1, seqno + tcplen, -      &(iphdr->dest), &(iphdr->src), -      tcphdr->dest, tcphdr->src); -  } else if (flags & TCP_SYN) { -    LWIP_DEBUGF(TCP_DEBUG, ("TCP connection request %"U16_F" -> %"U16_F".\n", tcphdr->src, tcphdr->dest)); -#if TCP_LISTEN_BACKLOG -    if (pcb->accepts_pending >= pcb->backlog) { -      LWIP_DEBUGF(TCP_DEBUG, ("tcp_listen_input: listen backlog exceeded for port %"U16_F"\n", tcphdr->dest)); -      return ERR_ABRT; -    } -#endif /* TCP_LISTEN_BACKLOG */ -    npcb = tcp_alloc(pcb->prio); -    /* If a new PCB could not be created (probably due to lack of memory), -       we don't do anything, but rely on the sender will retransmit the -       SYN at a time when we have more memory available. */ -    if (npcb == NULL) { -      LWIP_DEBUGF(TCP_DEBUG, ("tcp_listen_input: could not allocate PCB\n")); -      TCP_STATS_INC(tcp.memerr); -      return ERR_MEM; -    } -#if TCP_LISTEN_BACKLOG -    pcb->accepts_pending++; -#endif /* TCP_LISTEN_BACKLOG */ -    /* Set up the new PCB. */ -    ip_addr_set(&(npcb->local_ip), &(iphdr->dest)); -    npcb->local_port = pcb->local_port; -    ip_addr_set(&(npcb->remote_ip), &(iphdr->src)); -    npcb->remote_port = tcphdr->src; -    npcb->state = SYN_RCVD; -    npcb->rcv_nxt = seqno + 1; -    npcb->rcv_ann_right_edge = npcb->rcv_nxt; -    npcb->snd_wnd = tcphdr->wnd; -    npcb->ssthresh = npcb->snd_wnd; -    npcb->snd_wl1 = seqno - 1;/* initialise to seqno-1 to force window update */ -    npcb->callback_arg = pcb->callback_arg; -#if LWIP_CALLBACK_API -    npcb->accept = pcb->accept; -#endif /* LWIP_CALLBACK_API */ -    /* inherit socket options */ -    npcb->so_options = pcb->so_options & (SOF_DEBUG|SOF_DONTROUTE|SOF_KEEPALIVE|SOF_OOBINLINE|SOF_LINGER); -    /* Register the new PCB so that we can begin receiving segments -       for it. */ -    TCP_REG(&tcp_active_pcbs, npcb); - -    /* Parse any options in the SYN. */ -    tcp_parseopt(npcb); -#if TCP_CALCULATE_EFF_SEND_MSS -    npcb->mss = tcp_eff_send_mss(npcb->mss, &(npcb->remote_ip)); -#endif /* TCP_CALCULATE_EFF_SEND_MSS */ - -    snmp_inc_tcppassiveopens(); - -    /* Send a SYN|ACK together with the MSS option. */ -    rc = tcp_enqueue(npcb, NULL, 0, TCP_SYN | TCP_ACK, 0, TF_SEG_OPTS_MSS -#if LWIP_TCP_TIMESTAMPS -      /* and maybe include the TIMESTAMP option */ -     | (npcb->flags & TF_TIMESTAMP ? TF_SEG_OPTS_TS : 0) -#endif -      ); -    if (rc != ERR_OK) { -      tcp_abandon(npcb, 0); -      return rc; -    } -    return tcp_output(npcb); -  } -  return ERR_OK; -} - -/** - * Called by tcp_input() when a segment arrives for a connection in - * TIME_WAIT. - * - * @param pcb the tcp_pcb for which a segment arrived - * - * @note the segment which arrived is saved in global variables, therefore only the pcb - *       involved is passed as a parameter to this function - */ -static err_t -tcp_timewait_input(struct tcp_pcb *pcb) -{ -  /* RFC 1337: in TIME_WAIT, ignore RST and ACK FINs + any 'acceptable' segments */ -  /* RFC 793 3.9 Event Processing - Segment Arrives: -   * - first check sequence number - we skip that one in TIME_WAIT (always -   *   acceptable since we only send ACKs) -   * - second check the RST bit (... return) */ -  if (flags & TCP_RST)  { -    return ERR_OK; -  } -  /* - fourth, check the SYN bit, */ -  if (flags & TCP_SYN) { -    /* If an incoming segment is not acceptable, an acknowledgment -       should be sent in reply */ -    if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt+pcb->rcv_wnd)) { -      /* If the SYN is in the window it is an error, send a reset */ -      tcp_rst(ackno, seqno + tcplen, &(iphdr->dest), &(iphdr->src), -        tcphdr->dest, tcphdr->src); -      return ERR_OK; -    } -  } else if (flags & TCP_FIN) { -    /* - eighth, check the FIN bit: Remain in the TIME-WAIT state. -         Restart the 2 MSL time-wait timeout.*/ -    pcb->tmr = tcp_ticks; -  } - -  if ((tcplen > 0))  { -    /* Acknowledge data, FIN or out-of-window SYN */ -    pcb->flags |= TF_ACK_NOW; -    return tcp_output(pcb); -  } -  return ERR_OK; -} - -/** - * Implements the TCP state machine. Called by tcp_input. In some - * states tcp_receive() is called to receive data. The tcp_seg - * argument will be freed by the caller (tcp_input()) unless the - * recv_data pointer in the pcb is set. - * - * @param pcb the tcp_pcb for which a segment arrived - * - * @note the segment which arrived is saved in global variables, therefore only the pcb - *       involved is passed as a parameter to this function - */ -static err_t -tcp_process(struct tcp_pcb *pcb) -{ -  struct tcp_seg *rseg; -  u8_t acceptable = 0; -  err_t err; - -  err = ERR_OK; - -  /* Process incoming RST segments. */ -  if (flags & TCP_RST) { -    /* First, determine if the reset is acceptable. */ -    if (pcb->state == SYN_SENT) { -      if (ackno == pcb->snd_nxt) { -        acceptable = 1; -      } -    } else { -      if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt,  -                          pcb->rcv_nxt+pcb->rcv_wnd)) { -        acceptable = 1; -      } -    } - -    if (acceptable) { -      LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: Connection RESET\n")); -      LWIP_ASSERT("tcp_input: pcb->state != CLOSED", pcb->state != CLOSED); -      recv_flags |= TF_RESET; -      pcb->flags &= ~TF_ACK_DELAY; -      return ERR_RST; -    } else { -      LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_process: unacceptable reset seqno %"U32_F" rcv_nxt %"U32_F"\n", -       seqno, pcb->rcv_nxt)); -      LWIP_DEBUGF(TCP_DEBUG, ("tcp_process: unacceptable reset seqno %"U32_F" rcv_nxt %"U32_F"\n", -       seqno, pcb->rcv_nxt)); -      return ERR_OK; -    } -  } - -  if ((flags & TCP_SYN) && (pcb->state != SYN_SENT && pcb->state != SYN_RCVD)) {  -    /* Cope with new connection attempt after remote end crashed */ -    tcp_ack_now(pcb); -    return ERR_OK; -  } -   -  /* Update the PCB (in)activity timer. */ -  pcb->tmr = tcp_ticks; -  pcb->keep_cnt_sent = 0; - -  tcp_parseopt(pcb); - -  /* Do different things depending on the TCP state. */ -  switch (pcb->state) { -  case SYN_SENT: -    LWIP_DEBUGF(TCP_INPUT_DEBUG, ("SYN-SENT: ackno %"U32_F" pcb->snd_nxt %"U32_F" unacked %"U32_F"\n", ackno, -     pcb->snd_nxt, ntohl(pcb->unacked->tcphdr->seqno))); -    /* received SYN ACK with expected sequence number? */ -    if ((flags & TCP_ACK) && (flags & TCP_SYN) -        && ackno == ntohl(pcb->unacked->tcphdr->seqno) + 1) { -      pcb->snd_buf++; -      pcb->rcv_nxt = seqno + 1; -      pcb->rcv_ann_right_edge = pcb->rcv_nxt; -      pcb->lastack = ackno; -      pcb->snd_wnd = tcphdr->wnd; -      pcb->snd_wl1 = seqno - 1; /* initialise to seqno - 1 to force window update */ -      pcb->state = ESTABLISHED; - -#if TCP_CALCULATE_EFF_SEND_MSS -      pcb->mss = tcp_eff_send_mss(pcb->mss, &(pcb->remote_ip)); -#endif /* TCP_CALCULATE_EFF_SEND_MSS */ - -      /* Set ssthresh again after changing pcb->mss (already set in tcp_connect -       * but for the default value of pcb->mss) */ -      pcb->ssthresh = pcb->mss * 10; - -      pcb->cwnd = ((pcb->cwnd == 1) ? (pcb->mss * 2) : pcb->mss); -      LWIP_ASSERT("pcb->snd_queuelen > 0", (pcb->snd_queuelen > 0)); -      --pcb->snd_queuelen; -      LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_process: SYN-SENT --queuelen %"U16_F"\n", (u16_t)pcb->snd_queuelen)); -      rseg = pcb->unacked; -      pcb->unacked = rseg->next; - -      /* If there's nothing left to acknowledge, stop the retransmit -         timer, otherwise reset it to start again */ -      if(pcb->unacked == NULL) -        pcb->rtime = -1; -      else { -        pcb->rtime = 0; -        pcb->nrtx = 0; -      } - -      tcp_seg_free(rseg); - -      /* Call the user specified function to call when sucessfully -       * connected. */ -      TCP_EVENT_CONNECTED(pcb, ERR_OK, err); -      tcp_ack_now(pcb); -    } -    /* received ACK? possibly a half-open connection */ -    else if (flags & TCP_ACK) { -      /* send a RST to bring the other side in a non-synchronized state. */ -      tcp_rst(ackno, seqno + tcplen, &(iphdr->dest), &(iphdr->src), -        tcphdr->dest, tcphdr->src); -    } -    break; -  case SYN_RCVD: -    if (flags & TCP_ACK) { -      /* expected ACK number? */ -      if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)) { -        u16_t old_cwnd; -        pcb->state = ESTABLISHED; -        LWIP_DEBUGF(TCP_DEBUG, ("TCP connection established %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); -#if LWIP_CALLBACK_API -        LWIP_ASSERT("pcb->accept != NULL", pcb->accept != NULL); -#endif -        /* Call the accept function. */ -        TCP_EVENT_ACCEPT(pcb, ERR_OK, err); -        if (err != ERR_OK) { -          /* If the accept function returns with an error, we abort -           * the connection. */ -          tcp_abort(pcb); -          return ERR_ABRT; -        } -        old_cwnd = pcb->cwnd; -        /* If there was any data contained within this ACK, -         * we'd better pass it on to the application as well. */ -        tcp_receive(pcb); - -        /* Prevent ACK for SYN to generate a sent event */ -        if (pcb->acked != 0) { -          pcb->acked--; -        } - -        pcb->cwnd = ((old_cwnd == 1) ? (pcb->mss * 2) : pcb->mss); - -        if (recv_flags & TF_GOT_FIN) { -          tcp_ack_now(pcb); -          pcb->state = CLOSE_WAIT; -        } -      } -      /* incorrect ACK number */ -      else { -        /* send RST */ -        tcp_rst(ackno, seqno + tcplen, &(iphdr->dest), &(iphdr->src), -                tcphdr->dest, tcphdr->src); -      } -    } else if ((flags & TCP_SYN) && (seqno == pcb->rcv_nxt - 1)) { -      /* Looks like another copy of the SYN - retransmit our SYN-ACK */ -      tcp_rexmit(pcb); -    } -    break; -  case CLOSE_WAIT: -    /* FALLTHROUGH */ -  case ESTABLISHED: -    tcp_receive(pcb); -    if (recv_flags & TF_GOT_FIN) { /* passive close */ -      tcp_ack_now(pcb); -      pcb->state = CLOSE_WAIT; -    } -    break; -  case FIN_WAIT_1: -    tcp_receive(pcb); -    if (recv_flags & TF_GOT_FIN) { -      if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt)) { -        LWIP_DEBUGF(TCP_DEBUG, -          ("TCP connection closed: FIN_WAIT_1 %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); -        tcp_ack_now(pcb); -        tcp_pcb_purge(pcb); -        TCP_RMV(&tcp_active_pcbs, pcb); -        pcb->state = TIME_WAIT; -        TCP_REG(&tcp_tw_pcbs, pcb); -      } else { -        tcp_ack_now(pcb); -        pcb->state = CLOSING; -      } -    } else if ((flags & TCP_ACK) && (ackno == pcb->snd_nxt)) { -      pcb->state = FIN_WAIT_2; -    } -    break; -  case FIN_WAIT_2: -    tcp_receive(pcb); -    if (recv_flags & TF_GOT_FIN) { -      LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: FIN_WAIT_2 %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); -      tcp_ack_now(pcb); -      tcp_pcb_purge(pcb); -      TCP_RMV(&tcp_active_pcbs, pcb); -      pcb->state = TIME_WAIT; -      TCP_REG(&tcp_tw_pcbs, pcb); -    } -    break; -  case CLOSING: -    tcp_receive(pcb); -    if (flags & TCP_ACK && ackno == pcb->snd_nxt) { -      LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: CLOSING %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); -      tcp_pcb_purge(pcb); -      TCP_RMV(&tcp_active_pcbs, pcb); -      pcb->state = TIME_WAIT; -      TCP_REG(&tcp_tw_pcbs, pcb); -    } -    break; -  case LAST_ACK: -    tcp_receive(pcb); -    if (flags & TCP_ACK && ackno == pcb->snd_nxt) { -      LWIP_DEBUGF(TCP_DEBUG, ("TCP connection closed: LAST_ACK %"U16_F" -> %"U16_F".\n", inseg.tcphdr->src, inseg.tcphdr->dest)); -      /* bugfix #21699: don't set pcb->state to CLOSED here or we risk leaking segments */ -      recv_flags |= TF_CLOSED; -    } -    break; -  default: -    break; -  } -  return ERR_OK; -} - -#if TCP_QUEUE_OOSEQ -/** - * Insert segment into the list (segments covered with new one will be deleted) - * - * Called from tcp_receive() - */ -static void -tcp_oos_insert_segment(struct tcp_seg *cseg, struct tcp_seg *next) -{ -  struct tcp_seg *old_seg; - -  if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) { -    /* received segment overlaps all following segments */ -    tcp_segs_free(next); -    next = NULL; -  } -  else { -    /* delete some following segments -       oos queue may have segments with FIN flag */ -    while (next && -           TCP_SEQ_GEQ((seqno + cseg->len), -                      (next->tcphdr->seqno + next->len))) { -      /* cseg with FIN already processed */ -      if (TCPH_FLAGS(next->tcphdr) & TCP_FIN) { -        TCPH_FLAGS_SET(cseg->tcphdr, TCPH_FLAGS(cseg->tcphdr) | TCP_FIN); -      } -      old_seg = next; -      next = next->next; -      tcp_seg_free(old_seg); -    } -    if (next && -        TCP_SEQ_GT(seqno + cseg->len, next->tcphdr->seqno)) { -      /* We need to trim the incoming segment. */ -      cseg->len = (u16_t)(next->tcphdr->seqno - seqno); -      pbuf_realloc(cseg->p, cseg->len); -    } -  } -  cseg->next = next; -} -#endif - -/** - * Called by tcp_process. Checks if the given segment is an ACK for outstanding - * data, and if so frees the memory of the buffered data. Next, is places the - * segment on any of the receive queues (pcb->recved or pcb->ooseq). If the segment - * is buffered, the pbuf is referenced by pbuf_ref so that it will not be freed until - * i it has been removed from the buffer. - * - * If the incoming segment constitutes an ACK for a segment that was used for RTT - * estimation, the RTT is estimated here as well. - * - * Called from tcp_process(). - */ -static void -tcp_receive(struct tcp_pcb *pcb) -{ -  struct tcp_seg *next; -#if TCP_QUEUE_OOSEQ -  struct tcp_seg *prev, *cseg; -#endif -  struct pbuf *p; -  s32_t off; -  s16_t m; -  u32_t right_wnd_edge; -  u16_t new_tot_len; -  int found_dupack = 0; - -  if (flags & TCP_ACK) { -    right_wnd_edge = pcb->snd_wnd + pcb->snd_wl2; - -    /* Update window. */ -    if (TCP_SEQ_LT(pcb->snd_wl1, seqno) || -       (pcb->snd_wl1 == seqno && TCP_SEQ_LT(pcb->snd_wl2, ackno)) || -       (pcb->snd_wl2 == ackno && tcphdr->wnd > pcb->snd_wnd)) { -      pcb->snd_wnd = tcphdr->wnd; -      pcb->snd_wl1 = seqno; -      pcb->snd_wl2 = ackno; -      if (pcb->snd_wnd > 0 && pcb->persist_backoff > 0) { -          pcb->persist_backoff = 0; -      } -      LWIP_DEBUGF(TCP_WND_DEBUG, ("tcp_receive: window update %"U16_F"\n", pcb->snd_wnd)); -#if TCP_WND_DEBUG -    } else { -      if (pcb->snd_wnd != tcphdr->wnd) { -        LWIP_DEBUGF(TCP_WND_DEBUG,  -                    ("tcp_receive: no window update lastack %"U32_F" ackno %" -                     U32_F" wl1 %"U32_F" seqno %"U32_F" wl2 %"U32_F"\n", -                     pcb->lastack, ackno, pcb->snd_wl1, seqno, pcb->snd_wl2)); -      } -#endif /* TCP_WND_DEBUG */ -    } - -    /* (From Stevens TCP/IP Illustrated Vol II, p970.) Its only a -     * duplicate ack if: -     * 1) It doesn't ACK new data  -     * 2) length of received packet is zero (i.e. no payload)  -     * 3) the advertised window hasn't changed  -     * 4) There is outstanding unacknowledged data (retransmission timer running) -     * 5) The ACK is == biggest ACK sequence number so far seen (snd_una) -     *  -     * If it passes all five, should process as a dupack:  -     * a) dupacks < 3: do nothing  -     * b) dupacks == 3: fast retransmit  -     * c) dupacks > 3: increase cwnd  -     *  -     * If it only passes 1-3, should reset dupack counter (and add to -     * stats, which we don't do in lwIP) -     * -     * If it only passes 1, should reset dupack counter -     * -     */ - -    /* Clause 1 */ -    if (TCP_SEQ_LEQ(ackno, pcb->lastack)) { -      pcb->acked = 0; -      /* Clause 2 */ -      if (tcplen == 0) { -        /* Clause 3 */ -        if (pcb->snd_wl2 + pcb->snd_wnd == right_wnd_edge){ -          /* Clause 4 */ -          if (pcb->rtime >= 0) { -            /* Clause 5 */ -            if (pcb->lastack == ackno) { -              found_dupack = 1; -              if (pcb->dupacks + 1 > pcb->dupacks) -                ++pcb->dupacks; -              if (pcb->dupacks > 3) { -                /* Inflate the congestion window, but not if it means that -                   the value overflows. */ -                if ((u16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) { -                  pcb->cwnd += pcb->mss; -                } -              } else if (pcb->dupacks == 3) { -                /* Do fast retransmit */ -                tcp_rexmit_fast(pcb); -              } -            } -          } -        } -      } -      /* If Clause (1) or more is true, but not a duplicate ack, reset -       * count of consecutive duplicate acks */ -      if (!found_dupack) { -        pcb->dupacks = 0; -      } -    } else if (TCP_SEQ_BETWEEN(ackno, pcb->lastack+1, pcb->snd_nxt)){ -      /* We come here when the ACK acknowledges new data. */ - -      /* Reset the "IN Fast Retransmit" flag, since we are no longer -         in fast retransmit. Also reset the congestion window to the -         slow start threshold. */ -      if (pcb->flags & TF_INFR) { -        pcb->flags &= ~TF_INFR; -        pcb->cwnd = pcb->ssthresh; -      } - -      /* Reset the number of retransmissions. */ -      pcb->nrtx = 0; - -      /* Reset the retransmission time-out. */ -      pcb->rto = (pcb->sa >> 3) + pcb->sv; - -      /* Update the send buffer space. Diff between the two can never exceed 64K? */ -      pcb->acked = (u16_t)(ackno - pcb->lastack); - -      pcb->snd_buf += pcb->acked; - -      /* Reset the fast retransmit variables. */ -      pcb->dupacks = 0; -      pcb->lastack = ackno; - -      /* Update the congestion control variables (cwnd and -         ssthresh). */ -      if (pcb->state >= ESTABLISHED) { -        if (pcb->cwnd < pcb->ssthresh) { -          if ((u16_t)(pcb->cwnd + pcb->mss) > pcb->cwnd) { -            pcb->cwnd += pcb->mss; -          } -          LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_receive: slow start cwnd %"U16_F"\n", pcb->cwnd)); -        } else { -          u16_t new_cwnd = (pcb->cwnd + pcb->mss * pcb->mss / pcb->cwnd); -          if (new_cwnd > pcb->cwnd) { -            pcb->cwnd = new_cwnd; -          } -          LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_receive: congestion avoidance cwnd %"U16_F"\n", pcb->cwnd)); -        } -      } -      LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: ACK for %"U32_F", unacked->seqno %"U32_F":%"U32_F"\n", -                                    ackno, -                                    pcb->unacked != NULL? -                                    ntohl(pcb->unacked->tcphdr->seqno): 0, -                                    pcb->unacked != NULL? -                                    ntohl(pcb->unacked->tcphdr->seqno) + TCP_TCPLEN(pcb->unacked): 0)); - -      /* Remove segment from the unacknowledged list if the incoming -         ACK acknowlegdes them. */ -      while (pcb->unacked != NULL && -             TCP_SEQ_LEQ(ntohl(pcb->unacked->tcphdr->seqno) + -                         TCP_TCPLEN(pcb->unacked), ackno)) { -        LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: removing %"U32_F":%"U32_F" from pcb->unacked\n", -                                      ntohl(pcb->unacked->tcphdr->seqno), -                                      ntohl(pcb->unacked->tcphdr->seqno) + -                                      TCP_TCPLEN(pcb->unacked))); - -        next = pcb->unacked; -        pcb->unacked = pcb->unacked->next; - -        LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"U16_F" ... ", (u16_t)pcb->snd_queuelen)); -        LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= pbuf_clen(next->p))); -        /* Prevent ACK for FIN to generate a sent event */ -        if ((pcb->acked != 0) && ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0)) { -          pcb->acked--; -        } - -        pcb->snd_queuelen -= pbuf_clen(next->p); -        tcp_seg_free(next); - -        LWIP_DEBUGF(TCP_QLEN_DEBUG, ("%"U16_F" (after freeing unacked)\n", (u16_t)pcb->snd_queuelen)); -        if (pcb->snd_queuelen != 0) { -          LWIP_ASSERT("tcp_receive: valid queue length", pcb->unacked != NULL || -                      pcb->unsent != NULL); -        } -      } - -      /* If there's nothing left to acknowledge, stop the retransmit -         timer, otherwise reset it to start again */ -      if(pcb->unacked == NULL) -        pcb->rtime = -1; -      else -        pcb->rtime = 0; - -      pcb->polltmr = 0; -    } else { -      /* Fix bug bug #21582: out of sequence ACK, didn't really ack anything */ -      pcb->acked = 0; -    } - -    /* We go through the ->unsent list to see if any of the segments -       on the list are acknowledged by the ACK. This may seem -       strange since an "unsent" segment shouldn't be acked. The -       rationale is that lwIP puts all outstanding segments on the -       ->unsent list after a retransmission, so these segments may -       in fact have been sent once. */ -    while (pcb->unsent != NULL && -           TCP_SEQ_BETWEEN(ackno, ntohl(pcb->unsent->tcphdr->seqno) +  -                           TCP_TCPLEN(pcb->unsent), pcb->snd_nxt)) { -      LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: removing %"U32_F":%"U32_F" from pcb->unsent\n", -                                    ntohl(pcb->unsent->tcphdr->seqno), ntohl(pcb->unsent->tcphdr->seqno) + -                                    TCP_TCPLEN(pcb->unsent))); - -      next = pcb->unsent; -      pcb->unsent = pcb->unsent->next; -      LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_receive: queuelen %"U16_F" ... ", (u16_t)pcb->snd_queuelen)); -      LWIP_ASSERT("pcb->snd_queuelen >= pbuf_clen(next->p)", (pcb->snd_queuelen >= pbuf_clen(next->p))); -      /* Prevent ACK for FIN to generate a sent event */ -      if ((pcb->acked != 0) && ((TCPH_FLAGS(next->tcphdr) & TCP_FIN) != 0)) { -        pcb->acked--; -      } -      pcb->snd_queuelen -= pbuf_clen(next->p); -      tcp_seg_free(next); -      LWIP_DEBUGF(TCP_QLEN_DEBUG, ("%"U16_F" (after freeing unsent)\n", (u16_t)pcb->snd_queuelen)); -      if (pcb->snd_queuelen != 0) { -        LWIP_ASSERT("tcp_receive: valid queue length", -          pcb->unacked != NULL || pcb->unsent != NULL); -      } -    } -    /* End of ACK for new data processing. */ - -    LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: pcb->rttest %"U32_F" rtseq %"U32_F" ackno %"U32_F"\n", -                                pcb->rttest, pcb->rtseq, ackno)); - -    /* RTT estimation calculations. This is done by checking if the -       incoming segment acknowledges the segment we use to take a -       round-trip time measurement. */ -    if (pcb->rttest && TCP_SEQ_LT(pcb->rtseq, ackno)) { -      /* diff between this shouldn't exceed 32K since this are tcp timer ticks -         and a round-trip shouldn't be that long... */ -      m = (s16_t)(tcp_ticks - pcb->rttest); - -      LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: experienced rtt %"U16_F" ticks (%"U16_F" msec).\n", -                                  m, m * TCP_SLOW_INTERVAL)); - -      /* This is taken directly from VJs original code in his paper */ -      m = m - (pcb->sa >> 3); -      pcb->sa += m; -      if (m < 0) { -        m = -m; -      } -      m = m - (pcb->sv >> 2); -      pcb->sv += m; -      pcb->rto = (pcb->sa >> 3) + pcb->sv; - -      LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_receive: RTO %"U16_F" (%"U16_F" milliseconds)\n", -                                  pcb->rto, pcb->rto * TCP_SLOW_INTERVAL)); - -      pcb->rttest = 0; -    } -  } - -  /* If the incoming segment contains data, we must process it -     further. */ -  if (tcplen > 0) { -    /* This code basically does three things: - -    +) If the incoming segment contains data that is the next -    in-sequence data, this data is passed to the application. This -    might involve trimming the first edge of the data. The rcv_nxt -    variable and the advertised window are adjusted. - -    +) If the incoming segment has data that is above the next -    sequence number expected (->rcv_nxt), the segment is placed on -    the ->ooseq queue. This is done by finding the appropriate -    place in the ->ooseq queue (which is ordered by sequence -    number) and trim the segment in both ends if needed. An -    immediate ACK is sent to indicate that we received an -    out-of-sequence segment. - -    +) Finally, we check if the first segment on the ->ooseq queue -    now is in sequence (i.e., if rcv_nxt >= ooseq->seqno). If -    rcv_nxt > ooseq->seqno, we must trim the first edge of the -    segment on ->ooseq before we adjust rcv_nxt. The data in the -    segments that are now on sequence are chained onto the -    incoming segment so that we only need to call the application -    once. -    */ - -    /* First, we check if we must trim the first edge. We have to do -       this if the sequence number of the incoming segment is less -       than rcv_nxt, and the sequence number plus the length of the -       segment is larger than rcv_nxt. */ -    /*    if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)){ -          if (TCP_SEQ_LT(pcb->rcv_nxt, seqno + tcplen)) {*/ -    if (TCP_SEQ_BETWEEN(pcb->rcv_nxt, seqno + 1, seqno + tcplen - 1)){ -      /* Trimming the first edge is done by pushing the payload -         pointer in the pbuf downwards. This is somewhat tricky since -         we do not want to discard the full contents of the pbuf up to -         the new starting point of the data since we have to keep the -         TCP header which is present in the first pbuf in the chain. - -         What is done is really quite a nasty hack: the first pbuf in -         the pbuf chain is pointed to by inseg.p. Since we need to be -         able to deallocate the whole pbuf, we cannot change this -         inseg.p pointer to point to any of the later pbufs in the -         chain. Instead, we point the ->payload pointer in the first -         pbuf to data in one of the later pbufs. We also set the -         inseg.data pointer to point to the right place. This way, the -         ->p pointer will still point to the first pbuf, but the -         ->p->payload pointer will point to data in another pbuf. - -         After we are done with adjusting the pbuf pointers we must -         adjust the ->data pointer in the seg and the segment -         length.*/ - -      off = pcb->rcv_nxt - seqno; -      p = inseg.p; -      LWIP_ASSERT("inseg.p != NULL", inseg.p); -      LWIP_ASSERT("insane offset!", (off < 0x7fff)); -      if (inseg.p->len < off) { -        LWIP_ASSERT("pbuf too short!", (((s32_t)inseg.p->tot_len) >= off)); -        new_tot_len = (u16_t)(inseg.p->tot_len - off); -        while (p->len < off) { -          off -= p->len; -          /* KJM following line changed (with addition of new_tot_len var) -             to fix bug #9076 -             inseg.p->tot_len -= p->len; */ -          p->tot_len = new_tot_len; -          p->len = 0; -          p = p->next; -        } -        if(pbuf_header(p, (s16_t)-off)) { -          /* Do we need to cope with this failing?  Assert for now */ -          LWIP_ASSERT("pbuf_header failed", 0); -        } -      } else { -        if(pbuf_header(inseg.p, (s16_t)-off)) { -          /* Do we need to cope with this failing?  Assert for now */ -          LWIP_ASSERT("pbuf_header failed", 0); -        } -      } -      /* KJM following line changed to use p->payload rather than inseg->p->payload -         to fix bug #9076 */ -      inseg.dataptr = p->payload; -      inseg.len -= (u16_t)(pcb->rcv_nxt - seqno); -      inseg.tcphdr->seqno = seqno = pcb->rcv_nxt; -    } -    else { -      if (TCP_SEQ_LT(seqno, pcb->rcv_nxt)){ -        /* the whole segment is < rcv_nxt */ -        /* must be a duplicate of a packet that has already been correctly handled */ - -        LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: duplicate seqno %"U32_F"\n", seqno)); -        tcp_ack_now(pcb); -      } -    } - -    /* The sequence number must be within the window (above rcv_nxt -       and below rcv_nxt + rcv_wnd) in order to be further -       processed. */ -    if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt,  -                        pcb->rcv_nxt + pcb->rcv_wnd - 1)){ -      if (pcb->rcv_nxt == seqno) { -        /* The incoming segment is the next in sequence. We check if -           we have to trim the end of the segment and update rcv_nxt -           and pass the data to the application. */ -        tcplen = TCP_TCPLEN(&inseg); - -        if (tcplen > pcb->rcv_wnd) { -          LWIP_DEBUGF(TCP_INPUT_DEBUG,  -                      ("tcp_receive: other end overran receive window" -                       "seqno %"U32_F" len %"U32_F" right edge %"U32_F"\n", -                       seqno, tcplen, pcb->rcv_nxt + pcb->rcv_wnd)); -          if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { -            /* Must remove the FIN from the header as we're trimming  -             * that byte of sequence-space from the packet */ -            TCPH_FLAGS_SET(inseg.tcphdr, TCPH_FLAGS(inseg.tcphdr) &~ TCP_FIN); -          } -          /* Adjust length of segment to fit in the window. */ -          inseg.len = pcb->rcv_wnd; -          if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) { -            inseg.len -= 1; -          } -          pbuf_realloc(inseg.p, inseg.len); -          tcplen = TCP_TCPLEN(&inseg); -          LWIP_ASSERT("tcp_receive: segment not trimmed correctly to rcv_wnd\n", -                      (seqno + tcplen) == (pcb->rcv_nxt + pcb->rcv_wnd)); -        } -#if TCP_QUEUE_OOSEQ -        if (pcb->ooseq != NULL) { -          if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { -            LWIP_DEBUGF(TCP_INPUT_DEBUG,  -                        ("tcp_receive: received in-order FIN, binning ooseq queue\n")); -            /* Received in-order FIN means anything that was received -             * out of order must now have been received in-order, so -             * bin the ooseq queue -             * rcv_nxt -             * .    |--ooseq--| -             * .==seg============|FIN -             */ -            while (pcb->ooseq != NULL) { -              struct tcp_seg *old_ooseq = pcb->ooseq; -              pcb->ooseq = pcb->ooseq->next; -              tcp_seg_free(old_ooseq); -            }                -          }  -          else { -            struct tcp_seg* next = pcb->ooseq; -            struct tcp_seg *old_seg; -            /* rcv_nxt -             * .    |--ooseq--| -             * .==seg============| -             */ -            while (next && -                   TCP_SEQ_GEQ(seqno + tcplen, -                               next->tcphdr->seqno + next->len)) { -              /* inseg doesn't have FIN (already processed) */ -              if (TCPH_FLAGS(next->tcphdr) & TCP_FIN && -                  (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) == 0) { -                TCPH_FLAGS_SET(inseg.tcphdr,  -                               TCPH_FLAGS(inseg.tcphdr) | TCP_FIN); -                tcplen = TCP_TCPLEN(&inseg); -              } -              old_seg = next; -              next = next->next; -              tcp_seg_free(old_seg); -            } -            /* rcv_nxt -             * .             |--ooseq--| -             * .==seg============| -             */ -            if (next && -                TCP_SEQ_GT(seqno + tcplen, -                           next->tcphdr->seqno)) { -              /* FIN in inseg already handled by dropping whole ooseq queue */ -              inseg.len = (u16_t)(pcb->ooseq->tcphdr->seqno - seqno); -              if (TCPH_FLAGS(inseg.tcphdr) & TCP_SYN) { -                inseg.len -= 1; -              } -              pbuf_realloc(inseg.p, inseg.len); -              tcplen = TCP_TCPLEN(&inseg); -              LWIP_ASSERT("tcp_receive: segment not trimmed correctly to ooseq queue\n", -                          (seqno + tcplen) == pcb->ooseq->tcphdr->seqno); -            } -            pcb->ooseq = next; -          } -        } -#endif /* TCP_QUEUE_OOSEQ */ - -        pcb->rcv_nxt = seqno + tcplen; - -        /* Update the receiver's (our) window. */ -        LWIP_ASSERT("tcp_receive: tcplen > rcv_wnd\n", pcb->rcv_wnd >= tcplen); -        pcb->rcv_wnd -= tcplen; - -        tcp_update_rcv_ann_wnd(pcb); - -        /* If there is data in the segment, we make preparations to -           pass this up to the application. The ->recv_data variable -           is used for holding the pbuf that goes to the -           application. The code for reassembling out-of-sequence data -           chains its data on this pbuf as well. - -           If the segment was a FIN, we set the TF_GOT_FIN flag that will -           be used to indicate to the application that the remote side has -           closed its end of the connection. */ -        if (inseg.p->tot_len > 0) { -          recv_data = inseg.p; -          /* Since this pbuf now is the responsibility of the -             application, we delete our reference to it so that we won't -             (mistakingly) deallocate it. */ -          inseg.p = NULL; -        } -        if (TCPH_FLAGS(inseg.tcphdr) & TCP_FIN) { -          LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: received FIN.\n")); -          recv_flags |= TF_GOT_FIN; -        } - -#if TCP_QUEUE_OOSEQ -        /* We now check if we have segments on the ->ooseq queue that -           is now in sequence. */ -        while (pcb->ooseq != NULL && -               pcb->ooseq->tcphdr->seqno == pcb->rcv_nxt) { - -          cseg = pcb->ooseq; -          seqno = pcb->ooseq->tcphdr->seqno; - -          pcb->rcv_nxt += TCP_TCPLEN(cseg); -          LWIP_ASSERT("tcp_receive: ooseq tcplen > rcv_wnd\n", -                      pcb->rcv_wnd >= TCP_TCPLEN(cseg)); -          pcb->rcv_wnd -= TCP_TCPLEN(cseg); - -          tcp_update_rcv_ann_wnd(pcb); - -          if (cseg->p->tot_len > 0) { -            /* Chain this pbuf onto the pbuf that we will pass to -               the application. */ -            if (recv_data) { -              pbuf_cat(recv_data, cseg->p); -            } else { -              recv_data = cseg->p; -            } -            cseg->p = NULL; -          } -          if (TCPH_FLAGS(cseg->tcphdr) & TCP_FIN) { -            LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_receive: dequeued FIN.\n")); -            recv_flags |= TF_GOT_FIN; -            if (pcb->state == ESTABLISHED) { /* force passive close or we can move to active close */ -              pcb->state = CLOSE_WAIT; -            }  -          } - -          pcb->ooseq = cseg->next; -          tcp_seg_free(cseg); -        } -#endif /* TCP_QUEUE_OOSEQ */ - - -        /* Acknowledge the segment(s). */ -        tcp_ack(pcb); - -      } else { -        /* We get here if the incoming segment is out-of-sequence. */ -        tcp_send_empty_ack(pcb); -#if TCP_QUEUE_OOSEQ -        /* We queue the segment on the ->ooseq queue. */ -        if (pcb->ooseq == NULL) { -          pcb->ooseq = tcp_seg_copy(&inseg); -        } else { -          /* If the queue is not empty, we walk through the queue and -             try to find a place where the sequence number of the -             incoming segment is between the sequence numbers of the -             previous and the next segment on the ->ooseq queue. That is -             the place where we put the incoming segment. If needed, we -             trim the second edges of the previous and the incoming -             segment so that it will fit into the sequence. - -             If the incoming segment has the same sequence number as a -             segment on the ->ooseq queue, we discard the segment that -             contains less data. */ - -          prev = NULL; -          for(next = pcb->ooseq; next != NULL; next = next->next) { -            if (seqno == next->tcphdr->seqno) { -              /* The sequence number of the incoming segment is the -                 same as the sequence number of the segment on -                 ->ooseq. We check the lengths to see which one to -                 discard. */ -              if (inseg.len > next->len) { -                /* The incoming segment is larger than the old -                   segment. We replace some segments with the new -                   one. */ -                cseg = tcp_seg_copy(&inseg); -                if (cseg != NULL) { -                  if (prev != NULL) { -                    prev->next = cseg; -                  } else { -                    pcb->ooseq = cseg; -                  } -                  tcp_oos_insert_segment(cseg, next); -                } -                break; -              } else { -                /* Either the lenghts are the same or the incoming -                   segment was smaller than the old one; in either -                   case, we ditch the incoming segment. */ -                break; -              } -            } else { -              if (prev == NULL) { -                if (TCP_SEQ_LT(seqno, next->tcphdr->seqno)) { -                  /* The sequence number of the incoming segment is lower -                     than the sequence number of the first segment on the -                     queue. We put the incoming segment first on the -                     queue. */ -                  cseg = tcp_seg_copy(&inseg); -                  if (cseg != NULL) { -                    pcb->ooseq = cseg; -                    tcp_oos_insert_segment(cseg, next); -                  } -                  break; -                } -              } else { -                /*if (TCP_SEQ_LT(prev->tcphdr->seqno, seqno) && -                  TCP_SEQ_LT(seqno, next->tcphdr->seqno)) {*/ -                if (TCP_SEQ_BETWEEN(seqno, prev->tcphdr->seqno+1, next->tcphdr->seqno-1)) { -                  /* The sequence number of the incoming segment is in -                     between the sequence numbers of the previous and -                     the next segment on ->ooseq. We trim trim the previous -                     segment, delete next segments that included in received segment -                     and trim received, if needed. */ -                  cseg = tcp_seg_copy(&inseg); -                  if (cseg != NULL) { -                    if (TCP_SEQ_GT(prev->tcphdr->seqno + prev->len, seqno)) { -                      /* We need to trim the prev segment. */ -                      prev->len = (u16_t)(seqno - prev->tcphdr->seqno); -                      pbuf_realloc(prev->p, prev->len); -                    } -                    prev->next = cseg; -                    tcp_oos_insert_segment(cseg, next); -                  } -                  break; -                } -              } -              /* If the "next" segment is the last segment on the -                 ooseq queue, we add the incoming segment to the end -                 of the list. */ -              if (next->next == NULL && -                  TCP_SEQ_GT(seqno, next->tcphdr->seqno)) { -                if (TCPH_FLAGS(next->tcphdr) & TCP_FIN) { -                  /* segment "next" already contains all data */ -                  break; -                } -                next->next = tcp_seg_copy(&inseg); -                if (next->next != NULL) { -                  if (TCP_SEQ_GT(next->tcphdr->seqno + next->len, seqno)) { -                    /* We need to trim the last segment. */ -                    next->len = (u16_t)(seqno - next->tcphdr->seqno); -                    pbuf_realloc(next->p, next->len); -                  } -                } -                break; -              } -            } -            prev = next; -          } -        } -#endif /* TCP_QUEUE_OOSEQ */ - -      } -    } else { -      /* The incoming segment is not withing the window. */ -      tcp_send_empty_ack(pcb); -    } -  } else { -    /* Segments with length 0 is taken care of here. Segments that -       fall out of the window are ACKed. */ -    /*if (TCP_SEQ_GT(pcb->rcv_nxt, seqno) || -      TCP_SEQ_GEQ(seqno, pcb->rcv_nxt + pcb->rcv_wnd)) {*/ -    if(!TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, pcb->rcv_nxt + pcb->rcv_wnd-1)){ -      tcp_ack_now(pcb); -    } -  } -} - -/** - * Parses the options contained in the incoming segment.  - * - * Called from tcp_listen_input() and tcp_process(). - * Currently, only the MSS option is supported! - * - * @param pcb the tcp_pcb for which a segment arrived - */ -static void -tcp_parseopt(struct tcp_pcb *pcb) -{ -  u16_t c, max_c; -  u16_t mss; -  u8_t *opts, opt; -#if LWIP_TCP_TIMESTAMPS -  u32_t tsval; -#endif - -  opts = (u8_t *)tcphdr + TCP_HLEN; - -  /* Parse the TCP MSS option, if present. */ -  if(TCPH_HDRLEN(tcphdr) > 0x5) { -    max_c = (TCPH_HDRLEN(tcphdr) - 5) << 2; -    for (c = 0; c < max_c; ) { -      opt = opts[c]; -      switch (opt) { -      case 0x00: -        /* End of options. */ -        LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: EOL\n")); -        return; -      case 0x01: -        /* NOP option. */ -        ++c; -        LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: NOP\n")); -        break; -      case 0x02: -        LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: MSS\n")); -        if (opts[c + 1] != 0x04 || c + 0x04 > max_c) { -          /* Bad length */ -          LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); -          return; -        } -        /* An MSS option with the right option length. */ -        mss = (opts[c + 2] << 8) | opts[c + 3]; -        /* Limit the mss to the configured TCP_MSS and prevent division by zero */ -        pcb->mss = ((mss > TCP_MSS) || (mss == 0)) ? TCP_MSS : mss; -        /* Advance to next option */ -        c += 0x04; -        break; -#if LWIP_TCP_TIMESTAMPS -      case 0x08: -        LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: TS\n")); -        if (opts[c + 1] != 0x0A || c + 0x0A > max_c) { -          /* Bad length */ -          LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); -          return; -        } -        /* TCP timestamp option with valid length */ -        tsval = (opts[c+2]) | (opts[c+3] << 8) |  -          (opts[c+4] << 16) | (opts[c+5] << 24); -        if (flags & TCP_SYN) { -          pcb->ts_recent = ntohl(tsval); -          pcb->flags |= TF_TIMESTAMP; -        } else if (TCP_SEQ_BETWEEN(pcb->ts_lastacksent, seqno, seqno+tcplen)) { -          pcb->ts_recent = ntohl(tsval); -        } -        /* Advance to next option */ -        c += 0x0A; -        break; -#endif -      default: -        LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: other\n")); -        if (opts[c + 1] == 0) { -          LWIP_DEBUGF(TCP_INPUT_DEBUG, ("tcp_parseopt: bad length\n")); -          /* If the length field is zero, the options are malformed -             and we don't process them further. */ -          return; -        } -        /* All other options have a length field, so that we easily -           can skip past them. */ -        c += opts[c + 1]; -      } -    } -  } -} - -#endif /* LWIP_TCP */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_out.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_out.c deleted file mode 100644 index 9605beb..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_out.c +++ /dev/null @@ -1,1071 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * Transmission Control Protocol, outgoing traffic - * - * The output functions of TCP. - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels <adam@sics.se> - * - */ - -#include "lwip/opt.h" - -#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/tcp.h" -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/memp.h" -#include "lwip/sys.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/inet.h" -#include "lwip/inet_chksum.h" -#include "lwip/stats.h" -#include "lwip/snmp.h" - -#include <string.h> -#define _TEST_HD_ -/* Forward declarations.*/ -static void tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb); - -static struct tcp_hdr * -tcp_output_set_header(struct tcp_pcb *pcb, struct pbuf *p, int optlen, -                      u32_t seqno_be /* already in network byte order */) -{ -  struct tcp_hdr *tcphdr = p->payload; -  tcphdr->src = htons(pcb->local_port); -  tcphdr->dest = htons(pcb->remote_port); -  tcphdr->seqno = seqno_be; -  tcphdr->ackno = htonl(pcb->rcv_nxt); -  TCPH_FLAGS_SET(tcphdr, TCP_ACK); -  tcphdr->wnd = htons(pcb->rcv_ann_wnd); -  tcphdr->urgp = 0; -  TCPH_HDRLEN_SET(tcphdr, (5 + optlen / 4)); -  tcphdr->chksum = 0; - -  /* If we're sending a packet, update the announced right window edge */ -  pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd; - -  return tcphdr; -} - -/** - * Called by tcp_close() to send a segment including flags but not data. - * - * @param pcb the tcp_pcb over which to send a segment - * @param flags the flags to set in the segment header - * @return ERR_OK if sent, another err_t otherwise - */ -err_t -tcp_send_ctrl(struct tcp_pcb *pcb, u8_t flags) -{ -  /* no data, no length, flags, copy=1, no optdata */ -  return tcp_enqueue(pcb, NULL, 0, flags, TCP_WRITE_FLAG_COPY, 0); -} - -/** - * Write data for sending (but does not send it immediately). - * - * It waits in the expectation of more data being sent soon (as - * it can send them more efficiently by combining them together). - * To prompt the system to send data now, call tcp_output() after - * calling tcp_write(). - *  - * @param pcb Protocol control block of the TCP connection to enqueue data for. - * @param data pointer to the data to send - * @param len length (in bytes) of the data to send - * @param apiflags combination of following flags : - * - TCP_WRITE_FLAG_COPY (0x01) data will be copied into memory belonging to the stack - * - TCP_WRITE_FLAG_MORE (0x02) for TCP connection, PSH flag will be set on last segment sent, - * @return ERR_OK if enqueued, another err_t on error - *  - * @see tcp_write() - */ -err_t -tcp_write(struct tcp_pcb *pcb, const void *data, u16_t len, u8_t apiflags) -{ -  LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_write(pcb=%p, data=%p, len=%"U16_F", apiflags=%"U16_F")\n", (void *)pcb, -    data, len, (u16_t)apiflags)); -  /* connection is in valid state for data transmission? */ -  if (pcb->state == ESTABLISHED || -     pcb->state == CLOSE_WAIT || -     pcb->state == SYN_SENT || -     pcb->state == SYN_RCVD) { -    if (len > 0) { -#if LWIP_TCP_TIMESTAMPS -      return tcp_enqueue(pcb, (void *)data, len, 0, apiflags,  -                         pcb->flags & TF_TIMESTAMP ? TF_SEG_OPTS_TS : 0); -#else -      return tcp_enqueue(pcb, (void *)data, len, 0, apiflags, 0); -#endif -    } -    return ERR_OK; -  } else { -    LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_STATE | LWIP_DBG_LEVEL_SEVERE, ("tcp_write() called in invalid state\n")); -    return ERR_CONN; -  } -} - -/** - * Enqueue data and/or TCP options for transmission - * - * Called by tcp_connect(), tcp_listen_input(), tcp_send_ctrl() and tcp_write(). - * - * @param pcb Protocol control block for the TCP connection to enqueue data for. - * @param arg Pointer to the data to be enqueued for sending. - * @param len Data length in bytes - * @param flags tcp header flags to set in the outgoing segment - * @param apiflags combination of following flags : - * - TCP_WRITE_FLAG_COPY (0x01) data will be copied into memory belonging to the stack - * - TCP_WRITE_FLAG_MORE (0x02) for TCP connection, PSH flag will be set on last segment sent, - * @param optflags options to include in segment later on (see definition of struct tcp_seg) - */ -err_t -tcp_enqueue(struct tcp_pcb *pcb, void *arg, u16_t len, -            u8_t flags, u8_t apiflags, u8_t optflags) -{ -  struct pbuf *p; -  struct tcp_seg *seg, *useg, *queue; -  u32_t seqno; -  u16_t left, seglen; -  void *ptr; -  u16_t queuelen; -  u8_t optlen; - -  LWIP_DEBUGF(TCP_OUTPUT_DEBUG,  -              ("tcp_enqueue(pcb=%p, arg=%p, len=%"U16_F", flags=%"X16_F", apiflags=%"U16_F")\n", -               (void *)pcb, arg, len, (u16_t)flags, (u16_t)apiflags)); -  LWIP_ERROR("tcp_enqueue: packet needs payload, options, or SYN/FIN (programmer violates API)", -             ((len != 0) || (optflags != 0) || ((flags & (TCP_SYN | TCP_FIN)) != 0)), -             return ERR_ARG;); -  LWIP_ERROR("tcp_enqueue: len != 0 || arg == NULL (programmer violates API)",  -             ((len != 0) || (arg == NULL)), return ERR_ARG;); - -  /* fail on too much data */ -  if (len > pcb->snd_buf) { -    LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_WARNING, -      ("tcp_enqueue: too much data (len=%"U16_F" > snd_buf=%"U16_F")\n", len, pcb->snd_buf)); -    pcb->flags |= TF_NAGLEMEMERR; -    return ERR_MEM; -  } -  left = len; -  ptr = arg; - -  optlen = LWIP_TCP_OPT_LENGTH(optflags); - -  /* seqno will be the sequence number of the first segment enqueued -   * by the call to this function. */ -  seqno = pcb->snd_lbb; - -  LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_enqueue: queuelen: %"U16_F"\n", (u16_t)pcb->snd_queuelen)); - -  /* If total number of pbufs on the unsent/unacked queues exceeds the -   * configured maximum, return an error */ -  queuelen = pcb->snd_queuelen; -  /* check for configured max queuelen and possible overflow */ -  if ((queuelen >= TCP_SND_QUEUELEN) || (queuelen > TCP_SNDQUEUELEN_OVERFLOW)) { -    LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_WARNING, -      ("tcp_enqueue: too long queue %"U16_F" (max %"U16_F")\n", queuelen, TCP_SND_QUEUELEN)); -    TCP_STATS_INC(tcp.memerr); -    pcb->flags |= TF_NAGLEMEMERR; -    return ERR_MEM; -  } -  if (queuelen != 0) { -    LWIP_ASSERT("tcp_enqueue: pbufs on queue => at least one queue non-empty", -      pcb->unacked != NULL || pcb->unsent != NULL); -  } else { -    LWIP_ASSERT("tcp_enqueue: no pbufs on queue => both queues empty", -      pcb->unacked == NULL && pcb->unsent == NULL); -  } - -  /* First, break up the data into segments and tuck them together in -   * the local "queue" variable. */ -  useg = queue = seg = NULL; -  seglen = 0; -  while (queue == NULL || left > 0) { -    /* The segment length (including options) should be at most the MSS */ -    seglen = left > (pcb->mss - optlen) ? (pcb->mss - optlen) : left; - -    /* Allocate memory for tcp_seg, and fill in fields. */ -    seg = memp_malloc(MEMP_TCP_SEG); -    if (seg == NULL) { -      LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS,  -                  ("tcp_enqueue: could not allocate memory for tcp_seg\n")); -      goto memerr; -    } -    seg->next = NULL; -    seg->p = NULL; - -    /* first segment of to-be-queued data? */ -    if (queue == NULL) { -      queue = seg; -    } -    /* subsequent segments of to-be-queued data */ -    else { -      /* Attach the segment to the end of the queued segments */ -      LWIP_ASSERT("useg != NULL", useg != NULL); -      useg->next = seg; -    } -    /* remember last segment of to-be-queued data for next iteration */ -    useg = seg; - -    /* If copy is set, memory should be allocated -     * and data copied into pbuf, otherwise data comes from -     * ROM or other static memory, and need not be copied.  */ -    if (apiflags & TCP_WRITE_FLAG_COPY) { -      if ((seg->p = pbuf_alloc(PBUF_TRANSPORT, seglen + optlen, PBUF_RAM)) == NULL) { -        LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS,  -                    ("tcp_enqueue : could not allocate memory for pbuf copy size %"U16_F"\n", seglen)); -        goto memerr; -      } -      LWIP_ASSERT("check that first pbuf can hold the complete seglen", -                  (seg->p->len >= seglen + optlen)); -      queuelen += pbuf_clen(seg->p); -      if (arg != NULL) { -        MEMCPY((char *)seg->p->payload + optlen, ptr, seglen); -      } -      seg->dataptr = seg->p->payload; -    } -    /* do not copy data */ -    else { -      /* First, allocate a pbuf for the headers. */ -      if ((seg->p = pbuf_alloc(PBUF_TRANSPORT, optlen, PBUF_RAM)) == NULL) { -        LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS,  -                    ("tcp_enqueue: could not allocate memory for header pbuf\n")); -        goto memerr; -      } -      queuelen += pbuf_clen(seg->p); - -      /* Second, allocate a pbuf for holding the data. -       * since the referenced data is available at least until it is sent out on the -       * link (as it has to be ACKed by the remote party) we can safely use PBUF_ROM -       * instead of PBUF_REF here. -       */ -      if (left > 0) { -        if ((p = pbuf_alloc(PBUF_RAW, seglen, PBUF_ROM)) == NULL) { -          /* If allocation fails, we have to deallocate the header pbuf as well. */ -          pbuf_free(seg->p); -          seg->p = NULL; -          LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS,  -                      ("tcp_enqueue: could not allocate memory for zero-copy pbuf\n")); -          goto memerr; -        } -        ++queuelen; -        /* reference the non-volatile payload data */ -        p->payload = ptr; -        seg->dataptr = ptr; - -        /* Concatenate the headers and data pbufs together. */ -        pbuf_cat(seg->p/*header*/, p/*data*/); -        p = NULL; -      } -    } - -    /* Now that there are more segments queued, we check again if the -    length of the queue exceeds the configured maximum or overflows. */ -    if ((queuelen > TCP_SND_QUEUELEN) || (queuelen > TCP_SNDQUEUELEN_OVERFLOW)) { -      LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, -        ("tcp_enqueue: queue too long %"U16_F" (%"U16_F")\n", queuelen, TCP_SND_QUEUELEN)); -      goto memerr; -    } - -    seg->len = seglen; - -    /* build TCP header */ -    if (pbuf_header(seg->p, TCP_HLEN)) { -      LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("tcp_enqueue: no room for TCP header in pbuf.\n")); -      TCP_STATS_INC(tcp.err); -      goto memerr; -    } -    seg->tcphdr = seg->p->payload; -    seg->tcphdr->src = htons(pcb->local_port); -    seg->tcphdr->dest = htons(pcb->remote_port); -    seg->tcphdr->seqno = htonl(seqno); -    seg->tcphdr->urgp = 0; -    TCPH_FLAGS_SET(seg->tcphdr, flags); -    /* don't fill in tcphdr->ackno and tcphdr->wnd until later */ - -    seg->flags = optflags; - -    /* Set the length of the header */ -    TCPH_HDRLEN_SET(seg->tcphdr, (5 + optlen / 4)); -    LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_TRACE, ("tcp_enqueue: queueing %"U32_F":%"U32_F" (0x%"X16_F")\n", -      ntohl(seg->tcphdr->seqno), -      ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg), -      (u16_t)flags)); - -    left -= seglen; -    seqno += seglen; -    ptr = (void *)((u8_t *)ptr + seglen); -  } - -  /* Now that the data to be enqueued has been broken up into TCP -  segments in the queue variable, we add them to the end of the -  pcb->unsent queue. */ -  if (pcb->unsent == NULL) { -    useg = NULL; -  } -  else { -    for (useg = pcb->unsent; useg->next != NULL; useg = useg->next); -  } -  /* { useg is last segment on the unsent queue, NULL if list is empty } */ - -  /* If there is room in the last pbuf on the unsent queue, -  chain the first pbuf on the queue together with that. */ -  if (useg != NULL && -    TCP_TCPLEN(useg) != 0 && -    !(TCPH_FLAGS(useg->tcphdr) & (TCP_SYN | TCP_FIN)) && -    (!(flags & (TCP_SYN | TCP_FIN)) || (flags == TCP_FIN)) && -    /* fit within max seg size */ -    (useg->len + queue->len <= pcb->mss) && -    /* only concatenate segments with the same options */ -    (useg->flags == queue->flags) && -    /* segments are consecutive */ -    (ntohl(useg->tcphdr->seqno) + useg->len == ntohl(queue->tcphdr->seqno)) ) { -    /* Remove TCP header from first segment of our to-be-queued list */ -    if(pbuf_header(queue->p, -(TCP_HLEN + optlen))) { -      /* Can we cope with this failing?  Just assert for now */ -      LWIP_ASSERT("pbuf_header failed\n", 0); -      TCP_STATS_INC(tcp.err); -      goto memerr; -    } -    if (queue->p->len == 0) { -      /* free the first (header-only) pbuf if it is now empty (contained only headers) */ -      struct pbuf *old_q = queue->p; -      queue->p = queue->p->next; -      old_q->next = NULL; -      queuelen--; -      pbuf_free(old_q); -    } -    if (flags & TCP_FIN) { -      /* the new segment contains only FIN, no data -> put the FIN into the last segment */ -      LWIP_ASSERT("FIN enqueued together with data", queue->p == NULL && queue->len == 0); -      TCPH_SET_FLAG(useg->tcphdr, TCP_FIN); -    } else { -      LWIP_ASSERT("zero-length pbuf", (queue->p != NULL) && (queue->p->len > 0)); -      pbuf_cat(useg->p, queue->p); -      useg->len += queue->len; -      useg->next = queue->next; -    } - -    LWIP_DEBUGF(TCP_OUTPUT_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("tcp_enqueue: chaining segments, new len %"U16_F"\n", useg->len)); -    if (seg == queue) { -      seg = useg; -      seglen = useg->len; -    } -    memp_free(MEMP_TCP_SEG, queue); -  } -  else { -    /* empty list */ -    if (useg == NULL) { -      /* initialize list with this segment */ -      pcb->unsent = queue; -    } -    /* enqueue segment */ -    else { -      useg->next = queue; -    } -  } -  if ((flags & TCP_SYN) || (flags & TCP_FIN)) { -    ++len; -  } -  if (flags & TCP_FIN) { -    pcb->flags |= TF_FIN; -  } -  pcb->snd_lbb += len; - -  pcb->snd_buf -= len; - -  /* update number of segments on the queues */ -  pcb->snd_queuelen = queuelen; -  LWIP_DEBUGF(TCP_QLEN_DEBUG, ("tcp_enqueue: %"S16_F" (after enqueued)\n", pcb->snd_queuelen)); -  if (pcb->snd_queuelen != 0) { -    LWIP_ASSERT("tcp_enqueue: valid queue length", -      pcb->unacked != NULL || pcb->unsent != NULL); -  } - -  /* Set the PSH flag in the last segment that we enqueued, but only -  if the segment has data (indicated by seglen > 0). */ -  if (seg != NULL && seglen > 0 && seg->tcphdr != NULL && ((apiflags & TCP_WRITE_FLAG_MORE)==0)) { -    TCPH_SET_FLAG(seg->tcphdr, TCP_PSH); -  } - -  return ERR_OK; -memerr: -  pcb->flags |= TF_NAGLEMEMERR; -  TCP_STATS_INC(tcp.memerr); - -  if (queue != NULL) { -    tcp_segs_free(queue); -  } -  if (pcb->snd_queuelen != 0) { -    LWIP_ASSERT("tcp_enqueue: valid queue length", pcb->unacked != NULL || -      pcb->unsent != NULL); -  } -  LWIP_DEBUGF(TCP_QLEN_DEBUG | LWIP_DBG_STATE, ("tcp_enqueue: %"S16_F" (with mem err)\n", pcb->snd_queuelen)); -  return ERR_MEM; -} - - -#if LWIP_TCP_TIMESTAMPS -/* Build a timestamp option (12 bytes long) at the specified options pointer) - * - * @param pcb tcp_pcb - * @param opts option pointer where to store the timestamp option - */ -static void -tcp_build_timestamp_option(struct tcp_pcb *pcb, u32_t *opts) -{ -  /* Pad with two NOP options to make everything nicely aligned */ -  opts[0] = htonl(0x0101080A); -  opts[1] = htonl(sys_now()); -  opts[2] = htonl(pcb->ts_recent); -} -#endif - -/** Send an ACK without data. - * - * @param pcb Protocol control block for the TCP connection to send the ACK - */ -err_t -tcp_send_empty_ack(struct tcp_pcb *pcb) -{ -  struct pbuf *p; -  struct tcp_hdr *tcphdr; -  u8_t optlen = 0; - -#if LWIP_TCP_TIMESTAMPS -  if (pcb->flags & TF_TIMESTAMP) { -    optlen = LWIP_TCP_OPT_LENGTH(TF_SEG_OPTS_TS); -  } -#endif -  p = pbuf_alloc(PBUF_IP, TCP_HLEN + optlen, PBUF_RAM); -  if (p == NULL) { -    LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: (ACK) could not allocate pbuf\n")); -    return ERR_BUF; -  } -  LWIP_DEBUGF(TCP_OUTPUT_DEBUG,  -              ("tcp_output: sending ACK for %"U32_F"\n", pcb->rcv_nxt)); -  /* remove ACK flags from the PCB, as we send an empty ACK now */ -  pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW); - -  tcphdr = tcp_output_set_header(pcb, p, optlen, htonl(pcb->snd_nxt)); - -  /* NB. MSS option is only sent on SYNs, so ignore it here */ -#if LWIP_TCP_TIMESTAMPS -  pcb->ts_lastacksent = pcb->rcv_nxt; - -  if (pcb->flags & TF_TIMESTAMP) { -    tcp_build_timestamp_option(pcb, (u32_t *)(tcphdr + 1)); -  } -#endif  - -#if CHECKSUM_GEN_TCP -  tcphdr->chksum = inet_chksum_pseudo(p, &(pcb->local_ip), &(pcb->remote_ip), -        IP_PROTO_TCP, p->tot_len); -#endif -#if LWIP_NETIF_HWADDRHINT -  ip_output_hinted(p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, -      IP_PROTO_TCP, &(pcb->addr_hint)); -#else /* LWIP_NETIF_HWADDRHINT*/ -  ip_output(p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, -      IP_PROTO_TCP); -#endif /* LWIP_NETIF_HWADDRHINT*/ -  pbuf_free(p); - -  return ERR_OK; -} - -/** - * Find out what we can send and send it - * - * @param pcb Protocol control block for the TCP connection to send data - * @return ERR_OK if data has been sent or nothing to send - *         another err_t on error - */ -err_t -tcp_output(struct tcp_pcb *pcb) -{ -  struct tcp_seg *seg, *useg; -  u32_t wnd, snd_nxt; -#if TCP_CWND_DEBUG -  s16_t i = 0; -#endif /* TCP_CWND_DEBUG */ - -  /* First, check if we are invoked by the TCP input processing -     code. If so, we do not output anything. Instead, we rely on the -     input processing code to call us when input processing is done -     with. */ -  if (tcp_input_pcb == pcb) { -    return ERR_OK; -  } - -  wnd = LWIP_MIN(pcb->snd_wnd, pcb->cwnd); - -  seg = pcb->unsent; - -  /* If the TF_ACK_NOW flag is set and no data will be sent (either -   * because the ->unsent queue is empty or because the window does -   * not allow it), construct an empty ACK segment and send it. -   * -   * If data is to be sent, we will just piggyback the ACK (see below). -   */ -  if (pcb->flags & TF_ACK_NOW && -     (seg == NULL || -      ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > wnd)) { -     return tcp_send_empty_ack(pcb); -  } - -  /* useg should point to last segment on unacked queue */ -  useg = pcb->unacked; -  if (useg != NULL) { -    for (; useg->next != NULL; useg = useg->next); -  } - -#if TCP_OUTPUT_DEBUG -  if (seg == NULL) { -    LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output: nothing to send (%p)\n", -                                   (void*)pcb->unsent)); -  } -#endif /* TCP_OUTPUT_DEBUG */ -#if TCP_CWND_DEBUG -  if (seg == NULL) { -    LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_output: snd_wnd %"U16_F -                                 ", cwnd %"U16_F", wnd %"U32_F -                                 ", seg == NULL, ack %"U32_F"\n", -                                 pcb->snd_wnd, pcb->cwnd, wnd, pcb->lastack)); -  } else { -    LWIP_DEBUGF(TCP_CWND_DEBUG,  -                ("tcp_output: snd_wnd %"U16_F", cwnd %"U16_F", wnd %"U32_F -                 ", effwnd %"U32_F", seq %"U32_F", ack %"U32_F"\n", -                 pcb->snd_wnd, pcb->cwnd, wnd, -                 ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len, -                 ntohl(seg->tcphdr->seqno), pcb->lastack)); -  } -#endif /* TCP_CWND_DEBUG */ -  /* data available and window allows it to be sent? */ -  while (seg != NULL && -         ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len <= wnd) { -    LWIP_ASSERT("RST not expected here!",  -                (TCPH_FLAGS(seg->tcphdr) & TCP_RST) == 0); -    /* Stop sending if the nagle algorithm would prevent it -     * Don't stop: -     * - if tcp_enqueue had a memory error before (prevent delayed ACK timeout) or -     * - if FIN was already enqueued for this PCB (SYN is always alone in a segment - -     *   either seg->next != NULL or pcb->unacked == NULL; -     *   RST is no sent using tcp_enqueue/tcp_output. -     */ -    if((tcp_do_output_nagle(pcb) == 0) && -      ((pcb->flags & (TF_NAGLEMEMERR | TF_FIN)) == 0)){ -      break; -    } -#if TCP_CWND_DEBUG -    LWIP_DEBUGF(TCP_CWND_DEBUG, ("tcp_output: snd_wnd %"U16_F", cwnd %"U16_F", wnd %"U32_F", effwnd %"U32_F", seq %"U32_F", ack %"U32_F", i %"S16_F"\n", -                            pcb->snd_wnd, pcb->cwnd, wnd, -                            ntohl(seg->tcphdr->seqno) + seg->len - -                            pcb->lastack, -                            ntohl(seg->tcphdr->seqno), pcb->lastack, i)); -    ++i; -#endif /* TCP_CWND_DEBUG */ - -    pcb->unsent = seg->next; - -    if (pcb->state != SYN_SENT) { -      TCPH_SET_FLAG(seg->tcphdr, TCP_ACK); -      pcb->flags &= ~(TF_ACK_DELAY | TF_ACK_NOW); -    } - -    tcp_output_segment(seg, pcb); -    snd_nxt = ntohl(seg->tcphdr->seqno) + TCP_TCPLEN(seg); -    if (TCP_SEQ_LT(pcb->snd_nxt, snd_nxt)) { -      pcb->snd_nxt = snd_nxt; -    } -    /* put segment on unacknowledged list if length > 0 */ -    if (TCP_TCPLEN(seg) > 0) { -      seg->next = NULL; -      /* unacked list is empty? */ -      if (pcb->unacked == NULL) { -        pcb->unacked = seg; -        useg = seg; -      /* unacked list is not empty? */ -      } else { -        /* In the case of fast retransmit, the packet should not go to the tail -         * of the unacked queue, but rather somewhere before it. We need to check for -         * this case. -STJ Jul 27, 2004 */ -        if (TCP_SEQ_LT(ntohl(seg->tcphdr->seqno), ntohl(useg->tcphdr->seqno))){ -          /* add segment to before tail of unacked list, keeping the list sorted */ -          struct tcp_seg **cur_seg = &(pcb->unacked); -          while (*cur_seg && -            TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) { -              cur_seg = &((*cur_seg)->next ); -          } -          seg->next = (*cur_seg); -          (*cur_seg) = seg; -        } else { -          /* add segment to tail of unacked list */ -          useg->next = seg; -          useg = useg->next; -        } -      } -    /* do not queue empty segments on the unacked list */ -    } else { -      tcp_seg_free(seg); -    } -    seg = pcb->unsent; -  } - -  if (seg != NULL && pcb->persist_backoff == 0 &&  -      ntohl(seg->tcphdr->seqno) - pcb->lastack + seg->len > pcb->snd_wnd) { -    /* prepare for persist timer */ -    pcb->persist_cnt = 0; -    pcb->persist_backoff = 1; -  } - -  pcb->flags &= ~TF_NAGLEMEMERR; -  return ERR_OK; -} - -/** - * Called by tcp_output() to actually send a TCP segment over IP. - * - * @param seg the tcp_seg to send - * @param pcb the tcp_pcb for the TCP connection used to send the segment - */ -static void -tcp_output_segment(struct tcp_seg *seg, struct tcp_pcb *pcb) -{ -  u16_t len; -  struct netif *netif; -  u32_t *opts; - -  /** @bug Exclude retransmitted segments from this count. */ -  snmp_inc_tcpoutsegs(); - -  /* The TCP header has already been constructed, but the ackno and -   wnd fields remain. */ -  seg->tcphdr->ackno = htonl(pcb->rcv_nxt); - -  /* advertise our receive window size in this TCP segment */ -  seg->tcphdr->wnd = htons(pcb->rcv_ann_wnd); - -  pcb->rcv_ann_right_edge = pcb->rcv_nxt + pcb->rcv_ann_wnd; - -  /* Add any requested options.  NB MSS option is only set on SYN -     packets, so ignore it here */ -  opts = (u32_t *)(seg->tcphdr + 1); -  if (seg->flags & TF_SEG_OPTS_MSS) { -    TCP_BUILD_MSS_OPTION(*opts); -    opts += 1; -  } -#if LWIP_TCP_TIMESTAMPS -  pcb->ts_lastacksent = pcb->rcv_nxt; - -  if (seg->flags & TF_SEG_OPTS_TS) { -    tcp_build_timestamp_option(pcb, opts); -    opts += 3; -  } -#endif - -#ifdef _TEST_HD_ -  /* ANGR: set rtime this _before_ checking ip_route(). Otherwise TCP_SYN will -   * not be retransmitted in case the interface was down and tcp_connect() -   * will not return any error. Since we still want the err_cb() (or maybe -   * the wifi link comes up), make sure that we fulfill the retransmissions in -   * tcp_slowtmr() -   */ - -  /* Set retransmission timer running if it is not currently enabled */ -  if(pcb->rtime == -1) -    pcb->rtime = 0; -#endif - -  /* If we don't have a local IP address, we get one by -     calling ip_route(). */ -  if (ip_addr_isany(&(pcb->local_ip))) { -    netif = ip_route(&(pcb->remote_ip)); -    if (netif == NULL) { -      return; -    } -    ip_addr_set(&(pcb->local_ip), &(netif->ip_addr)); -  } - -#ifndef _TEST_HD_ -  //Set retransmission timer running if it is not currently enabled -  if(pcb->rtime == -1) -    pcb->rtime = 0; -#endif - -  if (pcb->rttest == 0) { -    pcb->rttest = tcp_ticks; -    pcb->rtseq = ntohl(seg->tcphdr->seqno); - -    LWIP_DEBUGF(TCP_RTO_DEBUG, ("tcp_output_segment: rtseq %"U32_F"\n", pcb->rtseq)); -  } -  LWIP_DEBUGF(TCP_OUTPUT_DEBUG, ("tcp_output_segment: %"U32_F":%"U32_F"\n", -          htonl(seg->tcphdr->seqno), htonl(seg->tcphdr->seqno) + -          seg->len)); - -  len = (u16_t)((u8_t *)seg->tcphdr - (u8_t *)seg->p->payload); - -  seg->p->len -= len; -  seg->p->tot_len -= len; - -  seg->p->payload = seg->tcphdr; - -  seg->tcphdr->chksum = 0; -#if CHECKSUM_GEN_TCP -  seg->tcphdr->chksum = inet_chksum_pseudo(seg->p, -             &(pcb->local_ip), -             &(pcb->remote_ip), -             IP_PROTO_TCP, seg->p->tot_len); -#endif -  TCP_STATS_INC(tcp.xmit); - -#if LWIP_NETIF_HWADDRHINT -  ip_output_hinted(seg->p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, -      IP_PROTO_TCP, &(pcb->addr_hint)); -#else /* LWIP_NETIF_HWADDRHINT*/ -  ip_output(seg->p, &(pcb->local_ip), &(pcb->remote_ip), pcb->ttl, pcb->tos, -      IP_PROTO_TCP); -#endif /* LWIP_NETIF_HWADDRHINT*/ -} - -/** - * Send a TCP RESET packet (empty segment with RST flag set) either to - * abort a connection or to show that there is no matching local connection - * for a received segment. - * - * Called by tcp_abort() (to abort a local connection), tcp_input() (if no - * matching local pcb was found), tcp_listen_input() (if incoming segment - * has ACK flag set) and tcp_process() (received segment in the wrong state) - * - * Since a RST segment is in most cases not sent for an active connection, - * tcp_rst() has a number of arguments that are taken from a tcp_pcb for - * most other segment output functions. - * - * @param seqno the sequence number to use for the outgoing segment - * @param ackno the acknowledge number to use for the outgoing segment - * @param local_ip the local IP address to send the segment from - * @param remote_ip the remote IP address to send the segment to - * @param local_port the local TCP port to send the segment from - * @param remote_port the remote TCP port to send the segment to - */ -void -tcp_rst(u32_t seqno, u32_t ackno, -  struct ip_addr *local_ip, struct ip_addr *remote_ip, -  u16_t local_port, u16_t remote_port) -{ -  struct pbuf *p; -  struct tcp_hdr *tcphdr; -  p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM); -  if (p == NULL) { -      LWIP_DEBUGF(TCP_DEBUG, ("tcp_rst: could not allocate memory for pbuf\n")); -      return; -  } -  LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr", -              (p->len >= sizeof(struct tcp_hdr))); - -  tcphdr = p->payload; -  tcphdr->src = htons(local_port); -  tcphdr->dest = htons(remote_port); -  tcphdr->seqno = htonl(seqno); -  tcphdr->ackno = htonl(ackno); -  TCPH_FLAGS_SET(tcphdr, TCP_RST | TCP_ACK); -  tcphdr->wnd = htons(TCP_WND); -  tcphdr->urgp = 0; -  TCPH_HDRLEN_SET(tcphdr, 5); - -  tcphdr->chksum = 0; -#if CHECKSUM_GEN_TCP -  tcphdr->chksum = inet_chksum_pseudo(p, local_ip, remote_ip, -              IP_PROTO_TCP, p->tot_len); -#endif -  TCP_STATS_INC(tcp.xmit); -  snmp_inc_tcpoutrsts(); -   /* Send output with hardcoded TTL since we have no access to the pcb */ -  ip_output(p, local_ip, remote_ip, TCP_TTL, 0, IP_PROTO_TCP); -  pbuf_free(p); -  LWIP_DEBUGF(TCP_RST_DEBUG, ("tcp_rst: seqno %"U32_F" ackno %"U32_F".\n", seqno, ackno)); -} - -/** - * Requeue all unacked segments for retransmission - * - * Called by tcp_slowtmr() for slow retransmission. - * - * @param pcb the tcp_pcb for which to re-enqueue all unacked segments - */ -void -tcp_rexmit_rto(struct tcp_pcb *pcb) -{ -  struct tcp_seg *seg; - -  if (pcb->unacked == NULL) { -    return; -  } - -  /* Move all unacked segments to the head of the unsent queue */ -  for (seg = pcb->unacked; seg->next != NULL; seg = seg->next); -  /* concatenate unsent queue after unacked queue */ -  seg->next = pcb->unsent; -  /* unsent queue is the concatenated queue (of unacked, unsent) */ -  pcb->unsent = pcb->unacked; -  /* unacked queue is now empty */ -  pcb->unacked = NULL; - -  /* increment number of retransmissions */ -  ++pcb->nrtx; - -  /* Don't take any RTT measurements after retransmitting. */ -  pcb->rttest = 0; - -  /* Do the actual retransmission */ -  tcp_output(pcb); -} - -/** - * Requeue the first unacked segment for retransmission - * - * Called by tcp_receive() for fast retramsmit. - * - * @param pcb the tcp_pcb for which to retransmit the first unacked segment - */ -void -tcp_rexmit(struct tcp_pcb *pcb) -{ -  struct tcp_seg *seg; -  struct tcp_seg **cur_seg; - -  if (pcb->unacked == NULL) { -    return; -  } - -  /* Move the first unacked segment to the unsent queue */ -  /* Keep the unsent queue sorted. */ -  seg = pcb->unacked; -  pcb->unacked = seg->next; - -  cur_seg = &(pcb->unsent); -  while (*cur_seg && -    TCP_SEQ_LT(ntohl((*cur_seg)->tcphdr->seqno), ntohl(seg->tcphdr->seqno))) { -      cur_seg = &((*cur_seg)->next ); -  } -  seg->next = *cur_seg; -  *cur_seg = seg; - -  ++pcb->nrtx; - -  /* Don't take any rtt measurements after retransmitting. */ -  pcb->rttest = 0; - -  /* Do the actual retransmission. */ -  snmp_inc_tcpretranssegs(); -  /* No need to call tcp_output: we are always called from tcp_input() -     and thus tcp_output directly returns. */ -} - - -/** - * Handle retransmission after three dupacks received - * - * @param pcb the tcp_pcb for which to retransmit the first unacked segment - */ -void  -tcp_rexmit_fast(struct tcp_pcb *pcb) -{ -  if (pcb->unacked != NULL && !(pcb->flags & TF_INFR)) { -    /* This is fast retransmit. Retransmit the first unacked segment. */ -    LWIP_DEBUGF(TCP_FR_DEBUG,  -                ("tcp_receive: dupacks %"U16_F" (%"U32_F -                 "), fast retransmit %"U32_F"\n", -                 (u16_t)pcb->dupacks, pcb->lastack, -                 ntohl(pcb->unacked->tcphdr->seqno))); -    tcp_rexmit(pcb); - -    /* Set ssthresh to half of the minimum of the current -     * cwnd and the advertised window */ -    if (pcb->cwnd > pcb->snd_wnd) -      pcb->ssthresh = pcb->snd_wnd / 2; -    else -      pcb->ssthresh = pcb->cwnd / 2; -     -    /* The minimum value for ssthresh should be 2 MSS */ -    if (pcb->ssthresh < 2*pcb->mss) { -      LWIP_DEBUGF(TCP_FR_DEBUG,  -                  ("tcp_receive: The minimum value for ssthresh %"U16_F -                   " should be min 2 mss %"U16_F"...\n", -                   pcb->ssthresh, 2*pcb->mss)); -      pcb->ssthresh = 2*pcb->mss; -    } -     -    pcb->cwnd = pcb->ssthresh + 3 * pcb->mss; -    pcb->flags |= TF_INFR; -  }  -} - - -/** - * Send keepalive packets to keep a connection active although - * no data is sent over it. - * - * Called by tcp_slowtmr() - * - * @param pcb the tcp_pcb for which to send a keepalive packet - */ -void -tcp_keepalive(struct tcp_pcb *pcb) -{ -  struct pbuf *p; -  struct tcp_hdr *tcphdr; - -  LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: sending KEEPALIVE probe to %"U16_F".%"U16_F".%"U16_F".%"U16_F"\n", -                          ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip), -                          ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip))); - -  LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: tcp_ticks %"U32_F"   pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n",  -                          tcp_ticks, pcb->tmr, pcb->keep_cnt_sent)); -    -  p = pbuf_alloc(PBUF_IP, TCP_HLEN, PBUF_RAM); -    -  if(p == NULL) { -    LWIP_DEBUGF(TCP_DEBUG,  -                ("tcp_keepalive: could not allocate memory for pbuf\n")); -    return; -  } -  LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr", -              (p->len >= sizeof(struct tcp_hdr))); - -  tcphdr = tcp_output_set_header(pcb, p, 0, htonl(pcb->snd_nxt - 1)); - -#if CHECKSUM_GEN_TCP -  tcphdr->chksum = inet_chksum_pseudo(p, &pcb->local_ip, &pcb->remote_ip, -                                      IP_PROTO_TCP, p->tot_len); -#endif -  TCP_STATS_INC(tcp.xmit); - -  /* Send output to IP */ -#if LWIP_NETIF_HWADDRHINT -  ip_output_hinted(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP, -    &(pcb->addr_hint)); -#else /* LWIP_NETIF_HWADDRHINT*/ -  ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP); -#endif /* LWIP_NETIF_HWADDRHINT*/ - -  pbuf_free(p); - -  LWIP_DEBUGF(TCP_DEBUG, ("tcp_keepalive: seqno %"U32_F" ackno %"U32_F".\n", -                          pcb->snd_nxt - 1, pcb->rcv_nxt)); -} - - -/** - * Send persist timer zero-window probes to keep a connection active - * when a window update is lost. - * - * Called by tcp_slowtmr() - * - * @param pcb the tcp_pcb for which to send a zero-window probe packet - */ -void -tcp_zero_window_probe(struct tcp_pcb *pcb) -{ -  struct pbuf *p; -  struct tcp_hdr *tcphdr; -  struct tcp_seg *seg; -  u16_t len; -  u8_t is_fin; - -  LWIP_DEBUGF(TCP_DEBUG,  -              ("tcp_zero_window_probe: sending ZERO WINDOW probe to %" -               U16_F".%"U16_F".%"U16_F".%"U16_F"\n", -               ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip), -               ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip))); - -  LWIP_DEBUGF(TCP_DEBUG,  -              ("tcp_zero_window_probe: tcp_ticks %"U32_F -               "   pcb->tmr %"U32_F" pcb->keep_cnt_sent %"U16_F"\n",  -               tcp_ticks, pcb->tmr, pcb->keep_cnt_sent)); - -  seg = pcb->unacked; - -  if(seg == NULL) -    seg = pcb->unsent; - -  if(seg == NULL) -    return; - -  is_fin = ((TCPH_FLAGS(seg->tcphdr) & TCP_FIN) != 0) && (seg->len == 0); -  len = is_fin ? TCP_HLEN : TCP_HLEN + 1; - -  p = pbuf_alloc(PBUF_IP, len, PBUF_RAM); -  if(p == NULL) { -    LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: no memory for pbuf\n")); -    return; -  } -  LWIP_ASSERT("check that first pbuf can hold struct tcp_hdr", -              (p->len >= sizeof(struct tcp_hdr))); - -  tcphdr = tcp_output_set_header(pcb, p, 0, seg->tcphdr->seqno); - -  if (is_fin) { -    /* FIN segment, no data */ -    TCPH_FLAGS_SET(tcphdr, TCP_ACK | TCP_FIN); -  } else { -    /* Data segment, copy in one byte from the head of the unacked queue */ -    *((char *)p->payload + sizeof(struct tcp_hdr)) = *(char *)seg->dataptr; -  } - -#if CHECKSUM_GEN_TCP -  tcphdr->chksum = inet_chksum_pseudo(p, &pcb->local_ip, &pcb->remote_ip, -                                      IP_PROTO_TCP, p->tot_len); -#endif -  TCP_STATS_INC(tcp.xmit); - -  /* Send output to IP */ -#if LWIP_NETIF_HWADDRHINT -  ip_output_hinted(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP, -    &(pcb->addr_hint)); -#else /* LWIP_NETIF_HWADDRHINT*/ -  ip_output(p, &pcb->local_ip, &pcb->remote_ip, pcb->ttl, 0, IP_PROTO_TCP); -#endif /* LWIP_NETIF_HWADDRHINT*/ - -  pbuf_free(p); - -  LWIP_DEBUGF(TCP_DEBUG, ("tcp_zero_window_probe: seqno %"U32_F -                          " ackno %"U32_F".\n", -                          pcb->snd_nxt - 1, pcb->rcv_nxt)); -} -#endif /* LWIP_TCP */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/udp.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/udp.c deleted file mode 100644 index 697ca7c..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/udp.c +++ /dev/null @@ -1,843 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * User Datagram Protocol module - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels <adam@sics.se> - * - */ - - -/* udp.c - * - * The code for the User Datagram Protocol UDP & UDPLite (RFC 3828). - * - */ - -/* @todo Check the use of '(struct udp_pcb).chksum_len_rx'! - */ - -#include "lwip/opt.h" - -#if LWIP_UDP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/udp.h" -#include "lwip/def.h" -#include "lwip/memp.h" -#include "lwip/inet.h" -#include "lwip/inet_chksum.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/icmp.h" -#include "lwip/stats.h" -#include "lwip/snmp.h" -#include "arch/perf.h" -#include "lwip/dhcp.h" - -#include <string.h> - -/* The list of UDP PCBs */ -/* exported in udp.h (was static) */ -struct udp_pcb *udp_pcbs; - -/** - * Process an incoming UDP datagram. - * - * Given an incoming UDP datagram (as a chain of pbufs) this function - * finds a corresponding UDP PCB and hands over the pbuf to the pcbs - * recv function. If no pcb is found or the datagram is incorrect, the - * pbuf is freed. - * - * @param p pbuf to be demultiplexed to a UDP PCB. - * @param inp network interface on which the datagram was received. - * - */ -void -udp_input(struct pbuf *p, struct netif *inp) -{ -  struct udp_hdr *udphdr; -  struct udp_pcb *pcb, *prev; -  struct udp_pcb *uncon_pcb; -  struct ip_hdr *iphdr; -  u16_t src, dest; -  u8_t local_match; -  u8_t broadcast; - -  PERF_START; - -  UDP_STATS_INC(udp.recv); - -  iphdr = p->payload; - -  /* Check minimum length (IP header + UDP header) -   * and move payload pointer to UDP header */ -  if (p->tot_len < (IPH_HL(iphdr) * 4 + UDP_HLEN) || pbuf_header(p, -(s16_t)(IPH_HL(iphdr) * 4))) { -    /* drop short packets */ -    LWIP_DEBUGF(UDP_DEBUG, -                ("udp_input: short UDP datagram (%"U16_F" bytes) discarded\n", p->tot_len)); -    UDP_STATS_INC(udp.lenerr); -    UDP_STATS_INC(udp.drop); -    snmp_inc_udpinerrors(); -    pbuf_free(p); -    goto end; -  } - -  udphdr = (struct udp_hdr *)p->payload; - -  /* is broadcast packet ? */ -  broadcast = ip_addr_isbroadcast(&(iphdr->dest), inp); - -  LWIP_DEBUGF(UDP_DEBUG, ("udp_input: received datagram of length %"U16_F"\n", p->tot_len)); - -  /* convert src and dest ports to host byte order */ -  src = ntohs(udphdr->src); -  dest = ntohs(udphdr->dest); - -  udp_debug_print(udphdr); - -  /* print the UDP source and destination */ -  LWIP_DEBUGF(UDP_DEBUG, -              ("udp (%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F") <-- " -               "(%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F")\n", -               ip4_addr1(&iphdr->dest), ip4_addr2(&iphdr->dest), -               ip4_addr3(&iphdr->dest), ip4_addr4(&iphdr->dest), ntohs(udphdr->dest), -               ip4_addr1(&iphdr->src), ip4_addr2(&iphdr->src), -               ip4_addr3(&iphdr->src), ip4_addr4(&iphdr->src), ntohs(udphdr->src))); - -#if LWIP_DHCP -  pcb = NULL; -  /* when LWIP_DHCP is active, packets to DHCP_CLIENT_PORT may only be processed by -     the dhcp module, no other UDP pcb may use the local UDP port DHCP_CLIENT_PORT */ -  if (dest == DHCP_CLIENT_PORT) { -    /* all packets for DHCP_CLIENT_PORT not coming from DHCP_SERVER_PORT are dropped! */ -    if (src == DHCP_SERVER_PORT) { -      if ((inp->dhcp != NULL) && (inp->dhcp->pcb != NULL)) { -        /* accept the packe if  -           (- broadcast or directed to us) -> DHCP is link-layer-addressed, local ip is always ANY! -           - inp->dhcp->pcb->remote == ANY or iphdr->src */ -        if ((ip_addr_isany(&inp->dhcp->pcb->remote_ip) || -           ip_addr_cmp(&(inp->dhcp->pcb->remote_ip), &(iphdr->src)))) { -          pcb = inp->dhcp->pcb; -        } -      } -    } -  } else -#endif /* LWIP_DHCP */ -  { -    prev = NULL; -    local_match = 0; -    uncon_pcb = NULL; -    /* Iterate through the UDP pcb list for a matching pcb. -     * 'Perfect match' pcbs (connected to the remote port & ip address) are -     * preferred. If no perfect match is found, the first unconnected pcb that -     * matches the local port and ip address gets the datagram. */ -    for (pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) { -      local_match = 0; -      /* print the PCB local and remote address */ -      LWIP_DEBUGF(UDP_DEBUG, -                  ("pcb (%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F") --- " -                   "(%"U16_F".%"U16_F".%"U16_F".%"U16_F", %"U16_F")\n", -                   ip4_addr1(&pcb->local_ip), ip4_addr2(&pcb->local_ip), -                   ip4_addr3(&pcb->local_ip), ip4_addr4(&pcb->local_ip), pcb->local_port, -                   ip4_addr1(&pcb->remote_ip), ip4_addr2(&pcb->remote_ip), -                   ip4_addr3(&pcb->remote_ip), ip4_addr4(&pcb->remote_ip), pcb->remote_port)); - -      /* compare PCB local addr+port to UDP destination addr+port */ -      if ((pcb->local_port == dest) && -          ((!broadcast && ip_addr_isany(&pcb->local_ip)) || -           ip_addr_cmp(&(pcb->local_ip), &(iphdr->dest)) || -#if LWIP_IGMP -           ip_addr_ismulticast(&(iphdr->dest)) || -#endif /* LWIP_IGMP */ -#if IP_SOF_BROADCAST_RECV -           (broadcast && (pcb->so_options & SOF_BROADCAST)))) { -#else  /* IP_SOF_BROADCAST_RECV */ -           (broadcast))) { -#endif /* IP_SOF_BROADCAST_RECV */ -        local_match = 1; -        if ((uncon_pcb == NULL) &&  -            ((pcb->flags & UDP_FLAGS_CONNECTED) == 0)) { -          /* the first unconnected matching PCB */ -          uncon_pcb = pcb; -        } -      } -      /* compare PCB remote addr+port to UDP source addr+port */ -      if ((local_match != 0) && -          (pcb->remote_port == src) && -          (ip_addr_isany(&pcb->remote_ip) || -           ip_addr_cmp(&(pcb->remote_ip), &(iphdr->src)))) { -        /* the first fully matching PCB */ -        if (prev != NULL) { -          /* move the pcb to the front of udp_pcbs so that is -             found faster next time */ -          prev->next = pcb->next; -          pcb->next = udp_pcbs; -          udp_pcbs = pcb; -        } else { -          UDP_STATS_INC(udp.cachehit); -        } -        break; -      } -      prev = pcb; -    } -    /* no fully matching pcb found? then look for an unconnected pcb */ -    if (pcb == NULL) { -      pcb = uncon_pcb; -    } -  } - -  /* Check checksum if this is a match or if it was directed at us. */ -  if (pcb != NULL || ip_addr_cmp(&inp->ip_addr, &iphdr->dest)) { -    LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_input: calculating checksum\n")); -#if LWIP_UDPLITE -    if (IPH_PROTO(iphdr) == IP_PROTO_UDPLITE) { -      /* Do the UDP Lite checksum */ -#if CHECKSUM_CHECK_UDP -      u16_t chklen = ntohs(udphdr->len); -      if (chklen < sizeof(struct udp_hdr)) { -        if (chklen == 0) { -          /* For UDP-Lite, checksum length of 0 means checksum -             over the complete packet (See RFC 3828 chap. 3.1) */ -          chklen = p->tot_len; -        } else { -          /* At least the UDP-Lite header must be covered by the -             checksum! (Again, see RFC 3828 chap. 3.1) */ -          UDP_STATS_INC(udp.chkerr); -          UDP_STATS_INC(udp.drop); -          snmp_inc_udpinerrors(); -          pbuf_free(p); -          goto end; -        } -      } -      if (inet_chksum_pseudo_partial(p, (struct ip_addr *)&(iphdr->src), -                             (struct ip_addr *)&(iphdr->dest), -                             IP_PROTO_UDPLITE, p->tot_len, chklen) != 0) { -       LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, -                   ("udp_input: UDP Lite datagram discarded due to failing checksum\n")); -        UDP_STATS_INC(udp.chkerr); -        UDP_STATS_INC(udp.drop); -        snmp_inc_udpinerrors(); -        pbuf_free(p); -        goto end; -      } -#endif /* CHECKSUM_CHECK_UDP */ -    } else -#endif /* LWIP_UDPLITE */ -    { -#if CHECKSUM_CHECK_UDP -      if (udphdr->chksum != 0) { -        if (inet_chksum_pseudo(p, (struct ip_addr *)&(iphdr->src), -                               (struct ip_addr *)&(iphdr->dest), -                               IP_PROTO_UDP, p->tot_len) != 0) { -          LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, -                      ("udp_input: UDP datagram discarded due to failing checksum\n")); -          UDP_STATS_INC(udp.chkerr); -          UDP_STATS_INC(udp.drop); -          snmp_inc_udpinerrors(); -          pbuf_free(p); -          goto end; -        } -      } -#endif /* CHECKSUM_CHECK_UDP */ -    } -    if(pbuf_header(p, -UDP_HLEN)) { -      /* Can we cope with this failing? Just assert for now */ -      LWIP_ASSERT("pbuf_header failed\n", 0); -      UDP_STATS_INC(udp.drop); -      snmp_inc_udpinerrors(); -      pbuf_free(p); -      goto end; -    } -    if (pcb != NULL) { -      snmp_inc_udpindatagrams(); -      /* callback */ -      if (pcb->recv != NULL) { -        /* now the recv function is responsible for freeing p */ -        pcb->recv(pcb->recv_arg, pcb, p, &iphdr->src, src); -      } else { -        /* no recv function registered? then we have to free the pbuf! */ -        pbuf_free(p); -        goto end; -      } -    } else { -      LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_input: not for us.\n")); - -#if LWIP_ICMP -      /* No match was found, send ICMP destination port unreachable unless -         destination address was broadcast/multicast. */ -      if (!broadcast && -          !ip_addr_ismulticast(&iphdr->dest)) { -        /* move payload pointer back to ip header */ -        pbuf_header(p, (IPH_HL(iphdr) * 4) + UDP_HLEN); -        LWIP_ASSERT("p->payload == iphdr", (p->payload == iphdr)); -        icmp_dest_unreach(p, ICMP_DUR_PORT); -      } -#endif /* LWIP_ICMP */ -      UDP_STATS_INC(udp.proterr); -      UDP_STATS_INC(udp.drop); -      snmp_inc_udpnoports(); -      pbuf_free(p); -    } -  } else { -    pbuf_free(p); -  } -end: -  PERF_STOP("udp_input"); -} - -/** - * Send data using UDP. - * - * @param pcb UDP PCB used to send the data. - * @param p chain of pbuf's to be sent. - * - * The datagram will be sent to the current remote_ip & remote_port - * stored in pcb. If the pcb is not bound to a port, it will - * automatically be bound to a random port. - * - * @return lwIP error code. - * - ERR_OK. Successful. No error occured. - * - ERR_MEM. Out of memory. - * - ERR_RTE. Could not find route to destination address. - * - More errors could be returned by lower protocol layers. - * - * @see udp_disconnect() udp_sendto() - */ -err_t -udp_send(struct udp_pcb *pcb, struct pbuf *p) -{ -  /* send to the packet using remote ip and port stored in the pcb */ -  return udp_sendto(pcb, p, &pcb->remote_ip, pcb->remote_port); -} - -/** - * Send data to a specified address using UDP. - * - * @param pcb UDP PCB used to send the data. - * @param p chain of pbuf's to be sent. - * @param dst_ip Destination IP address. - * @param dst_port Destination UDP port. - * - * dst_ip & dst_port are expected to be in the same byte order as in the pcb. - * - * If the PCB already has a remote address association, it will - * be restored after the data is sent. - *  - * @return lwIP error code (@see udp_send for possible error codes) - * - * @see udp_disconnect() udp_send() - */ -err_t -udp_sendto(struct udp_pcb *pcb, struct pbuf *p, -  struct ip_addr *dst_ip, u16_t dst_port) -{ -  struct netif *netif; - -  LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_send\n")); - -  /* find the outgoing network interface for this packet */ -#if LWIP_IGMP -  netif = ip_route((ip_addr_ismulticast(dst_ip))?(&(pcb->multicast_ip)):(dst_ip)); -#else -  netif = ip_route(dst_ip); -#endif /* LWIP_IGMP */ - -  /* no outgoing network interface could be found? */ -  if (netif == NULL) { -    LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: No route to 0x%"X32_F"\n", dst_ip->addr)); -    UDP_STATS_INC(udp.rterr); -    return ERR_RTE; -  } -  return udp_sendto_if(pcb, p, dst_ip, dst_port, netif); -} - -/** - * Send data to a specified address using UDP. - * The netif used for sending can be specified. - * - * This function exists mainly for DHCP, to be able to send UDP packets - * on a netif that is still down. - * - * @param pcb UDP PCB used to send the data. - * @param p chain of pbuf's to be sent. - * @param dst_ip Destination IP address. - * @param dst_port Destination UDP port. - * @param netif the netif used for sending. - * - * dst_ip & dst_port are expected to be in the same byte order as in the pcb. - * - * @return lwIP error code (@see udp_send for possible error codes) - * - * @see udp_disconnect() udp_send() - */ -err_t -udp_sendto_if(struct udp_pcb *pcb, struct pbuf *p, -  struct ip_addr *dst_ip, u16_t dst_port, struct netif *netif) -{ -  struct udp_hdr *udphdr; -  struct ip_addr *src_ip; -  err_t err; -  struct pbuf *q; /* q will be sent down the stack */ - -#if IP_SOF_BROADCAST -  /* broadcast filter? */ -  if ( ((pcb->so_options & SOF_BROADCAST) == 0) && ip_addr_isbroadcast(dst_ip, netif) ) { -    LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_LEVEL_SERIOUS, -      ("udp_sendto_if: SOF_BROADCAST not enabled on pcb %p\n", (void *)pcb)); -    return ERR_VAL; -  } -#endif /* IP_SOF_BROADCAST */ - -  /* if the PCB is not yet bound to a port, bind it here */ -  if (pcb->local_port == 0) { -    LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_send: not yet bound to a port, binding now\n")); -    err = udp_bind(pcb, &pcb->local_ip, pcb->local_port); -    if (err != ERR_OK) { -      LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: forced port bind failed\n")); -      return err; -    } -  } - -  /* not enough space to add an UDP header to first pbuf in given p chain? */ -  if (pbuf_header(p, UDP_HLEN)) { -    /* allocate header in a separate new pbuf */ -    q = pbuf_alloc(PBUF_IP, UDP_HLEN, PBUF_RAM); -    /* new header pbuf could not be allocated? */ -    if (q == NULL) { -      LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, ("udp_send: could not allocate header\n")); -      return ERR_MEM; -    } -    /* chain header q in front of given pbuf p */ -    pbuf_chain(q, p); -    /* first pbuf q points to header pbuf */ -    LWIP_DEBUGF(UDP_DEBUG, -                ("udp_send: added header pbuf %p before given pbuf %p\n", (void *)q, (void *)p)); -  } else { -    /* adding space for header within p succeeded */ -    /* first pbuf q equals given pbuf */ -    q = p; -    LWIP_DEBUGF(UDP_DEBUG, ("udp_send: added header in given pbuf %p\n", (void *)p)); -  } -  LWIP_ASSERT("check that first pbuf can hold struct udp_hdr", -              (q->len >= sizeof(struct udp_hdr))); -  /* q now represents the packet to be sent */ -  udphdr = q->payload; -  udphdr->src = htons(pcb->local_port); -  udphdr->dest = htons(dst_port); -  /* in UDP, 0 checksum means 'no checksum' */ -  udphdr->chksum = 0x0000;  - -  /* PCB local address is IP_ANY_ADDR? */ -  if (ip_addr_isany(&pcb->local_ip)) { -    /* use outgoing network interface IP address as source address */ -    src_ip = &(netif->ip_addr); -  } else { -    /* check if UDP PCB local IP address is correct -     * this could be an old address if netif->ip_addr has changed */ -    if (!ip_addr_cmp(&(pcb->local_ip), &(netif->ip_addr))) { -      /* local_ip doesn't match, drop the packet */ -      if (q != p) { -        /* free the header pbuf */ -        pbuf_free(q); -        q = NULL; -        /* p is still referenced by the caller, and will live on */ -      } -      return ERR_VAL; -    } -    /* use UDP PCB local IP address as source address */ -    src_ip = &(pcb->local_ip); -  } - -  LWIP_DEBUGF(UDP_DEBUG, ("udp_send: sending datagram of length %"U16_F"\n", q->tot_len)); - -#if LWIP_UDPLITE -  /* UDP Lite protocol? */ -  if (pcb->flags & UDP_FLAGS_UDPLITE) { -    u16_t chklen, chklen_hdr; -    LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP LITE packet length %"U16_F"\n", q->tot_len)); -    /* set UDP message length in UDP header */ -    chklen_hdr = chklen = pcb->chksum_len_tx; -    if ((chklen < sizeof(struct udp_hdr)) || (chklen > q->tot_len)) { -      if (chklen != 0) { -        LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP LITE pcb->chksum_len is illegal: %"U16_F"\n", chklen)); -      } -      /* For UDP-Lite, checksum length of 0 means checksum -         over the complete packet. (See RFC 3828 chap. 3.1) -         At least the UDP-Lite header must be covered by the -         checksum, therefore, if chksum_len has an illegal -         value, we generate the checksum over the complete -         packet to be safe. */ -      chklen_hdr = 0; -      chklen = q->tot_len; -    } -    udphdr->len = htons(chklen_hdr); -    /* calculate checksum */ -#if CHECKSUM_GEN_UDP -    udphdr->chksum = inet_chksum_pseudo_partial(q, src_ip, dst_ip, -                                        IP_PROTO_UDPLITE, q->tot_len, chklen); -    /* chksum zero must become 0xffff, as zero means 'no checksum' */ -    if (udphdr->chksum == 0x0000) -      udphdr->chksum = 0xffff; -#endif /* CHECKSUM_CHECK_UDP */ -    /* output to IP */ -    LWIP_DEBUGF(UDP_DEBUG, ("udp_send: ip_output_if (,,,,IP_PROTO_UDPLITE,)\n")); -#if LWIP_NETIF_HWADDRHINT -    netif->addr_hint = &(pcb->addr_hint); -#endif /* LWIP_NETIF_HWADDRHINT*/ -    err = ip_output_if(q, src_ip, dst_ip, pcb->ttl, pcb->tos, IP_PROTO_UDPLITE, netif); -#if LWIP_NETIF_HWADDRHINT -    netif->addr_hint = NULL; -#endif /* LWIP_NETIF_HWADDRHINT*/ -  } else -#endif /* LWIP_UDPLITE */ -  {      /* UDP */ -    LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP packet length %"U16_F"\n", q->tot_len)); -    udphdr->len = htons(q->tot_len); -    /* calculate checksum */ -#if CHECKSUM_GEN_UDP -    if ((pcb->flags & UDP_FLAGS_NOCHKSUM) == 0) { -      udphdr->chksum = inet_chksum_pseudo(q, src_ip, dst_ip, IP_PROTO_UDP, q->tot_len); -      /* chksum zero must become 0xffff, as zero means 'no checksum' */ -      if (udphdr->chksum == 0x0000) udphdr->chksum = 0xffff; -    } -#endif /* CHECKSUM_CHECK_UDP */ -    LWIP_DEBUGF(UDP_DEBUG, ("udp_send: UDP checksum 0x%04"X16_F"\n", udphdr->chksum)); -    LWIP_DEBUGF(UDP_DEBUG, ("udp_send: ip_output_if (,,,,IP_PROTO_UDP,)\n")); -    /* output to IP */ -#if LWIP_NETIF_HWADDRHINT -    netif->addr_hint = &(pcb->addr_hint); -#endif /* LWIP_NETIF_HWADDRHINT*/ -    err = ip_output_if(q, src_ip, dst_ip, pcb->ttl, pcb->tos, IP_PROTO_UDP, netif); -#if LWIP_NETIF_HWADDRHINT -    netif->addr_hint = NULL; -#endif /* LWIP_NETIF_HWADDRHINT*/ -  } -  /* TODO: must this be increased even if error occured? */ -  snmp_inc_udpoutdatagrams(); - -  /* did we chain a separate header pbuf earlier? */ -  if (q != p) { -    /* free the header pbuf */ -    pbuf_free(q); -    q = NULL; -    /* p is still referenced by the caller, and will live on */ -  } - -  UDP_STATS_INC(udp.xmit); -  return err; -} - -/** - * Bind an UDP PCB. - * - * @param pcb UDP PCB to be bound with a local address ipaddr and port. - * @param ipaddr local IP address to bind with. Use IP_ADDR_ANY to - * bind to all local interfaces. - * @param port local UDP port to bind with. Use 0 to automatically bind - * to a random port between UDP_LOCAL_PORT_RANGE_START and - * UDP_LOCAL_PORT_RANGE_END. - * - * ipaddr & port are expected to be in the same byte order as in the pcb. - * - * @return lwIP error code. - * - ERR_OK. Successful. No error occured. - * - ERR_USE. The specified ipaddr and port are already bound to by - * another UDP PCB. - * - * @see udp_disconnect() - */ -err_t -udp_bind(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) -{ -  struct udp_pcb *ipcb; -  u8_t rebind; - -  LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, ("udp_bind(ipaddr = ")); -  ip_addr_debug_print(UDP_DEBUG, ipaddr); -  LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE, (", port = %"U16_F")\n", port)); - -  rebind = 0; -  /* Check for double bind and rebind of the same pcb */ -  for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { -    /* is this UDP PCB already on active list? */ -    if (pcb == ipcb) { -      /* pcb may occur at most once in active list */ -      LWIP_ASSERT("rebind == 0", rebind == 0); -      /* pcb already in list, just rebind */ -      rebind = 1; -    } - -    /* this code does not allow upper layer to share a UDP port for -       listening to broadcast or multicast traffic (See SO_REUSE_ADDR and -       SO_REUSE_PORT under *BSD). TODO: See where it fits instead, OR -       combine with implementation of UDP PCB flags. Leon Woestenberg. */ -#ifdef LWIP_UDP_TODO -    /* port matches that of PCB in list? */ -    else -      if ((ipcb->local_port == port) && -          /* IP address matches, or one is IP_ADDR_ANY? */ -          (ip_addr_isany(&(ipcb->local_ip)) || -           ip_addr_isany(ipaddr) || -           ip_addr_cmp(&(ipcb->local_ip), ipaddr))) { -        /* other PCB already binds to this local IP and port */ -        LWIP_DEBUGF(UDP_DEBUG, -                    ("udp_bind: local port %"U16_F" already bound by another pcb\n", port)); -        return ERR_USE; -      } -#endif -  } - -  ip_addr_set(&pcb->local_ip, ipaddr); - -  /* no port specified? */ -  if (port == 0) { -#ifndef UDP_LOCAL_PORT_RANGE_START -#define UDP_LOCAL_PORT_RANGE_START 4096 -#define UDP_LOCAL_PORT_RANGE_END   0x7fff -#endif -    port = UDP_LOCAL_PORT_RANGE_START; -    ipcb = udp_pcbs; -    while ((ipcb != NULL) && (port != UDP_LOCAL_PORT_RANGE_END)) { -      if (ipcb->local_port == port) { -        /* port is already used by another udp_pcb */ -        port++; -        /* restart scanning all udp pcbs */ -        ipcb = udp_pcbs; -      } else -        /* go on with next udp pcb */ -        ipcb = ipcb->next; -    } -    if (ipcb != NULL) { -      /* no more ports available in local range */ -      LWIP_DEBUGF(UDP_DEBUG, ("udp_bind: out of free UDP ports\n")); -      return ERR_USE; -    } -  } -  pcb->local_port = port; -  snmp_insert_udpidx_tree(pcb); -  /* pcb not active yet? */ -  if (rebind == 0) { -    /* place the PCB on the active list if not already there */ -    pcb->next = udp_pcbs; -    udp_pcbs = pcb; -  } -  LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, -              ("udp_bind: bound to %"U16_F".%"U16_F".%"U16_F".%"U16_F", port %"U16_F"\n", -               (u16_t)((ntohl(pcb->local_ip.addr) >> 24) & 0xff), -               (u16_t)((ntohl(pcb->local_ip.addr) >> 16) & 0xff), -               (u16_t)((ntohl(pcb->local_ip.addr) >> 8) & 0xff), -               (u16_t)(ntohl(pcb->local_ip.addr) & 0xff), pcb->local_port)); -  return ERR_OK; -} -/** - * Connect an UDP PCB. - * - * This will associate the UDP PCB with the remote address. - * - * @param pcb UDP PCB to be connected with remote address ipaddr and port. - * @param ipaddr remote IP address to connect with. - * @param port remote UDP port to connect with. - * - * @return lwIP error code - * - * ipaddr & port are expected to be in the same byte order as in the pcb. - * - * The udp pcb is bound to a random local port if not already bound. - * - * @see udp_disconnect() - */ -err_t -udp_connect(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) -{ -  struct udp_pcb *ipcb; - -  if (pcb->local_port == 0) { -    err_t err = udp_bind(pcb, &pcb->local_ip, pcb->local_port); -    if (err != ERR_OK) -      return err; -  } - -  ip_addr_set(&pcb->remote_ip, ipaddr); -  pcb->remote_port = port; -  pcb->flags |= UDP_FLAGS_CONNECTED; -/** TODO: this functionality belongs in upper layers */ -#ifdef LWIP_UDP_TODO -  /* Nail down local IP for netconn_addr()/getsockname() */ -  if (ip_addr_isany(&pcb->local_ip) && !ip_addr_isany(&pcb->remote_ip)) { -    struct netif *netif; - -    if ((netif = ip_route(&(pcb->remote_ip))) == NULL) { -      LWIP_DEBUGF(UDP_DEBUG, ("udp_connect: No route to 0x%lx\n", pcb->remote_ip.addr)); -      UDP_STATS_INC(udp.rterr); -      return ERR_RTE; -    } -    /** TODO: this will bind the udp pcb locally, to the interface which -        is used to route output packets to the remote address. However, we -        might want to accept incoming packets on any interface! */ -    pcb->local_ip = netif->ip_addr; -  } else if (ip_addr_isany(&pcb->remote_ip)) { -    pcb->local_ip.addr = 0; -  } -#endif -  LWIP_DEBUGF(UDP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, -              ("udp_connect: connected to %"U16_F".%"U16_F".%"U16_F".%"U16_F",port %"U16_F"\n", -               (u16_t)((ntohl(pcb->remote_ip.addr) >> 24) & 0xff), -               (u16_t)((ntohl(pcb->remote_ip.addr) >> 16) & 0xff), -               (u16_t)((ntohl(pcb->remote_ip.addr) >> 8) & 0xff), -               (u16_t)(ntohl(pcb->remote_ip.addr) & 0xff), pcb->remote_port)); - -  /* Insert UDP PCB into the list of active UDP PCBs. */ -  for (ipcb = udp_pcbs; ipcb != NULL; ipcb = ipcb->next) { -    if (pcb == ipcb) { -      /* already on the list, just return */ -      return ERR_OK; -    } -  } -  /* PCB not yet on the list, add PCB now */ -  pcb->next = udp_pcbs; -  udp_pcbs = pcb; -  return ERR_OK; -} - -/** - * Disconnect a UDP PCB - * - * @param pcb the udp pcb to disconnect. - */ -void -udp_disconnect(struct udp_pcb *pcb) -{ -  /* reset remote address association */ -  ip_addr_set(&pcb->remote_ip, IP_ADDR_ANY); -  pcb->remote_port = 0; -  /* mark PCB as unconnected */ -  pcb->flags &= ~UDP_FLAGS_CONNECTED; -} - -/** - * Set a receive callback for a UDP PCB - * - * This callback will be called when receiving a datagram for the pcb. - * - * @param pcb the pcb for wich to set the recv callback - * @param recv function pointer of the callback function - * @param recv_arg additional argument to pass to the callback function - */ -void -udp_recv(struct udp_pcb *pcb, -         void (* recv)(void *arg, struct udp_pcb *upcb, struct pbuf *p, -                       struct ip_addr *addr, u16_t port), -         void *recv_arg) -{ -  /* remember recv() callback and user data */ -  pcb->recv = recv; -  pcb->recv_arg = recv_arg; -} - -/** - * Remove an UDP PCB. - * - * @param pcb UDP PCB to be removed. The PCB is removed from the list of - * UDP PCB's and the data structure is freed from memory. - * - * @see udp_new() - */ -void -udp_remove(struct udp_pcb *pcb) -{ -  struct udp_pcb *pcb2; - -  snmp_delete_udpidx_tree(pcb); -  /* pcb to be removed is first in list? */ -  if (udp_pcbs == pcb) { -    /* make list start at 2nd pcb */ -    udp_pcbs = udp_pcbs->next; -    /* pcb not 1st in list */ -  } else -    for (pcb2 = udp_pcbs; pcb2 != NULL; pcb2 = pcb2->next) { -      /* find pcb in udp_pcbs list */ -      if (pcb2->next != NULL && pcb2->next == pcb) { -        /* remove pcb from list */ -        pcb2->next = pcb->next; -      } -    } -  memp_free(MEMP_UDP_PCB, pcb); -} - -/** - * Create a UDP PCB. - * - * @return The UDP PCB which was created. NULL if the PCB data structure - * could not be allocated. - * - * @see udp_remove() - */ -struct udp_pcb * -udp_new(void) -{ -  struct udp_pcb *pcb; -  pcb = memp_malloc(MEMP_UDP_PCB); -  /* could allocate UDP PCB? */ -  if (pcb != NULL) { -    /* UDP Lite: by initializing to all zeroes, chksum_len is set to 0 -     * which means checksum is generated over the whole datagram per default -     * (recommended as default by RFC 3828). */ -    /* initialize PCB to all zeroes */ -    memset(pcb, 0, sizeof(struct udp_pcb)); -    pcb->ttl = UDP_TTL; -  } -  return pcb; -} - -#if UDP_DEBUG -/** - * Print UDP header information for debug purposes. - * - * @param udphdr pointer to the udp header in memory. - */ -void -udp_debug_print(struct udp_hdr *udphdr) -{ -  LWIP_DEBUGF(UDP_DEBUG, ("UDP header:\n")); -  LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); -  LWIP_DEBUGF(UDP_DEBUG, ("|     %5"U16_F"     |     %5"U16_F"     | (src port, dest port)\n", -                          ntohs(udphdr->src), ntohs(udphdr->dest))); -  LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); -  LWIP_DEBUGF(UDP_DEBUG, ("|     %5"U16_F"     |     0x%04"X16_F"    | (len, chksum)\n", -                          ntohs(udphdr->len), ntohs(udphdr->chksum))); -  LWIP_DEBUGF(UDP_DEBUG, ("+-------------------------------+\n")); -} -#endif /* UDP_DEBUG */ - -#endif /* LWIP_UDP */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/autoip.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/autoip.h deleted file mode 100644 index d5464b7..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/autoip.h +++ /dev/null @@ -1,118 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * - * AutoIP Automatic LinkLocal IP Configuration - */ - -/* - * - * Copyright (c) 2007 Dominik Spies <kontakt@dspies.de> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * Author: Dominik Spies <kontakt@dspies.de> - * - * This is a AutoIP implementation for the lwIP TCP/IP stack. It aims to conform - * with RFC 3927. - * - * - * Please coordinate changes and requests with Dominik Spies - * <kontakt@dspies.de> - */ -  -#ifndef __LWIP_AUTOIP_H__ -#define __LWIP_AUTOIP_H__ - -#include "lwip/opt.h" - -#if LWIP_AUTOIP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/netif.h" -#include "lwip/udp.h" -#include "netif/etharp.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* AutoIP Timing */ -#define AUTOIP_TMR_INTERVAL      100 -#define AUTOIP_TICKS_PER_SECOND (1000 / AUTOIP_TMR_INTERVAL) - -/* RFC 3927 Constants */ -#define PROBE_WAIT               1   /* second   (initial random delay)                 */ -#define PROBE_MIN                1   /* second   (minimum delay till repeated probe)    */ -#define PROBE_MAX                2   /* seconds  (maximum delay till repeated probe)    */ -#define PROBE_NUM                3   /*          (number of probe packets)              */ -#define ANNOUNCE_NUM             2   /*          (number of announcement packets)       */ -#define ANNOUNCE_INTERVAL        2   /* seconds  (time between announcement packets)    */ -#define ANNOUNCE_WAIT            2   /* seconds  (delay before announcing)              */ -#define MAX_CONFLICTS            10  /*          (max conflicts before rate limiting)   */ -#define RATE_LIMIT_INTERVAL      60  /* seconds  (delay between successive attempts)    */ -#define DEFEND_INTERVAL          10  /* seconds  (min. wait between defensive ARPs)     */ - -/* AutoIP client states */ -#define AUTOIP_STATE_OFF         0 -#define AUTOIP_STATE_PROBING     1 -#define AUTOIP_STATE_ANNOUNCING  2 -#define AUTOIP_STATE_BOUND       3 - -struct autoip -{ -  struct ip_addr llipaddr;  /* the currently selected, probed, announced or used LL IP-Address */ -  u8_t state;               /* current AutoIP state machine state */ -  u8_t sent_num;            /* sent number of probes or announces, dependent on state */ -  u16_t ttw;                /* ticks to wait, tick is AUTOIP_TMR_INTERVAL long */ -  u8_t lastconflict;        /* ticks until a conflict can be solved by defending */ -  u8_t tried_llipaddr;      /* total number of probed/used Link Local IP-Addresses */ -}; - - -/** Init srand, has to be called before entering mainloop */ -void autoip_init(void); - -/** Start AutoIP client */ -err_t autoip_start(struct netif *netif); - -/** Stop AutoIP client */ -err_t autoip_stop(struct netif *netif); - -/** Handles every incoming ARP Packet, called by etharp_arp_input */ -void autoip_arp_reply(struct netif *netif, struct etharp_hdr *hdr); - -/** Has to be called in loop every AUTOIP_TMR_INTERVAL milliseconds */ -void autoip_tmr(void); - -/** Handle a possible change in the network configuration */ -void autoip_network_changed(struct netif *netif); - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_AUTOIP */ - -#endif /* __LWIP_AUTOIP_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/icmp.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/icmp.h deleted file mode 100644 index 3f917ba..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/icmp.h +++ /dev/null @@ -1,113 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_ICMP_H__ -#define __LWIP_ICMP_H__ - -#include "lwip/opt.h" -#include "lwip/pbuf.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define ICMP_ER 0      /* echo reply */ -#define ICMP_DUR 3     /* destination unreachable */ -#define ICMP_SQ 4      /* source quench */ -#define ICMP_RD 5      /* redirect */ -#define ICMP_ECHO 8    /* echo */ -#define ICMP_TE 11     /* time exceeded */ -#define ICMP_PP 12     /* parameter problem */ -#define ICMP_TS 13     /* timestamp */ -#define ICMP_TSR 14    /* timestamp reply */ -#define ICMP_IRQ 15    /* information request */ -#define ICMP_IR 16     /* information reply */ - -enum icmp_dur_type { -  ICMP_DUR_NET = 0,    /* net unreachable */ -  ICMP_DUR_HOST = 1,   /* host unreachable */ -  ICMP_DUR_PROTO = 2,  /* protocol unreachable */ -  ICMP_DUR_PORT = 3,   /* port unreachable */ -  ICMP_DUR_FRAG = 4,   /* fragmentation needed and DF set */ -  ICMP_DUR_SR = 5      /* source route failed */ -}; - -enum icmp_te_type { -  ICMP_TE_TTL = 0,     /* time to live exceeded in transit */ -  ICMP_TE_FRAG = 1     /* fragment reassembly time exceeded */ -}; - -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -/** This is the standard ICMP header only that the u32_t data - *  is splitted to two u16_t like ICMP echo needs it. - *  This header is also used for other ICMP types that do not - *  use the data part. - */ -PACK_STRUCT_BEGIN -struct icmp_echo_hdr { -  PACK_STRUCT_FIELD(u8_t type); -  PACK_STRUCT_FIELD(u8_t code); -  PACK_STRUCT_FIELD(u16_t chksum); -  PACK_STRUCT_FIELD(u16_t id); -  PACK_STRUCT_FIELD(u16_t seqno); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif - -#define ICMPH_TYPE(hdr) ((hdr)->type) -#define ICMPH_CODE(hdr) ((hdr)->code) - -/** Combines type and code to an u16_t */ -#define ICMPH_TYPE_SET(hdr, t) ((hdr)->type = (t)) -#define ICMPH_CODE_SET(hdr, c) ((hdr)->code = (c)) - - -#if LWIP_ICMP /* don't build if not configured for use in lwipopts.h */ - -void icmp_input(struct pbuf *p, struct netif *inp); -void icmp_dest_unreach(struct pbuf *p, enum icmp_dur_type t); -void icmp_time_exceeded(struct pbuf *p, enum icmp_te_type t); - -#endif /* LWIP_ICMP */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_ICMP_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/igmp.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/igmp.h deleted file mode 100644 index da67e75..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/igmp.h +++ /dev/null @@ -1,164 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2002 CITEL Technologies Ltd. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without  - * modification, are permitted provided that the following conditions  - * are met:  - * 1. Redistributions of source code must retain the above copyright  - *    notice, this list of conditions and the following disclaimer.  - * 2. Redistributions in binary form must reproduce the above copyright  - *    notice, this list of conditions and the following disclaimer in the  - *    documentation and/or other materials provided with the distribution.  - * 3. Neither the name of CITEL Technologies Ltd nor the names of its contributors  - *    may be used to endorse or promote products derived from this software  - *    without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY CITEL TECHNOLOGIES AND CONTRIBUTORS ``AS IS'' - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE  - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE  - * ARE DISCLAIMED.  IN NO EVENT SHALL CITEL TECHNOLOGIES OR CONTRIBUTORS BE LIABLE  - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL  - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS  - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)  - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY  - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  - * SUCH DAMAGE.  - * - * This file is a contribution to the lwIP TCP/IP stack. - * The Swedish Institute of Computer Science and Adam Dunkels - * are specifically granted permission to redistribute this - * source code. -*/ - -#ifndef __LWIP_IGMP_H__ -#define __LWIP_IGMP_H__ - -#include "lwip/opt.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/pbuf.h" - -#if LWIP_IGMP /* don't build if not configured for use in lwipopts.h */ - -#ifdef __cplusplus -extern "C" { -#endif - -/*  - * IGMP constants - */ -#define IP_PROTO_IGMP                  2 -#define IGMP_TTL                       1 -#define IGMP_MINLEN                    8 -#define ROUTER_ALERT                   0x9404 -#define ROUTER_ALERTLEN                4 - -/* - * IGMP message types, including version number. - */ -#define IGMP_MEMB_QUERY                0x11 /* Membership query         */ -#define IGMP_V1_MEMB_REPORT            0x12 /* Ver. 1 membership report */ -#define IGMP_V2_MEMB_REPORT            0x16 /* Ver. 2 membership report */ -#define IGMP_LEAVE_GROUP               0x17 /* Leave-group message      */ - -/* IGMP timer */ -#define IGMP_TMR_INTERVAL              100 /* Milliseconds */ -#define IGMP_V1_DELAYING_MEMBER_TMR   (1000/IGMP_TMR_INTERVAL) -#define IGMP_JOIN_DELAYING_MEMBER_TMR (500 /IGMP_TMR_INTERVAL) - -/* MAC Filter Actions */ -#define IGMP_DEL_MAC_FILTER            0 -#define IGMP_ADD_MAC_FILTER            1 - -/* Group  membership states */ -#define IGMP_GROUP_NON_MEMBER          0 -#define IGMP_GROUP_DELAYING_MEMBER     1 -#define IGMP_GROUP_IDLE_MEMBER         2 - -/* - * IGMP packet format. - */ -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct igmp_msg { - PACK_STRUCT_FIELD(u8_t           igmp_msgtype); - PACK_STRUCT_FIELD(u8_t           igmp_maxresp); - PACK_STRUCT_FIELD(u16_t          igmp_checksum); - PACK_STRUCT_FIELD(struct ip_addr igmp_group_address); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif - -/*  - * now a group structure - there is - * a list of groups for each interface - * these should really be linked from the interface, but - * if we keep them separate we will not affect the lwip original code - * too much - *  - * There will be a group for the all systems group address but this  - * will not run the state machine as it is used to kick off reports - * from all the other groups - */ - -struct igmp_group { -  struct igmp_group *next; -  struct netif      *interface; -  struct ip_addr     group_address; -  u8_t               last_reporter_flag; /* signifies we were the last person to report */ -  u8_t               group_state; -  u16_t              timer; -  u8_t               use; /* counter of simultaneous uses */ -}; - - -/*  Prototypes */ -void   igmp_init(void); - -err_t  igmp_start( struct netif *netif); - -err_t  igmp_stop( struct netif *netif); - -void   igmp_report_groups( struct netif *netif); - -struct igmp_group *igmp_lookfor_group( struct netif *ifp, struct ip_addr *addr); - -struct igmp_group *igmp_lookup_group( struct netif *ifp, struct ip_addr *addr); - -err_t  igmp_remove_group( struct igmp_group *group); - -void   igmp_input( struct pbuf *p, struct netif *inp, struct ip_addr *dest); - -err_t  igmp_joingroup( struct ip_addr *ifaddr, struct ip_addr *groupaddr); - -err_t  igmp_leavegroup( struct ip_addr *ifaddr, struct ip_addr *groupaddr); - -void   igmp_tmr(void); - -void   igmp_timeout( struct igmp_group *group); - -void   igmp_start_timer( struct igmp_group *group, u8_t max_time); - -void   igmp_stop_timer( struct igmp_group *group); - -void   igmp_delaying_member( struct igmp_group *group, u8_t maxresp); - -err_t  igmp_ip_output_if( struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, u8_t ttl, u8_t proto, struct netif *netif); - -void   igmp_send( struct igmp_group *group, u8_t type); - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_IGMP */ - -#endif /* __LWIP_IGMP_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet.h deleted file mode 100644 index 903afdf..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet.h +++ /dev/null @@ -1,105 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_INET_H__ -#define __LWIP_INET_H__ - -#include "lwip/opt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* For compatibility with BSD code */ -struct in_addr { -  u32_t s_addr; -}; - -#define INADDR_NONE         ((u32_t)0xffffffffUL)  /* 255.255.255.255 */ -#define INADDR_LOOPBACK     ((u32_t)0x7f000001UL)  /* 127.0.0.1 */ -#define INADDR_ANY          ((u32_t)0x00000000UL)  /* 0.0.0.0 */ -#define INADDR_BROADCAST    ((u32_t)0xffffffffUL)  /* 255.255.255.255 */ - -u32_t inet_addr(const char *cp); -int inet_aton(const char *cp, struct in_addr *addr); -char *inet_ntoa(struct in_addr addr); /* returns ptr to static buffer; not reentrant! */ - -#ifdef htons -#undef htons -#endif /* htons */ -#ifdef htonl -#undef htonl -#endif /* htonl */ -#ifdef ntohs -#undef ntohs -#endif /* ntohs */ -#ifdef ntohl -#undef ntohl -#endif /* ntohl */ - -#ifndef LWIP_PLATFORM_BYTESWAP -#define LWIP_PLATFORM_BYTESWAP 0 -#endif - -#if BYTE_ORDER == BIG_ENDIAN -#define htons(x) (x) -#define ntohs(x) (x) -#define htonl(x) (x) -#define ntohl(x) (x) -#else /* BYTE_ORDER != BIG_ENDIAN */ -#ifdef LWIP_PREFIX_BYTEORDER_FUNCS -/* workaround for naming collisions on some platforms */ -#define htons lwip_htons -#define ntohs lwip_ntohs -#define htonl lwip_htonl -#define ntohl lwip_ntohl -#endif /* LWIP_PREFIX_BYTEORDER_FUNCS */ -#if LWIP_PLATFORM_BYTESWAP -#define htons(x) LWIP_PLATFORM_HTONS(x) -#define ntohs(x) LWIP_PLATFORM_HTONS(x) -#define htonl(x) LWIP_PLATFORM_HTONL(x) -#define ntohl(x) LWIP_PLATFORM_HTONL(x) -#else /* LWIP_PLATFORM_BYTESWAP */ -u16_t htons(u16_t x); -u16_t ntohs(u16_t x); -u32_t htonl(u32_t x); -u32_t ntohl(u32_t x); -#endif /* LWIP_PLATFORM_BYTESWAP */ - -#endif /* BYTE_ORDER == BIG_ENDIAN */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_INET_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet_chksum.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet_chksum.h deleted file mode 100644 index 6f5b1b6..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet_chksum.h +++ /dev/null @@ -1,62 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_INET_CHKSUM_H__ -#define __LWIP_INET_CHKSUM_H__ - -#include "lwip/opt.h" - -#include "lwip/pbuf.h" -#include "lwip/ip_addr.h" - -#ifdef __cplusplus -extern "C" { -#endif - -u16_t inet_chksum(void *dataptr, u16_t len); -u16_t inet_chksum_pbuf(struct pbuf *p); -u16_t inet_chksum_pseudo(struct pbuf *p, -       struct ip_addr *src, struct ip_addr *dest, -       u8_t proto, u16_t proto_len); -#if LWIP_UDPLITE -u16_t inet_chksum_pseudo_partial(struct pbuf *p, -       struct ip_addr *src, struct ip_addr *dest, -       u8_t proto, u16_t proto_len, u16_t chksum_len); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_INET_H__ */ - diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip.h deleted file mode 100644 index 6b2cdee..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip.h +++ /dev/null @@ -1,200 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_IP_H__ -#define __LWIP_IP_H__ - -#include "lwip/opt.h" - -#include "lwip/def.h" -#include "lwip/pbuf.h" -#include "lwip/ip_addr.h" -#include "lwip/err.h" -#include "lwip/netif.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** Currently, the function ip_output_if_opt() is only used with IGMP */ -#define IP_OPTIONS_SEND   LWIP_IGMP - -#define IP_HLEN 20 - -#define IP_PROTO_ICMP    1 -#define IP_PROTO_UDP     17 -#define IP_PROTO_UDPLITE 136 -#define IP_PROTO_TCP     6 - -/* This is passed as the destination address to ip_output_if (not -   to ip_output), meaning that an IP header already is constructed -   in the pbuf. This is used when TCP retransmits. */ -#ifdef IP_HDRINCL -#undef IP_HDRINCL -#endif /* IP_HDRINCL */ -#define IP_HDRINCL  NULL - -#if LWIP_NETIF_HWADDRHINT -#define IP_PCB_ADDRHINT ;u8_t addr_hint -#else -#define IP_PCB_ADDRHINT -#endif /* LWIP_NETIF_HWADDRHINT */ - -/* This is the common part of all PCB types. It needs to be at the -   beginning of a PCB type definition. It is located here so that -   changes to this common part are made in one location instead of -   having to change all PCB structs. */ -#define IP_PCB \ -  /* ip addresses in network byte order */ \ -  struct ip_addr local_ip; \ -  struct ip_addr remote_ip; \ -   /* Socket options */  \ -  u16_t so_options;      \ -   /* Type Of Service */ \ -  u8_t tos;              \ -  /* Time To Live */     \ -  u8_t ttl               \ -  /* link layer address resolution hint */ \ -  IP_PCB_ADDRHINT - -struct ip_pcb { -/* Common members of all PCB types */ -  IP_PCB; -}; - -/* - * Option flags per-socket. These are the same like SO_XXX. - */ -#define SOF_DEBUG       (u16_t)0x0001U    /* turn on debugging info recording */ -#define SOF_ACCEPTCONN  (u16_t)0x0002U    /* socket has had listen() */ -#define SOF_REUSEADDR   (u16_t)0x0004U    /* allow local address reuse */ -#define SOF_KEEPALIVE   (u16_t)0x0008U    /* keep connections alive */ -#define SOF_DONTROUTE   (u16_t)0x0010U    /* just use interface addresses */ -#define SOF_BROADCAST   (u16_t)0x0020U    /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */ -#define SOF_USELOOPBACK (u16_t)0x0040U    /* bypass hardware when possible */ -#define SOF_LINGER      (u16_t)0x0080U    /* linger on close if data present */ -#define SOF_OOBINLINE   (u16_t)0x0100U    /* leave received OOB data in line */ -#define SOF_REUSEPORT   (u16_t)0x0200U    /* allow local address & port reuse */ - - -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct ip_hdr { -  /* version / header length / type of service */ -  PACK_STRUCT_FIELD(u16_t _v_hl_tos); -  /* total length */ -  PACK_STRUCT_FIELD(u16_t _len); -  /* identification */ -  PACK_STRUCT_FIELD(u16_t _id); -  /* fragment offset field */ -  PACK_STRUCT_FIELD(u16_t _offset); -#define IP_RF 0x8000        /* reserved fragment flag */ -#define IP_DF 0x4000        /* dont fragment flag */ -#define IP_MF 0x2000        /* more fragments flag */ -#define IP_OFFMASK 0x1fff   /* mask for fragmenting bits */ -  /* time to live / protocol*/ -  PACK_STRUCT_FIELD(u16_t _ttl_proto); -  /* checksum */ -  PACK_STRUCT_FIELD(u16_t _chksum); -  /* source and destination IP addresses */ -  PACK_STRUCT_FIELD(struct ip_addr src); -  PACK_STRUCT_FIELD(struct ip_addr dest);  -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif - -#define IPH_V(hdr)  (ntohs((hdr)->_v_hl_tos) >> 12) -#define IPH_HL(hdr) ((ntohs((hdr)->_v_hl_tos) >> 8) & 0x0f) -#define IPH_TOS(hdr) (ntohs((hdr)->_v_hl_tos) & 0xff) -#define IPH_LEN(hdr) ((hdr)->_len) -#define IPH_ID(hdr) ((hdr)->_id) -#define IPH_OFFSET(hdr) ((hdr)->_offset) -#define IPH_TTL(hdr) (ntohs((hdr)->_ttl_proto) >> 8) -#define IPH_PROTO(hdr) (ntohs((hdr)->_ttl_proto) & 0xff) -#define IPH_CHKSUM(hdr) ((hdr)->_chksum) - -#define IPH_VHLTOS_SET(hdr, v, hl, tos) (hdr)->_v_hl_tos = (htons(((v) << 12) | ((hl) << 8) | (tos))) -#define IPH_LEN_SET(hdr, len) (hdr)->_len = (len) -#define IPH_ID_SET(hdr, id) (hdr)->_id = (id) -#define IPH_OFFSET_SET(hdr, off) (hdr)->_offset = (off) -#define IPH_TTL_SET(hdr, ttl) (hdr)->_ttl_proto = (htons(IPH_PROTO(hdr) | ((u16_t)(ttl) << 8))) -#define IPH_PROTO_SET(hdr, proto) (hdr)->_ttl_proto = (htons((proto) | (IPH_TTL(hdr) << 8))) -#define IPH_CHKSUM_SET(hdr, chksum) (hdr)->_chksum = (chksum) - -/** The interface that provided the packet for the current callback invocation. */ -extern struct netif *current_netif; -/** Header of the input packet currently being processed. */ -extern const struct ip_hdr *current_header; - -#define ip_init() /* Compatibility define, not init needed. */ -struct netif *ip_route(struct ip_addr *dest); -err_t ip_input(struct pbuf *p, struct netif *inp); -err_t ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, -       u8_t ttl, u8_t tos, u8_t proto); -err_t ip_output_if(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, -       u8_t ttl, u8_t tos, u8_t proto, -       struct netif *netif); -#if LWIP_NETIF_HWADDRHINT -err_t ip_output_hinted(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, -       u8_t ttl, u8_t tos, u8_t proto, u8_t *addr_hint); -#endif /* LWIP_NETIF_HWADDRHINT */ -#if IP_OPTIONS_SEND -err_t ip_output_if_opt(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, -       u8_t ttl, u8_t tos, u8_t proto, struct netif *netif, void *ip_options, -       u16_t optlen); -#endif /* IP_OPTIONS_SEND */ -/** Get the interface that received the current packet. - * This function must only be called from a receive callback (udp_recv, - * raw_recv, tcp_accept). It will return NULL otherwise. */ -#define ip_current_netif()  (current_netif) -/** Get the IP header of the current packet. - * This function must only be called from a receive callback (udp_recv, - * raw_recv, tcp_accept). It will return NULL otherwise. */ -#define ip_current_header() (current_header) -#if IP_DEBUG -void ip_debug_print(struct pbuf *p); -#else -#define ip_debug_print(p) -#endif /* IP_DEBUG */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_IP_H__ */ - - diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_addr.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_addr.h deleted file mode 100644 index 5fbc44d..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_addr.h +++ /dev/null @@ -1,175 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_IP_ADDR_H__ -#define __LWIP_IP_ADDR_H__ - -#include "lwip/opt.h" - -#include "lwip/inet.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct ip_addr { -  PACK_STRUCT_FIELD(u32_t addr); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif - -/* - * struct ipaddr2 is used in the definition of the ARP packet format in - * order to support compilers that don't have structure packing. - */ -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct ip_addr2 { -  PACK_STRUCT_FIELD(u16_t addrw[2]); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif - -struct netif; - -extern const struct ip_addr ip_addr_any; -extern const struct ip_addr ip_addr_broadcast; - -/** IP_ADDR_ can be used as a fixed IP address - *  for the wildcard and the broadcast address - */ -#define IP_ADDR_ANY         ((struct ip_addr *)&ip_addr_any) -#define IP_ADDR_BROADCAST   ((struct ip_addr *)&ip_addr_broadcast) - -/* Definitions of the bits in an Internet address integer. - -   On subnets, host and network parts are found according to -   the subnet mask, not these masks.  */ - -#define IN_CLASSA(a)        ((((u32_t)(a)) & 0x80000000UL) == 0) -#define IN_CLASSA_NET       0xff000000 -#define IN_CLASSA_NSHIFT    24 -#define IN_CLASSA_HOST      (0xffffffff & ~IN_CLASSA_NET) -#define IN_CLASSA_MAX       128 - -#define IN_CLASSB(a)        ((((u32_t)(a)) & 0xc0000000UL) == 0x80000000UL) -#define IN_CLASSB_NET       0xffff0000 -#define IN_CLASSB_NSHIFT    16 -#define IN_CLASSB_HOST      (0xffffffff & ~IN_CLASSB_NET) -#define IN_CLASSB_MAX       65536 - -#define IN_CLASSC(a)        ((((u32_t)(a)) & 0xe0000000UL) == 0xc0000000UL) -#define IN_CLASSC_NET       0xffffff00 -#define IN_CLASSC_NSHIFT    8 -#define IN_CLASSC_HOST      (0xffffffff & ~IN_CLASSC_NET) - -#define IN_CLASSD(a)        (((u32_t)(a) & 0xf0000000UL) == 0xe0000000UL) -#define IN_CLASSD_NET       0xf0000000          /* These ones aren't really */ -#define IN_CLASSD_NSHIFT    28                  /*   net and host fields, but */ -#define IN_CLASSD_HOST      0x0fffffff          /*   routing needn't know. */ -#define IN_MULTICAST(a)     IN_CLASSD(a) - -#define IN_EXPERIMENTAL(a)  (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL) -#define IN_BADCLASS(a)      (((u32_t)(a) & 0xf0000000UL) == 0xf0000000UL) - -#define IN_LOOPBACKNET      127                 /* official! */ - -#define IP4_ADDR(ipaddr, a,b,c,d) \ -        (ipaddr)->addr = htonl(((u32_t)((a) & 0xff) << 24) | \ -                               ((u32_t)((b) & 0xff) << 16) | \ -                               ((u32_t)((c) & 0xff) << 8) | \ -                                (u32_t)((d) & 0xff)) - -#define ip_addr_set(dest, src) (dest)->addr = \ -                               ((src) == NULL? 0:\ -                               (src)->addr) -/** - * Determine if two address are on the same network. - * - * @arg addr1 IP address 1 - * @arg addr2 IP address 2 - * @arg mask network identifier mask - * @return !0 if the network identifiers of both address match - */ -#define ip_addr_netcmp(addr1, addr2, mask) (((addr1)->addr & \ -                                              (mask)->addr) == \ -                                             ((addr2)->addr & \ -                                              (mask)->addr)) -#define ip_addr_cmp(addr1, addr2) ((addr1)->addr == (addr2)->addr) - -#define ip_addr_isany(addr1) ((addr1) == NULL || (addr1)->addr == 0) - -u8_t ip_addr_isbroadcast(struct ip_addr *, struct netif *); - -#define ip_addr_ismulticast(addr1) (((addr1)->addr & ntohl(0xf0000000UL)) == ntohl(0xe0000000UL)) - -#define ip_addr_islinklocal(addr1) (((addr1)->addr & ntohl(0xffff0000UL)) == ntohl(0xa9fe0000UL)) - -#define ip_addr_debug_print(debug, ipaddr) \ -  LWIP_DEBUGF(debug, ("%"U16_F".%"U16_F".%"U16_F".%"U16_F,              \ -                      ipaddr != NULL ?                                  \ -                      (u16_t)(ntohl((ipaddr)->addr) >> 24) & 0xff : 0,  \ -                      ipaddr != NULL ?                                  \ -                      (u16_t)(ntohl((ipaddr)->addr) >> 16) & 0xff : 0,  \ -                      ipaddr != NULL ?                                  \ -                      (u16_t)(ntohl((ipaddr)->addr) >> 8) & 0xff : 0,   \ -                      ipaddr != NULL ?                                  \ -                      (u16_t)ntohl((ipaddr)->addr) & 0xff : 0)) - -/* These are cast to u16_t, with the intent that they are often arguments - * to printf using the U16_F format from cc.h. */ -#define ip4_addr1(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 24) & 0xff) -#define ip4_addr2(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 16) & 0xff) -#define ip4_addr3(ipaddr) ((u16_t)(ntohl((ipaddr)->addr) >> 8) & 0xff) -#define ip4_addr4(ipaddr) ((u16_t)(ntohl((ipaddr)->addr)) & 0xff) - -/** - * Same as inet_ntoa() but takes a struct ip_addr* - */ -#define ip_ntoa(addr)  ((addr != NULL) ? inet_ntoa(*((struct in_addr*)(addr))) : "NULL") - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_IP_ADDR_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_frag.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_frag.h deleted file mode 100644 index adc6e91..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_frag.h +++ /dev/null @@ -1,78 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Jani Monoses <jani@iv.ro> - * - */ - -#ifndef __LWIP_IP_FRAG_H__ -#define __LWIP_IP_FRAG_H__ - -#include "lwip/opt.h" -#include "lwip/err.h" -#include "lwip/pbuf.h" -#include "lwip/netif.h" -#include "lwip/ip_addr.h" -#include "lwip/ip.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if IP_REASSEMBLY -/* The IP reassembly timer interval in milliseconds. */ -#define IP_TMR_INTERVAL 1000 - -/* IP reassembly helper struct. - * This is exported because memp needs to know the size. - */ -struct ip_reassdata { -  struct ip_reassdata *next; -  struct pbuf *p; -  struct ip_hdr iphdr; -  u16_t datagram_len; -  u8_t flags; -  u8_t timer; -}; - -void ip_reass_init(void); -void ip_reass_tmr(void); -struct pbuf * ip_reass(struct pbuf *p); -#endif /* IP_REASSEMBLY */ - -#if IP_FRAG -err_t ip_frag(struct pbuf *p, struct netif *netif, struct ip_addr *dest); -#endif /* IP_FRAG */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_IP_FRAG_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api.h deleted file mode 100644 index 7d2c9e6..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api.h +++ /dev/null @@ -1,224 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_API_H__ -#define __LWIP_API_H__ - -#include "lwip/opt.h" - -#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */ - -#include <stddef.h> /* for size_t */ - -#include "lwip/netbuf.h" -#include "lwip/sys.h" -#include "lwip/ip_addr.h" -#include "lwip/err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Throughout this file, IP addresses and port numbers are expected to be in - * the same byte order as in the corresponding pcb. - */ - -/* Flags for netconn_write */ -#define NETCONN_NOFLAG 0x00 -#define NETCONN_NOCOPY 0x00 /* Only for source code compatibility */ -#define NETCONN_COPY   0x01 -#define NETCONN_MORE   0x02 - -/* Helpers to process several netconn_types by the same code */ -#define NETCONNTYPE_GROUP(t)    (t&0xF0) -#define NETCONNTYPE_DATAGRAM(t) (t&0xE0) - -enum netconn_type { -  NETCONN_INVALID    = 0, -  /* NETCONN_TCP Group */ -  NETCONN_TCP        = 0x10, -  /* NETCONN_UDP Group */ -  NETCONN_UDP        = 0x20, -  NETCONN_UDPLITE    = 0x21, -  NETCONN_UDPNOCHKSUM= 0x22, -  /* NETCONN_RAW Group */ -  NETCONN_RAW        = 0x40 -}; - -enum netconn_state { -  NETCONN_NONE, -  NETCONN_WRITE, -  NETCONN_LISTEN, -  NETCONN_CONNECT, -  NETCONN_CLOSE -}; - -enum netconn_evt { -  NETCONN_EVT_RCVPLUS, -  NETCONN_EVT_RCVMINUS, -  NETCONN_EVT_SENDPLUS, -  NETCONN_EVT_SENDMINUS -}; - -#if LWIP_IGMP -enum netconn_igmp { -  NETCONN_JOIN, -  NETCONN_LEAVE -}; -#endif /* LWIP_IGMP */ - -/* forward-declare some structs to avoid to include their headers */ -struct ip_pcb; -struct tcp_pcb; -struct udp_pcb; -struct raw_pcb; -struct netconn; - -/** A callback prototype to inform about events for a netconn */ -typedef void (* netconn_callback)(struct netconn *, enum netconn_evt, u16_t len); - -/** A netconn descriptor */ -struct netconn { -  /** type of the netconn (TCP, UDP or RAW) */ -  enum netconn_type type; -  /** current state of the netconn */ -  enum netconn_state state; -  /** the lwIP internal protocol control block */ -  union { -    struct ip_pcb  *ip; -    struct tcp_pcb *tcp; -    struct udp_pcb *udp; -    struct raw_pcb *raw; -  } pcb; -  /** the last error this netconn had */ -  err_t err; -  /** sem that is used to synchroneously execute functions in the core context */ -  sys_sem_t op_completed; -  /** mbox where received packets are stored until they are fetched -      by the netconn application thread (can grow quite big) */ -  sys_mbox_t recvmbox; -  /** mbox where new connections are stored until processed -      by the application thread */ -  sys_mbox_t acceptmbox; -  /** only used for socket layer */ -  int socket; -#if LWIP_SO_RCVTIMEO -  /** timeout to wait for new data to be received -      (or connections to arrive for listening netconns) */ -  int recv_timeout; -#endif /* LWIP_SO_RCVTIMEO */ -#if LWIP_SO_RCVBUF -  /** maximum amount of bytes queued in recvmbox */ -  int recv_bufsize; -#endif /* LWIP_SO_RCVBUF */ -  s16_t recv_avail; -#if LWIP_TCP -  /** TCP: when data passed to netconn_write doesn't fit into the send buffer, -      this temporarily stores the message. */ -  struct api_msg_msg *write_msg; -  /** TCP: when data passed to netconn_write doesn't fit into the send buffer, -      this temporarily stores how much is already sent. */ -  size_t write_offset; -#if LWIP_TCPIP_CORE_LOCKING -  /** TCP: when data passed to netconn_write doesn't fit into the send buffer, -      this temporarily stores whether to wake up the original application task -      if data couldn't be sent in the first try. */ -  u8_t write_delayed; -#endif /* LWIP_TCPIP_CORE_LOCKING */ -#endif /* LWIP_TCP */ -  /** A callback function that is informed about events for this netconn */ -  netconn_callback callback; -}; - -/* Register an Network connection event */ -#define API_EVENT(c,e,l) if (c->callback) {         \ -                           (*c->callback)(c, e, l); \ -                         } - -/* Network connection functions: */ -#define netconn_new(t)                  netconn_new_with_proto_and_callback(t, 0, NULL) -#define netconn_new_with_callback(t, c) netconn_new_with_proto_and_callback(t, 0, c) -struct -netconn *netconn_new_with_proto_and_callback(enum netconn_type t, u8_t proto, -                                   netconn_callback callback); -err_t             netconn_delete  (struct netconn *conn); -/** Get the type of a netconn (as enum netconn_type). */ -#define netconn_type(conn) (conn->type) - -err_t             netconn_getaddr (struct netconn *conn, -                                   struct ip_addr *addr, -                                   u16_t *port, -                                   u8_t local); -#define netconn_peer(c,i,p) netconn_getaddr(c,i,p,0) -#define netconn_addr(c,i,p) netconn_getaddr(c,i,p,1) - -err_t             netconn_bind    (struct netconn *conn, -                                   struct ip_addr *addr, -                                   u16_t port); -err_t             netconn_connect (struct netconn *conn, -                                   struct ip_addr *addr, -                                   u16_t port); -err_t             netconn_disconnect (struct netconn *conn); -err_t             netconn_listen_with_backlog(struct netconn *conn, u8_t backlog); -#define netconn_listen(conn) netconn_listen_with_backlog(conn, TCP_DEFAULT_LISTEN_BACKLOG) -struct netconn *  netconn_accept  (struct netconn *conn); -struct netbuf *   netconn_recv    (struct netconn *conn); -err_t             netconn_sendto  (struct netconn *conn, -                                   struct netbuf *buf, struct ip_addr *addr, u16_t port); -err_t             netconn_send    (struct netconn *conn, -                                   struct netbuf *buf); -err_t             netconn_write   (struct netconn *conn, -                                   const void *dataptr, size_t size, -                                   u8_t apiflags); -err_t             netconn_close   (struct netconn *conn); - -#if LWIP_IGMP -err_t             netconn_join_leave_group (struct netconn *conn, -                                            struct ip_addr *multiaddr, -                                            struct ip_addr *interface, -                                            enum netconn_igmp join_or_leave); -#endif /* LWIP_IGMP */ -#if LWIP_DNS -err_t             netconn_gethostbyname(const char *name, struct ip_addr *addr); -#endif /* LWIP_DNS */ - -#define netconn_err(conn)          ((conn)->err) -#define netconn_recv_bufsize(conn) ((conn)->recv_bufsize) - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_NETCONN */ - -#endif /* __LWIP_API_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api_msg.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api_msg.h deleted file mode 100644 index 7718d90..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api_msg.h +++ /dev/null @@ -1,164 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_API_MSG_H__ -#define __LWIP_API_MSG_H__ - -#include "lwip/opt.h" - -#if LWIP_NETCONN /* don't build if not configured for use in lwipopts.h */ - -#include <stddef.h> /* for size_t */ - -#include "lwip/ip_addr.h" -#include "lwip/err.h" -#include "lwip/sys.h" -#include "lwip/igmp.h" -#include "lwip/api.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* IP addresses and port numbers are expected to be in - * the same byte order as in the corresponding pcb. - */ -/** This struct includes everything that is necessary to execute a function -    for a netconn in another thread context (mainly used to process netconns -    in the tcpip_thread context to be thread safe). */ -struct api_msg_msg { -  /** The netconn which to process - always needed: it includes the semaphore -      which is used to block the application thread until the function finished. */ -  struct netconn *conn; -  /** Depending on the executed function, one of these union members is used */ -  union { -    /** used for do_send */ -    struct netbuf *b; -    /** used for do_newconn */ -    struct { -      u8_t proto; -    } n; -    /** used for do_bind and do_connect */ -    struct { -      struct ip_addr *ipaddr; -      u16_t port; -    } bc; -    /** used for do_getaddr */ -    struct { -      struct ip_addr *ipaddr; -      u16_t *port; -      u8_t local; -    } ad; -    /** used for do_write */ -    struct { -      const void *dataptr; -      size_t len; -      u8_t apiflags; -    } w; -    /** used for do_recv */ -    struct { -      u16_t len; -    } r; -#if LWIP_IGMP -    /** used for do_join_leave_group */ -    struct { -      struct ip_addr *multiaddr; -      struct ip_addr *interface; -      enum netconn_igmp join_or_leave; -    } jl; -#endif /* LWIP_IGMP */ -#if TCP_LISTEN_BACKLOG -    struct { -      u8_t backlog; -    } lb; -#endif /* TCP_LISTEN_BACKLOG */ -  } msg; -}; - -/** This struct contains a function to execute in another thread context and -    a struct api_msg_msg that serves as an argument for this function. -    This is passed to tcpip_apimsg to execute functions in tcpip_thread context. */ -struct api_msg { -  /** function to execute in tcpip_thread context */ -  void (* function)(struct api_msg_msg *msg); -  /** arguments for this function */ -  struct api_msg_msg msg; -}; - -#if LWIP_DNS -/** As do_gethostbyname requires more arguments but doesn't require a netconn, -    it has its own struct (to avoid struct api_msg getting bigger than necessary). -    do_gethostbyname must be called using tcpip_callback instead of tcpip_apimsg -    (see netconn_gethostbyname). */ -struct dns_api_msg { -  /** Hostname to query or dotted IP address string */ -  const char *name; -  /** Rhe resolved address is stored here */ -  struct ip_addr *addr; -  /** This semaphore is posted when the name is resolved, the application thread -      should wait on it. */ -  sys_sem_t sem; -  /** Errors are given back here */ -  err_t *err; -}; -#endif /* LWIP_DNS */ - -void do_newconn         ( struct api_msg_msg *msg); -void do_delconn         ( struct api_msg_msg *msg); -void do_bind            ( struct api_msg_msg *msg); -void do_connect         ( struct api_msg_msg *msg); -void do_disconnect      ( struct api_msg_msg *msg); -void do_listen          ( struct api_msg_msg *msg); -void do_send            ( struct api_msg_msg *msg); -void do_recv            ( struct api_msg_msg *msg); -void do_write           ( struct api_msg_msg *msg); -void do_getaddr         ( struct api_msg_msg *msg); -void do_close           ( struct api_msg_msg *msg); -#if LWIP_IGMP -void do_join_leave_group( struct api_msg_msg *msg); -#endif /* LWIP_IGMP */ - -#if LWIP_DNS -void do_gethostbyname(void *arg); -#endif /* LWIP_DNS */ - -struct netconn* netconn_alloc(enum netconn_type t, netconn_callback callback); -void netconn_free(struct netconn *conn); - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_NETCONN */ - -#endif /* __LWIP_API_MSG_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/arch.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/arch.h deleted file mode 100644 index 5ab190a..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/arch.h +++ /dev/null @@ -1,235 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_ARCH_H__ -#define __LWIP_ARCH_H__ - -#ifndef LITTLE_ENDIAN -#define LITTLE_ENDIAN 1234 -#endif - -#ifndef BIG_ENDIAN -#define BIG_ENDIAN 4321 -#endif - -#include "arch/cc.h" - -/** Temporary: define format string for size_t if not defined in cc.h */ -#ifndef SZT_F -#define SZT_F U32_F -#endif /* SZT_F */ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef PACK_STRUCT_BEGIN -#define PACK_STRUCT_BEGIN -#endif /* PACK_STRUCT_BEGIN */ - -#ifndef PACK_STRUCT_END -#define PACK_STRUCT_END -#endif /* PACK_STRUCT_END */ - -#ifndef PACK_STRUCT_FIELD -#define PACK_STRUCT_FIELD(x) x -#endif /* PACK_STRUCT_FIELD */ - - -#ifndef LWIP_UNUSED_ARG -#define LWIP_UNUSED_ARG(x) (void)x -#endif /* LWIP_UNUSED_ARG */  - - -#ifdef LWIP_PROVIDE_ERRNO - -#define  EPERM     1  /* Operation not permitted */ -#define  ENOENT     2  /* No such file or directory */ -#define  ESRCH     3  /* No such process */ -#define  EINTR     4  /* Interrupted system call */ -#define  EIO     5  /* I/O error */ -#define  ENXIO     6  /* No such device or address */ -#define  E2BIG     7  /* Arg list too long */ -#define  ENOEXEC     8  /* Exec format error */ -#define  EBADF     9  /* Bad file number */ -#define  ECHILD    10  /* No child processes */ -#define  EAGAIN    11  /* Try again */ -#define  ENOMEM    12  /* Out of memory */ -#define  EACCES    13  /* Permission denied */ -#define  EFAULT    14  /* Bad address */ -#define  ENOTBLK    15  /* Block device required */ -#define  EBUSY    16  /* Device or resource busy */ -#define  EEXIST    17  /* File exists */ -#define  EXDEV    18  /* Cross-device link */ -#define  ENODEV    19  /* No such device */ -#define  ENOTDIR    20  /* Not a directory */ -#define  EISDIR    21  /* Is a directory */ -#define  EINVAL    22  /* Invalid argument */ -#define  ENFILE    23  /* File table overflow */ -#define  EMFILE    24  /* Too many open files */ -#define  ENOTTY    25  /* Not a typewriter */ -#define  ETXTBSY    26  /* Text file busy */ -#define  EFBIG    27  /* File too large */ -#define  ENOSPC    28  /* No space left on device */ -#define  ESPIPE    29  /* Illegal seek */ -#define  EROFS    30  /* Read-only file system */ -#define  EMLINK    31  /* Too many links */ -#define  EPIPE    32  /* Broken pipe */ -#define  EDOM    33  /* Math argument out of domain of func */ -#define  ERANGE    34  /* Math result not representable */ -#define  EDEADLK    35  /* Resource deadlock would occur */ -#define  ENAMETOOLONG  36  /* File name too long */ -#define  ENOLCK    37  /* No record locks available */ -#define  ENOSYS    38  /* Function not implemented */ -#define  ENOTEMPTY  39  /* Directory not empty */ -#define  ELOOP    40  /* Too many symbolic links encountered */ -#define  EWOULDBLOCK  EAGAIN  /* Operation would block */ -#define  ENOMSG    42  /* No message of desired type */ -#define  EIDRM    43  /* Identifier removed */ -#define  ECHRNG    44  /* Channel number out of range */ -#define  EL2NSYNC  45  /* Level 2 not synchronized */ -#define  EL3HLT    46  /* Level 3 halted */ -#define  EL3RST    47  /* Level 3 reset */ -#define  ELNRNG    48  /* Link number out of range */ -#define  EUNATCH    49  /* Protocol driver not attached */ -#define  ENOCSI    50  /* No CSI structure available */ -#define  EL2HLT    51  /* Level 2 halted */ -#define  EBADE    52  /* Invalid exchange */ -#define  EBADR    53  /* Invalid request descriptor */ -#define  EXFULL    54  /* Exchange full */ -#define  ENOANO    55  /* No anode */ -#define  EBADRQC    56  /* Invalid request code */ -#define  EBADSLT    57  /* Invalid slot */ - -#define  EDEADLOCK  EDEADLK - -#define  EBFONT    59  /* Bad font file format */ -#define  ENOSTR    60  /* Device not a stream */ -#define  ENODATA    61  /* No data available */ -#define  ETIME    62  /* Timer expired */ -#define  ENOSR    63  /* Out of streams resources */ -#define  ENONET    64  /* Machine is not on the network */ -#define  ENOPKG    65  /* Package not installed */ -#define  EREMOTE    66  /* Object is remote */ -#define  ENOLINK    67  /* Link has been severed */ -#define  EADV    68  /* Advertise error */ -#define  ESRMNT    69  /* Srmount error */ -#define  ECOMM    70  /* Communication error on send */ -#define  EPROTO    71  /* Protocol error */ -#define  EMULTIHOP  72  /* Multihop attempted */ -#define  EDOTDOT    73  /* RFS specific error */ -#define  EBADMSG    74  /* Not a data message */ -#define  EOVERFLOW  75  /* Value too large for defined data type */ -#define  ENOTUNIQ  76  /* Name not unique on network */ -#define  EBADFD    77  /* File descriptor in bad state */ -#define  EREMCHG    78  /* Remote address changed */ -#define  ELIBACC    79  /* Can not access a needed shared library */ -#define  ELIBBAD    80  /* Accessing a corrupted shared library */ -#define  ELIBSCN    81  /* .lib section in a.out corrupted */ -#define  ELIBMAX    82  /* Attempting to link in too many shared libraries */ -#define  ELIBEXEC  83  /* Cannot exec a shared library directly */ -#define  EILSEQ    84  /* Illegal byte sequence */ -#define  ERESTART  85  /* Interrupted system call should be restarted */ -#define  ESTRPIPE  86  /* Streams pipe error */ -#define  EUSERS    87  /* Too many users */ -#define  ENOTSOCK  88  /* Socket operation on non-socket */ -#define  EDESTADDRREQ  89  /* Destination address required */ -#define  EMSGSIZE  90  /* Message too long */ -#define  EPROTOTYPE  91  /* Protocol wrong type for socket */ -#define  ENOPROTOOPT  92  /* Protocol not available */ -#define  EPROTONOSUPPORT  93  /* Protocol not supported */ -#define  ESOCKTNOSUPPORT  94  /* Socket type not supported */ -#define  EOPNOTSUPP  95  /* Operation not supported on transport endpoint */ -#define  EPFNOSUPPORT  96  /* Protocol family not supported */ -#define  EAFNOSUPPORT  97  /* Address family not supported by protocol */ -#define  EADDRINUSE  98  /* Address already in use */ -#define  EADDRNOTAVAIL  99  /* Cannot assign requested address */ -#define  ENETDOWN  100  /* Network is down */ -#define  ENETUNREACH  101  /* Network is unreachable */ -#define  ENETRESET  102  /* Network dropped connection because of reset */ -#define  ECONNABORTED  103  /* Software caused connection abort */ -#define  ECONNRESET  104  /* Connection reset by peer */ -#define  ENOBUFS    105  /* No buffer space available */ -#define  EISCONN    106  /* Transport endpoint is already connected */ -#define  ENOTCONN  107  /* Transport endpoint is not connected */ -#define  ESHUTDOWN  108  /* Cannot send after transport endpoint shutdown */ -#define  ETOOMANYREFS  109  /* Too many references: cannot splice */ -#define  ETIMEDOUT  110  /* Connection timed out */ -#define  ECONNREFUSED  111  /* Connection refused */ -#define  EHOSTDOWN  112  /* Host is down */ -#define  EHOSTUNREACH  113  /* No route to host */ -#define  EALREADY  114  /* Operation already in progress */ -#define  EINPROGRESS  115  /* Operation now in progress */ -#define  ESTALE    116  /* Stale NFS file handle */ -#define  EUCLEAN    117  /* Structure needs cleaning */ -#define  ENOTNAM    118  /* Not a XENIX named type file */ -#define  ENAVAIL    119  /* No XENIX semaphores available */ -#define  EISNAM    120  /* Is a named type file */ -#define  EREMOTEIO  121  /* Remote I/O error */ -#define  EDQUOT    122  /* Quota exceeded */ - -#define  ENOMEDIUM  123  /* No medium found */ -#define  EMEDIUMTYPE  124  /* Wrong medium type */ - - -#define ENSROK    0 /* DNS server returned answer with no data */ -#define ENSRNODATA  160 /* DNS server returned answer with no data */ -#define ENSRFORMERR 161 /* DNS server claims query was misformatted */ -#define ENSRSERVFAIL 162  /* DNS server returned general failure */ -#define ENSRNOTFOUND 163  /* Domain name not found */ -#define ENSRNOTIMP  164 /* DNS server does not implement requested operation */ -#define ENSRREFUSED 165 /* DNS server refused query */ -#define ENSRBADQUERY 166  /* Misformatted DNS query */ -#define ENSRBADNAME 167 /* Misformatted domain name */ -#define ENSRBADFAMILY 168 /* Unsupported address family */ -#define ENSRBADRESP 169 /* Misformatted DNS reply */ -#define ENSRCONNREFUSED 170 /* Could not contact DNS servers */ -#define ENSRTIMEOUT 171 /* Timeout while contacting DNS servers */ -#define ENSROF    172 /* End of file */ -#define ENSRFILE  173 /* Error reading file */ -#define ENSRNOMEM 174 /* Out of memory */ -#define ENSRDESTRUCTION 175 /* Application terminated lookup */ -#define ENSRQUERYDOMAINTOOLONG  176 /* Domain name is too long */ -#define ENSRCNAMELOOP 177 /* Domain name is too long */ - -#ifndef errno -extern int errno; -#endif - -#endif /* LWIP_PROVIDE_ERRNO */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_ARCH_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/debug.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/debug.h deleted file mode 100644 index fb07607..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/debug.h +++ /dev/null @@ -1,100 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_DEBUG_H__ -#define __LWIP_DEBUG_H__ - -#include "lwip/arch.h" - -/** lower two bits indicate debug level - * - 0 all - * - 1 warning - * - 2 serious - * - 3 severe - */ -#define LWIP_DBG_LEVEL_ALL     0x00 -#define LWIP_DBG_LEVEL_OFF     LWIP_DBG_LEVEL_ALL /* compatibility define only */ -#define LWIP_DBG_LEVEL_WARNING 0x01 /* bad checksums, dropped packets, ... */ -#define LWIP_DBG_LEVEL_SERIOUS 0x02 /* memory allocation failures, ... */ -#define LWIP_DBG_LEVEL_SEVERE  0x03 -#define LWIP_DBG_MASK_LEVEL    0x03 - -/** flag for LWIP_DEBUGF to enable that debug message */ -#define LWIP_DBG_ON            0x80U -/** flag for LWIP_DEBUGF to disable that debug message */ -#define LWIP_DBG_OFF           0x00U - -/** flag for LWIP_DEBUGF indicating a tracing message (to follow program flow) */ -#define LWIP_DBG_TRACE         0x40U -/** flag for LWIP_DEBUGF indicating a state debug message (to follow module states) */ -#define LWIP_DBG_STATE         0x20U -/** flag for LWIP_DEBUGF indicating newly added code, not thoroughly tested yet */ -#define LWIP_DBG_FRESH         0x10U -/** flag for LWIP_DEBUGF to halt after printing this debug message */ -#define LWIP_DBG_HALT          0x08U - -#ifndef LWIP_NOASSERT -#define LWIP_ASSERT(message, assertion) do { if(!(assertion)) \ -  LWIP_PLATFORM_ASSERT(message); } while(0) -#else  /* LWIP_NOASSERT */ -#define LWIP_ASSERT(message, assertion)  -#endif /* LWIP_NOASSERT */ - -/** if "expression" isn't true, then print "message" and execute "handler" expression */ -#ifndef LWIP_ERROR -#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \ -  LWIP_PLATFORM_ASSERT(message); handler;}} while(0) -#endif /* LWIP_ERROR */ - -#ifdef LWIP_DEBUG -/** print debug message only if debug message type is enabled... - *  AND is of correct type AND is at least LWIP_DBG_LEVEL - */ -#define LWIP_DEBUGF(debug, message) do { \ -                               if ( \ -                                   ((debug) & LWIP_DBG_ON) && \ -                                   ((debug) & LWIP_DBG_TYPES_ON) && \ -                                   ((s16_t)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL)) { \ -                                 LWIP_PLATFORM_DIAG(message); \ -                                 if ((debug) & LWIP_DBG_HALT) { \ -                                   while(1); \ -                                 } \ -                               } \ -                             } while(0) - -#else  /* LWIP_DEBUG */ -#define LWIP_DEBUGF(debug, message)  -#endif /* LWIP_DEBUG */ - -#endif /* __LWIP_DEBUG_H__ */ - diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/def.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/def.h deleted file mode 100644 index c3681ac..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/def.h +++ /dev/null @@ -1,49 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_DEF_H__ -#define __LWIP_DEF_H__ - -/* this might define NULL already */ -#include "lwip/arch.h" - -#define LWIP_MAX(x , y)  (((x) > (y)) ? (x) : (y)) -#define LWIP_MIN(x , y)  (((x) < (y)) ? (x) : (y)) - -#ifndef NULL -#define NULL ((void *)0) -#endif - - -#endif /* __LWIP_DEF_H__ */ - diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dhcp.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dhcp.h deleted file mode 100644 index 27a0ade..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dhcp.h +++ /dev/null @@ -1,248 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** @file - */ - -#ifndef __LWIP_DHCP_H__ -#define __LWIP_DHCP_H__ - -#include "lwip/opt.h" - -#if LWIP_DHCP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/netif.h" -#include "lwip/udp.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** period (in seconds) of the application calling dhcp_coarse_tmr() */ -#define DHCP_COARSE_TIMER_SECS 60  -/** period (in milliseconds) of the application calling dhcp_coarse_tmr() */ -#define DHCP_COARSE_TIMER_MSECS (DHCP_COARSE_TIMER_SECS * 1000UL) -/** period (in milliseconds) of the application calling dhcp_fine_tmr() */ -#define DHCP_FINE_TIMER_MSECS 500  - -struct dhcp -{ -  /** transaction identifier of last sent request */  -  u32_t xid; -  /** our connection to the DHCP server */  -  struct udp_pcb *pcb; -  /** incoming msg */ -  struct dhcp_msg *msg_in; -  /** incoming msg options */ -  void *options_in;  -  /** ingoing msg options length */ -  u16_t options_in_len; -  /** current DHCP state machine state */ -  u8_t state; -  /** retries of current request */ -  u8_t tries; - -  struct pbuf *p_out; /* pbuf of outcoming msg */ -  struct dhcp_msg *msg_out; /* outgoing msg */ -  u16_t options_out_len; /* outgoing msg options length */ -  u16_t request_timeout; /* #ticks with period DHCP_FINE_TIMER_SECS for request timeout */ -  u16_t t1_timeout;  /* #ticks with period DHCP_COARSE_TIMER_SECS for renewal time */ -  u16_t t2_timeout;  /* #ticks with period DHCP_COARSE_TIMER_SECS for rebind time */ -  struct ip_addr server_ip_addr; /* dhcp server address that offered this lease */ -  struct ip_addr offered_ip_addr; -  struct ip_addr offered_sn_mask; -  struct ip_addr offered_gw_addr; -  struct ip_addr offered_bc_addr; -#define DHCP_MAX_DNS 2 -  u32_t dns_count; /* actual number of DNS servers obtained */ -  struct ip_addr offered_dns_addr[DHCP_MAX_DNS]; /* DNS server addresses */ -  -  u32_t offered_t0_lease; /* lease period (in seconds) */ -  u32_t offered_t1_renew; /* recommended renew time (usually 50% of lease period) */ -  u32_t offered_t2_rebind; /* recommended rebind time (usually 66% of lease period)  */ -#if LWIP_DHCP_AUTOIP_COOP -  u8_t autoip_coop_state; -#endif -/** Patch #1308 - *  TODO: See dhcp.c "TODO"s - */ -#if 0 -  struct ip_addr offered_si_addr; -  u8_t *boot_file_name; -#endif -}; - -/* MUST be compiled with "pack structs" or equivalent! */ -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -/** minimum set of fields of any DHCP message */ -struct dhcp_msg -{ -  PACK_STRUCT_FIELD(u8_t op); -  PACK_STRUCT_FIELD(u8_t htype); -  PACK_STRUCT_FIELD(u8_t hlen); -  PACK_STRUCT_FIELD(u8_t hops); -  PACK_STRUCT_FIELD(u32_t xid); -  PACK_STRUCT_FIELD(u16_t secs); -  PACK_STRUCT_FIELD(u16_t flags); -  PACK_STRUCT_FIELD(struct ip_addr ciaddr); -  PACK_STRUCT_FIELD(struct ip_addr yiaddr); -  PACK_STRUCT_FIELD(struct ip_addr siaddr); -  PACK_STRUCT_FIELD(struct ip_addr giaddr); -#define DHCP_CHADDR_LEN 16U -  PACK_STRUCT_FIELD(u8_t chaddr[DHCP_CHADDR_LEN]); -#define DHCP_SNAME_LEN 64U -  PACK_STRUCT_FIELD(u8_t sname[DHCP_SNAME_LEN]); -#define DHCP_FILE_LEN 128U -  PACK_STRUCT_FIELD(u8_t file[DHCP_FILE_LEN]); -  PACK_STRUCT_FIELD(u32_t cookie); -#define DHCP_MIN_OPTIONS_LEN 68U -/** make sure user does not configure this too small */ -#if ((defined(DHCP_OPTIONS_LEN)) && (DHCP_OPTIONS_LEN < DHCP_MIN_OPTIONS_LEN)) -#  undef DHCP_OPTIONS_LEN -#endif -/** allow this to be configured in lwipopts.h, but not too small */ -#if (!defined(DHCP_OPTIONS_LEN)) -/** set this to be sufficient for your options in outgoing DHCP msgs */ -#  define DHCP_OPTIONS_LEN DHCP_MIN_OPTIONS_LEN -#endif -  PACK_STRUCT_FIELD(u8_t options[DHCP_OPTIONS_LEN]); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif - -/** start DHCP configuration */ -err_t dhcp_start(struct netif *netif); -/** enforce early lease renewal (not needed normally)*/ -err_t dhcp_renew(struct netif *netif); -/** release the DHCP lease, usually called before dhcp_stop()*/ -err_t dhcp_release(struct netif *netif); -/** stop DHCP configuration */ -void dhcp_stop(struct netif *netif); -/** inform server of our manual IP address */ -void dhcp_inform(struct netif *netif); -/** Handle a possible change in the network configuration */ -void dhcp_network_changed(struct netif *netif); - -/** if enabled, check whether the offered IP address is not in use, using ARP */ -#if DHCP_DOES_ARP_CHECK -void dhcp_arp_reply(struct netif *netif, struct ip_addr *addr); -#endif - -/** to be called every minute */ -void dhcp_coarse_tmr(void); -/** to be called every half second */ -void dhcp_fine_tmr(void); -  -/** DHCP message item offsets and length */ -#define DHCP_MSG_OFS (UDP_DATA_OFS)   -  #define DHCP_OP_OFS (DHCP_MSG_OFS + 0) -  #define DHCP_HTYPE_OFS (DHCP_MSG_OFS + 1) -  #define DHCP_HLEN_OFS (DHCP_MSG_OFS + 2) -  #define DHCP_HOPS_OFS (DHCP_MSG_OFS + 3) -  #define DHCP_XID_OFS (DHCP_MSG_OFS + 4) -  #define DHCP_SECS_OFS (DHCP_MSG_OFS + 8) -  #define DHCP_FLAGS_OFS (DHCP_MSG_OFS + 10) -  #define DHCP_CIADDR_OFS (DHCP_MSG_OFS + 12) -  #define DHCP_YIADDR_OFS (DHCP_MSG_OFS + 16) -  #define DHCP_SIADDR_OFS (DHCP_MSG_OFS + 20) -  #define DHCP_GIADDR_OFS (DHCP_MSG_OFS + 24) -  #define DHCP_CHADDR_OFS (DHCP_MSG_OFS + 28) -  #define DHCP_SNAME_OFS (DHCP_MSG_OFS + 44) -  #define DHCP_FILE_OFS (DHCP_MSG_OFS + 108) -#define DHCP_MSG_LEN 236 - -#define DHCP_COOKIE_OFS (DHCP_MSG_OFS + DHCP_MSG_LEN) -#define DHCP_OPTIONS_OFS (DHCP_MSG_OFS + DHCP_MSG_LEN + 4) - -#define DHCP_CLIENT_PORT 68   -#define DHCP_SERVER_PORT 67 - -/** DHCP client states */ -#define DHCP_REQUESTING 1 -#define DHCP_INIT 2 -#define DHCP_REBOOTING 3 -#define DHCP_REBINDING 4 -#define DHCP_RENEWING 5 -#define DHCP_SELECTING 6 -#define DHCP_INFORMING 7 -#define DHCP_CHECKING 8 -#define DHCP_PERMANENT 9 -#define DHCP_BOUND 10 -/** not yet implemented #define DHCP_RELEASING 11 */ -#define DHCP_BACKING_OFF 12 -#define DHCP_OFF 13 - -/** AUTOIP cooperatation flags */ -#define DHCP_AUTOIP_COOP_STATE_OFF 0 -#define DHCP_AUTOIP_COOP_STATE_ON 1 -  -#define DHCP_BOOTREQUEST 1 -#define DHCP_BOOTREPLY 2 - -#define DHCP_DISCOVER 1 -#define DHCP_OFFER 2 -#define DHCP_REQUEST 3 -#define DHCP_DECLINE 4 -#define DHCP_ACK 5 -#define DHCP_NAK 6 -#define DHCP_RELEASE 7 -#define DHCP_INFORM 8 - -#define DHCP_HTYPE_ETH 1 - -#define DHCP_HLEN_ETH 6 - -#define DHCP_BROADCAST_FLAG 15 -#define DHCP_BROADCAST_MASK (1 << DHCP_FLAG_BROADCAST) - -/** BootP options */ -#define DHCP_OPTION_PAD 0 -#define DHCP_OPTION_SUBNET_MASK 1 /* RFC 2132 3.3 */ -#define DHCP_OPTION_ROUTER 3 -#define DHCP_OPTION_DNS_SERVER 6  -#define DHCP_OPTION_HOSTNAME 12 -#define DHCP_OPTION_IP_TTL 23 -#define DHCP_OPTION_MTU 26 -#define DHCP_OPTION_BROADCAST 28 -#define DHCP_OPTION_TCP_TTL 37 -#define DHCP_OPTION_END 255 - -/** DHCP options */ -#define DHCP_OPTION_REQUESTED_IP 50 /* RFC 2132 9.1, requested IP address */ -#define DHCP_OPTION_LEASE_TIME 51 /* RFC 2132 9.2, time in seconds, in 4 bytes */ -#define DHCP_OPTION_OVERLOAD 52 /* RFC2132 9.3, use file and/or sname field for options */ - -#define DHCP_OPTION_MESSAGE_TYPE 53 /* RFC 2132 9.6, important for DHCP */ -#define DHCP_OPTION_MESSAGE_TYPE_LEN 1 - - -#define DHCP_OPTION_SERVER_ID 54 /* RFC 2132 9.7, server IP address */ -#define DHCP_OPTION_PARAMETER_REQUEST_LIST 55 /* RFC 2132 9.8, requested option types */ - -#define DHCP_OPTION_MAX_MSG_SIZE 57 /* RFC 2132 9.10, message size accepted >= 576 */ -#define DHCP_OPTION_MAX_MSG_SIZE_LEN 2 - -#define DHCP_OPTION_T1 58 /* T1 renewal time */ -#define DHCP_OPTION_T2 59 /* T2 rebinding time */ -#define DHCP_OPTION_US 60 -#define DHCP_OPTION_CLIENT_ID 61 -#define DHCP_OPTION_TFTP_SERVERNAME 66 -#define DHCP_OPTION_BOOTFILE 67 - -/** possible combinations of overloading the file and sname fields with options */ -#define DHCP_OVERLOAD_NONE 0 -#define DHCP_OVERLOAD_FILE 1 -#define DHCP_OVERLOAD_SNAME  2 -#define DHCP_OVERLOAD_SNAME_FILE 3 - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_DHCP */ - -#endif /*__LWIP_DHCP_H__*/ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dns.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dns.h deleted file mode 100644 index c1b8ae0..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dns.h +++ /dev/null @@ -1,99 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * lwip DNS resolver header file. - - * Author: Jim Pettinato  - *   April 2007 - - * ported from uIP resolv.c Copyright (c) 2002-2003, Adam Dunkels. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - *    products derived from this software without specific prior - *    written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __LWIP_DNS_H__ -#define __LWIP_DNS_H__ - -#include "lwip/opt.h" - -#if LWIP_DNS /* don't build if not configured for use in lwipopts.h */ - -/** DNS timer period */ -#define DNS_TMR_INTERVAL          1000 - -/** DNS field TYPE used for "Resource Records" */ -#define DNS_RRTYPE_A              1     /* a host address */ -#define DNS_RRTYPE_NS             2     /* an authoritative name server */ -#define DNS_RRTYPE_MD             3     /* a mail destination (Obsolete - use MX) */ -#define DNS_RRTYPE_MF             4     /* a mail forwarder (Obsolete - use MX) */ -#define DNS_RRTYPE_CNAME          5     /* the canonical name for an alias */ -#define DNS_RRTYPE_SOA            6     /* marks the start of a zone of authority */ -#define DNS_RRTYPE_MB             7     /* a mailbox domain name (EXPERIMENTAL) */ -#define DNS_RRTYPE_MG             8     /* a mail group member (EXPERIMENTAL) */ -#define DNS_RRTYPE_MR             9     /* a mail rename domain name (EXPERIMENTAL) */ -#define DNS_RRTYPE_NULL           10    /* a null RR (EXPERIMENTAL) */ -#define DNS_RRTYPE_WKS            11    /* a well known service description */ -#define DNS_RRTYPE_PTR            12    /* a domain name pointer */ -#define DNS_RRTYPE_HINFO          13    /* host information */ -#define DNS_RRTYPE_MINFO          14    /* mailbox or mail list information */ -#define DNS_RRTYPE_MX             15    /* mail exchange */ -#define DNS_RRTYPE_TXT            16    /* text strings */ - -/** DNS field CLASS used for "Resource Records" */ -#define DNS_RRCLASS_IN            1     /* the Internet */ -#define DNS_RRCLASS_CS            2     /* the CSNET class (Obsolete - used only for examples in some obsolete RFCs) */ -#define DNS_RRCLASS_CH            3     /* the CHAOS class */ -#define DNS_RRCLASS_HS            4     /* Hesiod [Dyer 87] */ -#define DNS_RRCLASS_FLUSH         0x800 /* Flush bit */ - -/** Callback which is invoked when a hostname is found. - * A function of this type must be implemented by the application using the DNS resolver. - * @param name pointer to the name that was looked up. - * @param ipaddr pointer to a struct ip_addr containing the IP address of the hostname, - *        or NULL if the name could not be found (or on any other error). - * @param callback_arg a user-specified callback argument passed to dns_gethostbyname -*/ -typedef void (*dns_found_callback)(const char *name, struct ip_addr *ipaddr, void *callback_arg); - - -void           dns_init(void); - -void           dns_tmr(void); - -void           dns_setserver(u8_t numdns, struct ip_addr *dnsserver); - -struct ip_addr dns_getserver(u8_t numdns); - -err_t          dns_gethostbyname(const char *hostname, struct ip_addr *addr, -                                 dns_found_callback found, void *callback_arg); - -#if DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC -int            dns_local_removehost(const char *hostname, const struct ip_addr *addr); -err_t          dns_local_addhost(const char *hostname, const struct ip_addr *addr); -#endif /* DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ - -#endif /* LWIP_DNS */ - -#endif /* __LWIP_DNS_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/err.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/err.h deleted file mode 100644 index 792f276..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/err.h +++ /dev/null @@ -1,89 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_ERR_H__ -#define __LWIP_ERR_H__ - -#include "lwip/opt.h" -#include "lwip/arch.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** Define LWIP_ERR_T in cc.h if you want to use - *  a different type for your platform (must be signed). */ -#ifdef LWIP_ERR_T -typedef LWIP_ERR_T err_t; -#else /* LWIP_ERR_T */ - typedef s8_t err_t; -#endif /* LWIP_ERR_T*/ - -/* Definitions for error constants. */ - -#define ERR_OK          0    /* No error, everything OK. */ -#define ERR_MEM        -1    /* Out of memory error.     */ -#define ERR_BUF        -2    /* Buffer error.            */ -#define ERR_TIMEOUT    -3    /* Timeout.                 */ -#define ERR_RTE        -4    /* Routing problem.         */ - -#define ERR_IS_FATAL(e) ((e) < ERR_RTE) - -#define ERR_ABRT       -5    /* Connection aborted.      */ -#define ERR_RST        -6    /* Connection reset.        */ -#define ERR_CLSD       -7    /* Connection closed.       */ -#define ERR_CONN       -8    /* Not connected.           */ - -#define ERR_VAL        -9    /* Illegal value.           */ - -#define ERR_ARG        -10   /* Illegal argument.        */ - -#define ERR_USE        -11   /* Address in use.          */ - -#define ERR_IF         -12   /* Low-level netif error    */ -#define ERR_ISCONN     -13   /* Already connected.       */ - -#define ERR_INPROGRESS -14   /* Operation in progress    */ - - -#ifdef LWIP_DEBUG -extern const char *lwip_strerr(err_t err); -#else -#define lwip_strerr(x) "" -#endif /* LWIP_DEBUG */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_ERR_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/init.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/init.h deleted file mode 100644 index a86e0d9..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/init.h +++ /dev/null @@ -1,74 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_INIT_H__ -#define __LWIP_INIT_H__ - -#include "lwip/opt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** X.x.x: Major version of the stack */ -#define LWIP_VERSION_MAJOR      1U -/** x.X.x: Minor version of the stack */ -#define LWIP_VERSION_MINOR      3U -/** x.x.X: Revision of the stack */ -#define LWIP_VERSION_REVISION   2U -/** For release candidates, this is set to 1..254 -  * For official releases, this is set to 255 (LWIP_RC_RELEASE) -  * For development versions (CVS), this is set to 0 (LWIP_RC_DEVELOPMENT) */ -#define LWIP_VERSION_RC         255U - -/** LWIP_VERSION_RC is set to LWIP_RC_RELEASE for official releases */ -#define LWIP_RC_RELEASE         255U -/** LWIP_VERSION_RC is set to LWIP_RC_DEVELOPMENT for CVS versions */ -#define LWIP_RC_DEVELOPMENT     0U - -#define LWIP_VERSION_IS_RELEASE     (LWIP_VERSION_RC == LWIP_RC_RELEASE) -#define LWIP_VERSION_IS_DEVELOPMENT (LWIP_VERSION_RC == LWIP_RC_DEVELOPMENT) -#define LWIP_VERSION_IS_RC          ((LWIP_VERSION_RC != LWIP_RC_RELEASE) && (LWIP_VERSION_RC != LWIP_RC_DEVELOPMENT)) - -/** Provides the version of the stack */ -#define LWIP_VERSION   (LWIP_VERSION_MAJOR << 24   | LWIP_VERSION_MINOR << 16 | \ -                        LWIP_VERSION_REVISION << 8 | LWIP_VERSION_RC) - -/* Modules initialization */ -void lwip_init(void); - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_INIT_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/mem.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/mem.h deleted file mode 100644 index 327229e..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/mem.h +++ /dev/null @@ -1,109 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_MEM_H__ -#define __LWIP_MEM_H__ - -#include "lwip/opt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if MEM_LIBC_MALLOC - -#include <stddef.h> /* for size_t */ - -typedef size_t mem_size_t; - -/* aliases for C library malloc() */ -#define mem_init() -/* in case C library malloc() needs extra protection, - * allow these defines to be overridden. - */ -#ifndef mem_free -#define mem_free free -#endif -#ifndef mem_malloc -#define mem_malloc malloc -#endif -#ifndef mem_calloc -#define mem_calloc calloc -#endif -#ifndef mem_realloc -static void *mem_realloc(void *mem, mem_size_t size) -{ -  LWIP_UNUSED_ARG(size); -  return mem; -} -#endif -#else /* MEM_LIBC_MALLOC */ - -/* MEM_SIZE would have to be aligned, but using 64000 here instead of - * 65535 leaves some room for alignment... - */ -#if MEM_SIZE > 64000l -typedef u32_t mem_size_t; -#else -typedef u16_t mem_size_t; -#endif /* MEM_SIZE > 64000 */ - -#if MEM_USE_POOLS -/** mem_init is not used when using pools instead of a heap */ -#define mem_init() -/** mem_realloc is not used when using pools instead of a heap: -    we can't free part of a pool element and don't want to copy the rest */ -#define mem_realloc(mem, size) (mem) -#else /* MEM_USE_POOLS */ -/* lwIP alternative malloc */ -void  mem_init(void); -void *mem_realloc(void *mem, mem_size_t size); -#endif /* MEM_USE_POOLS */ -void *mem_malloc(mem_size_t size); -void *mem_calloc(mem_size_t count, mem_size_t size); -void  mem_free(void *mem); -#endif /* MEM_LIBC_MALLOC */ - -#ifndef LWIP_MEM_ALIGN_SIZE -#define LWIP_MEM_ALIGN_SIZE(size) (((size) + MEM_ALIGNMENT - 1) & ~(MEM_ALIGNMENT-1)) -#endif - -#ifndef LWIP_MEM_ALIGN -#define LWIP_MEM_ALIGN(addr) ((void *)(((mem_ptr_t)(addr) + MEM_ALIGNMENT - 1) & ~(mem_ptr_t)(MEM_ALIGNMENT-1))) -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_MEM_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp.h deleted file mode 100644 index 3de7bf9..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp.h +++ /dev/null @@ -1,118 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ - -#ifndef __LWIP_MEMP_H__ -#define __LWIP_MEMP_H__ - -#include "lwip/opt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* Create the list of all memory pools managed by memp. MEMP_MAX represents a NULL pool at the end */ -typedef enum { -#define LWIP_MEMPOOL(name,num,size,desc)  MEMP_##name, -#include "lwip/memp_std.h" -  MEMP_MAX -} memp_t; - -#if MEM_USE_POOLS -/* Use a helper type to get the start and end of the user "memory pools" for mem_malloc */ -typedef enum { -    /* Get the first (via: -       MEMP_POOL_HELPER_START = ((u8_t) 1*MEMP_POOL_A + 0*MEMP_POOL_B + 0*MEMP_POOL_C + 0)*/ -    MEMP_POOL_HELPER_FIRST = ((u8_t) -#define LWIP_MEMPOOL(name,num,size,desc) -#define LWIP_MALLOC_MEMPOOL_START 1 -#define LWIP_MALLOC_MEMPOOL(num, size) * MEMP_POOL_##size + 0 -#define LWIP_MALLOC_MEMPOOL_END -#include "lwip/memp_std.h" -    ) , -    /* Get the last (via: -       MEMP_POOL_HELPER_END = ((u8_t) 0 + MEMP_POOL_A*0 + MEMP_POOL_B*0 + MEMP_POOL_C*1) */ -    MEMP_POOL_HELPER_LAST = ((u8_t) -#define LWIP_MEMPOOL(name,num,size,desc) -#define LWIP_MALLOC_MEMPOOL_START -#define LWIP_MALLOC_MEMPOOL(num, size) 0 + MEMP_POOL_##size * -#define LWIP_MALLOC_MEMPOOL_END 1 -#include "lwip/memp_std.h" -    ) -} memp_pool_helper_t; - -/* The actual start and stop values are here (cast them over) -   We use this helper type and these defines so we can avoid using const memp_t values */ -#define MEMP_POOL_FIRST ((memp_t) MEMP_POOL_HELPER_FIRST) -#define MEMP_POOL_LAST   ((memp_t) MEMP_POOL_HELPER_LAST) -#endif /* MEM_USE_POOLS */ - -#if MEMP_MEM_MALLOC || MEM_USE_POOLS -extern const u16_t memp_sizes[MEMP_MAX]; -#endif /* MEMP_MEM_MALLOC || MEM_USE_POOLS */ - -#if MEMP_MEM_MALLOC - -#include "mem.h" - -#define memp_init() -#define memp_malloc(type)     mem_malloc(memp_sizes[type]) -#define memp_free(type, mem)  mem_free(mem) - -#else /* MEMP_MEM_MALLOC */ - -#if MEM_USE_POOLS -/** This structure is used to save the pool one element came from. */ -struct memp_malloc_helper -{ -   memp_t poolnr; -}; -#endif /* MEM_USE_POOLS */ - -void  memp_init(void); - -#if MEMP_OVERFLOW_CHECK -void *memp_malloc_fn(memp_t type, const char* file, const int line); -#define memp_malloc(t) memp_malloc_fn((t), __FILE__, __LINE__) -#else -void *memp_malloc(memp_t type); -#endif -void  memp_free(memp_t type, void *mem); - -#endif /* MEMP_MEM_MALLOC */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_MEMP_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp_std.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp_std.h deleted file mode 100644 index d8d4945..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp_std.h +++ /dev/null @@ -1,104 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * SETUP: Make sure we define everything we will need. - * - * We have create three types of pools: - *   1) MEMPOOL - standard pools - *   2) MALLOC_MEMPOOL - to be used by mem_malloc in mem.c - *   3) PBUF_MEMPOOL - a mempool of pbuf's, so include space for the pbuf struct - * - * If the include'r doesn't require any special treatment of each of the types - * above, then will declare #2 & #3 to be just standard mempools. - */ -#ifndef LWIP_MALLOC_MEMPOOL -/* This treats "malloc pools" just like any other pool. -   The pools are a little bigger to provide 'size' as the amount of user data. */ -#define LWIP_MALLOC_MEMPOOL(num, size) LWIP_MEMPOOL(POOL_##size, num, (size + sizeof(struct memp_malloc_helper)), "MALLOC_"#size) -#define LWIP_MALLOC_MEMPOOL_START -#define LWIP_MALLOC_MEMPOOL_END -#endif /* LWIP_MALLOC_MEMPOOL */  - -#ifndef LWIP_PBUF_MEMPOOL -/* This treats "pbuf pools" just like any other pool. - * Allocates buffers for a pbuf struct AND a payload size */ -#define LWIP_PBUF_MEMPOOL(name, num, payload, desc) LWIP_MEMPOOL(name, num, (MEMP_ALIGN_SIZE(sizeof(struct pbuf)) + MEMP_ALIGN_SIZE(payload)), desc) -#endif /* LWIP_PBUF_MEMPOOL */ - - -/* - * A list of internal pools used by LWIP. - * - * LWIP_MEMPOOL(pool_name, number_elements, element_size, pool_description) - *     creates a pool name MEMP_pool_name. description is used in stats.c - */ -#if LWIP_RAW -LWIP_MEMPOOL(RAW_PCB,        MEMP_NUM_RAW_PCB,         sizeof(struct raw_pcb),        "RAW_PCB") -#endif /* LWIP_RAW */ - -#if LWIP_UDP -LWIP_MEMPOOL(UDP_PCB,        MEMP_NUM_UDP_PCB,         sizeof(struct udp_pcb),        "UDP_PCB") -#endif /* LWIP_UDP */ - -#if LWIP_TCP -LWIP_MEMPOOL(TCP_PCB,        MEMP_NUM_TCP_PCB,         sizeof(struct tcp_pcb),        "TCP_PCB") -LWIP_MEMPOOL(TCP_PCB_LISTEN, MEMP_NUM_TCP_PCB_LISTEN,  sizeof(struct tcp_pcb_listen), "TCP_PCB_LISTEN") -LWIP_MEMPOOL(TCP_SEG,        MEMP_NUM_TCP_SEG,         sizeof(struct tcp_seg),        "TCP_SEG") -#endif /* LWIP_TCP */ - -#if IP_REASSEMBLY -LWIP_MEMPOOL(REASSDATA,      MEMP_NUM_REASSDATA,       sizeof(struct ip_reassdata),   "REASSDATA") -#endif /* IP_REASSEMBLY */ - -#if LWIP_NETCONN -LWIP_MEMPOOL(NETBUF,         MEMP_NUM_NETBUF,          sizeof(struct netbuf),         "NETBUF") -LWIP_MEMPOOL(NETCONN,        MEMP_NUM_NETCONN,         sizeof(struct netconn),        "NETCONN") -#endif /* LWIP_NETCONN */ - -#if NO_SYS==0 -LWIP_MEMPOOL(TCPIP_MSG_API,  MEMP_NUM_TCPIP_MSG_API,   sizeof(struct tcpip_msg),      "TCPIP_MSG_API") -LWIP_MEMPOOL(TCPIP_MSG_INPKT,MEMP_NUM_TCPIP_MSG_INPKT, sizeof(struct tcpip_msg),      "TCPIP_MSG_INPKT") -#endif /* NO_SYS==0 */ - -#if ARP_QUEUEING -LWIP_MEMPOOL(ARP_QUEUE,      MEMP_NUM_ARP_QUEUE,       sizeof(struct etharp_q_entry), "ARP_QUEUE") -#endif /* ARP_QUEUEING */ - -#if LWIP_IGMP -LWIP_MEMPOOL(IGMP_GROUP,     MEMP_NUM_IGMP_GROUP,      sizeof(struct igmp_group),     "IGMP_GROUP") -#endif /* LWIP_IGMP */ - -#if NO_SYS==0 -LWIP_MEMPOOL(SYS_TIMEOUT,    MEMP_NUM_SYS_TIMEOUT,     sizeof(struct sys_timeo),      "SYS_TIMEOUT") -#endif /* NO_SYS==0 */ - - -/* - * A list of pools of pbuf's used by LWIP. - * - * LWIP_PBUF_MEMPOOL(pool_name, number_elements, pbuf_payload_size, pool_description) - *     creates a pool name MEMP_pool_name. description is used in stats.c - *     This allocates enough space for the pbuf struct and a payload. - *     (Example: pbuf_payload_size=0 allocates only size for the struct) - */ -LWIP_PBUF_MEMPOOL(PBUF,      MEMP_NUM_PBUF,            0,                             "PBUF_REF/ROM") -LWIP_PBUF_MEMPOOL(PBUF_POOL, PBUF_POOL_SIZE,           PBUF_POOL_BUFSIZE,             "PBUF_POOL") - - -/* - * Allow for user-defined pools; this must be explicitly set in lwipopts.h - * since the default is to NOT look for lwippools.h - */ -#if MEMP_USE_CUSTOM_POOLS -#include "lwippools.h" -#endif /* MEMP_USE_CUSTOM_POOLS */ - -/* - * REQUIRED CLEANUP: Clear up so we don't get "multiply defined" error later - * (#undef is ignored for something that is not defined) - */ -#undef LWIP_MEMPOOL -#undef LWIP_MALLOC_MEMPOOL -#undef LWIP_MALLOC_MEMPOOL_START -#undef LWIP_MALLOC_MEMPOOL_END -#undef LWIP_PBUF_MEMPOOL diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netbuf.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netbuf.h deleted file mode 100644 index ab9ea33..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netbuf.h +++ /dev/null @@ -1,88 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_NETBUF_H__ -#define __LWIP_NETBUF_H__ - -#include "lwip/opt.h" -#include "lwip/pbuf.h" -#include "lwip/ip_addr.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct netbuf { -  struct pbuf *p, *ptr; -  struct ip_addr *addr; -  u16_t port; -#if LWIP_NETBUF_RECVINFO -  struct ip_addr *toaddr; -  u16_t toport; -#endif /* LWIP_NETBUF_RECVINFO */ -}; - -/* Network buffer functions: */ -struct netbuf *   netbuf_new      (void); -void              netbuf_delete   (struct netbuf *buf); -void *            netbuf_alloc    (struct netbuf *buf, u16_t size); -void              netbuf_free     (struct netbuf *buf); -err_t             netbuf_ref      (struct netbuf *buf, -           const void *dataptr, u16_t size); -void              netbuf_chain    (struct netbuf *head, -           struct netbuf *tail); - -u16_t             netbuf_len      (struct netbuf *buf); -err_t             netbuf_data     (struct netbuf *buf, -           void **dataptr, u16_t *len); -s8_t              netbuf_next     (struct netbuf *buf); -void              netbuf_first    (struct netbuf *buf); - - -#define netbuf_copy_partial(buf, dataptr, len, offset) \ -  pbuf_copy_partial((buf)->p, (dataptr), (len), (offset)) -#define netbuf_copy(buf,dataptr,len) netbuf_copy_partial(buf, dataptr, len, 0) -#define netbuf_take(buf, dataptr, len) pbuf_take((buf)->p, dataptr, len) -#define netbuf_len(buf)              ((buf)->p->tot_len) -#define netbuf_fromaddr(buf)         ((buf)->addr) -#define netbuf_fromport(buf)         ((buf)->port) -#if LWIP_NETBUF_RECVINFO -#define netbuf_destaddr(buf)         ((buf)->toaddr) -#define netbuf_destport(buf)         ((buf)->toport) -#endif /* LWIP_NETBUF_RECVINFO */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_NETBUF_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netdb.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netdb.h deleted file mode 100644 index c59c3a4..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netdb.h +++ /dev/null @@ -1,113 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Simon Goldschmidt - * - */ - -#include "lwip/opt.h" - -#if LWIP_DNS && LWIP_SOCKET - -#include <stddef.h> /* for size_t */ - -#include "lwip/sockets.h" - -/* some rarely used options */ -#ifndef LWIP_DNS_API_DECLARE_H_ERRNO -#define LWIP_DNS_API_DECLARE_H_ERRNO 1 -#endif - -#ifndef LWIP_DNS_API_DEFINE_ERRORS -#define LWIP_DNS_API_DEFINE_ERRORS 1 -#endif - -#ifndef LWIP_DNS_API_DECLARE_STRUCTS -#define LWIP_DNS_API_DECLARE_STRUCTS 1 -#endif - -#if LWIP_DNS_API_DEFINE_ERRORS -/** Errors used by the DNS API functions, h_errno can be one of them */ -#define EAI_NONAME      200 -#define EAI_SERVICE     201 -#define EAI_FAIL        202 -#define EAI_MEMORY      203 - -#define HOST_NOT_FOUND  210 -#define NO_DATA         211 -#define NO_RECOVERY     212 -#define TRY_AGAIN       213 -#endif /* LWIP_DNS_API_DEFINE_ERRORS */ - -#if LWIP_DNS_API_DECLARE_STRUCTS -struct hostent { -    char  *h_name;      /* Official name of the host. */ -    char **h_aliases;   /* A pointer to an array of pointers to alternative host names, -                           terminated by a null pointer. */ -    int    h_addrtype;  /* Address type. */ -    int    h_length;    /* The length, in bytes, of the address. */ -    char **h_addr_list; /* A pointer to an array of pointers to network addresses (in -                           network byte order) for the host, terminated by a null pointer. */ -#define h_addr h_addr_list[0] /* for backward compatibility */ -}; - -struct addrinfo { -    int               ai_flags;      /* Input flags. */ -    int               ai_family;     /* Address family of socket. */ -    int               ai_socktype;   /* Socket type. */ -    int               ai_protocol;   /* Protocol of socket. */ -    socklen_t         ai_addrlen;    /* Length of socket address. */ -    struct sockaddr  *ai_addr;       /* Socket address of socket. */ -    char             *ai_canonname;  /* Canonical name of service location. */ -    struct addrinfo  *ai_next;       /* Pointer to next in list. */ -}; -#endif /* LWIP_DNS_API_DECLARE_STRUCTS */ - -#if LWIP_DNS_API_DECLARE_H_ERRNO -/* application accessable error code set by the DNS API functions */ -extern int h_errno; -#endif /* LWIP_DNS_API_DECLARE_H_ERRNO*/ - -struct hostent *lwip_gethostbyname(const char *name); -int lwip_gethostbyname_r(const char *name, struct hostent *ret, char *buf, -                size_t buflen, struct hostent **result, int *h_errnop); -void lwip_freeaddrinfo(struct addrinfo *ai); -int lwip_getaddrinfo(const char *nodename, -       const char *servname, -       const struct addrinfo *hints, -       struct addrinfo **res); - -#if LWIP_COMPAT_SOCKETS -#define gethostbyname(name) lwip_gethostbyname(name) -#define gethostbyname_r(name, ret, buf, buflen, result, h_errnop) \ -       lwip_gethostbyname_r(name, ret, buf, buflen, result, h_errnop) -#define freeaddrinfo(addrinfo) lwip_freeaddrinfo(addrinfo) -#define getaddrinfo(nodname, servname, hints, res) \ -       lwip_getaddrinfo(nodname, servname, hints, res) -#endif /* LWIP_COMPAT_SOCKETS */ - -#endif /* LWIP_DNS && LWIP_SOCKET */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netif.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netif.h deleted file mode 100644 index 8e650d7..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netif.h +++ /dev/null @@ -1,265 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_NETIF_H__ -#define __LWIP_NETIF_H__ - -#include "lwip/opt.h" - -#define ENABLE_LOOPBACK (LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF) - -#include "lwip/err.h" - -#include "lwip/ip_addr.h" - -#include "lwip/inet.h" -#include "lwip/pbuf.h" -#if LWIP_DHCP -struct dhcp; -#endif -#if LWIP_AUTOIP -struct autoip; -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* Throughout this file, IP addresses are expected to be in - * the same byte order as in IP_PCB. */ - -/** must be the maximum of all used hardware address lengths -    across all types of interfaces in use */ -#define NETIF_MAX_HWADDR_LEN 6U - -/** TODO: define the use (where, when, whom) of netif flags */ - -/** whether the network interface is 'up'. this is - * a software flag used to control whether this network - * interface is enabled and processes traffic. - */ -#define NETIF_FLAG_UP           0x01U -/** if set, the netif has broadcast capability */ -#define NETIF_FLAG_BROADCAST    0x02U -/** if set, the netif is one end of a point-to-point connection */ -#define NETIF_FLAG_POINTTOPOINT 0x04U -/** if set, the interface is configured using DHCP */ -#define NETIF_FLAG_DHCP         0x08U -/** if set, the interface has an active link - *  (set by the network interface driver) */ -#define NETIF_FLAG_LINK_UP      0x10U -/** if set, the netif is an device using ARP */ -#define NETIF_FLAG_ETHARP       0x20U -/** if set, the netif has IGMP capability */ -#define NETIF_FLAG_IGMP         0x40U - -/** Generic data structure used for all lwIP network interfaces. - *  The following fields should be filled in by the initialization - *  function for the device driver: hwaddr_len, hwaddr[], mtu, flags */ - -struct netif { -  /** pointer to next in linked list */ -  struct netif *next; - -  /** IP address configuration in network byte order */ -  struct ip_addr ip_addr; -  struct ip_addr netmask; -  struct ip_addr gw; - -  /** This function is called by the network device driver -   *  to pass a packet up the TCP/IP stack. */ -  err_t (* input)(struct pbuf *p, struct netif *inp); -  /** This function is called by the IP module when it wants -   *  to send a packet on the interface. This function typically -   *  first resolves the hardware address, then sends the packet. */ -  err_t (* output)(struct netif *netif, struct pbuf *p, -       struct ip_addr *ipaddr); -  /** This function is called by the ARP module when it wants -   *  to send a packet on the interface. This function outputs -   *  the pbuf as-is on the link medium. */ -  err_t (* linkoutput)(struct netif *netif, struct pbuf *p); -#if LWIP_NETIF_STATUS_CALLBACK -  /** This function is called when the netif state is set to up or down -   */ -  void (* status_callback)(struct netif *netif); -#endif /* LWIP_NETIF_STATUS_CALLBACK */ -#if LWIP_NETIF_LINK_CALLBACK -  /** This function is called when the netif link is set to up or down -   */ -  void (* link_callback)(struct netif *netif); -#endif /* LWIP_NETIF_LINK_CALLBACK */ -  /** This field can be set by the device driver and could point -   *  to state information for the device. */ -  void *state; -#if LWIP_DHCP -  /** the DHCP client state information for this netif */ -  struct dhcp *dhcp; -#endif /* LWIP_DHCP */ -#if LWIP_AUTOIP -  /** the AutoIP client state information for this netif */ -  struct autoip *autoip; -#endif -#if LWIP_NETIF_HOSTNAME -  /* the hostname for this netif, NULL is a valid value */ -  char*  hostname; -#endif /* LWIP_NETIF_HOSTNAME */ -  /** maximum transfer unit (in bytes) */ -  u16_t mtu; -  /** number of bytes used in hwaddr */ -  u8_t hwaddr_len; -  /** link level hardware address of this interface */ -  u8_t hwaddr[NETIF_MAX_HWADDR_LEN]; -  /** flags (see NETIF_FLAG_ above) */ -  u8_t flags; -  /** descriptive abbreviation */ -  char name[2]; -  /** number of this interface */ -  u8_t num; -#if LWIP_SNMP -  /** link type (from "snmp_ifType" enum from snmp.h) */ -  u8_t link_type; -  /** (estimate) link speed */ -  u32_t link_speed; -  /** timestamp at last change made (up/down) */ -  u32_t ts; -  /** counters */ -  u32_t ifinoctets; -  u32_t ifinucastpkts; -  u32_t ifinnucastpkts; -  u32_t ifindiscards; -  u32_t ifoutoctets; -  u32_t ifoutucastpkts; -  u32_t ifoutnucastpkts; -  u32_t ifoutdiscards; -#endif /* LWIP_SNMP */ -#if LWIP_IGMP -  /* This function could be called to add or delete a entry in the multicast filter table of the ethernet MAC.*/ -  err_t (*igmp_mac_filter)( struct netif *netif, struct ip_addr *group, u8_t action); -#endif /* LWIP_IGMP */ -#if LWIP_NETIF_HWADDRHINT -  u8_t *addr_hint; -#endif /* LWIP_NETIF_HWADDRHINT */ -#if ENABLE_LOOPBACK -  /* List of packets to be queued for ourselves. */ -  struct pbuf *loop_first; -  struct pbuf *loop_last; -#if LWIP_LOOPBACK_MAX_PBUFS -  u16_t loop_cnt_current; -#endif /* LWIP_LOOPBACK_MAX_PBUFS */ -#endif /* ENABLE_LOOPBACK */ -}; - -#if LWIP_SNMP -#define NETIF_INIT_SNMP(netif, type, speed) \ -  /* use "snmp_ifType" enum from snmp.h for "type", snmp_ifType_ethernet_csmacd by example */ \ -  netif->link_type = type;    \ -  /* your link speed here (units: bits per second) */  \ -  netif->link_speed = speed;  \ -  netif->ts = 0;              \ -  netif->ifinoctets = 0;      \ -  netif->ifinucastpkts = 0;   \ -  netif->ifinnucastpkts = 0;  \ -  netif->ifindiscards = 0;    \ -  netif->ifoutoctets = 0;     \ -  netif->ifoutucastpkts = 0;  \ -  netif->ifoutnucastpkts = 0; \ -  netif->ifoutdiscards = 0 -#else /* LWIP_SNMP */ -#define NETIF_INIT_SNMP(netif, type, speed) -#endif /* LWIP_SNMP */ - - -/** The list of network interfaces. */ -extern struct netif *netif_list; -/** The default network interface. */ -extern struct netif *netif_default; - -#define netif_init() /* Compatibility define, not init needed. */ - -struct netif *netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask, -      struct ip_addr *gw, -      void *state, -      err_t (* init)(struct netif *netif), -      err_t (* input)(struct pbuf *p, struct netif *netif)); - -void -netif_set_addr(struct netif *netif,struct ip_addr *ipaddr, struct ip_addr *netmask, -    struct ip_addr *gw); -void netif_remove(struct netif * netif); - -/* Returns a network interface given its name. The name is of the form -   "et0", where the first two letters are the "name" field in the -   netif structure, and the digit is in the num field in the same -   structure. */ -struct netif *netif_find(char *name); - -void netif_set_default(struct netif *netif); - -void netif_set_ipaddr(struct netif *netif, struct ip_addr *ipaddr); -void netif_set_netmask(struct netif *netif, struct ip_addr *netmask); -void netif_set_gw(struct netif *netif, struct ip_addr *gw); - -void netif_set_up(struct netif *netif); -void netif_set_down(struct netif *netif); -u8_t netif_is_up(struct netif *netif); - -#if LWIP_NETIF_STATUS_CALLBACK -/* - * Set callback to be called when interface is brought up/down - */ -void netif_set_status_callback(struct netif *netif, void (* status_callback)(struct netif *netif)); -#endif /* LWIP_NETIF_STATUS_CALLBACK */ - -#if LWIP_NETIF_LINK_CALLBACK -void netif_set_link_up(struct netif *netif); -void netif_set_link_down(struct netif *netif); -u8_t netif_is_link_up(struct netif *netif); -/* - * Set callback to be called when link is brought up/down - */ -void netif_set_link_callback(struct netif *netif, void (* link_callback)(struct netif *netif)); -#endif /* LWIP_NETIF_LINK_CALLBACK */ - -#ifdef __cplusplus -} -#endif - -#if ENABLE_LOOPBACK -err_t netif_loop_output(struct netif *netif, struct pbuf *p, struct ip_addr *dest_ip); -void netif_poll(struct netif *netif); -#if !LWIP_NETIF_LOOPBACK_MULTITHREADING -void netif_poll_all(void); -#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ -#endif /* ENABLE_LOOPBACK */ - -#endif /* __LWIP_NETIF_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netifapi.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netifapi.h deleted file mode 100644 index 22d8690..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netifapi.h +++ /dev/null @@ -1,107 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - */ -  -#ifndef __LWIP_NETIFAPI_H__ -#define __LWIP_NETIFAPI_H__ - -#include "lwip/opt.h" - -#if LWIP_NETIF_API /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/sys.h" -#include "lwip/netif.h" -#include "lwip/dhcp.h" -#include "lwip/autoip.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct netifapi_msg_msg { -#if !LWIP_TCPIP_CORE_LOCKING -  sys_sem_t sem; -#endif /* !LWIP_TCPIP_CORE_LOCKING */ -  err_t err; -  struct netif *netif; -  union { -    struct { -      struct ip_addr *ipaddr; -      struct ip_addr *netmask; -      struct ip_addr *gw; -      void *state; -      err_t (* init) (struct netif *netif); -      err_t (* input)(struct pbuf *p, struct netif *netif); -    } add; -    struct { -      void  (* voidfunc)(struct netif *netif); -      err_t (* errtfunc)(struct netif *netif); -    } common; -  } msg; -}; - -struct netifapi_msg { -  void (* function)(struct netifapi_msg_msg *msg); -  struct netifapi_msg_msg msg; -}; - - -/* API for application */ -err_t netifapi_netif_add       ( struct netif *netif, -                                 struct ip_addr *ipaddr, -                                 struct ip_addr *netmask, -                                 struct ip_addr *gw, -                                 void *state, -                                 err_t (* init)(struct netif *netif), -                                 err_t (* input)(struct pbuf *p, struct netif *netif) ); - -err_t netifapi_netif_set_addr  ( struct netif *netif, -                                 struct ip_addr *ipaddr, -                                 struct ip_addr *netmask, -                                 struct ip_addr *gw ); - -err_t netifapi_netif_common    ( struct netif *netif, -                                 void  (* voidfunc)(struct netif *netif), -                                 err_t (* errtfunc)(struct netif *netif) ); - -#define netifapi_netif_remove(n)      netifapi_netif_common(n, netif_remove, NULL) -#define netifapi_netif_set_up(n)      netifapi_netif_common(n, netif_set_up, NULL) -#define netifapi_netif_set_down(n)    netifapi_netif_common(n, netif_set_down, NULL) -#define netifapi_netif_set_default(n) netifapi_netif_common(n, netif_set_default, NULL) -#define netifapi_dhcp_start(n)        netifapi_netif_common(n, NULL, dhcp_start) -#define netifapi_dhcp_stop(n)         netifapi_netif_common(n, dhcp_stop, NULL) -#define netifapi_autoip_start(n)      netifapi_netif_common(n, NULL, autoip_start) -#define netifapi_autoip_stop(n)       netifapi_netif_common(n, NULL, autoip_stop) - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_NETIF_API */ - -#endif /* __LWIP_NETIFAPI_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/opt.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/opt.h deleted file mode 100644 index a7cdbd8..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/opt.h +++ /dev/null @@ -1,1842 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * - * lwIP Options Configuration - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_OPT_H__ -#define __LWIP_OPT_H__ - -/* - * Include user defined options first. Anything not defined in these files - * will be set to standard values. Override anything you dont like! - */ -#include "lwipopts.h" -#include "lwip/debug.h" - -/* -   ----------------------------------------------- -   ---------- Platform specific locking ---------- -   ----------------------------------------------- -*/ - -/** - * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain - * critical regions during buffer allocation, deallocation and memory - * allocation and deallocation. - */ -#ifndef SYS_LIGHTWEIGHT_PROT -#define SYS_LIGHTWEIGHT_PROT            0 -#endif - -/**  - * NO_SYS==1: Provides VERY minimal functionality. Otherwise, - * use lwIP facilities. - */ -#ifndef NO_SYS -#define NO_SYS                          0 -#endif - -/** - * MEMCPY: override this if you have a faster implementation at hand than the - * one included in your C library - */ -#ifndef MEMCPY -#define MEMCPY(dst,src,len)             memcpy(dst,src,len) -#endif - -/** - * SMEMCPY: override this with care! Some compilers (e.g. gcc) can inline a - * call to memcpy() if the length is known at compile time and is small. - */ -#ifndef SMEMCPY -#define SMEMCPY(dst,src,len)            memcpy(dst,src,len) -#endif - -/* -   ------------------------------------ -   ---------- Memory options ---------- -   ------------------------------------ -*/ -/** - * MEM_LIBC_MALLOC==1: Use malloc/free/realloc provided by your C-library - * instead of the lwip internal allocator. Can save code size if you - * already use it. - */ -#ifndef MEM_LIBC_MALLOC -#define MEM_LIBC_MALLOC                 0 -#endif - -/** -* MEMP_MEM_MALLOC==1: Use mem_malloc/mem_free instead of the lwip pool allocator. -* Especially useful with MEM_LIBC_MALLOC but handle with care regarding execution -* speed and usage from interrupts! -*/ -#ifndef MEMP_MEM_MALLOC -#define MEMP_MEM_MALLOC                 0 -#endif - -/** - * MEM_ALIGNMENT: should be set to the alignment of the CPU - *    4 byte alignment -> #define MEM_ALIGNMENT 4 - *    2 byte alignment -> #define MEM_ALIGNMENT 2 - */ -#ifndef MEM_ALIGNMENT -#define MEM_ALIGNMENT                   1 -#endif - -/** - * MEM_SIZE: the size of the heap memory. If the application will send - * a lot of data that needs to be copied, this should be set high. - */ -#ifndef MEM_SIZE -#define MEM_SIZE                        1600 -#endif - -/** - * MEMP_OVERFLOW_CHECK: memp overflow protection reserves a configurable - * amount of bytes before and after each memp element in every pool and fills - * it with a prominent default value. - *    MEMP_OVERFLOW_CHECK == 0 no checking - *    MEMP_OVERFLOW_CHECK == 1 checks each element when it is freed - *    MEMP_OVERFLOW_CHECK >= 2 checks each element in every pool every time - *      memp_malloc() or memp_free() is called (useful but slow!) - */ -#ifndef MEMP_OVERFLOW_CHECK -#define MEMP_OVERFLOW_CHECK             0 -#endif - -/** - * MEMP_SANITY_CHECK==1: run a sanity check after each memp_free() to make - * sure that there are no cycles in the linked lists. - */ -#ifndef MEMP_SANITY_CHECK -#define MEMP_SANITY_CHECK               0 -#endif - -/** - * MEM_USE_POOLS==1: Use an alternative to malloc() by allocating from a set - * of memory pools of various sizes. When mem_malloc is called, an element of - * the smallest pool that can provide the length needed is returned. - * To use this, MEMP_USE_CUSTOM_POOLS also has to be enabled. - */ -#ifndef MEM_USE_POOLS -#define MEM_USE_POOLS                   0 -#endif - -/** - * MEM_USE_POOLS_TRY_BIGGER_POOL==1: if one malloc-pool is empty, try the next - * bigger pool - WARNING: THIS MIGHT WASTE MEMORY but it can make a system more - * reliable. */ -#ifndef MEM_USE_POOLS_TRY_BIGGER_POOL -#define MEM_USE_POOLS_TRY_BIGGER_POOL   0 -#endif - -/** - * MEMP_USE_CUSTOM_POOLS==1: whether to include a user file lwippools.h - * that defines additional pools beyond the "standard" ones required - * by lwIP. If you set this to 1, you must have lwippools.h in your  - * inlude path somewhere.  - */ -#ifndef MEMP_USE_CUSTOM_POOLS -#define MEMP_USE_CUSTOM_POOLS           0 -#endif - -/** - * Set this to 1 if you want to free PBUF_RAM pbufs (or call mem_free()) from - * interrupt context (or another context that doesn't allow waiting for a - * semaphore). - * If set to 1, mem_malloc will be protected by a semaphore and SYS_ARCH_PROTECT, - * while mem_free will only use SYS_ARCH_PROTECT. mem_malloc SYS_ARCH_UNPROTECTs - * with each loop so that mem_free can run. - * - * ATTENTION: As you can see from the above description, this leads to dis-/ - * enabling interrupts often, which can be slow! Also, on low memory, mem_malloc - * can need longer. - * - * If you don't want that, at least for NO_SYS=0, you can still use the following - * functions to enqueue a deallocation call which then runs in the tcpip_thread - * context: - * - pbuf_free_callback(p); - * - mem_free_callback(m); - */ -#ifndef LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT -#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 0 -#endif - -/* -   ------------------------------------------------ -   ---------- Internal Memory Pool Sizes ---------- -   ------------------------------------------------ -*/ -/** - * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF). - * If the application sends a lot of data out of ROM (or other static memory), - * this should be set high. - */ -#ifndef MEMP_NUM_PBUF -#define MEMP_NUM_PBUF                   16 -#endif - -/** - * MEMP_NUM_RAW_PCB: Number of raw connection PCBs - * (requires the LWIP_RAW option) - */ -#ifndef MEMP_NUM_RAW_PCB -#define MEMP_NUM_RAW_PCB                4 -#endif - -/** - * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One - * per active UDP "connection". - * (requires the LWIP_UDP option) - */ -#ifndef MEMP_NUM_UDP_PCB -#define MEMP_NUM_UDP_PCB                4 -#endif - -/** - * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. - * (requires the LWIP_TCP option) - */ -#ifndef MEMP_NUM_TCP_PCB -#define MEMP_NUM_TCP_PCB                5 -#endif - -/** - * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. - * (requires the LWIP_TCP option) - */ -#ifndef MEMP_NUM_TCP_PCB_LISTEN -#define MEMP_NUM_TCP_PCB_LISTEN         8 -#endif - -/** - * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. - * (requires the LWIP_TCP option) - */ -#ifndef MEMP_NUM_TCP_SEG -#define MEMP_NUM_TCP_SEG                16 -#endif - -/** - * MEMP_NUM_REASSDATA: the number of simultaneously IP packets queued for - * reassembly (whole packets, not fragments!) - */ -#ifndef MEMP_NUM_REASSDATA -#define MEMP_NUM_REASSDATA              5 -#endif - -/** - * MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing - * packets (pbufs) that are waiting for an ARP request (to resolve - * their destination address) to finish. - * (requires the ARP_QUEUEING option) - */ -#ifndef MEMP_NUM_ARP_QUEUE -#define MEMP_NUM_ARP_QUEUE              30 -#endif - -/** - * MEMP_NUM_IGMP_GROUP: The number of multicast groups whose network interfaces - * can be members et the same time (one per netif - allsystems group -, plus one - * per netif membership). - * (requires the LWIP_IGMP option) - */ -#ifndef MEMP_NUM_IGMP_GROUP -#define MEMP_NUM_IGMP_GROUP             8 -#endif - -/** - * MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. - * (requires NO_SYS==0) - */ -#ifndef MEMP_NUM_SYS_TIMEOUT -#define MEMP_NUM_SYS_TIMEOUT            3 -#endif - -/** - * MEMP_NUM_NETBUF: the number of struct netbufs. - * (only needed if you use the sequential API, like api_lib.c) - */ -#ifndef MEMP_NUM_NETBUF -#define MEMP_NUM_NETBUF                 2 -#endif - -/** - * MEMP_NUM_NETCONN: the number of struct netconns. - * (only needed if you use the sequential API, like api_lib.c) - */ -#ifndef MEMP_NUM_NETCONN -#define MEMP_NUM_NETCONN                4 -#endif - -/** - * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used - * for callback/timeout API communication.  - * (only needed if you use tcpip.c) - */ -#ifndef MEMP_NUM_TCPIP_MSG_API -#define MEMP_NUM_TCPIP_MSG_API          8 -#endif - -/** - * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used - * for incoming packets.  - * (only needed if you use tcpip.c) - */ -#ifndef MEMP_NUM_TCPIP_MSG_INPKT -#define MEMP_NUM_TCPIP_MSG_INPKT        8 -#endif - -/** - * PBUF_POOL_SIZE: the number of buffers in the pbuf pool.  - */ -#ifndef PBUF_POOL_SIZE -#define PBUF_POOL_SIZE                  16 -#endif - -/* -   --------------------------------- -   ---------- ARP options ---------- -   --------------------------------- -*/ -/** - * LWIP_ARP==1: Enable ARP functionality. - */ -#ifndef LWIP_ARP -#define LWIP_ARP                        1 -#endif - -/** - * ARP_TABLE_SIZE: Number of active MAC-IP address pairs cached. - */ -#ifndef ARP_TABLE_SIZE -#define ARP_TABLE_SIZE                  10 -#endif - -/** - * ARP_QUEUEING==1: Outgoing packets are queued during hardware address - * resolution. - */ -#ifndef ARP_QUEUEING -#define ARP_QUEUEING                    1 -#endif - -/** - * ETHARP_TRUST_IP_MAC==1: Incoming IP packets cause the ARP table to be - * updated with the source MAC and IP addresses supplied in the packet. - * You may want to disable this if you do not trust LAN peers to have the - * correct addresses, or as a limited approach to attempt to handle - * spoofing. If disabled, lwIP will need to make a new ARP request if - * the peer is not already in the ARP table, adding a little latency. - */ -#ifndef ETHARP_TRUST_IP_MAC -#define ETHARP_TRUST_IP_MAC             1 -#endif - -/** - * ETHARP_SUPPORT_VLAN==1: support receiving ethernet packets with VLAN header. - * Additionally, you can define ETHARP_VLAN_CHECK to an u16_t VLAN ID to check. - * If ETHARP_VLAN_CHECK is defined, only VLAN-traffic for this VLAN is accepted. - * If ETHARP_VLAN_CHECK is not defined, all traffic is accepted. - */ -#ifndef ETHARP_SUPPORT_VLAN -#define ETHARP_SUPPORT_VLAN             0 -#endif - -/* -   -------------------------------- -   ---------- IP options ---------- -   -------------------------------- -*/ -/** - * IP_FORWARD==1: Enables the ability to forward IP packets across network - * interfaces. If you are going to run lwIP on a device with only one network - * interface, define this to 0. - */ -#ifndef IP_FORWARD -#define IP_FORWARD                      0 -#endif - -/** - * IP_OPTIONS_ALLOWED: Defines the behavior for IP options. - *      IP_OPTIONS_ALLOWED==0: All packets with IP options are dropped. - *      IP_OPTIONS_ALLOWED==1: IP options are allowed (but not parsed). - */ -#ifndef IP_OPTIONS_ALLOWED -#define IP_OPTIONS_ALLOWED              1 -#endif - -/** - * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that - * this option does not affect outgoing packet sizes, which can be controlled - * via IP_FRAG. - */ -#ifndef IP_REASSEMBLY -#define IP_REASSEMBLY                   1 -#endif - -/** - * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note - * that this option does not affect incoming packet sizes, which can be - * controlled via IP_REASSEMBLY. - */ -#ifndef IP_FRAG -#define IP_FRAG                         1 -#endif - -/** - * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) - * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived - * in this time, the whole packet is discarded. - */ -#ifndef IP_REASS_MAXAGE -#define IP_REASS_MAXAGE                 3 -#endif - -/** - * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. - * Since the received pbufs are enqueued, be sure to configure - * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive - * packets even if the maximum amount of fragments is enqueued for reassembly! - */ -#ifndef IP_REASS_MAX_PBUFS -#define IP_REASS_MAX_PBUFS              10 -#endif - -/** - * IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP - * fragmentation. Otherwise pbufs are allocated and reference the original - * packet data to be fragmented. - */ -#ifndef IP_FRAG_USES_STATIC_BUF -#define IP_FRAG_USES_STATIC_BUF         1 -#endif - -/** - * IP_FRAG_MAX_MTU: Assumed max MTU on any interface for IP frag buffer - * (requires IP_FRAG_USES_STATIC_BUF==1) - */ -#if IP_FRAG_USES_STATIC_BUF && !defined(IP_FRAG_MAX_MTU) -#define IP_FRAG_MAX_MTU                 1500 -#endif - -/** - * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers. - */ -#ifndef IP_DEFAULT_TTL -#define IP_DEFAULT_TTL                  255 -#endif - -/** - * IP_SOF_BROADCAST=1: Use the SOF_BROADCAST field to enable broadcast - * filter per pcb on udp and raw send operations. To enable broadcast filter - * on recv operations, you also have to set IP_SOF_BROADCAST_RECV=1. - */ -#ifndef IP_SOF_BROADCAST -#define IP_SOF_BROADCAST                0 -#endif - -/** - * IP_SOF_BROADCAST_RECV (requires IP_SOF_BROADCAST=1) enable the broadcast - * filter on recv operations. - */ -#ifndef IP_SOF_BROADCAST_RECV -#define IP_SOF_BROADCAST_RECV           0 -#endif - -/* -   ---------------------------------- -   ---------- ICMP options ---------- -   ---------------------------------- -*/ -/** - * LWIP_ICMP==1: Enable ICMP module inside the IP stack. - * Be careful, disable that make your product non-compliant to RFC1122 - */ -#ifndef LWIP_ICMP -#define LWIP_ICMP                       1 -#endif - -/** - * ICMP_TTL: Default value for Time-To-Live used by ICMP packets. - */ -#ifndef ICMP_TTL -#define ICMP_TTL                       (IP_DEFAULT_TTL) -#endif - -/** - * LWIP_BROADCAST_PING==1: respond to broadcast pings (default is unicast only) - */ -#ifndef LWIP_BROADCAST_PING -#define LWIP_BROADCAST_PING             0 -#endif - -/** - * LWIP_MULTICAST_PING==1: respond to multicast pings (default is unicast only) - */ -#ifndef LWIP_MULTICAST_PING -#define LWIP_MULTICAST_PING             0 -#endif - -/* -   --------------------------------- -   ---------- RAW options ---------- -   --------------------------------- -*/ -/** - * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. - */ -#ifndef LWIP_RAW -#define LWIP_RAW                        1 -#endif - -/** - * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. - */ -#ifndef RAW_TTL -#define RAW_TTL                        (IP_DEFAULT_TTL) -#endif - -/* -   ---------------------------------- -   ---------- DHCP options ---------- -   ---------------------------------- -*/ -/** - * LWIP_DHCP==1: Enable DHCP module. - */ -#ifndef LWIP_DHCP -#define LWIP_DHCP                       0 -#endif - -/** - * DHCP_DOES_ARP_CHECK==1: Do an ARP check on the offered address. - */ -#ifndef DHCP_DOES_ARP_CHECK -#define DHCP_DOES_ARP_CHECK             ((LWIP_DHCP) && (LWIP_ARP)) -#endif - -/* -   ------------------------------------ -   ---------- AUTOIP options ---------- -   ------------------------------------ -*/ -/** - * LWIP_AUTOIP==1: Enable AUTOIP module. - */ -#ifndef LWIP_AUTOIP -#define LWIP_AUTOIP                     0 -#endif - -/** - * LWIP_DHCP_AUTOIP_COOP==1: Allow DHCP and AUTOIP to be both enabled on - * the same interface at the same time. - */ -#ifndef LWIP_DHCP_AUTOIP_COOP -#define LWIP_DHCP_AUTOIP_COOP           0 -#endif - -/** - * LWIP_DHCP_AUTOIP_COOP_TRIES: Set to the number of DHCP DISCOVER probes - * that should be sent before falling back on AUTOIP. This can be set - * as low as 1 to get an AutoIP address very quickly, but you should - * be prepared to handle a changing IP address when DHCP overrides - * AutoIP. - */ -#ifndef LWIP_DHCP_AUTOIP_COOP_TRIES -#define LWIP_DHCP_AUTOIP_COOP_TRIES     9 -#endif - -/* -   ---------------------------------- -   ---------- SNMP options ---------- -   ---------------------------------- -*/ -/** - * LWIP_SNMP==1: Turn on SNMP module. UDP must be available for SNMP - * transport. - */ -#ifndef LWIP_SNMP -#define LWIP_SNMP                       0 -#endif - -/** - * SNMP_CONCURRENT_REQUESTS: Number of concurrent requests the module will - * allow. At least one request buffer is required.  - */ -#ifndef SNMP_CONCURRENT_REQUESTS -#define SNMP_CONCURRENT_REQUESTS        1 -#endif - -/** - * SNMP_TRAP_DESTINATIONS: Number of trap destinations. At least one trap - * destination is required - */ -#ifndef SNMP_TRAP_DESTINATIONS -#define SNMP_TRAP_DESTINATIONS          1 -#endif - -/** - * SNMP_PRIVATE_MIB:  - */ -#ifndef SNMP_PRIVATE_MIB -#define SNMP_PRIVATE_MIB                0 -#endif - -/** - * Only allow SNMP write actions that are 'safe' (e.g. disabeling netifs is not - * a safe action and disabled when SNMP_SAFE_REQUESTS = 1). - * Unsafe requests are disabled by default! - */ -#ifndef SNMP_SAFE_REQUESTS -#define SNMP_SAFE_REQUESTS              1 -#endif - -/* -   ---------------------------------- -   ---------- IGMP options ---------- -   ---------------------------------- -*/ -/** - * LWIP_IGMP==1: Turn on IGMP module.  - */ -#ifndef LWIP_IGMP -#define LWIP_IGMP                       0 -#endif - -/* -   ---------------------------------- -   ---------- DNS options ----------- -   ---------------------------------- -*/ -/** - * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS - * transport. - */ -#ifndef LWIP_DNS -#define LWIP_DNS                        0 -#endif - -/** DNS maximum number of entries to maintain locally. */ -#ifndef DNS_TABLE_SIZE -#define DNS_TABLE_SIZE                  4 -#endif - -/** DNS maximum host name length supported in the name table. */ -#ifndef DNS_MAX_NAME_LENGTH -#define DNS_MAX_NAME_LENGTH             256 -#endif - -/** The maximum of DNS servers */ -#ifndef DNS_MAX_SERVERS -#define DNS_MAX_SERVERS                 2 -#endif - -/** DNS do a name checking between the query and the response. */ -#ifndef DNS_DOES_NAME_CHECK -#define DNS_DOES_NAME_CHECK             1 -#endif - -/** DNS use a local buffer if DNS_USES_STATIC_BUF=0, a static one if -    DNS_USES_STATIC_BUF=1, or a dynamic one if DNS_USES_STATIC_BUF=2. -    The buffer will be of size DNS_MSG_SIZE */ -#ifndef DNS_USES_STATIC_BUF -#define DNS_USES_STATIC_BUF             1 -#endif - -/** DNS message max. size. Default value is RFC compliant. */ -#ifndef DNS_MSG_SIZE -#define DNS_MSG_SIZE                    512 -#endif - -/** DNS_LOCAL_HOSTLIST: Implements a local host-to-address list. If enabled, - *  you have to define - *    #define DNS_LOCAL_HOSTLIST_INIT {{"host1", 0x123}, {"host2", 0x234}} - *  (an array of structs name/address, where address is an u32_t in network - *  byte order). - * - *  Instead, you can also use an external function: - *  #define DNS_LOOKUP_LOCAL_EXTERN(x) extern u32_t my_lookup_function(const char *name) - *  that returns the IP address or INADDR_NONE if not found. - */ -#ifndef DNS_LOCAL_HOSTLIST -#define DNS_LOCAL_HOSTLIST              0 -#endif /* DNS_LOCAL_HOSTLIST */ - -/** If this is turned on, the local host-list can be dynamically changed - *  at runtime. */ -#ifndef DNS_LOCAL_HOSTLIST_IS_DYNAMIC -#define DNS_LOCAL_HOSTLIST_IS_DYNAMIC   0 -#endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ - -/* -   --------------------------------- -   ---------- UDP options ---------- -   --------------------------------- -*/ -/** - * LWIP_UDP==1: Turn on UDP. - */ -#ifndef LWIP_UDP -#define LWIP_UDP                        1 -#endif - -/** - * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP) - */ -#ifndef LWIP_UDPLITE -#define LWIP_UDPLITE                    0 -#endif - -/** - * UDP_TTL: Default Time-To-Live value. - */ -#ifndef UDP_TTL -#define UDP_TTL                         (IP_DEFAULT_TTL) -#endif - -/** - * LWIP_NETBUF_RECVINFO==1: append destination addr and port to every netbuf. - */ -#ifndef LWIP_NETBUF_RECVINFO -#define LWIP_NETBUF_RECVINFO            0 -#endif - -/* -   --------------------------------- -   ---------- TCP options ---------- -   --------------------------------- -*/ -/** - * LWIP_TCP==1: Turn on TCP. - */ -#ifndef LWIP_TCP -#define LWIP_TCP                        1 -#endif - -/** - * TCP_TTL: Default Time-To-Live value. - */ -#ifndef TCP_TTL -#define TCP_TTL                         (IP_DEFAULT_TTL) -#endif - -/** - * TCP_WND: The size of a TCP window.  This must be at least  - * (2 * TCP_MSS) for things to work well - */ -#ifndef TCP_WND -#define TCP_WND                         (4 * TCP_MSS) -#endif  - -/** - * TCP_MAXRTX: Maximum number of retransmissions of data segments. - */ -#ifndef TCP_MAXRTX -#define TCP_MAXRTX                      12 -#endif - -/** - * TCP_SYNMAXRTX: Maximum number of retransmissions of SYN segments. - */ -#ifndef TCP_SYNMAXRTX -#define TCP_SYNMAXRTX                   6 -#endif - -/** - * TCP_QUEUE_OOSEQ==1: TCP will queue segments that arrive out of order. - * Define to 0 if your device is low on memory. - */ -#ifndef TCP_QUEUE_OOSEQ -#define TCP_QUEUE_OOSEQ                 (LWIP_TCP) -#endif - -/** - * TCP_MSS: TCP Maximum segment size. (default is 536, a conservative default, - * you might want to increase this.) - * For the receive side, this MSS is advertised to the remote side - * when opening a connection. For the transmit size, this MSS sets - * an upper limit on the MSS advertised by the remote host. - */ -#ifndef TCP_MSS -#define TCP_MSS                         536 -#endif - -/** - * TCP_CALCULATE_EFF_SEND_MSS: "The maximum size of a segment that TCP really - * sends, the 'effective send MSS,' MUST be the smaller of the send MSS (which - * reflects the available reassembly buffer size at the remote host) and the - * largest size permitted by the IP layer" (RFC 1122) - * Setting this to 1 enables code that checks TCP_MSS against the MTU of the - * netif used for a connection and limits the MSS if it would be too big otherwise. - */ -#ifndef TCP_CALCULATE_EFF_SEND_MSS -#define TCP_CALCULATE_EFF_SEND_MSS      1 -#endif - - -/** - * TCP_SND_BUF: TCP sender buffer space (bytes).  - */ -#ifndef TCP_SND_BUF -#define TCP_SND_BUF                     256 -#endif - -/** - * TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least - * as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. - */ -#ifndef TCP_SND_QUEUELEN -#define TCP_SND_QUEUELEN                (4 * (TCP_SND_BUF)/(TCP_MSS)) -#endif - -/** - * TCP_SNDLOWAT: TCP writable space (bytes). This must be less than or equal - * to TCP_SND_BUF. It is the amount of space which must be available in the - * TCP snd_buf for select to return writable. - */ -#ifndef TCP_SNDLOWAT -#define TCP_SNDLOWAT                    ((TCP_SND_BUF)/2) -#endif - -/** - * TCP_LISTEN_BACKLOG: Enable the backlog option for tcp listen pcb. - */ -#ifndef TCP_LISTEN_BACKLOG -#define TCP_LISTEN_BACKLOG              0 -#endif - -/** - * The maximum allowed backlog for TCP listen netconns. - * This backlog is used unless another is explicitly specified. - * 0xff is the maximum (u8_t). - */ -#ifndef TCP_DEFAULT_LISTEN_BACKLOG -#define TCP_DEFAULT_LISTEN_BACKLOG      0xff -#endif - -/** - * LWIP_TCP_TIMESTAMPS==1: support the TCP timestamp option. - */ -#ifndef LWIP_TCP_TIMESTAMPS -#define LWIP_TCP_TIMESTAMPS             0 -#endif - -/** - * TCP_WND_UPDATE_THRESHOLD: difference in window to trigger an - * explicit window update - */ -#ifndef TCP_WND_UPDATE_THRESHOLD -#define TCP_WND_UPDATE_THRESHOLD   (TCP_WND / 4) -#endif - -/** - * LWIP_EVENT_API and LWIP_CALLBACK_API: Only one of these should be set to 1. - *     LWIP_EVENT_API==1: The user defines lwip_tcp_event() to receive all - *         events (accept, sent, etc) that happen in the system. - *     LWIP_CALLBACK_API==1: The PCB callback function is called directly - *         for the event. - */ -#ifndef LWIP_EVENT_API -#define LWIP_EVENT_API                  0 -#define LWIP_CALLBACK_API               1 -#else  -#define LWIP_EVENT_API                  1 -#define LWIP_CALLBACK_API               0 -#endif - - -/* -   ---------------------------------- -   ---------- Pbuf options ---------- -   ---------------------------------- -*/ -/** - * PBUF_LINK_HLEN: the number of bytes that should be allocated for a - * link level header. The default is 14, the standard value for - * Ethernet. - */ -#ifndef PBUF_LINK_HLEN -#define PBUF_LINK_HLEN                  14 -#endif - -/** - * PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. The default is - * designed to accomodate single full size TCP frame in one pbuf, including - * TCP_MSS, IP header, and link header. - */ -#ifndef PBUF_POOL_BUFSIZE -#define PBUF_POOL_BUFSIZE               LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN) -#endif - -/* -   ------------------------------------------------ -   ---------- Network Interfaces options ---------- -   ------------------------------------------------ -*/ -/** - * LWIP_NETIF_HOSTNAME==1: use DHCP_OPTION_HOSTNAME with netif's hostname - * field. - */ -#ifndef LWIP_NETIF_HOSTNAME -#define LWIP_NETIF_HOSTNAME             0 -#endif - -/** - * LWIP_NETIF_API==1: Support netif api (in netifapi.c) - */ -#ifndef LWIP_NETIF_API -#define LWIP_NETIF_API                  0 -#endif - -/** - * LWIP_NETIF_STATUS_CALLBACK==1: Support a callback function whenever an interface - * changes its up/down status (i.e., due to DHCP IP acquistion) - */ -#ifndef LWIP_NETIF_STATUS_CALLBACK -#define LWIP_NETIF_STATUS_CALLBACK      0 -#endif - -/** - * LWIP_NETIF_LINK_CALLBACK==1: Support a callback function from an interface - * whenever the link changes (i.e., link down) - */ -#ifndef LWIP_NETIF_LINK_CALLBACK -#define LWIP_NETIF_LINK_CALLBACK        0 -#endif - -/** - * LWIP_NETIF_HWADDRHINT==1: Cache link-layer-address hints (e.g. table - * indices) in struct netif. TCP and UDP can make use of this to prevent - * scanning the ARP table for every sent packet. While this is faster for big - * ARP tables or many concurrent connections, it might be counterproductive - * if you have a tiny ARP table or if there never are concurrent connections. - */ -#ifndef LWIP_NETIF_HWADDRHINT -#define LWIP_NETIF_HWADDRHINT           0 -#endif - -/** - * LWIP_NETIF_LOOPBACK==1: Support sending packets with a destination IP - * address equal to the netif IP address, looping them back up the stack. - */ -#ifndef LWIP_NETIF_LOOPBACK -#define LWIP_NETIF_LOOPBACK             0 -#endif - -/** - * LWIP_LOOPBACK_MAX_PBUFS: Maximum number of pbufs on queue for loopback - * sending for each netif (0 = disabled) - */ -#ifndef LWIP_LOOPBACK_MAX_PBUFS -#define LWIP_LOOPBACK_MAX_PBUFS         0 -#endif - -/** - * LWIP_NETIF_LOOPBACK_MULTITHREADING: Indicates whether threading is enabled in - * the system, as netifs must change how they behave depending on this setting - * for the LWIP_NETIF_LOOPBACK option to work. - * Setting this is needed to avoid reentering non-reentrant functions like - * tcp_input(). - *    LWIP_NETIF_LOOPBACK_MULTITHREADING==1: Indicates that the user is using a - *       multithreaded environment like tcpip.c. In this case, netif->input() - *       is called directly. - *    LWIP_NETIF_LOOPBACK_MULTITHREADING==0: Indicates a polling (or NO_SYS) setup. - *       The packets are put on a list and netif_poll() must be called in - *       the main application loop. - */ -#ifndef LWIP_NETIF_LOOPBACK_MULTITHREADING -#define LWIP_NETIF_LOOPBACK_MULTITHREADING    (!NO_SYS) -#endif - -/** - * LWIP_NETIF_TX_SINGLE_PBUF: if this is set to 1, lwIP tries to put all data - * to be sent into one single pbuf. This is for compatibility with DMA-enabled - * MACs that do not support scatter-gather. - * Beware that this might involve CPU-memcpy before transmitting that would not - * be needed without this flag! Use this only if you need to! - * - * @todo: TCP and IP-frag do not work with this, yet: - */ -#ifndef LWIP_NETIF_TX_SINGLE_PBUF -#define LWIP_NETIF_TX_SINGLE_PBUF             0 -#endif /* LWIP_NETIF_TX_SINGLE_PBUF */ - -/* -   ------------------------------------ -   ---------- LOOPIF options ---------- -   ------------------------------------ -*/ -/** - * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c - */ -#ifndef LWIP_HAVE_LOOPIF -#define LWIP_HAVE_LOOPIF                0 -#endif - -/* -   ------------------------------------ -   ---------- SLIPIF options ---------- -   ------------------------------------ -*/ -/** - * LWIP_HAVE_SLIPIF==1: Support slip interface and slipif.c - */ -#ifndef LWIP_HAVE_SLIPIF -#define LWIP_HAVE_SLIPIF                0 -#endif - -/* -   ------------------------------------ -   ---------- Thread options ---------- -   ------------------------------------ -*/ -/** - * TCPIP_THREAD_NAME: The name assigned to the main tcpip thread. - */ -#ifndef TCPIP_THREAD_NAME -#define TCPIP_THREAD_NAME              "tcpip_thread" -#endif - -/** - * TCPIP_THREAD_STACKSIZE: The stack size used by the main tcpip thread. - * The stack size value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef TCPIP_THREAD_STACKSIZE -#define TCPIP_THREAD_STACKSIZE          0 -#endif - -/** - * TCPIP_THREAD_PRIO: The priority assigned to the main tcpip thread. - * The priority value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef TCPIP_THREAD_PRIO -#define TCPIP_THREAD_PRIO               1 -#endif - -/** - * TCPIP_MBOX_SIZE: The mailbox size for the tcpip thread messages - * The queue size value itself is platform-dependent, but is passed to - * sys_mbox_new() when tcpip_init is called. - */ -#ifndef TCPIP_MBOX_SIZE -#define TCPIP_MBOX_SIZE                 0 -#endif - -/** - * SLIPIF_THREAD_NAME: The name assigned to the slipif_loop thread. - */ -#ifndef SLIPIF_THREAD_NAME -#define SLIPIF_THREAD_NAME             "slipif_loop" -#endif - -/** - * SLIP_THREAD_STACKSIZE: The stack size used by the slipif_loop thread. - * The stack size value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef SLIPIF_THREAD_STACKSIZE -#define SLIPIF_THREAD_STACKSIZE         0 -#endif - -/** - * SLIPIF_THREAD_PRIO: The priority assigned to the slipif_loop thread. - * The priority value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef SLIPIF_THREAD_PRIO -#define SLIPIF_THREAD_PRIO              1 -#endif - -/** - * PPP_THREAD_NAME: The name assigned to the pppMain thread. - */ -#ifndef PPP_THREAD_NAME -#define PPP_THREAD_NAME                "pppMain" -#endif - -/** - * PPP_THREAD_STACKSIZE: The stack size used by the pppMain thread. - * The stack size value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef PPP_THREAD_STACKSIZE -#define PPP_THREAD_STACKSIZE            0 -#endif - -/** - * PPP_THREAD_PRIO: The priority assigned to the pppMain thread. - * The priority value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef PPP_THREAD_PRIO -#define PPP_THREAD_PRIO                 1 -#endif - -/** - * DEFAULT_THREAD_NAME: The name assigned to any other lwIP thread. - */ -#ifndef DEFAULT_THREAD_NAME -#define DEFAULT_THREAD_NAME            "lwIP" -#endif - -/** - * DEFAULT_THREAD_STACKSIZE: The stack size used by any other lwIP thread. - * The stack size value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef DEFAULT_THREAD_STACKSIZE -#define DEFAULT_THREAD_STACKSIZE        0 -#endif - -/** - * DEFAULT_THREAD_PRIO: The priority assigned to any other lwIP thread. - * The priority value itself is platform-dependent, but is passed to - * sys_thread_new() when the thread is created. - */ -#ifndef DEFAULT_THREAD_PRIO -#define DEFAULT_THREAD_PRIO             1 -#endif - -/** - * DEFAULT_RAW_RECVMBOX_SIZE: The mailbox size for the incoming packets on a - * NETCONN_RAW. The queue size value itself is platform-dependent, but is passed - * to sys_mbox_new() when the recvmbox is created. - */ -#ifndef DEFAULT_RAW_RECVMBOX_SIZE -#define DEFAULT_RAW_RECVMBOX_SIZE       0 -#endif - -/** - * DEFAULT_UDP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a - * NETCONN_UDP. The queue size value itself is platform-dependent, but is passed - * to sys_mbox_new() when the recvmbox is created. - */ -#ifndef DEFAULT_UDP_RECVMBOX_SIZE -#define DEFAULT_UDP_RECVMBOX_SIZE       0 -#endif - -/** - * DEFAULT_TCP_RECVMBOX_SIZE: The mailbox size for the incoming packets on a - * NETCONN_TCP. The queue size value itself is platform-dependent, but is passed - * to sys_mbox_new() when the recvmbox is created. - */ -#ifndef DEFAULT_TCP_RECVMBOX_SIZE -#define DEFAULT_TCP_RECVMBOX_SIZE       0 -#endif - -/** - * DEFAULT_ACCEPTMBOX_SIZE: The mailbox size for the incoming connections. - * The queue size value itself is platform-dependent, but is passed to - * sys_mbox_new() when the acceptmbox is created. - */ -#ifndef DEFAULT_ACCEPTMBOX_SIZE -#define DEFAULT_ACCEPTMBOX_SIZE         0 -#endif - -/* -   ---------------------------------------------- -   ---------- Sequential layer options ---------- -   ---------------------------------------------- -*/ -/** - * LWIP_TCPIP_CORE_LOCKING: (EXPERIMENTAL!) - * Don't use it if you're not an active lwIP project member - */ -#ifndef LWIP_TCPIP_CORE_LOCKING -#define LWIP_TCPIP_CORE_LOCKING         0 -#endif - -/** - * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c) - */ -#ifndef LWIP_NETCONN -#define LWIP_NETCONN                    1 -#endif - -/* -   ------------------------------------ -   ---------- Socket options ---------- -   ------------------------------------ -*/ -/** - * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c) - */ -#ifndef LWIP_SOCKET -#define LWIP_SOCKET                     1 -#endif - -/** - * LWIP_COMPAT_SOCKETS==1: Enable BSD-style sockets functions names. - * (only used if you use sockets.c) - */ -#ifndef LWIP_COMPAT_SOCKETS -#define LWIP_COMPAT_SOCKETS             1 -#endif - -/** - * LWIP_POSIX_SOCKETS_IO_NAMES==1: Enable POSIX-style sockets functions names. - * Disable this option if you use a POSIX operating system that uses the same - * names (read, write & close). (only used if you use sockets.c) - */ -#ifndef LWIP_POSIX_SOCKETS_IO_NAMES -#define LWIP_POSIX_SOCKETS_IO_NAMES     1 -#endif - -/** - * LWIP_TCP_KEEPALIVE==1: Enable TCP_KEEPIDLE, TCP_KEEPINTVL and TCP_KEEPCNT - * options processing. Note that TCP_KEEPIDLE and TCP_KEEPINTVL have to be set - * in seconds. (does not require sockets.c, and will affect tcp.c) - */ -#ifndef LWIP_TCP_KEEPALIVE -#define LWIP_TCP_KEEPALIVE              1 -#endif - -/** - * LWIP_SO_RCVTIMEO==1: Enable SO_RCVTIMEO processing. - */ -#ifndef LWIP_SO_RCVTIMEO -#define LWIP_SO_RCVTIMEO                0 -#endif - -/** - * LWIP_SO_RCVBUF==1: Enable SO_RCVBUF processing. - */ -#ifndef LWIP_SO_RCVBUF -#define LWIP_SO_RCVBUF                  0 -#endif - -/** - * If LWIP_SO_RCVBUF is used, this is the default value for recv_bufsize. - */ -#ifndef RECV_BUFSIZE_DEFAULT -#define RECV_BUFSIZE_DEFAULT            INT_MAX -#endif - -/** - * SO_REUSE==1: Enable SO_REUSEADDR and SO_REUSEPORT options. DO NOT USE! - */ -#ifndef SO_REUSE -#define SO_REUSE                        0 -#endif - -/* -   ---------------------------------------- -   ---------- Statistics options ---------- -   ---------------------------------------- -*/ -/** - * LWIP_STATS==1: Enable statistics collection in lwip_stats. - */ -#ifndef LWIP_STATS -#define LWIP_STATS                      1 -#endif - -#if LWIP_STATS - -/** - * LWIP_STATS_DISPLAY==1: Compile in the statistics output functions. - */ -#ifndef LWIP_STATS_DISPLAY -#define LWIP_STATS_DISPLAY              0 -#endif - -/** - * LINK_STATS==1: Enable link stats. - */ -#ifndef LINK_STATS -#define LINK_STATS                      1 -#endif - -/** - * ETHARP_STATS==1: Enable etharp stats. - */ -#ifndef ETHARP_STATS -#define ETHARP_STATS                    (LWIP_ARP) -#endif - -/** - * IP_STATS==1: Enable IP stats. - */ -#ifndef IP_STATS -#define IP_STATS                        1 -#endif - -/** - * IPFRAG_STATS==1: Enable IP fragmentation stats. Default is - * on if using either frag or reass. - */ -#ifndef IPFRAG_STATS -#define IPFRAG_STATS                    (IP_REASSEMBLY || IP_FRAG) -#endif - -/** - * ICMP_STATS==1: Enable ICMP stats. - */ -#ifndef ICMP_STATS -#define ICMP_STATS                      1 -#endif - -/** - * IGMP_STATS==1: Enable IGMP stats. - */ -#ifndef IGMP_STATS -#define IGMP_STATS                      (LWIP_IGMP) -#endif - -/** - * UDP_STATS==1: Enable UDP stats. Default is on if - * UDP enabled, otherwise off. - */ -#ifndef UDP_STATS -#define UDP_STATS                       (LWIP_UDP) -#endif - -/** - * TCP_STATS==1: Enable TCP stats. Default is on if TCP - * enabled, otherwise off. - */ -#ifndef TCP_STATS -#define TCP_STATS                       (LWIP_TCP) -#endif - -/** - * MEM_STATS==1: Enable mem.c stats. - */ -#ifndef MEM_STATS -#define MEM_STATS                       ((MEM_LIBC_MALLOC == 0) && (MEM_USE_POOLS == 0)) -#endif - -/** - * MEMP_STATS==1: Enable memp.c pool stats. - */ -#ifndef MEMP_STATS -#define MEMP_STATS                      (MEMP_MEM_MALLOC == 0) -#endif - -/** - * SYS_STATS==1: Enable system stats (sem and mbox counts, etc). - */ -#ifndef SYS_STATS -#define SYS_STATS                       (NO_SYS == 0) -#endif - -#else - -#define LINK_STATS                      0 -#define IP_STATS                        0 -#define IPFRAG_STATS                    0 -#define ICMP_STATS                      0 -#define IGMP_STATS                      0 -#define UDP_STATS                       0 -#define TCP_STATS                       0 -#define MEM_STATS                       0 -#define MEMP_STATS                      0 -#define SYS_STATS                       0 -#define LWIP_STATS_DISPLAY              0 - -#endif /* LWIP_STATS */ - -/* -   --------------------------------- -   ---------- PPP options ---------- -   --------------------------------- -*/ -/** - * PPP_SUPPORT==1: Enable PPP. - */ -#ifndef PPP_SUPPORT -#define PPP_SUPPORT                     0 -#endif - -/** - * PPPOE_SUPPORT==1: Enable PPP Over Ethernet - */ -#ifndef PPPOE_SUPPORT -#define PPPOE_SUPPORT                   0 -#endif - -/** - * PPPOS_SUPPORT==1: Enable PPP Over Serial - */ -#ifndef PPPOS_SUPPORT -#define PPPOS_SUPPORT                   PPP_SUPPORT -#endif - -#if PPP_SUPPORT - -/** - * NUM_PPP: Max PPP sessions. - */ -#ifndef NUM_PPP -#define NUM_PPP                         1 -#endif - -/** - * PAP_SUPPORT==1: Support PAP. - */ -#ifndef PAP_SUPPORT -#define PAP_SUPPORT                     0 -#endif - -/** - * CHAP_SUPPORT==1: Support CHAP. - */ -#ifndef CHAP_SUPPORT -#define CHAP_SUPPORT                    0 -#endif - -/** - * MSCHAP_SUPPORT==1: Support MSCHAP. CURRENTLY NOT SUPPORTED! DO NOT SET! - */ -#ifndef MSCHAP_SUPPORT -#define MSCHAP_SUPPORT                  0 -#endif - -/** - * CBCP_SUPPORT==1: Support CBCP. CURRENTLY NOT SUPPORTED! DO NOT SET! - */ -#ifndef CBCP_SUPPORT -#define CBCP_SUPPORT                    0 -#endif - -/** - * CCP_SUPPORT==1: Support CCP. CURRENTLY NOT SUPPORTED! DO NOT SET! - */ -#ifndef CCP_SUPPORT -#define CCP_SUPPORT                     0 -#endif - -/** - * VJ_SUPPORT==1: Support VJ header compression. - */ -#ifndef VJ_SUPPORT -#define VJ_SUPPORT                      0 -#endif - -/** - * MD5_SUPPORT==1: Support MD5 (see also CHAP). - */ -#ifndef MD5_SUPPORT -#define MD5_SUPPORT                     0 -#endif - -/* - * Timeouts - */ -#ifndef FSM_DEFTIMEOUT -#define FSM_DEFTIMEOUT                  6       /* Timeout time in seconds */ -#endif - -#ifndef FSM_DEFMAXTERMREQS -#define FSM_DEFMAXTERMREQS              2       /* Maximum Terminate-Request transmissions */ -#endif - -#ifndef FSM_DEFMAXCONFREQS -#define FSM_DEFMAXCONFREQS              10      /* Maximum Configure-Request transmissions */ -#endif - -#ifndef FSM_DEFMAXNAKLOOPS -#define FSM_DEFMAXNAKLOOPS              5       /* Maximum number of nak loops */ -#endif - -#ifndef UPAP_DEFTIMEOUT -#define UPAP_DEFTIMEOUT                 6       /* Timeout (seconds) for retransmitting req */ -#endif - -#ifndef UPAP_DEFREQTIME -#define UPAP_DEFREQTIME                 30      /* Time to wait for auth-req from peer */ -#endif - -#ifndef CHAP_DEFTIMEOUT -#define CHAP_DEFTIMEOUT                 6       /* Timeout time in seconds */ -#endif - -#ifndef CHAP_DEFTRANSMITS -#define CHAP_DEFTRANSMITS               10      /* max # times to send challenge */ -#endif - -/* Interval in seconds between keepalive echo requests, 0 to disable. */ -#ifndef LCP_ECHOINTERVAL -#define LCP_ECHOINTERVAL                0 -#endif - -/* Number of unanswered echo requests before failure. */ -#ifndef LCP_MAXECHOFAILS -#define LCP_MAXECHOFAILS                3 -#endif - -/* Max Xmit idle time (in jiffies) before resend flag char. */ -#ifndef PPP_MAXIDLEFLAG -#define PPP_MAXIDLEFLAG                 100 -#endif - -/* - * Packet sizes - * - * Note - lcp shouldn't be allowed to negotiate stuff outside these - *    limits.  See lcp.h in the pppd directory. - * (XXX - these constants should simply be shared by lcp.c instead - *    of living in lcp.h) - */ -#define PPP_MTU                         1500     /* Default MTU (size of Info field) */ -#ifndef PPP_MAXMTU -/* #define PPP_MAXMTU  65535 - (PPP_HDRLEN + PPP_FCSLEN) */ -#define PPP_MAXMTU                      1500 /* Largest MTU we allow */ -#endif -#define PPP_MINMTU                      64 -#define PPP_MRU                         1500     /* default MRU = max length of info field */ -#define PPP_MAXMRU                      1500     /* Largest MRU we allow */ -#ifndef PPP_DEFMRU -#define PPP_DEFMRU                      296             /* Try for this */ -#endif -#define PPP_MINMRU                      128             /* No MRUs below this */ - -#ifndef MAXNAMELEN -#define MAXNAMELEN                      256     /* max length of hostname or name for auth */ -#endif -#ifndef MAXSECRETLEN -#define MAXSECRETLEN                    256     /* max length of password or secret */ -#endif - -#endif /* PPP_SUPPORT */ - -/* -   -------------------------------------- -   ---------- Checksum options ---------- -   -------------------------------------- -*/ -/** - * CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets. - */ -#ifndef CHECKSUM_GEN_IP -#define CHECKSUM_GEN_IP                 1 -#endif -  -/** - * CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets. - */ -#ifndef CHECKSUM_GEN_UDP -#define CHECKSUM_GEN_UDP                1 -#endif -  -/** - * CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets. - */ -#ifndef CHECKSUM_GEN_TCP -#define CHECKSUM_GEN_TCP                1 -#endif -  -/** - * CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets. - */ -#ifndef CHECKSUM_CHECK_IP -#define CHECKSUM_CHECK_IP               1 -#endif -  -/** - * CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets. - */ -#ifndef CHECKSUM_CHECK_UDP -#define CHECKSUM_CHECK_UDP              1 -#endif - -/** - * CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets. - */ -#ifndef CHECKSUM_CHECK_TCP -#define CHECKSUM_CHECK_TCP              1 -#endif - -/* -   --------------------------------------- -   ---------- Debugging options ---------- -   --------------------------------------- -*/ -/** - * LWIP_DBG_MIN_LEVEL: After masking, the value of the debug is - * compared against this value. If it is smaller, then debugging - * messages are written. - */ -#ifndef LWIP_DBG_MIN_LEVEL -#define LWIP_DBG_MIN_LEVEL              LWIP_DBG_LEVEL_ALL -#endif - -/** - * LWIP_DBG_TYPES_ON: A mask that can be used to globally enable/disable - * debug messages of certain types. - */ -#ifndef LWIP_DBG_TYPES_ON -#define LWIP_DBG_TYPES_ON               LWIP_DBG_ON -#endif - -/** - * ETHARP_DEBUG: Enable debugging in etharp.c. - */ -#ifndef ETHARP_DEBUG -#define ETHARP_DEBUG                    LWIP_DBG_OFF -#endif - -/** - * NETIF_DEBUG: Enable debugging in netif.c. - */ -#ifndef NETIF_DEBUG -#define NETIF_DEBUG                     LWIP_DBG_OFF -#endif - -/** - * PBUF_DEBUG: Enable debugging in pbuf.c. - */ -#ifndef PBUF_DEBUG -#define PBUF_DEBUG                      LWIP_DBG_OFF -#endif - -/** - * API_LIB_DEBUG: Enable debugging in api_lib.c. - */ -#ifndef API_LIB_DEBUG -#define API_LIB_DEBUG                   LWIP_DBG_OFF -#endif - -/** - * API_MSG_DEBUG: Enable debugging in api_msg.c. - */ -#ifndef API_MSG_DEBUG -#define API_MSG_DEBUG                   LWIP_DBG_OFF -#endif - -/** - * SOCKETS_DEBUG: Enable debugging in sockets.c. - */ -#ifndef SOCKETS_DEBUG -#define SOCKETS_DEBUG                   LWIP_DBG_OFF -#endif - -/** - * ICMP_DEBUG: Enable debugging in icmp.c. - */ -#ifndef ICMP_DEBUG -#define ICMP_DEBUG                      LWIP_DBG_OFF -#endif - -/** - * IGMP_DEBUG: Enable debugging in igmp.c. - */ -#ifndef IGMP_DEBUG -#define IGMP_DEBUG                      LWIP_DBG_OFF -#endif - -/** - * INET_DEBUG: Enable debugging in inet.c. - */ -#ifndef INET_DEBUG -#define INET_DEBUG                      LWIP_DBG_OFF -#endif - -/** - * IP_DEBUG: Enable debugging for IP. - */ -#ifndef IP_DEBUG -#define IP_DEBUG                        LWIP_DBG_OFF -#endif - -/** - * IP_REASS_DEBUG: Enable debugging in ip_frag.c for both frag & reass. - */ -#ifndef IP_REASS_DEBUG -#define IP_REASS_DEBUG                  LWIP_DBG_OFF -#endif - -/** - * RAW_DEBUG: Enable debugging in raw.c. - */ -#ifndef RAW_DEBUG -#define RAW_DEBUG                       LWIP_DBG_OFF -#endif - -/** - * MEM_DEBUG: Enable debugging in mem.c. - */ -#ifndef MEM_DEBUG -#define MEM_DEBUG                       LWIP_DBG_OFF -#endif - -/** - * MEMP_DEBUG: Enable debugging in memp.c. - */ -#ifndef MEMP_DEBUG -#define MEMP_DEBUG                      LWIP_DBG_OFF -#endif - -/** - * SYS_DEBUG: Enable debugging in sys.c. - */ -#ifndef SYS_DEBUG -#define SYS_DEBUG                       LWIP_DBG_OFF -#endif - -/** - * TCP_DEBUG: Enable debugging for TCP. - */ -#ifndef TCP_DEBUG -#define TCP_DEBUG                       LWIP_DBG_OFF -#endif - -/** - * TCP_INPUT_DEBUG: Enable debugging in tcp_in.c for incoming debug. - */ -#ifndef TCP_INPUT_DEBUG -#define TCP_INPUT_DEBUG                 LWIP_DBG_ON -#endif - -/** - * TCP_FR_DEBUG: Enable debugging in tcp_in.c for fast retransmit. - */ -#ifndef TCP_FR_DEBUG -#define TCP_FR_DEBUG                    LWIP_DBG_OFF -#endif - -/** - * TCP_RTO_DEBUG: Enable debugging in TCP for retransmit - * timeout. - */ -#ifndef TCP_RTO_DEBUG -#define TCP_RTO_DEBUG                   LWIP_DBG_OFF -#endif - -/** - * TCP_CWND_DEBUG: Enable debugging for TCP congestion window. - */ -#ifndef TCP_CWND_DEBUG -#define TCP_CWND_DEBUG                  LWIP_DBG_OFF -#endif - -/** - * TCP_WND_DEBUG: Enable debugging in tcp_in.c for window updating. - */ -#ifndef TCP_WND_DEBUG -#define TCP_WND_DEBUG                   LWIP_DBG_OFF -#endif - -/** - * TCP_OUTPUT_DEBUG: Enable debugging in tcp_out.c output functions. - */ -#ifndef TCP_OUTPUT_DEBUG -#define TCP_OUTPUT_DEBUG                LWIP_DBG_OFF -#endif - -/** - * TCP_RST_DEBUG: Enable debugging for TCP with the RST message. - */ -#ifndef TCP_RST_DEBUG -#define TCP_RST_DEBUG                   LWIP_DBG_OFF -#endif - -/** - * TCP_QLEN_DEBUG: Enable debugging for TCP queue lengths. - */ -#ifndef TCP_QLEN_DEBUG -#define TCP_QLEN_DEBUG                  LWIP_DBG_OFF -#endif - -/** - * UDP_DEBUG: Enable debugging in UDP. - */ -#ifndef UDP_DEBUG -#define UDP_DEBUG                       LWIP_DBG_OFF -#endif - -/** - * TCPIP_DEBUG: Enable debugging in tcpip.c. - */ -#ifndef TCPIP_DEBUG -#define TCPIP_DEBUG                     LWIP_DBG_OFF -#endif - -/** - * PPP_DEBUG: Enable debugging for PPP. - */ -#ifndef PPP_DEBUG -#define PPP_DEBUG                       LWIP_DBG_OFF -#endif - -/** - * SLIP_DEBUG: Enable debugging in slipif.c. - */ -#ifndef SLIP_DEBUG -#define SLIP_DEBUG                      LWIP_DBG_OFF -#endif - -/** - * DHCP_DEBUG: Enable debugging in dhcp.c. - */ -#ifndef DHCP_DEBUG -#define DHCP_DEBUG                      LWIP_DBG_OFF -#endif - -/** - * AUTOIP_DEBUG: Enable debugging in autoip.c. - */ -#ifndef AUTOIP_DEBUG -#define AUTOIP_DEBUG                    LWIP_DBG_OFF -#endif - -/** - * SNMP_MSG_DEBUG: Enable debugging for SNMP messages. - */ -#ifndef SNMP_MSG_DEBUG -#define SNMP_MSG_DEBUG                  LWIP_DBG_OFF -#endif - -/** - * SNMP_MIB_DEBUG: Enable debugging for SNMP MIBs. - */ -#ifndef SNMP_MIB_DEBUG -#define SNMP_MIB_DEBUG                  LWIP_DBG_OFF -#endif - -/** - * DNS_DEBUG: Enable debugging for DNS. - */ -#ifndef DNS_DEBUG -#define DNS_DEBUG                       LWIP_DBG_OFF -#endif - -#endif /* __LWIP_OPT_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/pbuf.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/pbuf.h deleted file mode 100644 index 8ca61b1..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/pbuf.h +++ /dev/null @@ -1,122 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ - -#ifndef __LWIP_PBUF_H__ -#define __LWIP_PBUF_H__ - -#include "lwip/opt.h" -#include "lwip/err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define PBUF_TRANSPORT_HLEN 20 -#define PBUF_IP_HLEN        20 - -typedef enum { -  PBUF_TRANSPORT, -  PBUF_IP, -  PBUF_LINK, -  PBUF_RAW -} pbuf_layer; - -typedef enum { -  PBUF_RAM, /* pbuf data is stored in RAM */ -  PBUF_ROM, /* pbuf data is stored in ROM */ -  PBUF_REF, /* pbuf comes from the pbuf pool */ -  PBUF_POOL /* pbuf payload refers to RAM */ -} pbuf_type; - - -/** indicates this packet's data should be immediately passed to the application */ -#define PBUF_FLAG_PUSH 0x01U - -struct pbuf { -  /** next pbuf in singly linked pbuf chain */ -  struct pbuf *next; - -  /** pointer to the actual data in the buffer */ -  void *payload; -   -  /** -   * total length of this buffer and all next buffers in chain -   * belonging to the same packet. -   * -   * For non-queue packet chains this is the invariant: -   * p->tot_len == p->len + (p->next? p->next->tot_len: 0) -   */ -  u16_t tot_len; -   -  /** length of this buffer */ -  u16_t len;   - -  /** pbuf_type as u8_t instead of enum to save space */ -  u8_t /*pbuf_type*/ type; - -  /** misc flags */ -  u8_t flags; - -  /** -   * the reference count always equals the number of pointers -   * that refer to this pbuf. This can be pointers from an application, -   * the stack itself, or pbuf->next pointers from a chain. -   */ -  u16_t ref; -   -}; - -/* Initializes the pbuf module. This call is empty for now, but may not be in future. */ -#define pbuf_init() - -struct pbuf *pbuf_alloc(pbuf_layer l, u16_t size, pbuf_type type); -void pbuf_realloc(struct pbuf *p, u16_t size);  -u8_t pbuf_header(struct pbuf *p, s16_t header_size); -void pbuf_ref(struct pbuf *p); -void pbuf_ref_chain(struct pbuf *p); -u8_t pbuf_free(struct pbuf *p); -u8_t pbuf_clen(struct pbuf *p);   -void pbuf_cat(struct pbuf *head, struct pbuf *tail); -void pbuf_chain(struct pbuf *head, struct pbuf *tail); -struct pbuf *pbuf_dechain(struct pbuf *p); -err_t pbuf_copy(struct pbuf *p_to, struct pbuf *p_from); -u16_t pbuf_copy_partial(struct pbuf *p, void *dataptr, u16_t len, u16_t offset); -err_t pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len); -struct pbuf *pbuf_coalesce(struct pbuf *p, pbuf_layer layer); - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_PBUF_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/raw.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/raw.h deleted file mode 100644 index 545c433..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/raw.h +++ /dev/null @@ -1,99 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_RAW_H__ -#define __LWIP_RAW_H__ - -#include "lwip/opt.h" - -#if LWIP_RAW /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/pbuf.h" -#include "lwip/inet.h" -#include "lwip/ip.h" -#include "lwip/ip_addr.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct raw_pcb { -/* Common members of all PCB types */ -  IP_PCB; - -  struct raw_pcb *next; - -  u8_t protocol; - -  /* receive callback function -   * @param arg user supplied argument (raw_pcb.recv_arg) -   * @param pcb the raw_pcb which received data -   * @param p the packet buffer that was received -   * @param addr the remote IP address from which the packet was received -   * @return 1 if the packet was 'eaten' (aka. deleted), -   *         0 if the packet lives on -   * If returning 1, the callback is responsible for freeing the pbuf -   * if it's not used any more. -   */ -  u8_t (* recv)(void *arg, struct raw_pcb *pcb, struct pbuf *p, -    struct ip_addr *addr); -  /* user-supplied argument for the recv callback */ -  void *recv_arg; -}; - -/* The following functions is the application layer interface to the -   RAW code. */ -struct raw_pcb * raw_new        (u8_t proto); -void             raw_remove     (struct raw_pcb *pcb); -err_t            raw_bind       (struct raw_pcb *pcb, struct ip_addr *ipaddr); -err_t            raw_connect    (struct raw_pcb *pcb, struct ip_addr *ipaddr); - -void             raw_recv       (struct raw_pcb *pcb, -                                 u8_t (* recv)(void *arg, struct raw_pcb *pcb, -                                              struct pbuf *p, -                                              struct ip_addr *addr), -                                 void *recv_arg); -err_t            raw_sendto     (struct raw_pcb *pcb, struct pbuf *p, struct ip_addr *ipaddr); -err_t            raw_send       (struct raw_pcb *pcb, struct pbuf *p); - -/* The following functions are the lower layer interface to RAW. */ -u8_t             raw_input      (struct pbuf *p, struct netif *inp); -#define raw_init() /* Compatibility define, not init needed. */ - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_RAW */ - -#endif /* __LWIP_RAW_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sio.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sio.h deleted file mode 100644 index 10eabcf..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sio.h +++ /dev/null @@ -1,143 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - */ - -/* - * This is the interface to the platform specific serial IO module - * It needs to be implemented by those platforms which need SLIP or PPP - */ - -#ifndef __SIO_H__ -#define __SIO_H__ - -#include "lwip/arch.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* If you want to define sio_fd_t elsewhere or differently, -   define this in your cc.h file. */ -#ifndef __sio_fd_t_defined -typedef void * sio_fd_t; -#endif - -/* The following functions can be defined to something else in your cc.h file -   or be implemented in your custom sio.c file. */ - -#ifndef sio_open -/** - * Opens a serial device for communication. - *  - * @param devnum device number - * @return handle to serial device if successful, NULL otherwise - */ -sio_fd_t sio_open(u8_t devnum); -#endif - -#ifndef sio_send -/** - * Sends a single character to the serial device. - *  - * @param c character to send - * @param fd serial device handle - *  - * @note This function will block until the character can be sent. - */ -void sio_send(u8_t c, sio_fd_t fd); -#endif - -#ifndef sio_recv -/** - * Receives a single character from the serial device. - *  - * @param fd serial device handle - *  - * @note This function will block until a character is received. - */ -u8_t sio_recv(sio_fd_t fd); -#endif - -#ifndef sio_read -/** - * Reads from the serial device. - *  - * @param fd serial device handle - * @param data pointer to data buffer for receiving - * @param len maximum length (in bytes) of data to receive - * @return number of bytes actually received - may be 0 if aborted by sio_read_abort - *  - * @note This function will block until data can be received. The blocking - * can be cancelled by calling sio_read_abort(). - */ -u32_t sio_read(sio_fd_t fd, u8_t *data, u32_t len); -#endif - -#ifndef sio_tryread -/** - * Tries to read from the serial device. Same as sio_read but returns - * immediately if no data is available and never blocks. - *  - * @param fd serial device handle - * @param data pointer to data buffer for receiving - * @param len maximum length (in bytes) of data to receive - * @return number of bytes actually received - */ -u32_t sio_tryread(sio_fd_t fd, u8_t *data, u32_t len); -#endif - -#ifndef sio_write -/** - * Writes to the serial device. - *  - * @param fd serial device handle - * @param data pointer to data to send - * @param len length (in bytes) of data to send - * @return number of bytes actually sent - *  - * @note This function will block until all data can be sent. - */ -u32_t sio_write(sio_fd_t fd, u8_t *data, u32_t len); -#endif - -#ifndef sio_read_abort -/** - * Aborts a blocking sio_read() call. - *  - * @param fd serial device handle - */ -void sio_read_abort(sio_fd_t fd); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* __SIO_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp.h deleted file mode 100644 index b87717f..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp.h +++ /dev/null @@ -1,366 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001, 2002 Leon Woestenberg <leon.woestenberg@axon.tv> - * Copyright (c) 2001, 2002 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Leon Woestenberg <leon.woestenberg@axon.tv> - * - */ -#ifndef __LWIP_SNMP_H__ -#define __LWIP_SNMP_H__ - -#include "lwip/opt.h" -#include "lwip/netif.h" -#include "lwip/udp.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @see RFC1213, "MIB-II, 6. Definitions" - */ -enum snmp_ifType { -  snmp_ifType_other=1,                /* none of the following */ -  snmp_ifType_regular1822, -  snmp_ifType_hdh1822, -  snmp_ifType_ddn_x25, -  snmp_ifType_rfc877_x25, -  snmp_ifType_ethernet_csmacd, -  snmp_ifType_iso88023_csmacd, -  snmp_ifType_iso88024_tokenBus, -  snmp_ifType_iso88025_tokenRing, -  snmp_ifType_iso88026_man, -  snmp_ifType_starLan, -  snmp_ifType_proteon_10Mbit, -  snmp_ifType_proteon_80Mbit, -  snmp_ifType_hyperchannel, -  snmp_ifType_fddi, -  snmp_ifType_lapb, -  snmp_ifType_sdlc, -  snmp_ifType_ds1,                    /* T-1 */ -  snmp_ifType_e1,                     /* european equiv. of T-1 */ -  snmp_ifType_basicISDN, -  snmp_ifType_primaryISDN,            /* proprietary serial */ -  snmp_ifType_propPointToPointSerial, -  snmp_ifType_ppp, -  snmp_ifType_softwareLoopback, -  snmp_ifType_eon,                    /* CLNP over IP [11] */ -  snmp_ifType_ethernet_3Mbit, -  snmp_ifType_nsip,                   /* XNS over IP */ -  snmp_ifType_slip,                   /* generic SLIP */ -  snmp_ifType_ultra,                  /* ULTRA technologies */ -  snmp_ifType_ds3,                    /* T-3 */ -  snmp_ifType_sip,                    /* SMDS */ -  snmp_ifType_frame_relay -}; - -#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ - -/** SNMP "sysuptime" Interval */ -#define SNMP_SYSUPTIME_INTERVAL 10 - -/** fixed maximum length for object identifier type */ -#define LWIP_SNMP_OBJ_ID_LEN 32 - -/** internal object identifier representation */ -struct snmp_obj_id -{ -  u8_t len; -  s32_t id[LWIP_SNMP_OBJ_ID_LEN]; -}; - -/* system */ -void snmp_set_sysdesr(u8_t* str, u8_t* len); -void snmp_set_sysobjid(struct snmp_obj_id *oid); -void snmp_get_sysobjid_ptr(struct snmp_obj_id **oid); -void snmp_inc_sysuptime(void); -void snmp_add_sysuptime(u32_t value); -void snmp_get_sysuptime(u32_t *value); -void snmp_set_syscontact(u8_t *ocstr, u8_t *ocstrlen); -void snmp_set_sysname(u8_t *ocstr, u8_t *ocstrlen); -void snmp_set_syslocation(u8_t *ocstr, u8_t *ocstrlen); - -/* network interface */ -void snmp_add_ifinoctets(struct netif *ni, u32_t value);  -void snmp_inc_ifinucastpkts(struct netif *ni); -void snmp_inc_ifinnucastpkts(struct netif *ni); -void snmp_inc_ifindiscards(struct netif *ni); -void snmp_add_ifoutoctets(struct netif *ni, u32_t value); -void snmp_inc_ifoutucastpkts(struct netif *ni); -void snmp_inc_ifoutnucastpkts(struct netif *ni); -void snmp_inc_ifoutdiscards(struct netif *ni); -void snmp_inc_iflist(void); -void snmp_dec_iflist(void); - -/* ARP (for atTable and ipNetToMediaTable) */ -void snmp_insert_arpidx_tree(struct netif *ni, struct ip_addr *ip); -void snmp_delete_arpidx_tree(struct netif *ni, struct ip_addr *ip); - -/* IP */ -void snmp_inc_ipinreceives(void); -void snmp_inc_ipinhdrerrors(void); -void snmp_inc_ipinaddrerrors(void); -void snmp_inc_ipforwdatagrams(void); -void snmp_inc_ipinunknownprotos(void); -void snmp_inc_ipindiscards(void); -void snmp_inc_ipindelivers(void); -void snmp_inc_ipoutrequests(void); -void snmp_inc_ipoutdiscards(void); -void snmp_inc_ipoutnoroutes(void); -void snmp_inc_ipreasmreqds(void); -void snmp_inc_ipreasmoks(void); -void snmp_inc_ipreasmfails(void); -void snmp_inc_ipfragoks(void); -void snmp_inc_ipfragfails(void); -void snmp_inc_ipfragcreates(void); -void snmp_inc_iproutingdiscards(void); -void snmp_insert_ipaddridx_tree(struct netif *ni); -void snmp_delete_ipaddridx_tree(struct netif *ni); -void snmp_insert_iprteidx_tree(u8_t dflt, struct netif *ni); -void snmp_delete_iprteidx_tree(u8_t dflt, struct netif *ni); - -/* ICMP */ -void snmp_inc_icmpinmsgs(void); -void snmp_inc_icmpinerrors(void); -void snmp_inc_icmpindestunreachs(void); -void snmp_inc_icmpintimeexcds(void); -void snmp_inc_icmpinparmprobs(void); -void snmp_inc_icmpinsrcquenchs(void); -void snmp_inc_icmpinredirects(void); -void snmp_inc_icmpinechos(void); -void snmp_inc_icmpinechoreps(void); -void snmp_inc_icmpintimestamps(void); -void snmp_inc_icmpintimestampreps(void); -void snmp_inc_icmpinaddrmasks(void); -void snmp_inc_icmpinaddrmaskreps(void); -void snmp_inc_icmpoutmsgs(void); -void snmp_inc_icmpouterrors(void); -void snmp_inc_icmpoutdestunreachs(void); -void snmp_inc_icmpouttimeexcds(void); -void snmp_inc_icmpoutparmprobs(void); -void snmp_inc_icmpoutsrcquenchs(void); -void snmp_inc_icmpoutredirects(void);  -void snmp_inc_icmpoutechos(void); -void snmp_inc_icmpoutechoreps(void); -void snmp_inc_icmpouttimestamps(void); -void snmp_inc_icmpouttimestampreps(void); -void snmp_inc_icmpoutaddrmasks(void); -void snmp_inc_icmpoutaddrmaskreps(void); - -/* TCP */ -void snmp_inc_tcpactiveopens(void); -void snmp_inc_tcppassiveopens(void); -void snmp_inc_tcpattemptfails(void); -void snmp_inc_tcpestabresets(void); -void snmp_inc_tcpinsegs(void); -void snmp_inc_tcpoutsegs(void); -void snmp_inc_tcpretranssegs(void); -void snmp_inc_tcpinerrs(void); -void snmp_inc_tcpoutrsts(void); - -/* UDP */ -void snmp_inc_udpindatagrams(void); -void snmp_inc_udpnoports(void); -void snmp_inc_udpinerrors(void); -void snmp_inc_udpoutdatagrams(void); -void snmp_insert_udpidx_tree(struct udp_pcb *pcb); -void snmp_delete_udpidx_tree(struct udp_pcb *pcb); - -/* SNMP */ -void snmp_inc_snmpinpkts(void); -void snmp_inc_snmpoutpkts(void); -void snmp_inc_snmpinbadversions(void); -void snmp_inc_snmpinbadcommunitynames(void); -void snmp_inc_snmpinbadcommunityuses(void); -void snmp_inc_snmpinasnparseerrs(void); -void snmp_inc_snmpintoobigs(void); -void snmp_inc_snmpinnosuchnames(void); -void snmp_inc_snmpinbadvalues(void); -void snmp_inc_snmpinreadonlys(void); -void snmp_inc_snmpingenerrs(void); -void snmp_add_snmpintotalreqvars(u8_t value); -void snmp_add_snmpintotalsetvars(u8_t value); -void snmp_inc_snmpingetrequests(void); -void snmp_inc_snmpingetnexts(void); -void snmp_inc_snmpinsetrequests(void); -void snmp_inc_snmpingetresponses(void); -void snmp_inc_snmpintraps(void); -void snmp_inc_snmpouttoobigs(void); -void snmp_inc_snmpoutnosuchnames(void); -void snmp_inc_snmpoutbadvalues(void); -void snmp_inc_snmpoutgenerrs(void); -void snmp_inc_snmpoutgetrequests(void); -void snmp_inc_snmpoutgetnexts(void); -void snmp_inc_snmpoutsetrequests(void); -void snmp_inc_snmpoutgetresponses(void); -void snmp_inc_snmpouttraps(void); -void snmp_get_snmpgrpid_ptr(struct snmp_obj_id **oid); -void snmp_set_snmpenableauthentraps(u8_t *value); -void snmp_get_snmpenableauthentraps(u8_t *value); - -/* LWIP_SNMP support not available */ -/* define everything to be empty */ -#else - -/* system */ -#define snmp_set_sysdesr(str, len) -#define snmp_set_sysobjid(oid); -#define snmp_get_sysobjid_ptr(oid) -#define snmp_inc_sysuptime() -#define snmp_add_sysuptime(value) -#define snmp_get_sysuptime(value) -#define snmp_set_syscontact(ocstr, ocstrlen); -#define snmp_set_sysname(ocstr, ocstrlen); -#define snmp_set_syslocation(ocstr, ocstrlen); - -/* network interface */ -#define snmp_add_ifinoctets(ni,value)  -#define snmp_inc_ifinucastpkts(ni) -#define snmp_inc_ifinnucastpkts(ni) -#define snmp_inc_ifindiscards(ni) -#define snmp_add_ifoutoctets(ni,value) -#define snmp_inc_ifoutucastpkts(ni) -#define snmp_inc_ifoutnucastpkts(ni) -#define snmp_inc_ifoutdiscards(ni) -#define snmp_inc_iflist() -#define snmp_dec_iflist() - -/* ARP */ -#define snmp_insert_arpidx_tree(ni,ip) -#define snmp_delete_arpidx_tree(ni,ip) - -/* IP */ -#define snmp_inc_ipinreceives() -#define snmp_inc_ipinhdrerrors() -#define snmp_inc_ipinaddrerrors() -#define snmp_inc_ipforwdatagrams() -#define snmp_inc_ipinunknownprotos() -#define snmp_inc_ipindiscards() -#define snmp_inc_ipindelivers() -#define snmp_inc_ipoutrequests() -#define snmp_inc_ipoutdiscards() -#define snmp_inc_ipoutnoroutes() -#define snmp_inc_ipreasmreqds() -#define snmp_inc_ipreasmoks() -#define snmp_inc_ipreasmfails() -#define snmp_inc_ipfragoks() -#define snmp_inc_ipfragfails() -#define snmp_inc_ipfragcreates() -#define snmp_inc_iproutingdiscards() -#define snmp_insert_ipaddridx_tree(ni) -#define snmp_delete_ipaddridx_tree(ni) -#define snmp_insert_iprteidx_tree(dflt, ni) -#define snmp_delete_iprteidx_tree(dflt, ni) - -/* ICMP */ -#define snmp_inc_icmpinmsgs() -#define snmp_inc_icmpinerrors()  -#define snmp_inc_icmpindestunreachs()  -#define snmp_inc_icmpintimeexcds() -#define snmp_inc_icmpinparmprobs()  -#define snmp_inc_icmpinsrcquenchs()  -#define snmp_inc_icmpinredirects()  -#define snmp_inc_icmpinechos()  -#define snmp_inc_icmpinechoreps() -#define snmp_inc_icmpintimestamps()  -#define snmp_inc_icmpintimestampreps() -#define snmp_inc_icmpinaddrmasks() -#define snmp_inc_icmpinaddrmaskreps() -#define snmp_inc_icmpoutmsgs() -#define snmp_inc_icmpouterrors() -#define snmp_inc_icmpoutdestunreachs()  -#define snmp_inc_icmpouttimeexcds()  -#define snmp_inc_icmpoutparmprobs() -#define snmp_inc_icmpoutsrcquenchs() -#define snmp_inc_icmpoutredirects()  -#define snmp_inc_icmpoutechos()  -#define snmp_inc_icmpoutechoreps() -#define snmp_inc_icmpouttimestamps() -#define snmp_inc_icmpouttimestampreps() -#define snmp_inc_icmpoutaddrmasks() -#define snmp_inc_icmpoutaddrmaskreps() -/* TCP */ -#define snmp_inc_tcpactiveopens() -#define snmp_inc_tcppassiveopens() -#define snmp_inc_tcpattemptfails() -#define snmp_inc_tcpestabresets() -#define snmp_inc_tcpinsegs() -#define snmp_inc_tcpoutsegs() -#define snmp_inc_tcpretranssegs() -#define snmp_inc_tcpinerrs() -#define snmp_inc_tcpoutrsts() - -/* UDP */ -#define snmp_inc_udpindatagrams() -#define snmp_inc_udpnoports() -#define snmp_inc_udpinerrors() -#define snmp_inc_udpoutdatagrams() -#define snmp_insert_udpidx_tree(pcb) -#define snmp_delete_udpidx_tree(pcb) - -/* SNMP */ -#define snmp_inc_snmpinpkts() -#define snmp_inc_snmpoutpkts() -#define snmp_inc_snmpinbadversions() -#define snmp_inc_snmpinbadcommunitynames() -#define snmp_inc_snmpinbadcommunityuses() -#define snmp_inc_snmpinasnparseerrs() -#define snmp_inc_snmpintoobigs() -#define snmp_inc_snmpinnosuchnames() -#define snmp_inc_snmpinbadvalues() -#define snmp_inc_snmpinreadonlys() -#define snmp_inc_snmpingenerrs() -#define snmp_add_snmpintotalreqvars(value) -#define snmp_add_snmpintotalsetvars(value) -#define snmp_inc_snmpingetrequests() -#define snmp_inc_snmpingetnexts() -#define snmp_inc_snmpinsetrequests() -#define snmp_inc_snmpingetresponses() -#define snmp_inc_snmpintraps() -#define snmp_inc_snmpouttoobigs() -#define snmp_inc_snmpoutnosuchnames() -#define snmp_inc_snmpoutbadvalues() -#define snmp_inc_snmpoutgenerrs() -#define snmp_inc_snmpoutgetrequests() -#define snmp_inc_snmpoutgetnexts() -#define snmp_inc_snmpoutsetrequests() -#define snmp_inc_snmpoutgetresponses() -#define snmp_inc_snmpouttraps() -#define snmp_get_snmpgrpid_ptr(oid) -#define snmp_set_snmpenableauthentraps(value) -#define snmp_get_snmpenableauthentraps(value) - -#endif /* LWIP_SNMP */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_SNMP_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_asn1.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_asn1.h deleted file mode 100644 index a40d5ef..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_asn1.h +++ /dev/null @@ -1,103 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * Abstract Syntax Notation One (ISO 8824, 8825) codec. - */ -  -/* - * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * Author: Christiaan Simons <christiaan.simons@axon.tv> - */ - -#ifndef __LWIP_SNMP_ASN1_H__ -#define __LWIP_SNMP_ASN1_H__ - -#include "lwip/opt.h" -#include "lwip/err.h" -#include "lwip/pbuf.h" -#include "lwip/snmp.h" - -#if LWIP_SNMP - -#ifdef __cplusplus -extern "C" { -#endif - -#define SNMP_ASN1_UNIV   (!0x80 | !0x40) -#define SNMP_ASN1_APPLIC (!0x80 |  0x40) -#define SNMP_ASN1_CONTXT ( 0x80 | !0x40) - -#define SNMP_ASN1_CONSTR (0x20) -#define SNMP_ASN1_PRIMIT (!0x20) - -/* universal tags */ -#define SNMP_ASN1_INTEG  2 -#define SNMP_ASN1_OC_STR 4 -#define SNMP_ASN1_NUL    5 -#define SNMP_ASN1_OBJ_ID 6 -#define SNMP_ASN1_SEQ    16 - -/* application specific (SNMP) tags */ -#define SNMP_ASN1_IPADDR 0    /* octet string size(4) */ -#define SNMP_ASN1_COUNTER 1   /* u32_t */ -#define SNMP_ASN1_GAUGE 2     /* u32_t */ -#define SNMP_ASN1_TIMETICKS 3 /* u32_t */ -#define SNMP_ASN1_OPAQUE 4    /* octet string */ - -/* context specific (SNMP) tags */ -#define SNMP_ASN1_PDU_GET_REQ 0 -#define SNMP_ASN1_PDU_GET_NEXT_REQ 1 -#define SNMP_ASN1_PDU_GET_RESP 2 -#define SNMP_ASN1_PDU_SET_REQ 3 -#define SNMP_ASN1_PDU_TRAP 4 - -err_t snmp_asn1_dec_type(struct pbuf *p, u16_t ofs, u8_t *type); -err_t snmp_asn1_dec_length(struct pbuf *p, u16_t ofs, u8_t *octets_used, u16_t *length); -err_t snmp_asn1_dec_u32t(struct pbuf *p, u16_t ofs, u16_t len, u32_t *value); -err_t snmp_asn1_dec_s32t(struct pbuf *p, u16_t ofs, u16_t len, s32_t *value); -err_t snmp_asn1_dec_oid(struct pbuf *p, u16_t ofs, u16_t len, struct snmp_obj_id *oid); -err_t snmp_asn1_dec_raw(struct pbuf *p, u16_t ofs, u16_t len, u16_t raw_len, u8_t *raw); - -void snmp_asn1_enc_length_cnt(u16_t length, u8_t *octets_needed); -void snmp_asn1_enc_u32t_cnt(u32_t value, u16_t *octets_needed); -void snmp_asn1_enc_s32t_cnt(s32_t value, u16_t *octets_needed); -void snmp_asn1_enc_oid_cnt(u8_t ident_len, s32_t *ident, u16_t *octets_needed); -err_t snmp_asn1_enc_type(struct pbuf *p, u16_t ofs, u8_t type); -err_t snmp_asn1_enc_length(struct pbuf *p, u16_t ofs, u16_t length); -err_t snmp_asn1_enc_u32t(struct pbuf *p, u16_t ofs, u8_t octets_needed, u32_t value); -err_t snmp_asn1_enc_s32t(struct pbuf *p, u16_t ofs, u8_t octets_needed, s32_t value); -err_t snmp_asn1_enc_oid(struct pbuf *p, u16_t ofs, u8_t ident_len, s32_t *ident); -err_t snmp_asn1_enc_raw(struct pbuf *p, u16_t ofs, u8_t raw_len, u8_t *raw); - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_SNMP */ - -#endif /* __LWIP_SNMP_ASN1_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_msg.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_msg.h deleted file mode 100644 index 6e50a61..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_msg.h +++ /dev/null @@ -1,313 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * SNMP Agent message handling structures. - */ - -/* - * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * Author: Christiaan Simons <christiaan.simons@axon.tv> - */ - -#ifndef __LWIP_SNMP_MSG_H__ -#define __LWIP_SNMP_MSG_H__ - -#include "lwip/opt.h" -#include "lwip/snmp.h" -#include "lwip/snmp_structs.h" - -#if LWIP_SNMP - -#if SNMP_PRIVATE_MIB -#include "private_mib.h" -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* The listen port of the SNMP agent. Clients have to make their requests to -   this port. Most standard clients won't work if you change this! */ -#ifndef SNMP_IN_PORT -#define SNMP_IN_PORT 161 -#endif -/* The remote port the SNMP agent sends traps to. Most standard trap sinks won't -   work if you change this! */ -#ifndef SNMP_TRAP_PORT -#define SNMP_TRAP_PORT 162 -#endif - -#define SNMP_ES_NOERROR 0 -#define SNMP_ES_TOOBIG 1 -#define SNMP_ES_NOSUCHNAME 2 -#define SNMP_ES_BADVALUE 3 -#define SNMP_ES_READONLY 4 -#define SNMP_ES_GENERROR 5 - -#define SNMP_GENTRAP_COLDSTART 0 -#define SNMP_GENTRAP_WARMSTART 1 -#define SNMP_GENTRAP_AUTHFAIL 4 -#define SNMP_GENTRAP_ENTERPRISESPC 6 - -struct snmp_varbind -{ -  /* next pointer, NULL for last in list */ -  struct snmp_varbind *next; -  /* previous pointer, NULL for first in list */ -  struct snmp_varbind *prev; - -  /* object identifier length (in s32_t) */ -  u8_t ident_len; -  /* object identifier array */ -  s32_t *ident; - -  /* object value ASN1 type */ -  u8_t value_type; -  /* object value length (in u8_t) */ -  u8_t value_len; -  /* object value */ -  void *value; - -  /* encoding varbind seq length length */ -  u8_t seqlenlen; -  /* encoding object identifier length length */ -  u8_t olenlen; -  /* encoding object value length length */ -  u8_t vlenlen; -  /* encoding varbind seq length */ -  u16_t seqlen; -  /* encoding object identifier length */ -  u16_t olen; -  /* encoding object value length */ -  u16_t vlen; -}; - -struct snmp_varbind_root -{ -  struct snmp_varbind *head; -  struct snmp_varbind *tail; -  /* number of variable bindings in list */ -  u8_t count; -  /* encoding varbind-list seq length length */ -  u8_t seqlenlen; -  /* encoding varbind-list seq length */ -  u16_t seqlen; -}; - -/** output response message header length fields */ -struct snmp_resp_header_lengths -{ -  /* encoding error-index length length */ -  u8_t erridxlenlen; -  /* encoding error-status length length */ -  u8_t errstatlenlen; -  /* encoding request id length length */ -  u8_t ridlenlen; -  /* encoding pdu length length */ -  u8_t pdulenlen; -  /* encoding community length length */ -  u8_t comlenlen; -  /* encoding version length length */ -  u8_t verlenlen; -  /* encoding sequence length length */ -  u8_t seqlenlen; - -  /* encoding error-index length */ -  u16_t erridxlen; -  /* encoding error-status length */ -  u16_t errstatlen; -  /* encoding request id length */ -  u16_t ridlen; -  /* encoding pdu length */ -  u16_t pdulen; -  /* encoding community length */ -  u16_t comlen; -  /* encoding version length */ -  u16_t verlen; -  /* encoding sequence length */ -  u16_t seqlen; -}; - -/** output response message header length fields */ -struct snmp_trap_header_lengths -{ -  /* encoding timestamp length length */ -  u8_t tslenlen; -  /* encoding specific-trap length length */ -  u8_t strplenlen; -  /* encoding generic-trap length length */ -  u8_t gtrplenlen; -  /* encoding agent-addr length length */ -  u8_t aaddrlenlen; -  /* encoding enterprise-id length length */ -  u8_t eidlenlen; -  /* encoding pdu length length */ -  u8_t pdulenlen; -  /* encoding community length length */ -  u8_t comlenlen; -  /* encoding version length length */ -  u8_t verlenlen; -  /* encoding sequence length length */ -  u8_t seqlenlen; - -  /* encoding timestamp length */ -  u16_t tslen; -  /* encoding specific-trap length */ -  u16_t strplen; -  /* encoding generic-trap length */ -  u16_t gtrplen; -  /* encoding agent-addr length */ -  u16_t aaddrlen; -  /* encoding enterprise-id length */ -  u16_t eidlen; -  /* encoding pdu length */ -  u16_t pdulen; -  /* encoding community length */ -  u16_t comlen; -  /* encoding version length */ -  u16_t verlen; -  /* encoding sequence length */ -  u16_t seqlen; -}; - -/* Accepting new SNMP messages. */ -#define SNMP_MSG_EMPTY                 0 -/* Search for matching object for variable binding. */ -#define SNMP_MSG_SEARCH_OBJ            1 -/* Perform SNMP operation on in-memory object. -   Pass-through states, for symmetry only. */ -#define SNMP_MSG_INTERNAL_GET_OBJDEF   2 -#define SNMP_MSG_INTERNAL_GET_VALUE    3 -#define SNMP_MSG_INTERNAL_SET_TEST     4 -#define SNMP_MSG_INTERNAL_GET_OBJDEF_S 5 -#define SNMP_MSG_INTERNAL_SET_VALUE    6 -/* Perform SNMP operation on object located externally. -   In theory this could be used for building a proxy agent. -   Practical use is for an enterprise spc. app. gateway. */ -#define SNMP_MSG_EXTERNAL_GET_OBJDEF   7 -#define SNMP_MSG_EXTERNAL_GET_VALUE    8 -#define SNMP_MSG_EXTERNAL_SET_TEST     9 -#define SNMP_MSG_EXTERNAL_GET_OBJDEF_S 10 -#define SNMP_MSG_EXTERNAL_SET_VALUE    11 - -#define SNMP_COMMUNITY_STR_LEN 64 -struct snmp_msg_pstat -{ -  /* lwIP local port (161) binding */ -  struct udp_pcb *pcb; -  /* source IP address */ -  struct ip_addr sip; -  /* source UDP port */ -  u16_t sp; -  /* request type */ -  u8_t rt; -  /* request ID */ -  s32_t rid; -  /* error status */ -  s32_t error_status; -  /* error index */ -  s32_t error_index; -  /* community name (zero terminated) */ -  u8_t community[SNMP_COMMUNITY_STR_LEN + 1]; -  /* community string length (exclusive zero term) */ -  u8_t com_strlen; -  /* one out of MSG_EMPTY, MSG_DEMUX, MSG_INTERNAL, MSG_EXTERNAL_x */ -  u8_t state; -  /* saved arguments for MSG_EXTERNAL_x */ -  struct mib_external_node *ext_mib_node; -  struct snmp_name_ptr ext_name_ptr; -  struct obj_def ext_object_def; -  struct snmp_obj_id ext_oid; -  /* index into input variable binding list */ -  u8_t vb_idx; -  /* ptr into input variable binding list */ -  struct snmp_varbind *vb_ptr; -  /* list of variable bindings from input */ -  struct snmp_varbind_root invb; -  /* list of variable bindings to output */ -  struct snmp_varbind_root outvb; -  /* output response lengths used in ASN encoding */ -  struct snmp_resp_header_lengths rhl; -}; - -struct snmp_msg_trap -{ -  /* lwIP local port (161) binding */ -  struct udp_pcb *pcb; -  /* destination IP address in network order */ -  struct ip_addr dip; - -  /* source enterprise ID (sysObjectID) */ -  struct snmp_obj_id *enterprise; -  /* source IP address, raw network order format */ -  u8_t sip_raw[4]; -  /* generic trap code */ -  u32_t gen_trap; -  /* specific trap code */ -  u32_t spc_trap; -  /* timestamp */ -  u32_t ts; -  /* list of variable bindings to output */ -  struct snmp_varbind_root outvb; -  /* output trap lengths used in ASN encoding */ -  struct snmp_trap_header_lengths thl; -}; - -/** Agent Version constant, 0 = v1 oddity */ -extern const s32_t snmp_version; -/** Agent default "public" community string */ -extern const char snmp_publiccommunity[7]; - -extern struct snmp_msg_trap trap_msg; - -/** Agent setup, start listening to port 161. */ -void snmp_init(void); -void snmp_trap_dst_enable(u8_t dst_idx, u8_t enable); -void snmp_trap_dst_ip_set(u8_t dst_idx, struct ip_addr *dst); - -/** Varbind-list functions. */ -struct snmp_varbind* snmp_varbind_alloc(struct snmp_obj_id *oid, u8_t type, u8_t len); -void snmp_varbind_free(struct snmp_varbind *vb); -void snmp_varbind_list_free(struct snmp_varbind_root *root); -void snmp_varbind_tail_add(struct snmp_varbind_root *root, struct snmp_varbind *vb); -struct snmp_varbind* snmp_varbind_tail_remove(struct snmp_varbind_root *root); - -/** Handle an internal (recv) or external (private response) event. */ -void snmp_msg_event(u8_t request_id); -err_t snmp_send_response(struct snmp_msg_pstat *m_stat); -err_t snmp_send_trap(s8_t generic_trap, struct snmp_obj_id *eoid, s32_t specific_trap); -void snmp_coldstart_trap(void); -void snmp_authfail_trap(void); - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_SNMP */ - -#endif /* __LWIP_SNMP_MSG_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_structs.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_structs.h deleted file mode 100644 index 93f4ea3..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_structs.h +++ /dev/null @@ -1,264 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * Generic MIB tree structures. - * - * @todo namespace prefixes - */ - -/* - * Copyright (c) 2006 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * Author: Christiaan Simons <christiaan.simons@axon.tv> - */ - -#ifndef __LWIP_SNMP_STRUCTS_H__ -#define __LWIP_SNMP_STRUCTS_H__ - -#include "lwip/opt.h" - -#if LWIP_SNMP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/snmp.h" - -#if SNMP_PRIVATE_MIB -#include "private_mib.h" -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* MIB object instance */ -#define MIB_OBJECT_NONE 0  -#define MIB_OBJECT_SCALAR 1 -#define MIB_OBJECT_TAB 2 - -/* MIB object access */ -#define MIB_OBJECT_READ_ONLY 0 -#define MIB_OBJECT_READ_WRITE 1 -#define MIB_OBJECT_WRITE_ONLY 2 -#define MIB_OBJECT_NOT_ACCESSIBLE 3 - -/** object definition returned by (get_object_def)() */ -struct obj_def -{ -  /* MIB_OBJECT_NONE (0), MIB_OBJECT_SCALAR (1), MIB_OBJECT_TAB (2) */ -  u8_t instance; -  /* 0 read-only, 1 read-write, 2 write-only, 3 not-accessible */ -  u8_t access; -  /* ASN type for this object */ -  u8_t asn_type; -  /* value length (host length) */ -  u16_t v_len; -  /* length of instance part of supplied object identifier */ -  u8_t  id_inst_len; -  /* instance part of supplied object identifier */ -  s32_t *id_inst_ptr; -}; - -struct snmp_name_ptr -{ -  u8_t ident_len; -  s32_t *ident; -}; - -/** MIB const scalar (.0) node */ -#define MIB_NODE_SC 0x01 -/** MIB const array node */ -#define MIB_NODE_AR 0x02 -/** MIB array node (mem_malloced from RAM) */ -#define MIB_NODE_RA 0x03 -/** MIB list root node (mem_malloced from RAM) */ -#define MIB_NODE_LR 0x04 -/** MIB node for external objects */ -#define MIB_NODE_EX 0x05 - -/** node "base class" layout, the mandatory fields for a node  */ -struct mib_node -{ -  /** returns struct obj_def for the given object identifier */ -  void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); -  /** returns object value for the given object identifier, -     @note the caller must allocate at least len bytes for the value */ -  void (*get_value)(struct obj_def *od, u16_t len, void *value); -  /** tests length and/or range BEFORE setting */ -  u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); -  /** sets object value, only to be called when set_test()  */ -  void (*set_value)(struct obj_def *od, u16_t len, void *value);   -  /** One out of MIB_NODE_AR, MIB_NODE_LR or MIB_NODE_EX */ -  const u8_t node_type; -  /* array or max list length */ -  const u16_t maxlength; -}; - -/** derived node for scalars .0 index */ -typedef struct mib_node mib_scalar_node; - -/** derived node, points to a fixed size const array -    of sub-identifiers plus a 'child' pointer */ -struct mib_array_node -{ -  /* inherited "base class" members */ -  void (* const get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); -  void (* const get_value)(struct obj_def *od, u16_t len, void *value); -  u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); -  void (*set_value)(struct obj_def *od, u16_t len, void *value); - -  const u8_t node_type; -  const u16_t maxlength; - -  /* aditional struct members */ -  const s32_t *objid; -  struct mib_node* const *nptr; -}; - -/** derived node, points to a fixed size mem_malloced array -    of sub-identifiers plus a 'child' pointer */ -struct mib_ram_array_node -{ -  /* inherited "base class" members */ -  void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); -  void (*get_value)(struct obj_def *od, u16_t len, void *value); -  u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); -  void (*set_value)(struct obj_def *od, u16_t len, void *value); - -  u8_t node_type; -  u16_t maxlength; - -  /* aditional struct members */ -  s32_t *objid; -  struct mib_node **nptr; -}; - -struct mib_list_node -{ -  struct mib_list_node *prev;   -  struct mib_list_node *next; -  s32_t objid; -  struct mib_node *nptr; -}; - -/** derived node, points to a doubly linked list -    of sub-identifiers plus a 'child' pointer */ -struct mib_list_rootnode -{ -  /* inherited "base class" members */ -  void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); -  void (*get_value)(struct obj_def *od, u16_t len, void *value); -  u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); -  void (*set_value)(struct obj_def *od, u16_t len, void *value); - -  u8_t node_type; -  u16_t maxlength; - -  /* aditional struct members */ -  struct mib_list_node *head; -  struct mib_list_node *tail; -  /* counts list nodes in list  */ -  u16_t count; -}; - -/** derived node, has access functions for mib object in external memory or device -    using 'tree_level' and 'idx', with a range 0 .. (level_length() - 1) */ -struct mib_external_node -{ -  /* inherited "base class" members */ -  void (*get_object_def)(u8_t ident_len, s32_t *ident, struct obj_def *od); -  void (*get_value)(struct obj_def *od, u16_t len, void *value); -  u8_t (*set_test)(struct obj_def *od, u16_t len, void *value); -  void (*set_value)(struct obj_def *od, u16_t len, void *value); - -  u8_t node_type; -  u16_t maxlength; - -  /* aditional struct members */ -  /** points to an extenal (in memory) record of some sort of addressing -      information, passed to and interpreted by the funtions below */ -  void* addr_inf; -  /** tree levels under this node */ -  u8_t tree_levels; -  /** number of objects at this level */ -  u16_t (*level_length)(void* addr_inf, u8_t level); -  /** compares object sub identifier with external id -      return zero when equal, nonzero when unequal */ -  s32_t (*ident_cmp)(void* addr_inf, u8_t level, u16_t idx, s32_t sub_id); -  void (*get_objid)(void* addr_inf, u8_t level, u16_t idx, s32_t *sub_id); - -  /** async Questions */ -  void (*get_object_def_q)(void* addr_inf, u8_t rid, u8_t ident_len, s32_t *ident); -  void (*get_value_q)(u8_t rid, struct obj_def *od); -  void (*set_test_q)(u8_t rid, struct obj_def *od); -  void (*set_value_q)(u8_t rid, struct obj_def *od, u16_t len, void *value); -  /** async Answers */ -  void (*get_object_def_a)(u8_t rid, u8_t ident_len, s32_t *ident, struct obj_def *od); -  void (*get_value_a)(u8_t rid, struct obj_def *od, u16_t len, void *value); -  u8_t (*set_test_a)(u8_t rid, struct obj_def *od, u16_t len, void *value); -  void (*set_value_a)(u8_t rid, struct obj_def *od, u16_t len, void *value); -  /** async Panic Close (agent returns error reply,  -      e.g. used for external transaction cleanup) */ -  void (*get_object_def_pc)(u8_t rid, u8_t ident_len, s32_t *ident); -  void (*get_value_pc)(u8_t rid, struct obj_def *od); -  void (*set_test_pc)(u8_t rid, struct obj_def *od); -  void (*set_value_pc)(u8_t rid, struct obj_def *od); -}; - -/** export MIB tree from mib2.c */ -extern const struct mib_array_node internet; - -/** dummy function pointers for non-leaf MIB nodes from mib2.c */ -void noleafs_get_object_def(u8_t ident_len, s32_t *ident, struct obj_def *od); -void noleafs_get_value(struct obj_def *od, u16_t len, void *value); -u8_t noleafs_set_test(struct obj_def *od, u16_t len, void *value); -void noleafs_set_value(struct obj_def *od, u16_t len, void *value); - -void snmp_oidtoip(s32_t *ident, struct ip_addr *ip); -void snmp_iptooid(struct ip_addr *ip, s32_t *ident); -void snmp_ifindextonetif(s32_t ifindex, struct netif **netif); -void snmp_netiftoifindex(struct netif *netif, s32_t *ifidx); - -struct mib_list_node* snmp_mib_ln_alloc(s32_t id); -void snmp_mib_ln_free(struct mib_list_node *ln); -struct mib_list_rootnode* snmp_mib_lrn_alloc(void); -void snmp_mib_lrn_free(struct mib_list_rootnode *lrn); - -s8_t snmp_mib_node_insert(struct mib_list_rootnode *rn, s32_t objid, struct mib_list_node **insn); -s8_t snmp_mib_node_find(struct mib_list_rootnode *rn, s32_t objid, struct mib_list_node **fn); -struct mib_list_rootnode *snmp_mib_node_delete(struct mib_list_rootnode *rn, struct mib_list_node *n); - -struct mib_node* snmp_search_tree(struct mib_node *node, u8_t ident_len, s32_t *ident, struct snmp_name_ptr *np); -struct mib_node* snmp_expand_tree(struct mib_node *node, u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret); -u8_t snmp_iso_prefix_tst(u8_t ident_len, s32_t *ident); -u8_t snmp_iso_prefix_expand(u8_t ident_len, s32_t *ident, struct snmp_obj_id *oidret); - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_SNMP */ - -#endif /* __LWIP_SNMP_STRUCTS_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sockets.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sockets.h deleted file mode 100644 index 675c1f7..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sockets.h +++ /dev/null @@ -1,359 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ - - -#ifndef __LWIP_SOCKETS_H__ -#define __LWIP_SOCKETS_H__ - -#include "lwip/opt.h" - -#if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ - -#include <stddef.h> /* for size_t */ - -#include "lwip/ip_addr.h" -#include "lwip/inet.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* members are in network byte order */ -struct sockaddr_in { -  u8_t sin_len; -  u8_t sin_family; -  u16_t sin_port; -  struct in_addr sin_addr; -  char sin_zero[8]; -}; - -struct sockaddr { -  u8_t sa_len; -  u8_t sa_family; -  char sa_data[14]; -}; - -#ifndef socklen_t -#  define socklen_t u32_t -#endif - -/* Socket protocol types (TCP/UDP/RAW) */ -#define SOCK_STREAM     1 -#define SOCK_DGRAM      2 -#define SOCK_RAW        3 - -/* - * Option flags per-socket. These must match the SOF_ flags in ip.h! - */ -#define  SO_DEBUG       0x0001 /* Unimplemented: turn on debugging info recording */ -#define  SO_ACCEPTCONN  0x0002 /* socket has had listen() */ -#define  SO_REUSEADDR   0x0004 /* Unimplemented: allow local address reuse */ -#define  SO_KEEPALIVE   0x0008 /* keep connections alive */ -#define  SO_DONTROUTE   0x0010 /* Unimplemented: just use interface addresses */ -#define  SO_BROADCAST   0x0020 /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */ -#define  SO_USELOOPBACK 0x0040 /* Unimplemented: bypass hardware when possible */ -#define  SO_LINGER      0x0080 /* linger on close if data present */ -#define  SO_OOBINLINE   0x0100 /* Unimplemented: leave received OOB data in line */ -#define  SO_REUSEPORT   0x0200 /* Unimplemented: allow local address & port reuse */ - -#define SO_DONTLINGER   ((int)(~SO_LINGER)) - -/* - * Additional options, not kept in so_options. - */ -#define SO_SNDBUF    0x1001    /* Unimplemented: send buffer size */ -#define SO_RCVBUF    0x1002    /* receive buffer size */ -#define SO_SNDLOWAT  0x1003    /* Unimplemented: send low-water mark */ -#define SO_RCVLOWAT  0x1004    /* Unimplemented: receive low-water mark */ -#define SO_SNDTIMEO  0x1005    /* Unimplemented: send timeout */ -#define SO_RCVTIMEO  0x1006    /* receive timeout */ -#define SO_ERROR     0x1007    /* get error status and clear */ -#define SO_TYPE      0x1008    /* get socket type */ -#define SO_CONTIMEO  0x1009    /* Unimplemented: connect timeout */ -#define SO_NO_CHECK  0x100a    /* don't create UDP checksum */ - - -/* - * Structure used for manipulating linger option. - */ -struct linger { -       int l_onoff;                /* option on/off */ -       int l_linger;               /* linger time */ -}; - -/* - * Level number for (get/set)sockopt() to apply to socket itself. - */ -#define  SOL_SOCKET  0xfff    /* options for socket level */ - - -#define AF_UNSPEC       0 -#define AF_INET         2 -#define PF_INET         AF_INET -#define PF_UNSPEC       AF_UNSPEC - -#define IPPROTO_IP      0 -#define IPPROTO_TCP     6 -#define IPPROTO_UDP     17 -#define IPPROTO_UDPLITE 136 - -/* Flags we can use with send and recv. */ -#define MSG_PEEK       0x01    /* Peeks at an incoming message */ -#define MSG_WAITALL    0x02    /* Unimplemented: Requests that the function block until the full amount of data requested can be returned */ -#define MSG_OOB        0x04    /* Unimplemented: Requests out-of-band data. The significance and semantics of out-of-band data are protocol-specific */ -#define MSG_DONTWAIT   0x08    /* Nonblocking i/o for this operation only */ -#define MSG_MORE       0x10    /* Sender will send more */ - - -/* - * Options for level IPPROTO_IP - */ -#define IP_TOS             1 -#define IP_TTL             2 - -#if LWIP_TCP -/* - * Options for level IPPROTO_TCP - */ -#define TCP_NODELAY    0x01    /* don't delay send to coalesce packets */ -#define TCP_KEEPALIVE  0x02    /* send KEEPALIVE probes when idle for pcb->keep_idle milliseconds */ -#define TCP_KEEPIDLE   0x03    /* set pcb->keep_idle  - Same as TCP_KEEPALIVE, but use seconds for get/setsockopt */ -#define TCP_KEEPINTVL  0x04    /* set pcb->keep_intvl - Use seconds for get/setsockopt */ -#define TCP_KEEPCNT    0x05    /* set pcb->keep_cnt   - Use number of probes sent for get/setsockopt */ -#endif /* LWIP_TCP */ - -#if LWIP_UDP && LWIP_UDPLITE -/* - * Options for level IPPROTO_UDPLITE - */ -#define UDPLITE_SEND_CSCOV 0x01 /* sender checksum coverage */ -#define UDPLITE_RECV_CSCOV 0x02 /* minimal receiver checksum coverage */ -#endif /* LWIP_UDP && LWIP_UDPLITE*/ - - -#if LWIP_IGMP -/* - * Options and types for UDP multicast traffic handling - */ -#define IP_ADD_MEMBERSHIP  3 -#define IP_DROP_MEMBERSHIP 4 -#define IP_MULTICAST_TTL   5 -#define IP_MULTICAST_IF    6 -#define IP_MULTICAST_LOOP  7 - -typedef struct ip_mreq { -    struct in_addr imr_multiaddr; /* IP multicast address of group */ -    struct in_addr imr_interface; /* local IP address of interface */ -} ip_mreq; -#endif /* LWIP_IGMP */ - -/* - * The Type of Service provides an indication of the abstract - * parameters of the quality of service desired.  These parameters are - * to be used to guide the selection of the actual service parameters - * when transmitting a datagram through a particular network.  Several - * networks offer service precedence, which somehow treats high - * precedence traffic as more important than other traffic (generally - * by accepting only traffic above a certain precedence at time of high - * load).  The major choice is a three way tradeoff between low-delay, - * high-reliability, and high-throughput. - * The use of the Delay, Throughput, and Reliability indications may - * increase the cost (in some sense) of the service.  In many networks - * better performance for one of these parameters is coupled with worse - * performance on another.  Except for very unusual cases at most two - * of these three indications should be set. - */ -#define IPTOS_TOS_MASK          0x1E -#define IPTOS_TOS(tos)          ((tos) & IPTOS_TOS_MASK) -#define IPTOS_LOWDELAY          0x10 -#define IPTOS_THROUGHPUT        0x08 -#define IPTOS_RELIABILITY       0x04 -#define IPTOS_LOWCOST           0x02 -#define IPTOS_MINCOST           IPTOS_LOWCOST - -/* - * The Network Control precedence designation is intended to be used - * within a network only.  The actual use and control of that - * designation is up to each network. The Internetwork Control - * designation is intended for use by gateway control originators only. - * If the actual use of these precedence designations is of concern to - * a particular network, it is the responsibility of that network to - * control the access to, and use of, those precedence designations. - */ -#define IPTOS_PREC_MASK                 0xe0 -#define IPTOS_PREC(tos)                ((tos) & IPTOS_PREC_MASK) -#define IPTOS_PREC_NETCONTROL           0xe0 -#define IPTOS_PREC_INTERNETCONTROL      0xc0 -#define IPTOS_PREC_CRITIC_ECP           0xa0 -#define IPTOS_PREC_FLASHOVERRIDE        0x80 -#define IPTOS_PREC_FLASH                0x60 -#define IPTOS_PREC_IMMEDIATE            0x40 -#define IPTOS_PREC_PRIORITY             0x20 -#define IPTOS_PREC_ROUTINE              0x00 - - -/* - * Commands for ioctlsocket(),  taken from the BSD file fcntl.h. - * lwip_ioctl only supports FIONREAD and FIONBIO, for now - * - * Ioctl's have the command encoded in the lower word, - * and the size of any in or out parameters in the upper - * word.  The high 2 bits of the upper word are used - * to encode the in/out status of the parameter; for now - * we restrict parameters to at most 128 bytes. - */ -#if !defined(FIONREAD) || !defined(FIONBIO) -#define IOCPARM_MASK    0x7fU           /* parameters must be < 128 bytes */ -#define IOC_VOID        0x20000000UL    /* no parameters */ -#define IOC_OUT         0x40000000UL    /* copy out parameters */ -#define IOC_IN          0x80000000UL    /* copy in parameters */ -#define IOC_INOUT       (IOC_IN|IOC_OUT) -                                        /* 0x20000000 distinguishes new & -                                           old ioctl's */ -#define _IO(x,y)        (IOC_VOID|((x)<<8)|(y)) - -#define _IOR(x,y,t)     (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) - -#define _IOW(x,y,t)     (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) -#endif /* !defined(FIONREAD) || !defined(FIONBIO) */ - -#ifndef FIONREAD -#define FIONREAD    _IOR('f', 127, unsigned long) /* get # bytes to read */ -#endif -#ifndef FIONBIO -#define FIONBIO     _IOW('f', 126, unsigned long) /* set/clear non-blocking i/o */ -#endif - -/* Socket I/O Controls: unimplemented */ -#ifndef SIOCSHIWAT -#define SIOCSHIWAT  _IOW('s',  0, unsigned long)  /* set high watermark */ -#define SIOCGHIWAT  _IOR('s',  1, unsigned long)  /* get high watermark */ -#define SIOCSLOWAT  _IOW('s',  2, unsigned long)  /* set low watermark */ -#define SIOCGLOWAT  _IOR('s',  3, unsigned long)  /* get low watermark */ -#define SIOCATMARK  _IOR('s',  7, unsigned long)  /* at oob mark? */ -#endif - -/* Socket flags: */ -#ifndef O_NONBLOCK -#define O_NONBLOCK    04000U -#endif - -/* FD_SET used for lwip_select */ -#ifndef FD_SET -  #undef  FD_SETSIZE -  /* Make FD_SETSIZE match NUM_SOCKETS in socket.c */ -  #define FD_SETSIZE    MEMP_NUM_NETCONN -  #define FD_SET(n, p)  ((p)->fd_bits[(n)/8] |=  (1 << ((n) & 7))) -  #define FD_CLR(n, p)  ((p)->fd_bits[(n)/8] &= ~(1 << ((n) & 7))) -  #define FD_ISSET(n,p) ((p)->fd_bits[(n)/8] &   (1 << ((n) & 7))) -  #define FD_ZERO(p)    memset((void*)(p),0,sizeof(*(p))) - -  typedef struct fd_set { -          unsigned char fd_bits [(FD_SETSIZE+7)/8]; -        } fd_set; - -#endif /* FD_SET */ - -/** LWIP_TIMEVAL_PRIVATE: if you want to use the struct timeval provided - * by your system, set this to 0 and include <sys/time.h> in cc.h */  -#ifndef LWIP_TIMEVAL_PRIVATE -#define LWIP_TIMEVAL_PRIVATE 1 -#endif - -#if LWIP_TIMEVAL_PRIVATE -struct timeval { -  long    tv_sec;         /* seconds */ -  long    tv_usec;        /* and microseconds */ -}; -#endif /* LWIP_TIMEVAL_PRIVATE */ - -void lwip_socket_init(void); - -int lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen); -int lwip_bind(int s, const struct sockaddr *name, socklen_t namelen); -int lwip_shutdown(int s, int how); -int lwip_getpeername (int s, struct sockaddr *name, socklen_t *namelen); -int lwip_getsockname (int s, struct sockaddr *name, socklen_t *namelen); -int lwip_getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen); -int lwip_setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen); -int lwip_close(int s); -int lwip_connect(int s, const struct sockaddr *name, socklen_t namelen); -int lwip_listen(int s, int backlog); -int lwip_recv(int s, void *mem, size_t len, int flags); -int lwip_read(int s, void *mem, size_t len); -int lwip_recvfrom(int s, void *mem, size_t len, int flags, -      struct sockaddr *from, socklen_t *fromlen); -int lwip_send(int s, const void *dataptr, size_t size, int flags); -int lwip_sendto(int s, const void *dataptr, size_t size, int flags, -    const struct sockaddr *to, socklen_t tolen); -int lwip_socket(int domain, int type, int protocol); -int lwip_write(int s, const void *dataptr, size_t size); -int lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, -                struct timeval *timeout); -int lwip_ioctl(int s, long cmd, void *argp); - -#if LWIP_COMPAT_SOCKETS -#define accept(a,b,c)         lwip_accept(a,b,c) -#define bind(a,b,c)           lwip_bind(a,b,c) -#define shutdown(a,b)         lwip_shutdown(a,b) -#define closesocket(s)        lwip_close(s) -#define connect(a,b,c)        lwip_connect(a,b,c) -#define getsockname(a,b,c)    lwip_getsockname(a,b,c) -#define getpeername(a,b,c)    lwip_getpeername(a,b,c) -#define setsockopt(a,b,c,d,e) lwip_setsockopt(a,b,c,d,e) -#define getsockopt(a,b,c,d,e) lwip_getsockopt(a,b,c,d,e) -#define listen(a,b)           lwip_listen(a,b) -#define recv(a,b,c,d)         lwip_recv(a,b,c,d) -#define recvfrom(a,b,c,d,e,f) lwip_recvfrom(a,b,c,d,e,f) -#define send(a,b,c,d)         lwip_send(a,b,c,d) -#define sendto(a,b,c,d,e,f)   lwip_sendto(a,b,c,d,e,f) -#define socket(a,b,c)         lwip_socket(a,b,c) -#define select(a,b,c,d,e)     lwip_select(a,b,c,d,e) -#define ioctlsocket(a,b,c)    lwip_ioctl(a,b,c) - -#if LWIP_POSIX_SOCKETS_IO_NAMES -#define read(a,b,c)           lwip_read(a,b,c) -#define write(a,b,c)          lwip_write(a,b,c) -#define close(s)              lwip_close(s) -#endif /* LWIP_POSIX_SOCKETS_IO_NAMES */ - -#endif /* LWIP_COMPAT_SOCKETS */ - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_SOCKET */ - -#endif /* __LWIP_SOCKETS_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/stats.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/stats.h deleted file mode 100644 index 4aec5e5..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/stats.h +++ /dev/null @@ -1,285 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_STATS_H__ -#define __LWIP_STATS_H__ - -#include "lwip/opt.h" - -#include "lwip/mem.h" -#include "lwip/memp.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if LWIP_STATS - -#ifndef LWIP_STATS_LARGE -#define LWIP_STATS_LARGE 0 -#endif - -#if LWIP_STATS_LARGE -#define STAT_COUNTER     u32_t -#define STAT_COUNTER_F   U32_F -#else -#define STAT_COUNTER     u16_t -#define STAT_COUNTER_F   U16_F -#endif  - -struct stats_proto { -  STAT_COUNTER xmit;             /* Transmitted packets. */ -  STAT_COUNTER recv;             /* Received packets. */ -  STAT_COUNTER fw;               /* Forwarded packets. */ -  STAT_COUNTER drop;             /* Dropped packets. */ -  STAT_COUNTER chkerr;           /* Checksum error. */ -  STAT_COUNTER lenerr;           /* Invalid length error. */ -  STAT_COUNTER memerr;           /* Out of memory error. */ -  STAT_COUNTER rterr;            /* Routing error. */ -  STAT_COUNTER proterr;          /* Protocol error. */ -  STAT_COUNTER opterr;           /* Error in options. */ -  STAT_COUNTER err;              /* Misc error. */ -  STAT_COUNTER cachehit; -}; - -struct stats_igmp { -  STAT_COUNTER lenerr;           /* Invalid length error. */ -  STAT_COUNTER chkerr;           /* Checksum error. */ -  STAT_COUNTER v1_rxed;          /* */ -  STAT_COUNTER join_sent;        /* */ -  STAT_COUNTER leave_sent;       /* */ -  STAT_COUNTER unicast_query;    /* */ -  STAT_COUNTER report_sent;      /* */ -  STAT_COUNTER report_rxed;      /* */ -  STAT_COUNTER group_query_rxed; /* */ -}; - -struct stats_mem { -  mem_size_t avail; -  mem_size_t used; -  mem_size_t max; -  STAT_COUNTER err; -  STAT_COUNTER illegal; -}; - -struct stats_syselem { -  STAT_COUNTER used; -  STAT_COUNTER max; -  STAT_COUNTER err; -}; - -struct stats_sys { -  struct stats_syselem sem; -  struct stats_syselem mbox; -}; - -struct stats_ { -#if LINK_STATS -  struct stats_proto link; -#endif -#if ETHARP_STATS -  struct stats_proto etharp; -#endif -#if IPFRAG_STATS -  struct stats_proto ip_frag; -#endif -#if IP_STATS -  struct stats_proto ip; -#endif -#if ICMP_STATS -  struct stats_proto icmp; -#endif -#if IGMP_STATS -  struct stats_igmp igmp; -#endif -#if UDP_STATS -  struct stats_proto udp; -#endif -#if TCP_STATS -  struct stats_proto tcp; -#endif -#if MEM_STATS -  struct stats_mem mem; -#endif -#if MEMP_STATS -  struct stats_mem memp[MEMP_MAX]; -#endif -#if SYS_STATS -  struct stats_sys sys; -#endif -}; - -extern struct stats_ lwip_stats; - -#define stats_init() /* Compatibility define, not init needed. */ - -#define STATS_INC(x) ++lwip_stats.x -#define STATS_DEC(x) --lwip_stats.x -#else -#define stats_init() -#define STATS_INC(x) -#define STATS_DEC(x) -#endif /* LWIP_STATS */ - -#if TCP_STATS -#define TCP_STATS_INC(x) STATS_INC(x) -#define TCP_STATS_DISPLAY() stats_display_proto(&lwip_stats.tcp, "TCP") -#else -#define TCP_STATS_INC(x) -#define TCP_STATS_DISPLAY() -#endif - -#if UDP_STATS -#define UDP_STATS_INC(x) STATS_INC(x) -#define UDP_STATS_DISPLAY() stats_display_proto(&lwip_stats.udp, "UDP") -#else -#define UDP_STATS_INC(x) -#define UDP_STATS_DISPLAY() -#endif - -#if ICMP_STATS -#define ICMP_STATS_INC(x) STATS_INC(x) -#define ICMP_STATS_DISPLAY() stats_display_proto(&lwip_stats.icmp, "ICMP") -#else -#define ICMP_STATS_INC(x) -#define ICMP_STATS_DISPLAY() -#endif - -#if IGMP_STATS -#define IGMP_STATS_INC(x) STATS_INC(x) -#define IGMP_STATS_DISPLAY() stats_display_igmp(&lwip_stats.igmp) -#else -#define IGMP_STATS_INC(x) -#define IGMP_STATS_DISPLAY() -#endif - -#if IP_STATS -#define IP_STATS_INC(x) STATS_INC(x) -#define IP_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip, "IP") -#else -#define IP_STATS_INC(x) -#define IP_STATS_DISPLAY() -#endif - -#if IPFRAG_STATS -#define IPFRAG_STATS_INC(x) STATS_INC(x) -#define IPFRAG_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip_frag, "IP_FRAG") -#else -#define IPFRAG_STATS_INC(x) -#define IPFRAG_STATS_DISPLAY() -#endif - -#if ETHARP_STATS -#define ETHARP_STATS_INC(x) STATS_INC(x) -#define ETHARP_STATS_DISPLAY() stats_display_proto(&lwip_stats.etharp, "ETHARP") -#else -#define ETHARP_STATS_INC(x) -#define ETHARP_STATS_DISPLAY() -#endif - -#if LINK_STATS -#define LINK_STATS_INC(x) STATS_INC(x) -#define LINK_STATS_DISPLAY() stats_display_proto(&lwip_stats.link, "LINK") -#else -#define LINK_STATS_INC(x) -#define LINK_STATS_DISPLAY() -#endif - -#if MEM_STATS -#define MEM_STATS_AVAIL(x, y) lwip_stats.mem.x = y -#define MEM_STATS_INC(x) STATS_INC(mem.x) -#define MEM_STATS_INC_USED(x, y) do { lwip_stats.mem.used += y; \ -                                    if (lwip_stats.mem.max < lwip_stats.mem.used) { \ -                                        lwip_stats.mem.max = lwip_stats.mem.used; \ -                                    } \ -                                 } while(0) -#define MEM_STATS_DEC_USED(x, y) lwip_stats.mem.x -= y -#define MEM_STATS_DISPLAY() stats_display_mem(&lwip_stats.mem, "HEAP") -#else -#define MEM_STATS_AVAIL(x, y) -#define MEM_STATS_INC(x) -#define MEM_STATS_INC_USED(x, y) -#define MEM_STATS_DEC_USED(x, y) -#define MEM_STATS_DISPLAY() -#endif - -#if MEMP_STATS -#define MEMP_STATS_AVAIL(x, i, y) lwip_stats.memp[i].x = y -#define MEMP_STATS_INC(x, i) STATS_INC(memp[i].x) -#define MEMP_STATS_DEC(x, i) STATS_DEC(memp[i].x) -#define MEMP_STATS_INC_USED(x, i) do { ++lwip_stats.memp[i].used; \ -                                    if (lwip_stats.memp[i].max < lwip_stats.memp[i].used) { \ -                                        lwip_stats.memp[i].max = lwip_stats.memp[i].used; \ -                                    } \ -                                 } while(0) -#define MEMP_STATS_DISPLAY(i) stats_display_memp(&lwip_stats.memp[i], i) -#else -#define MEMP_STATS_AVAIL(x, i, y) -#define MEMP_STATS_INC(x, i) -#define MEMP_STATS_DEC(x, i) -#define MEMP_STATS_INC_USED(x, i) -#define MEMP_STATS_DISPLAY(i) -#endif - -#if SYS_STATS -#define SYS_STATS_INC(x) STATS_INC(sys.x) -#define SYS_STATS_DEC(x) STATS_DEC(sys.x) -#define SYS_STATS_DISPLAY() stats_display_sys(&lwip_stats.sys) -#else -#define SYS_STATS_INC(x) -#define SYS_STATS_DEC(x) -#define SYS_STATS_DISPLAY() -#endif - -/* Display of statistics */ -#if LWIP_STATS_DISPLAY -void stats_display(void); -void stats_display_proto(struct stats_proto *proto, char *name); -void stats_display_igmp(struct stats_igmp *igmp); -void stats_display_mem(struct stats_mem *mem, char *name); -void stats_display_memp(struct stats_mem *mem, int index); -void stats_display_sys(struct stats_sys *sys); -#else -#define stats_display() -#define stats_display_proto(proto, name) -#define stats_display_igmp(igmp) -#define stats_display_mem(mem, name) -#define stats_display_memp(mem, index) -#define stats_display_sys(sys) -#endif /* LWIP_STATS_DISPLAY */ - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_STATS_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sys.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sys.h deleted file mode 100644 index 9a4f02a..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sys.h +++ /dev/null @@ -1,245 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_SYS_H__ -#define __LWIP_SYS_H__ - -#include "lwip/opt.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if NO_SYS - -/* For a totally minimal and standalone system, we provide null -   definitions of the sys_ functions. */ -typedef u8_t sys_sem_t; -typedef u8_t sys_mbox_t; -struct sys_timeo {u8_t dummy;}; - -#define sys_init() -#define sys_timeout(m,h,a) -#define sys_untimeout(m,a) -#define sys_sem_new(c) c -#define sys_sem_signal(s) -#define sys_sem_wait(s) -#define sys_sem_wait_timeout(s,t) -#define sys_arch_sem_wait(s,t) -#define sys_sem_free(s) -#define sys_mbox_new(s) 0 -#define sys_mbox_fetch(m,d) -#define sys_mbox_tryfetch(m,d) -#define sys_mbox_post(m,d) -#define sys_mbox_trypost(m,d) -#define sys_mbox_free(m) - -#define sys_thread_new(n,t,a,s,p) - -#else /* NO_SYS */ - -/** Return code for timeouts from sys_arch_mbox_fetch and sys_arch_sem_wait */ -#define SYS_ARCH_TIMEOUT 0xffffffffUL - -/* sys_mbox_tryfetch returns SYS_MBOX_EMPTY if appropriate. - * For now we use the same magic value, but we allow this to change in future. - */ -#define SYS_MBOX_EMPTY SYS_ARCH_TIMEOUT  - -#include "lwip/err.h" -#include "arch/sys_arch.h" - -typedef void (* sys_timeout_handler)(void *arg); - -struct sys_timeo { -  struct sys_timeo *next; -  u32_t time; -  sys_timeout_handler h; -  void *arg; -}; - -struct sys_timeouts { -  struct sys_timeo *next; -}; - -/* sys_init() must be called before anthing else. */ -void sys_init(void); - -/* - * sys_timeout(): - * - * Schedule a timeout a specified amount of milliseconds in the - * future. When the timeout occurs, the specified timeout handler will - * be called. The handler will be passed the "arg" argument when - * called. - * - */ -void sys_timeout(u32_t msecs, sys_timeout_handler h, void *arg); -void sys_untimeout(sys_timeout_handler h, void *arg); -struct sys_timeouts *sys_arch_timeouts(void); - -/* Semaphore functions. */ -sys_sem_t sys_sem_new(u8_t count); -void sys_sem_signal(sys_sem_t sem); -u32_t sys_arch_sem_wait(sys_sem_t sem, u32_t timeout); -void sys_sem_free(sys_sem_t sem); -void sys_sem_wait(sys_sem_t sem); -int sys_sem_wait_timeout(sys_sem_t sem, u32_t timeout); - -/* Time functions. */ -#ifndef sys_msleep -void sys_msleep(u32_t ms); /* only has a (close to) 1 jiffy resolution. */ -#endif -#ifndef sys_jiffies -u32_t sys_jiffies(void); /* since power up. */ -#endif - -/* Mailbox functions. */ -sys_mbox_t sys_mbox_new(int size); -void sys_mbox_post(sys_mbox_t mbox, void *msg); -err_t sys_mbox_trypost(sys_mbox_t mbox, void *msg); -u32_t sys_arch_mbox_fetch(sys_mbox_t mbox, void **msg, u32_t timeout); -#ifndef sys_arch_mbox_tryfetch /* Allow port to override with a macro */ -u32_t sys_arch_mbox_tryfetch(sys_mbox_t mbox, void **msg); -#endif -/* For now, we map straight to sys_arch implementation. */ -#define sys_mbox_tryfetch(mbox, msg) sys_arch_mbox_tryfetch(mbox, msg) -void sys_mbox_free(sys_mbox_t mbox); -void sys_mbox_fetch(sys_mbox_t mbox, void **msg); - -/* Thread functions. */ -sys_thread_t sys_thread_new(char *name, void (* thread)(void *arg), void *arg, int stacksize, int prio); - -#endif /* NO_SYS */ - -/** Returns the current time in milliseconds. */ -u32_t sys_now(void); - -/* Critical Region Protection */ -/* These functions must be implemented in the sys_arch.c file. -   In some implementations they can provide a more light-weight protection -   mechanism than using semaphores. Otherwise semaphores can be used for -   implementation */ -#ifndef SYS_ARCH_PROTECT -/** SYS_LIGHTWEIGHT_PROT - * define SYS_LIGHTWEIGHT_PROT in lwipopts.h if you want inter-task protection - * for certain critical regions during buffer allocation, deallocation and memory - * allocation and deallocation. - */ -#if SYS_LIGHTWEIGHT_PROT - -/** SYS_ARCH_DECL_PROTECT - * declare a protection variable. This macro will default to defining a variable of - * type sys_prot_t. If a particular port needs a different implementation, then - * this macro may be defined in sys_arch.h. - */ -#define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev -/** SYS_ARCH_PROTECT - * Perform a "fast" protect. This could be implemented by - * disabling interrupts for an embedded system or by using a semaphore or - * mutex. The implementation should allow calling SYS_ARCH_PROTECT when - * already protected. The old protection level is returned in the variable - * "lev". This macro will default to calling the sys_arch_protect() function - * which should be implemented in sys_arch.c. If a particular port needs a - * different implementation, then this macro may be defined in sys_arch.h - */ -#define SYS_ARCH_PROTECT(lev) lev = sys_arch_protect() -/** SYS_ARCH_UNPROTECT - * Perform a "fast" set of the protection level to "lev". This could be - * implemented by setting the interrupt level to "lev" within the MACRO or by - * using a semaphore or mutex.  This macro will default to calling the - * sys_arch_unprotect() function which should be implemented in - * sys_arch.c. If a particular port needs a different implementation, then - * this macro may be defined in sys_arch.h - */ -#define SYS_ARCH_UNPROTECT(lev) sys_arch_unprotect(lev) -sys_prot_t sys_arch_protect(void); -void sys_arch_unprotect(sys_prot_t pval); - -#else - -#define SYS_ARCH_DECL_PROTECT(lev) -#define SYS_ARCH_PROTECT(lev) -#define SYS_ARCH_UNPROTECT(lev) - -#endif /* SYS_LIGHTWEIGHT_PROT */ - -#endif /* SYS_ARCH_PROTECT */ - -/* - * Macros to set/get and increase/decrease variables in a thread-safe way. - * Use these for accessing variable that are used from more than one thread. - */ - -#ifndef SYS_ARCH_INC -#define SYS_ARCH_INC(var, val) do { \ -                                SYS_ARCH_DECL_PROTECT(old_level); \ -                                SYS_ARCH_PROTECT(old_level); \ -                                var += val; \ -                                SYS_ARCH_UNPROTECT(old_level); \ -                              } while(0) -#endif /* SYS_ARCH_INC */ - -#ifndef SYS_ARCH_DEC -#define SYS_ARCH_DEC(var, val) do { \ -                                SYS_ARCH_DECL_PROTECT(old_level); \ -                                SYS_ARCH_PROTECT(old_level); \ -                                var -= val; \ -                                SYS_ARCH_UNPROTECT(old_level); \ -                              } while(0) -#endif /* SYS_ARCH_DEC */ - -#ifndef SYS_ARCH_GET -#define SYS_ARCH_GET(var, ret) do { \ -                                SYS_ARCH_DECL_PROTECT(old_level); \ -                                SYS_ARCH_PROTECT(old_level); \ -                                ret = var; \ -                                SYS_ARCH_UNPROTECT(old_level); \ -                              } while(0) -#endif /* SYS_ARCH_GET */ - -#ifndef SYS_ARCH_SET -#define SYS_ARCH_SET(var, val) do { \ -                                SYS_ARCH_DECL_PROTECT(old_level); \ -                                SYS_ARCH_PROTECT(old_level); \ -                                var = val; \ -                                SYS_ARCH_UNPROTECT(old_level); \ -                              } while(0) -#endif /* SYS_ARCH_SET */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __LWIP_SYS_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcp.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcp.h deleted file mode 100644 index c151574..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcp.h +++ /dev/null @@ -1,709 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_TCP_H__ -#define __LWIP_TCP_H__ - -#include "lwip/opt.h" - -#if LWIP_TCP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/sys.h" -#include "lwip/mem.h" -#include "lwip/pbuf.h" -#include "lwip/ip.h" -#include "lwip/icmp.h" -#include "lwip/err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct tcp_pcb; - -/* Functions for interfacing with TCP: */ - -/* Lower layer interface to TCP: */ -#define tcp_init() /* Compatibility define, not init needed. */ -void             tcp_tmr     (void);  /* Must be called every -                                         TCP_TMR_INTERVAL -                                         ms. (Typically 250 ms). */ -/* Application program's interface: */ -struct tcp_pcb * tcp_new     (void); -struct tcp_pcb * tcp_alloc   (u8_t prio); - -void             tcp_arg     (struct tcp_pcb *pcb, void *arg); -void             tcp_accept  (struct tcp_pcb *pcb, -                              err_t (* accept)(void *arg, struct tcp_pcb *newpcb, -                 err_t err)); -void             tcp_recv    (struct tcp_pcb *pcb, -                              err_t (* recv)(void *arg, struct tcp_pcb *tpcb, -                              struct pbuf *p, err_t err)); -void             tcp_sent    (struct tcp_pcb *pcb, -                              err_t (* sent)(void *arg, struct tcp_pcb *tpcb, -                              u16_t len)); -void             tcp_poll    (struct tcp_pcb *pcb, -                              err_t (* poll)(void *arg, struct tcp_pcb *tpcb), -                              u8_t interval); -void             tcp_err     (struct tcp_pcb *pcb, -                              void (* err)(void *arg, err_t err)); - -#define          tcp_mss(pcb)      ((pcb)->mss) -#define          tcp_sndbuf(pcb)   ((pcb)->snd_buf) -#define          tcp_nagle_disable(pcb)  ((pcb)->flags |= TF_NODELAY) -#define          tcp_nagle_enable(pcb) ((pcb)->flags &= ~TF_NODELAY) -#define          tcp_nagle_disabled(pcb) (((pcb)->flags & TF_NODELAY) != 0) - -#if TCP_LISTEN_BACKLOG -#define          tcp_accepted(pcb) (((struct tcp_pcb_listen *)(pcb))->accepts_pending--) -#else  /* TCP_LISTEN_BACKLOG */ -#define          tcp_accepted(pcb) -#endif /* TCP_LISTEN_BACKLOG */ - -void             tcp_recved  (struct tcp_pcb *pcb, u16_t len); -err_t            tcp_bind    (struct tcp_pcb *pcb, struct ip_addr *ipaddr, -                              u16_t port); -err_t            tcp_connect (struct tcp_pcb *pcb, struct ip_addr *ipaddr, -                              u16_t port, err_t (* connected)(void *arg, -                              struct tcp_pcb *tpcb, -                              err_t err)); - -struct tcp_pcb * tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog); -#define          tcp_listen(pcb) tcp_listen_with_backlog(pcb, TCP_DEFAULT_LISTEN_BACKLOG) - -void             tcp_abandon (struct tcp_pcb *pcb, int reset); -#define          tcp_abort(pcb) tcp_abandon((pcb), 1) -err_t            tcp_close   (struct tcp_pcb *pcb); - -/* Flags for "apiflags" parameter in tcp_write and tcp_enqueue */ -#define TCP_WRITE_FLAG_COPY 0x01 -#define TCP_WRITE_FLAG_MORE 0x02 - -err_t            tcp_write   (struct tcp_pcb *pcb, const void *dataptr, u16_t len, -                              u8_t apiflags); - -void             tcp_setprio (struct tcp_pcb *pcb, u8_t prio); - -#define TCP_PRIO_MIN    1 -#define TCP_PRIO_NORMAL 64 -#define TCP_PRIO_MAX    127 - -/* It is also possible to call these two functions at the right -   intervals (instead of calling tcp_tmr()). */ -void             tcp_slowtmr (void); -void             tcp_fasttmr (void); - - -/* Only used by IP to pass a TCP segment to TCP: */ -void             tcp_input   (struct pbuf *p, struct netif *inp); -/* Used within the TCP code only: */ -err_t            tcp_send_empty_ack(struct tcp_pcb *pcb); -err_t            tcp_output  (struct tcp_pcb *pcb); -void             tcp_rexmit  (struct tcp_pcb *pcb); -void             tcp_rexmit_rto  (struct tcp_pcb *pcb); -void             tcp_rexmit_fast (struct tcp_pcb *pcb); -u32_t            tcp_update_rcv_ann_wnd(struct tcp_pcb *pcb); - -/** - * This is the Nagle algorithm: try to combine user data to send as few TCP - * segments as possible. Only send if - * - no previously transmitted data on the connection remains unacknowledged or - * - the TF_NODELAY flag is set (nagle algorithm turned off for this pcb) or - * - the only unsent segment is at least pcb->mss bytes long (or there is more - *   than one unsent segment - with lwIP, this can happen although unsent->len < mss) - * - or if we are in fast-retransmit (TF_INFR) - */ -#define tcp_do_output_nagle(tpcb) ((((tpcb)->unacked == NULL) || \ -                            ((tpcb)->flags & (TF_NODELAY | TF_INFR)) || \ -                            (((tpcb)->unsent != NULL) && (((tpcb)->unsent->next != NULL) || \ -                              ((tpcb)->unsent->len >= (tpcb)->mss))) \ -                            ) ? 1 : 0) -#define tcp_output_nagle(tpcb) (tcp_do_output_nagle(tpcb) ? tcp_output(tpcb) : ERR_OK) - - -#define TCP_SEQ_LT(a,b)     ((s32_t)((a)-(b)) < 0) -#define TCP_SEQ_LEQ(a,b)    ((s32_t)((a)-(b)) <= 0) -#define TCP_SEQ_GT(a,b)     ((s32_t)((a)-(b)) > 0) -#define TCP_SEQ_GEQ(a,b)    ((s32_t)((a)-(b)) >= 0) -/* is b<=a<=c? */ -#if 0 /* see bug #10548 */ -#define TCP_SEQ_BETWEEN(a,b,c) ((c)-(b) >= (a)-(b)) -#endif -#define TCP_SEQ_BETWEEN(a,b,c) (TCP_SEQ_GEQ(a,b) && TCP_SEQ_LEQ(a,c)) -#define TCP_FIN 0x01U -#define TCP_SYN 0x02U -#define TCP_RST 0x04U -#define TCP_PSH 0x08U -#define TCP_ACK 0x10U -#define TCP_URG 0x20U -#define TCP_ECE 0x40U -#define TCP_CWR 0x80U - -#define TCP_FLAGS 0x3fU - -/* Length of the TCP header, excluding options. */ -#define TCP_HLEN 20 - -#ifndef TCP_TMR_INTERVAL -#define TCP_TMR_INTERVAL       250  /* The TCP timer interval in milliseconds. */ -#endif /* TCP_TMR_INTERVAL */ - -#ifndef TCP_FAST_INTERVAL -#define TCP_FAST_INTERVAL      TCP_TMR_INTERVAL /* the fine grained timeout in milliseconds */ -#endif /* TCP_FAST_INTERVAL */ - -#ifndef TCP_SLOW_INTERVAL -#define TCP_SLOW_INTERVAL      (2*TCP_TMR_INTERVAL)  /* the coarse grained timeout in milliseconds */ -#endif /* TCP_SLOW_INTERVAL */ - -#define TCP_FIN_WAIT_TIMEOUT 20000 /* milliseconds */ -#define TCP_SYN_RCVD_TIMEOUT 20000 /* milliseconds */ - -#define TCP_OOSEQ_TIMEOUT        6U /* x RTO */ - -#ifndef TCP_MSL -#define TCP_MSL 60000UL /* The maximum segment lifetime in milliseconds */ -#endif - -/* Keepalive values, compliant with RFC 1122. Don't change this unless you know what you're doing */ -#ifndef  TCP_KEEPIDLE_DEFAULT -#define  TCP_KEEPIDLE_DEFAULT     7200000UL /* Default KEEPALIVE timer in milliseconds */ -#endif - -#ifndef  TCP_KEEPINTVL_DEFAULT -#define  TCP_KEEPINTVL_DEFAULT    75000UL   /* Default Time between KEEPALIVE probes in milliseconds */ -#endif - -#ifndef  TCP_KEEPCNT_DEFAULT -#define  TCP_KEEPCNT_DEFAULT      9U        /* Default Counter for KEEPALIVE probes */ -#endif - -#define  TCP_MAXIDLE              TCP_KEEPCNT_DEFAULT * TCP_KEEPINTVL_DEFAULT  /* Maximum KEEPALIVE probe time */ - -/* Fields are (of course) in network byte order. - * Some fields are converted to host byte order in tcp_input(). - */ -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct tcp_hdr { -  PACK_STRUCT_FIELD(u16_t src); -  PACK_STRUCT_FIELD(u16_t dest); -  PACK_STRUCT_FIELD(u32_t seqno); -  PACK_STRUCT_FIELD(u32_t ackno); -  PACK_STRUCT_FIELD(u16_t _hdrlen_rsvd_flags); -  PACK_STRUCT_FIELD(u16_t wnd); -  PACK_STRUCT_FIELD(u16_t chksum); -  PACK_STRUCT_FIELD(u16_t urgp); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif - -#define TCPH_OFFSET(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 8) -#define TCPH_HDRLEN(phdr) (ntohs((phdr)->_hdrlen_rsvd_flags) >> 12) -#define TCPH_FLAGS(phdr)  (ntohs((phdr)->_hdrlen_rsvd_flags) & TCP_FLAGS) - -#define TCPH_OFFSET_SET(phdr, offset) (phdr)->_hdrlen_rsvd_flags = htons(((offset) << 8) | TCPH_FLAGS(phdr)) -#define TCPH_HDRLEN_SET(phdr, len) (phdr)->_hdrlen_rsvd_flags = htons(((len) << 12) | TCPH_FLAGS(phdr)) -#define TCPH_FLAGS_SET(phdr, flags) (phdr)->_hdrlen_rsvd_flags = (((phdr)->_hdrlen_rsvd_flags & htons((u16_t)(~(u16_t)(TCP_FLAGS)))) | htons(flags)) -#define TCPH_SET_FLAG(phdr, flags ) (phdr)->_hdrlen_rsvd_flags = ((phdr)->_hdrlen_rsvd_flags | htons(flags)) -#define TCPH_UNSET_FLAG(phdr, flags) (phdr)->_hdrlen_rsvd_flags = htons(ntohs((phdr)->_hdrlen_rsvd_flags) | (TCPH_FLAGS(phdr) & ~(flags)) ) - -#define TCP_TCPLEN(seg) ((seg)->len + ((TCPH_FLAGS((seg)->tcphdr) & (TCP_FIN | TCP_SYN)) != 0)) - -enum tcp_state { -  CLOSED      = 0, -  LISTEN      = 1, -  SYN_SENT    = 2, -  SYN_RCVD    = 3, -  ESTABLISHED = 4, -  FIN_WAIT_1  = 5, -  FIN_WAIT_2  = 6, -  CLOSE_WAIT  = 7, -  CLOSING     = 8, -  LAST_ACK    = 9, -  TIME_WAIT   = 10 -}; - -/** Flags used on input processing, not on pcb->flags -*/ -#define TF_RESET     (u8_t)0x08U   /* Connection was reset. */ -#define TF_CLOSED    (u8_t)0x10U   /* Connection was sucessfully closed. */ -#define TF_GOT_FIN   (u8_t)0x20U   /* Connection was closed by the remote end. */ - - -#if LWIP_CALLBACK_API -  /* Function to call when a listener has been connected. -   * @param arg user-supplied argument (tcp_pcb.callback_arg) -   * @param pcb a new tcp_pcb that now is connected -   * @param err an error argument (TODO: that is current always ERR_OK?) -   * @return ERR_OK: accept the new connection, -   *                 any other err_t abortsthe new connection -   */ -#define DEF_ACCEPT_CALLBACK  err_t (* accept)(void *arg, struct tcp_pcb *newpcb, err_t err) -#else /* LWIP_CALLBACK_API */ -#define DEF_ACCEPT_CALLBACK -#endif /* LWIP_CALLBACK_API */ - -/** - * members common to struct tcp_pcb and struct tcp_listen_pcb - */ -#define TCP_PCB_COMMON(type) \ -  type *next; /* for the linked list */ \ -  enum tcp_state state; /* TCP state */ \ -  u8_t prio; \ -  void *callback_arg; \ -  /* ports are in host byte order */ \ -  u16_t local_port; \ -  /* the accept callback for listen- and normal pcbs, if LWIP_CALLBACK_API */ \ -  DEF_ACCEPT_CALLBACK - - -/* the TCP protocol control block */ -struct tcp_pcb { -/** common PCB members */ -  IP_PCB; -/** protocol specific PCB members */ -  TCP_PCB_COMMON(struct tcp_pcb); - -  /* ports are in host byte order */ -  u16_t remote_port; -   -  u8_t flags; -#define TF_ACK_DELAY   ((u8_t)0x01U)   /* Delayed ACK. */ -#define TF_ACK_NOW     ((u8_t)0x02U)   /* Immediate ACK. */ -#define TF_INFR        ((u8_t)0x04U)   /* In fast recovery. */ -#define TF_TIMESTAMP   ((u8_t)0x08U)   /* Timestamp option enabled */ -#define TF_FIN         ((u8_t)0x20U)   /* Connection was closed locally (FIN segment enqueued). */ -#define TF_NODELAY     ((u8_t)0x40U)   /* Disable Nagle algorithm */ -#define TF_NAGLEMEMERR ((u8_t)0x80U)   /* nagle enabled, memerr, try to output to prevent delayed ACK to happen */ - -  /* the rest of the fields are in host byte order -     as we have to do some math with them */ -  /* receiver variables */ -  u32_t rcv_nxt;   /* next seqno expected */ -  u16_t rcv_wnd;   /* receiver window available */ -  u16_t rcv_ann_wnd; /* receiver window to announce */ -  u32_t rcv_ann_right_edge; /* announced right edge of window */ - -  /* Timers */ -  u32_t tmr; -  u8_t polltmr, pollinterval; -   -  /* Retransmission timer. */ -  s16_t rtime; -   -  u16_t mss;   /* maximum segment size */ -   -  /* RTT (round trip time) estimation variables */ -  u32_t rttest; /* RTT estimate in 500ms ticks */ -  u32_t rtseq;  /* sequence number being timed */ -  s16_t sa, sv; /* @todo document this */ - -  s16_t rto;    /* retransmission time-out */ -  u8_t nrtx;    /* number of retransmissions */ - -  /* fast retransmit/recovery */ -  u32_t lastack; /* Highest acknowledged seqno. */ -  u8_t dupacks; -   -  /* congestion avoidance/control variables */ -  u16_t cwnd;   -  u16_t ssthresh; - -  /* sender variables */ -  u32_t snd_nxt;   /* next new seqno to be sent */ -  u16_t snd_wnd;   /* sender window */ -  u32_t snd_wl1, snd_wl2; /* Sequence and acknowledgement numbers of last -                             window update. */ -  u32_t snd_lbb;       /* Sequence number of next byte to be buffered. */ - -  u16_t acked; -   -  u16_t snd_buf;   /* Available buffer space for sending (in bytes). */ -#define TCP_SNDQUEUELEN_OVERFLOW (0xffff-3) -  u16_t snd_queuelen; /* Available buffer space for sending (in tcp_segs). */ -   -   -  /* These are ordered by sequence number: */ -  struct tcp_seg *unsent;   /* Unsent (queued) segments. */ -  struct tcp_seg *unacked;  /* Sent but unacknowledged segments. */ -#if TCP_QUEUE_OOSEQ   -  struct tcp_seg *ooseq;    /* Received out of sequence segments. */ -#endif /* TCP_QUEUE_OOSEQ */ - -  struct pbuf *refused_data; /* Data previously received but not yet taken by upper layer */ - -#if LWIP_CALLBACK_API -  /* Function to be called when more send buffer space is available. -   * @param arg user-supplied argument (tcp_pcb.callback_arg) -   * @param pcb the tcp_pcb which has send buffer space available -   * @param space the amount of bytes available -   * @return ERR_OK: try to send some data by calling tcp_output -   */ -  err_t (* sent)(void *arg, struct tcp_pcb *pcb, u16_t space); -   -  /* Function to be called when (in-sequence) data has arrived. -   * @param arg user-supplied argument (tcp_pcb.callback_arg) -   * @param pcb the tcp_pcb for which data has arrived -   * @param p the packet buffer which arrived -   * @param err an error argument (TODO: that is current always ERR_OK?) -   * @return ERR_OK: try to send some data by calling tcp_output -   */ -  err_t (* recv)(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err); - -  /* Function to be called when a connection has been set up. -   * @param arg user-supplied argument (tcp_pcb.callback_arg) -   * @param pcb the tcp_pcb that now is connected -   * @param err an error argument (TODO: that is current always ERR_OK?) -   * @return value is currently ignored -   */ -  err_t (* connected)(void *arg, struct tcp_pcb *pcb, err_t err); - -  /* Function which is called periodically. -   * The period can be adjusted in multiples of the TCP slow timer interval -   * by changing tcp_pcb.polltmr. -   * @param arg user-supplied argument (tcp_pcb.callback_arg) -   * @param pcb the tcp_pcb to poll for -   * @return ERR_OK: try to send some data by calling tcp_output -   */ -  err_t (* poll)(void *arg, struct tcp_pcb *pcb); - -  /* Function to be called whenever a fatal error occurs. -   * There is no pcb parameter since most of the times, the pcb is -   * already deallocated (or there is no pcb) when this function is called. -   * @param arg user-supplied argument (tcp_pcb.callback_arg) -   * @param err an indication why the error callback is called: -   *            ERR_ABRT: aborted through tcp_abort or by a TCP timer -   *            ERR_RST: the connection was reset by the remote host -   */ -  void (* errf)(void *arg, err_t err); -#endif /* LWIP_CALLBACK_API */ - -#if LWIP_TCP_TIMESTAMPS -  u32_t ts_lastacksent; -  u32_t ts_recent; -#endif /* LWIP_TCP_TIMESTAMPS */ - -  /* idle time before KEEPALIVE is sent */ -  u32_t keep_idle; -#if LWIP_TCP_KEEPALIVE -  u32_t keep_intvl; -  u32_t keep_cnt; -#endif /* LWIP_TCP_KEEPALIVE */ -   -  /* Persist timer counter */ -  u32_t persist_cnt; -  /* Persist timer back-off */ -  u8_t persist_backoff; - -  /* KEEPALIVE counter */ -  u8_t keep_cnt_sent; -}; - -struct tcp_pcb_listen {   -/* Common members of all PCB types */ -  IP_PCB; -/* Protocol specific PCB members */ -  TCP_PCB_COMMON(struct tcp_pcb_listen); - -#if TCP_LISTEN_BACKLOG -  u8_t backlog; -  u8_t accepts_pending; -#endif /* TCP_LISTEN_BACKLOG */ -}; - -#if LWIP_EVENT_API - -enum lwip_event { -  LWIP_EVENT_ACCEPT, -  LWIP_EVENT_SENT, -  LWIP_EVENT_RECV, -  LWIP_EVENT_CONNECTED, -  LWIP_EVENT_POLL, -  LWIP_EVENT_ERR -}; - -err_t lwip_tcp_event(void *arg, struct tcp_pcb *pcb, -         enum lwip_event, -         struct pbuf *p, -         u16_t size, -         err_t err); - -#define TCP_EVENT_ACCEPT(pcb,err,ret)    ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ -                LWIP_EVENT_ACCEPT, NULL, 0, err) -#define TCP_EVENT_SENT(pcb,space,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ -                   LWIP_EVENT_SENT, NULL, space, ERR_OK) -#define TCP_EVENT_RECV(pcb,p,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ -                LWIP_EVENT_RECV, (p), 0, (err)) -#define TCP_EVENT_CONNECTED(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ -                LWIP_EVENT_CONNECTED, NULL, 0, (err)) -#define TCP_EVENT_POLL(pcb,ret)       ret = lwip_tcp_event((pcb)->callback_arg, (pcb),\ -                LWIP_EVENT_POLL, NULL, 0, ERR_OK) -#define TCP_EVENT_ERR(errf,arg,err)  lwip_tcp_event((arg), NULL, \ -                LWIP_EVENT_ERR, NULL, 0, (err)) -#else /* LWIP_EVENT_API */ - -#define TCP_EVENT_ACCEPT(pcb,err,ret)                          \ -  do {                                                         \ -    if((pcb)->accept != NULL)                                  \ -      (ret) = (pcb)->accept((pcb)->callback_arg,(pcb),(err));  \ -    else (ret) = ERR_OK;                                       \ -  } while (0) - -#define TCP_EVENT_SENT(pcb,space,ret)                          \ -  do {                                                         \ -    if((pcb)->sent != NULL)                                    \ -      (ret) = (pcb)->sent((pcb)->callback_arg,(pcb),(space));  \ -    else (ret) = ERR_OK;                                       \ -  } while (0) - -#define TCP_EVENT_RECV(pcb,p,err,ret)                           \ -  do {                                                          \ -    if((pcb)->recv != NULL) {                                   \ -      (ret) = (pcb)->recv((pcb)->callback_arg,(pcb),(p),(err)); \ -    } else {                                                    \ -      (ret) = tcp_recv_null(NULL, (pcb), (p), (err));           \ -    }                                                           \ -  } while (0) - -#define TCP_EVENT_CONNECTED(pcb,err,ret)                         \ -  do {                                                           \ -    if((pcb)->connected != NULL)                                 \ -      (ret) = (pcb)->connected((pcb)->callback_arg,(pcb),(err)); \ -    else (ret) = ERR_OK;                                         \ -  } while (0) - -#define TCP_EVENT_POLL(pcb,ret)                                \ -  do {                                                         \ -    if((pcb)->poll != NULL)                                    \ -      (ret) = (pcb)->poll((pcb)->callback_arg,(pcb));          \ -    else (ret) = ERR_OK;                                       \ -  } while (0) - -#define TCP_EVENT_ERR(errf,arg,err)                            \ -  do {                                                         \ -    if((errf) != NULL)                                         \ -      (errf)((arg),(err));                                     \ -  } while (0) - -#endif /* LWIP_EVENT_API */ - -/* This structure represents a TCP segment on the unsent and unacked queues */ -struct tcp_seg { -  struct tcp_seg *next;    /* used when putting segements on a queue */ -  struct pbuf *p;          /* buffer containing data + TCP header */ -  void *dataptr;           /* pointer to the TCP data in the pbuf */ -  u16_t len;               /* the TCP length of this segment */ -  u8_t  flags; -#define TF_SEG_OPTS_MSS   (u8_t)0x01U   /* Include MSS option. */ -#define TF_SEG_OPTS_TS    (u8_t)0x02U   /* Include timestamp option. */ -  struct tcp_hdr *tcphdr;  /* the TCP header */ -}; - -#define LWIP_TCP_OPT_LENGTH(flags)              \ -  (flags & TF_SEG_OPTS_MSS ? 4  : 0) +          \ -  (flags & TF_SEG_OPTS_TS  ? 12 : 0) - -/** This returns a TCP header option for MSS in an u32_t */ -#define TCP_BUILD_MSS_OPTION(x) (x) = htonl(((u32_t)2 << 24) |          \ -                                            ((u32_t)4 << 16) |          \ -                                            (((u32_t)TCP_MSS / 256) << 8) | \ -                                            (TCP_MSS & 255)) - -/* Internal functions and global variables: */ -struct tcp_pcb *tcp_pcb_copy(struct tcp_pcb *pcb); -void tcp_pcb_purge(struct tcp_pcb *pcb); -void tcp_pcb_remove(struct tcp_pcb **pcblist, struct tcp_pcb *pcb); - -u8_t tcp_segs_free(struct tcp_seg *seg); -u8_t tcp_seg_free(struct tcp_seg *seg); -struct tcp_seg *tcp_seg_copy(struct tcp_seg *seg); - -#define tcp_ack(pcb)                               \ -  do {                                             \ -    if((pcb)->flags & TF_ACK_DELAY) {              \ -      (pcb)->flags &= ~TF_ACK_DELAY;               \ -      (pcb)->flags |= TF_ACK_NOW;                  \ -      tcp_output(pcb);                             \ -    }                                              \ -    else {                                         \ -      (pcb)->flags |= TF_ACK_DELAY;                \ -    }                                              \ -  } while (0) - -#define tcp_ack_now(pcb)                           \ -  do {                                             \ -    (pcb)->flags |= TF_ACK_NOW;                    \ -    tcp_output(pcb);                               \ -  } while (0) - -err_t tcp_send_ctrl(struct tcp_pcb *pcb, u8_t flags); -err_t tcp_enqueue(struct tcp_pcb *pcb, void *dataptr, u16_t len, -                  u8_t flags, u8_t apiflags, u8_t optflags); - -void tcp_rexmit_seg(struct tcp_pcb *pcb, struct tcp_seg *seg); - -void tcp_rst(u32_t seqno, u32_t ackno, -       struct ip_addr *local_ip, struct ip_addr *remote_ip, -       u16_t local_port, u16_t remote_port); - -u32_t tcp_next_iss(void); - -void tcp_keepalive(struct tcp_pcb *pcb); -void tcp_zero_window_probe(struct tcp_pcb *pcb); - -#if TCP_CALCULATE_EFF_SEND_MSS -u16_t tcp_eff_send_mss(u16_t sendmss, struct ip_addr *addr); -#endif /* TCP_CALCULATE_EFF_SEND_MSS */ - -#if LWIP_CALLBACK_API -err_t tcp_recv_null(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err); -#endif /* LWIP_CALLBACK_API */ - -extern struct tcp_pcb *tcp_input_pcb; -extern u32_t tcp_ticks; - -const char* tcp_debug_state_str(enum tcp_state s); -#if TCP_DEBUG || TCP_INPUT_DEBUG || TCP_OUTPUT_DEBUG -void tcp_debug_print(struct tcp_hdr *tcphdr); -void tcp_debug_print_flags(u8_t flags); -void tcp_debug_print_state(enum tcp_state s); -void tcp_debug_print_pcbs(void); -s16_t tcp_pcbs_sane(void); -#else -#  define tcp_debug_print(tcphdr) -#  define tcp_debug_print_flags(flags) -#  define tcp_debug_print_state(s) -#  define tcp_debug_print_pcbs() -#  define tcp_pcbs_sane() 1 -#endif /* TCP_DEBUG */ - -#if NO_SYS -#define tcp_timer_needed() -#else -void tcp_timer_needed(void); -#endif - -/* The TCP PCB lists. */ -union tcp_listen_pcbs_t { /* List of all TCP PCBs in LISTEN state. */ -  struct tcp_pcb_listen *listen_pcbs;  -  struct tcp_pcb *pcbs; -}; -extern union tcp_listen_pcbs_t tcp_listen_pcbs; -extern struct tcp_pcb *tcp_active_pcbs;  /* List of all TCP PCBs that are in a -              state in which they accept or send -              data. */ -extern struct tcp_pcb *tcp_tw_pcbs;      /* List of all TCP PCBs in TIME-WAIT. */ - -extern struct tcp_pcb *tcp_tmp_pcb;      /* Only used for temporary storage. */ - -/* Axioms about the above lists:    -   1) Every TCP PCB that is not CLOSED is in one of the lists. -   2) A PCB is only in one of the lists. -   3) All PCBs in the tcp_listen_pcbs list is in LISTEN state. -   4) All PCBs in the tcp_tw_pcbs list is in TIME-WAIT state. -*/ - -/* Define two macros, TCP_REG and TCP_RMV that registers a TCP PCB -   with a PCB list or removes a PCB from a list, respectively. */ -#if 0 -#define TCP_REG(pcbs, npcb) do {\ -                            LWIP_DEBUGF(TCP_DEBUG, ("TCP_REG %p local port %d\n", npcb, npcb->local_port)); \ -                            for(tcp_tmp_pcb = *pcbs; \ -          tcp_tmp_pcb != NULL; \ -        tcp_tmp_pcb = tcp_tmp_pcb->next) { \ -                                LWIP_ASSERT("TCP_REG: already registered\n", tcp_tmp_pcb != npcb); \ -                            } \ -                            LWIP_ASSERT("TCP_REG: pcb->state != CLOSED", npcb->state != CLOSED); \ -                            npcb->next = *pcbs; \ -                            LWIP_ASSERT("TCP_REG: npcb->next != npcb", npcb->next != npcb); \ -                            *(pcbs) = npcb; \ -                            LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \ -              tcp_timer_needed(); \ -                            } while(0) -#define TCP_RMV(pcbs, npcb) do { \ -                            LWIP_ASSERT("TCP_RMV: pcbs != NULL", *pcbs != NULL); \ -                            LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removing %p from %p\n", npcb, *pcbs)); \ -                            if(*pcbs == npcb) { \ -                               *pcbs = (*pcbs)->next; \ -                            } else for(tcp_tmp_pcb = *pcbs; tcp_tmp_pcb != NULL; tcp_tmp_pcb = tcp_tmp_pcb->next) { \ -                               if(tcp_tmp_pcb->next == npcb) { \ -                                  tcp_tmp_pcb->next = npcb->next; \ -                                  break; \ -                               } \ -                            } \ -                            npcb->next = NULL; \ -                            LWIP_ASSERT("TCP_RMV: tcp_pcbs sane", tcp_pcbs_sane()); \ -                            LWIP_DEBUGF(TCP_DEBUG, ("TCP_RMV: removed %p from %p\n", npcb, *pcbs)); \ -                            } while(0) - -#else /* LWIP_DEBUG */ - -#define TCP_REG(pcbs, npcb)                        \ -  do {                                             \ -    npcb->next = *pcbs;                            \ -    *(pcbs) = npcb;                                \ -    tcp_timer_needed();                            \ -  } while (0) - -#define TCP_RMV(pcbs, npcb)                        \ -  do {                                             \ -    if(*(pcbs) == npcb) {                          \ -      (*(pcbs)) = (*pcbs)->next;                   \ -    }                                              \ -    else {                                         \ -      for(tcp_tmp_pcb = *pcbs;                                         \ -          tcp_tmp_pcb != NULL;                                         \ -          tcp_tmp_pcb = tcp_tmp_pcb->next) {                           \ -        if(tcp_tmp_pcb->next == npcb) {   \ -          tcp_tmp_pcb->next = npcb->next;          \ -          break;                                   \ -        }                                          \ -      }                                            \ -    }                                              \ -    npcb->next = NULL;                             \ -  } while(0) - -#endif /* LWIP_DEBUG */ - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_TCP */ - -#endif /* __LWIP_TCP_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcpip.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcpip.h deleted file mode 100644 index 00a3ec5..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcpip.h +++ /dev/null @@ -1,143 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_TCPIP_H__ -#define __LWIP_TCPIP_H__ - -#include "lwip/opt.h" - -#if !NO_SYS /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/api_msg.h" -#include "lwip/netifapi.h" -#include "lwip/pbuf.h" -#include "lwip/api.h" -#include "lwip/sys.h" -#include "lwip/netif.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if LWIP_TCPIP_CORE_LOCKING -/** The global semaphore to lock the stack. */ -extern sys_sem_t lock_tcpip_core; -#define LOCK_TCPIP_CORE()     sys_sem_wait(lock_tcpip_core) -#define UNLOCK_TCPIP_CORE()   sys_sem_signal(lock_tcpip_core) -#define TCPIP_APIMSG(m)       tcpip_apimsg_lock(m) -#define TCPIP_APIMSG_ACK(m) -#define TCPIP_NETIFAPI(m)     tcpip_netifapi_lock(m) -#define TCPIP_NETIFAPI_ACK(m) -#else -#define LOCK_TCPIP_CORE() -#define UNLOCK_TCPIP_CORE() -#define TCPIP_APIMSG(m)       tcpip_apimsg(m) -#define TCPIP_APIMSG_ACK(m)   sys_sem_signal(m->conn->op_completed) -#define TCPIP_NETIFAPI(m)     tcpip_netifapi(m) -#define TCPIP_NETIFAPI_ACK(m) sys_sem_signal(m->sem) -#endif /* LWIP_TCPIP_CORE_LOCKING */ - -void tcpip_init(void (* tcpip_init_done)(void *), void *arg); - -#if LWIP_NETCONN -err_t tcpip_apimsg(struct api_msg *apimsg); -#if LWIP_TCPIP_CORE_LOCKING -err_t tcpip_apimsg_lock(struct api_msg *apimsg); -#endif /* LWIP_TCPIP_CORE_LOCKING */ -#endif /* LWIP_NETCONN */ - -err_t tcpip_input(struct pbuf *p, struct netif *inp); - -#if LWIP_NETIF_API -err_t tcpip_netifapi(struct netifapi_msg *netifapimsg); -#if LWIP_TCPIP_CORE_LOCKING -err_t tcpip_netifapi_lock(struct netifapi_msg *netifapimsg); -#endif /* LWIP_TCPIP_CORE_LOCKING */ -#endif /* LWIP_NETIF_API */ - -err_t tcpip_callback_with_block(void (*f)(void *ctx), void *ctx, u8_t block); -#define tcpip_callback(f, ctx)              tcpip_callback_with_block(f, ctx, 1) - -/* free pbufs or heap memory from another context without blocking */ -err_t pbuf_free_callback(struct pbuf *p); -err_t mem_free_callback(void *m); - -err_t tcpip_timeout(u32_t msecs, sys_timeout_handler h, void *arg); -err_t tcpip_untimeout(sys_timeout_handler h, void *arg); - -enum tcpip_msg_type { -#if LWIP_NETCONN -  TCPIP_MSG_API, -#endif /* LWIP_NETCONN */ -  TCPIP_MSG_INPKT, -#if LWIP_NETIF_API -  TCPIP_MSG_NETIFAPI, -#endif /* LWIP_NETIF_API */ -  TCPIP_MSG_CALLBACK, -  TCPIP_MSG_TIMEOUT, -  TCPIP_MSG_UNTIMEOUT -}; - -struct tcpip_msg { -  enum tcpip_msg_type type; -  sys_sem_t *sem; -  union { -#if LWIP_NETCONN -    struct api_msg *apimsg; -#endif /* LWIP_NETCONN */ -#if LWIP_NETIF_API -    struct netifapi_msg *netifapimsg; -#endif /* LWIP_NETIF_API */ -    struct { -      struct pbuf *p; -      struct netif *netif; -    } inp; -    struct { -      void (*f)(void *ctx); -      void *ctx; -    } cb; -    struct { -      u32_t msecs; -      sys_timeout_handler h; -      void *arg; -    } tmo; -  } msg; -}; - -#ifdef __cplusplus -} -#endif - -#endif /* !NO_SYS */ - -#endif /* __LWIP_TCPIP_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/udp.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/udp.h deleted file mode 100644 index 1269ee1..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/udp.h +++ /dev/null @@ -1,155 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIP_UDP_H__ -#define __LWIP_UDP_H__ - -#include "lwip/opt.h" - -#if LWIP_UDP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/pbuf.h" -#include "lwip/netif.h" -#include "lwip/ip_addr.h" -#include "lwip/ip.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define UDP_HLEN 8 - -/* Fields are (of course) in network byte order. */ -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct udp_hdr { -  PACK_STRUCT_FIELD(u16_t src); -  PACK_STRUCT_FIELD(u16_t dest);  /* src/dest UDP ports */ -  PACK_STRUCT_FIELD(u16_t len); -  PACK_STRUCT_FIELD(u16_t chksum); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif - -#define UDP_FLAGS_NOCHKSUM 0x01U -#define UDP_FLAGS_UDPLITE  0x02U -#define UDP_FLAGS_CONNECTED  0x04U - -struct udp_pcb { -/* Common members of all PCB types */ -  IP_PCB; - -/* Protocol specific PCB members */ - -  struct udp_pcb *next; - -  u8_t flags; -  /* ports are in host byte order */ -  u16_t local_port, remote_port; - -#if LWIP_IGMP -  /* outgoing network interface for multicast packets */ -  struct ip_addr multicast_ip; -#endif /* LWIP_IGMP */ - -#if LWIP_UDPLITE -  /* used for UDP_LITE only */ -  u16_t chksum_len_rx, chksum_len_tx; -#endif /* LWIP_UDPLITE */ - -  /* receive callback function -   * addr and port are in same byte order as in the pcb -   * The callback is responsible for freeing the pbuf -   * if it's not used any more. -   * -   * ATTENTION: Be aware that 'addr' points into the pbuf 'p' so freeing this pbuf -   *            makes 'addr' invalid, too. -   * -   * @param arg user supplied argument (udp_pcb.recv_arg) -   * @param pcb the udp_pcb which received data -   * @param p the packet buffer that was received -   * @param addr the remote IP address from which the packet was received -   * @param port the remote port from which the packet was received -   */ -  void (* recv)(void *arg, struct udp_pcb *pcb, struct pbuf *p, -    struct ip_addr *addr, u16_t port); -  /* user-supplied argument for the recv callback */ -  void *recv_arg;   -}; -/* udp_pcbs export for exernal reference (e.g. SNMP agent) */ -extern struct udp_pcb *udp_pcbs; - -/* The following functions is the application layer interface to the -   UDP code. */ -struct udp_pcb * udp_new        (void); -void             udp_remove     (struct udp_pcb *pcb); -err_t            udp_bind       (struct udp_pcb *pcb, struct ip_addr *ipaddr, -                 u16_t port); -err_t            udp_connect    (struct udp_pcb *pcb, struct ip_addr *ipaddr, -                 u16_t port); -void             udp_disconnect    (struct udp_pcb *pcb); -void             udp_recv       (struct udp_pcb *pcb, -         void (* recv)(void *arg, struct udp_pcb *upcb, -                 struct pbuf *p, -                 struct ip_addr *addr, -                 u16_t port), -         void *recv_arg); -err_t            udp_sendto_if  (struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *dst_ip, u16_t dst_port, struct netif *netif); -err_t            udp_sendto     (struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *dst_ip, u16_t dst_port); -err_t            udp_send       (struct udp_pcb *pcb, struct pbuf *p); - -#define          udp_flags(pcb)  ((pcb)->flags) -#define          udp_setflags(pcb, f)  ((pcb)->flags = (f)) - -/* The following functions are the lower layer interface to UDP. */ -void             udp_input      (struct pbuf *p, struct netif *inp); - -#define udp_init() /* Compatibility define, not init needed. */ - -#if UDP_DEBUG -void udp_debug_print(struct udp_hdr *udphdr); -#else -#define udp_debug_print(udphdr) -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_UDP */ - -#endif /* __LWIP_UDP_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/etharp.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/etharp.h deleted file mode 100644 index fb1542a..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/etharp.h +++ /dev/null @@ -1,194 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * Copyright (c) 2003-2004 Leon Woestenberg <leon.woestenberg@axon.tv> - * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ - -#ifndef __NETIF_ETHARP_H__ -#define __NETIF_ETHARP_H__ - -#include "lwip/opt.h" - -#if LWIP_ARP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/pbuf.h" -#include "lwip/ip_addr.h" -#include "lwip/netif.h" -#include "lwip/ip.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef ETH_PAD_SIZE -#define ETH_PAD_SIZE          0 -#endif - -#ifndef ETHARP_HWADDR_LEN -#define ETHARP_HWADDR_LEN     6 -#endif - -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct eth_addr { -  PACK_STRUCT_FIELD(u8_t addr[ETHARP_HWADDR_LEN]); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif - -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct eth_hdr { -#if ETH_PAD_SIZE -  PACK_STRUCT_FIELD(u8_t padding[ETH_PAD_SIZE]); -#endif -  PACK_STRUCT_FIELD(struct eth_addr dest); -  PACK_STRUCT_FIELD(struct eth_addr src); -  PACK_STRUCT_FIELD(u16_t type); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif - -#define SIZEOF_ETH_HDR (14 + ETH_PAD_SIZE) - -#if ETHARP_SUPPORT_VLAN - -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct eth_vlan_hdr { -  PACK_STRUCT_FIELD(u16_t tpid); -  PACK_STRUCT_FIELD(u16_t prio_vid); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif - -#define SIZEOF_VLAN_HDR 4 -#define VLAN_ID(vlan_hdr) (htons((vlan_hdr)->prio_vid) & 0xFFF) - -#endif /* ETHARP_SUPPORT_VLAN */ - -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -/** the ARP message */ -struct etharp_hdr { -  PACK_STRUCT_FIELD(u16_t hwtype); -  PACK_STRUCT_FIELD(u16_t proto); -  PACK_STRUCT_FIELD(u16_t _hwlen_protolen); -  PACK_STRUCT_FIELD(u16_t opcode); -  PACK_STRUCT_FIELD(struct eth_addr shwaddr); -  PACK_STRUCT_FIELD(struct ip_addr2 sipaddr); -  PACK_STRUCT_FIELD(struct eth_addr dhwaddr); -  PACK_STRUCT_FIELD(struct ip_addr2 dipaddr); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif - -#define SIZEOF_ETHARP_HDR 28 -#define SIZEOF_ETHARP_PACKET (SIZEOF_ETH_HDR + SIZEOF_ETHARP_HDR) - -/** 5 seconds period */ -#define ARP_TMR_INTERVAL 5000 - -#define ETHTYPE_ARP       0x0806 -#define ETHTYPE_IP        0x0800 -#define ETHTYPE_VLAN      0x8100 -#define ETHTYPE_PPPOEDISC 0x8863  /* PPP Over Ethernet Discovery Stage */ -#define ETHTYPE_PPPOE     0x8864  /* PPP Over Ethernet Session Stage */ - -/** ARP message types (opcodes) */ -#define ARP_REQUEST 1 -#define ARP_REPLY   2 - -#if ARP_QUEUEING -/** struct for queueing outgoing packets for unknown address -  * defined here to be accessed by memp.h -  */ -struct etharp_q_entry { -  struct etharp_q_entry *next; -  struct pbuf *p; -}; -#endif /* ARP_QUEUEING */ - -#define etharp_init() /* Compatibility define, not init needed. */ -void etharp_tmr(void); -s8_t etharp_find_addr(struct netif *netif, struct ip_addr *ipaddr, -         struct eth_addr **eth_ret, struct ip_addr **ip_ret); -void etharp_ip_input(struct netif *netif, struct pbuf *p); -void etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, -         struct pbuf *p); -err_t etharp_output(struct netif *netif, struct pbuf *q, struct ip_addr *ipaddr); -err_t etharp_query(struct netif *netif, struct ip_addr *ipaddr, struct pbuf *q); -err_t etharp_request(struct netif *netif, struct ip_addr *ipaddr); -/** For Ethernet network interfaces, we might want to send "gratuitous ARP"; - *  this is an ARP packet sent by a node in order to spontaneously cause other - *  nodes to update an entry in their ARP cache. - *  From RFC 3220 "IP Mobility Support for IPv4" section 4.6. */ -#define etharp_gratuitous(netif) etharp_request((netif), &(netif)->ip_addr) - -err_t ethernet_input(struct pbuf *p, struct netif *netif); - -#if LWIP_AUTOIP -err_t etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr, -                 const struct eth_addr *ethdst_addr, -                 const struct eth_addr *hwsrc_addr, const struct ip_addr *ipsrc_addr, -                 const struct eth_addr *hwdst_addr, const struct ip_addr *ipdst_addr, -                 const u16_t opcode); -#endif /* LWIP_AUTOIP */ - -#define eth_addr_cmp(addr1, addr2) (memcmp((addr1)->addr, (addr2)->addr, ETHARP_HWADDR_LEN) == 0) - -extern const struct eth_addr ethbroadcast, ethzero; - -#ifdef __cplusplus -} -#endif - -#endif /* LWIP_ARP */ - -#endif /* __NETIF_ARP_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/loopif.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/loopif.h deleted file mode 100644 index 3f4fa62..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/loopif.h +++ /dev/null @@ -1,55 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __NETIF_LOOPIF_H__ -#define __NETIF_LOOPIF_H__ - -#include "lwip/opt.h" -#include "lwip/netif.h" -#include "lwip/err.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if !LWIP_NETIF_LOOPBACK_MULTITHREADING -#define loopif_poll netif_poll -#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ - -err_t loopif_init(struct netif *netif); - -#ifdef __cplusplus -} -#endif - -#endif /* __NETIF_LOOPIF_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/ppp_oe.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/ppp_oe.h deleted file mode 100644 index fac0a78..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/ppp_oe.h +++ /dev/null @@ -1,163 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/***************************************************************************** -* ppp_oe.h - PPP Over Ethernet implementation for lwIP. -* -* Copyright (c) 2006 by Marc Boucher, Services Informatiques (MBSI) inc. -* -* The authors hereby grant permission to use, copy, modify, distribute, -* and license this software and its documentation for any purpose, provided -* that existing copyright notices are retained in all copies and that this -* notice and the following disclaimer are included verbatim in any  -* distributions. No written agreement, license, or royalty fee is required -* for any of the authorized uses. -* -* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR -* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  -* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -****************************************************************************** -* REVISION HISTORY -* -* 06-01-01 Marc Boucher <marc@mbsi.ca> -*   Ported to lwIP. -*****************************************************************************/ - - - -/* based on NetBSD: if_pppoe.c,v 1.64 2006/01/31 23:50:15 martin Exp */ - -/*- - * Copyright (c) 2002 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Martin Husemann <martin@NetBSD.org>. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - *    notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - *    notice, this list of conditions and the following disclaimer in the - *    documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - *    must display the following acknowledgement: - *        This product includes software developed by the NetBSD - *        Foundation, Inc. and its contributors. - * 4. Neither the name of The NetBSD Foundation nor the names of its - *    contributors may be used to endorse or promote products derived - *    from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef PPP_OE_H -#define PPP_OE_H - -#include "lwip/opt.h" - -#if PPPOE_SUPPORT > 0 - -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct pppoehdr { -	PACK_STRUCT_FIELD(u8_t vertype); -	PACK_STRUCT_FIELD(u8_t code); -	PACK_STRUCT_FIELD(u16_t session); -	PACK_STRUCT_FIELD(u16_t plen); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif - -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/bpstruct.h" -#endif -PACK_STRUCT_BEGIN -struct pppoetag { -	PACK_STRUCT_FIELD(u16_t tag); -	PACK_STRUCT_FIELD(u16_t len); -} PACK_STRUCT_STRUCT; -PACK_STRUCT_END -#ifdef PACK_STRUCT_USE_INCLUDES -#  include "arch/epstruct.h" -#endif - - -#define PPPOE_STATE_INITIAL	0 -#define PPPOE_STATE_PADI_SENT	1 -#define	PPPOE_STATE_PADR_SENT	2 -#define	PPPOE_STATE_SESSION	3 -#define	PPPOE_STATE_CLOSING	4 -/* passive */ -#define	PPPOE_STATE_PADO_SENT	1 - -#define PPPOE_HEADERLEN	sizeof(struct pppoehdr) -#define	PPPOE_VERTYPE	0x11	/* VER=1, TYPE = 1 */ - -#define	PPPOE_TAG_EOL		0x0000		/* end of list */ -#define	PPPOE_TAG_SNAME		0x0101		/* service name */ -#define	PPPOE_TAG_ACNAME	0x0102		/* access concentrator name */ -#define	PPPOE_TAG_HUNIQUE	0x0103		/* host unique */ -#define	PPPOE_TAG_ACCOOKIE	0x0104		/* AC cookie */ -#define	PPPOE_TAG_VENDOR	0x0105		/* vendor specific */ -#define	PPPOE_TAG_RELAYSID	0x0110		/* relay session id */ -#define	PPPOE_TAG_SNAME_ERR	0x0201		/* service name error */ -#define	PPPOE_TAG_ACSYS_ERR	0x0202		/* AC system error */ -#define	PPPOE_TAG_GENERIC_ERR	0x0203		/* gerneric error */ - -#define PPPOE_CODE_PADI		0x09		/* Active Discovery Initiation */ -#define	PPPOE_CODE_PADO		0x07		/* Active Discovery Offer */ -#define	PPPOE_CODE_PADR		0x19		/* Active Discovery Request */ -#define	PPPOE_CODE_PADS		0x65		/* Active Discovery Session confirmation */ -#define	PPPOE_CODE_PADT		0xA7		/* Active Discovery Terminate */ - -#ifndef ETHERMTU -#define ETHERMTU 1500 -#endif - -/* two byte PPP protocol discriminator, then IP data */ -#define	PPPOE_MAXMTU	(ETHERMTU-PPPOE_HEADERLEN-2) - -struct pppoe_softc; - - -void pppoe_init(void); - -err_t pppoe_create(struct netif *ethif, int pd, void (*linkStatusCB)(int pd, int up), struct pppoe_softc **scptr); -err_t pppoe_destroy(struct netif *ifp); - -int pppoe_connect(struct pppoe_softc *sc); -void pppoe_disconnect(struct pppoe_softc *sc); - -void pppoe_disc_input(struct netif *netif, struct pbuf *p); -void pppoe_data_input(struct netif *netif, struct pbuf *p); - -err_t pppoe_xmit(struct pppoe_softc *sc, struct pbuf *pb); - -extern int pppoe_hdrlen; - -#endif /* PPPOE_SUPPORT */ - -#endif /* PPP_OE_H */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/slipif.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/slipif.h deleted file mode 100644 index ddc2dfa..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/slipif.h +++ /dev/null @@ -1,53 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/* - * Copyright (c) 2001, Swedish Institute of Computer Science. - * All rights reserved.  - * - * Redistribution and use in source and binary forms, with or without  - * modification, are permitted provided that the following conditions  - * are met:  - * 1. Redistributions of source code must retain the above copyright  - *    notice, this list of conditions and the following disclaimer.  - * 2. Redistributions in binary form must reproduce the above copyright  - *    notice, this list of conditions and the following disclaimer in the  - *    documentation and/or other materials provided with the distribution.  - * 3. Neither the name of the Institute nor the names of its contributors  - *    may be used to endorse or promote products derived from this software  - *    without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND  - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE  - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE  - * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE  - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL  - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS  - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)  - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY  - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  - * SUCH DAMAGE.  - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __NETIF_SLIPIF_H__ -#define __NETIF_SLIPIF_H__ - -#include "lwip/netif.h" - -#ifdef __cplusplus -extern "C" { -#endif - -err_t slipif_init(struct netif * netif); -void slipif_poll(struct netif *netif); - -#ifdef __cplusplus -} -#endif -  -#endif  - diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/etharp.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/etharp.c deleted file mode 100644 index 1a5d134..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/etharp.c +++ /dev/null @@ -1,1224 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * Address Resolution Protocol module for IP over Ethernet - * - * Functionally, ARP is divided into two parts. The first maps an IP address - * to a physical address when sending a packet, and the second part answers - * requests from other machines for our physical address. - * - * This implementation complies with RFC 826 (Ethernet ARP). It supports - * Gratuitious ARP from RFC3220 (IP Mobility Support for IPv4) section 4.6 - * if an interface calls etharp_gratuitous(our_netif) upon address change. - */ - -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * Copyright (c) 2003-2004 Leon Woestenberg <leon.woestenberg@axon.tv> - * Copyright (c) 2003-2004 Axon Digital Design B.V., The Netherlands. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - * - */ -  -#include "lwip/opt.h" - -#if LWIP_ARP /* don't build if not configured for use in lwipopts.h */ - -#include "lwip/inet.h" -#include "lwip/ip.h" -#include "lwip/stats.h" -#include "lwip/snmp.h" -#include "lwip/dhcp.h" -#include "lwip/autoip.h" -#include "netif/etharp.h" - -#if PPPOE_SUPPORT -#include "netif/ppp_oe.h" -#endif /* PPPOE_SUPPORT */ - -#include <string.h> - -/** the time an ARP entry stays valid after its last update, - *  for ARP_TMR_INTERVAL = 5000, this is - *  (240 * 5) seconds = 20 minutes. - */ -#define ARP_MAXAGE 240 -/** the time an ARP entry stays pending after first request, - *  for ARP_TMR_INTERVAL = 5000, this is - *  (2 * 5) seconds = 10 seconds. - *  - *  @internal Keep this number at least 2, otherwise it might - *  run out instantly if the timeout occurs directly after a request. - */ -#define ARP_MAXPENDING 2 - -#define HWTYPE_ETHERNET 1 - -#define ARPH_HWLEN(hdr) (ntohs((hdr)->_hwlen_protolen) >> 8) -#define ARPH_PROTOLEN(hdr) (ntohs((hdr)->_hwlen_protolen) & 0xff) - -#define ARPH_HWLEN_SET(hdr, len) (hdr)->_hwlen_protolen = htons(ARPH_PROTOLEN(hdr) | ((len) << 8)) -#define ARPH_PROTOLEN_SET(hdr, len) (hdr)->_hwlen_protolen = htons((len) | (ARPH_HWLEN(hdr) << 8)) - -enum etharp_state { -  ETHARP_STATE_EMPTY = 0, -  ETHARP_STATE_PENDING, -  ETHARP_STATE_STABLE -}; - -struct etharp_entry { -#if ARP_QUEUEING -  /**  -   * Pointer to queue of pending outgoing packets on this ARP entry. -   */ -  struct etharp_q_entry *q; -#endif -  struct ip_addr ipaddr; -  struct eth_addr ethaddr; -  enum etharp_state state; -  u8_t ctime; -  struct netif *netif; -}; - -const struct eth_addr ethbroadcast = {{0xff,0xff,0xff,0xff,0xff,0xff}}; -const struct eth_addr ethzero = {{0,0,0,0,0,0}}; -static struct etharp_entry arp_table[ARP_TABLE_SIZE]; -#if !LWIP_NETIF_HWADDRHINT -static u8_t etharp_cached_entry; -#endif - -/** - * Try hard to create a new entry - we want the IP address to appear in - * the cache (even if this means removing an active entry or so). */ -#define ETHARP_TRY_HARD 1 -#define ETHARP_FIND_ONLY  2 - -#if LWIP_NETIF_HWADDRHINT -#define NETIF_SET_HINT(netif, hint)  if (((netif) != NULL) && ((netif)->addr_hint != NULL))  \ -                                      *((netif)->addr_hint) = (hint); -static s8_t find_entry(struct ip_addr *ipaddr, u8_t flags, struct netif *netif); -#else /* LWIP_NETIF_HWADDRHINT */ -static s8_t find_entry(struct ip_addr *ipaddr, u8_t flags); -#endif /* LWIP_NETIF_HWADDRHINT */ - -static err_t update_arp_entry(struct netif *netif, struct ip_addr *ipaddr, struct eth_addr *ethaddr, u8_t flags); - - -/* Some checks, instead of etharp_init(): */ -#if (LWIP_ARP && (ARP_TABLE_SIZE > 0x7f)) -  #error "If you want to use ARP, ARP_TABLE_SIZE must fit in an s8_t, so, you have to reduce it in your lwipopts.h" -#endif - - -#if ARP_QUEUEING -/** - * Free a complete queue of etharp entries - * - * @param q a qeueue of etharp_q_entry's to free - */ -static void -free_etharp_q(struct etharp_q_entry *q) -{ -  struct etharp_q_entry *r; -  LWIP_ASSERT("q != NULL", q != NULL); -  LWIP_ASSERT("q->p != NULL", q->p != NULL); -  while (q) { -    r = q; -    q = q->next; -    LWIP_ASSERT("r->p != NULL", (r->p != NULL)); -    pbuf_free(r->p); -    memp_free(MEMP_ARP_QUEUE, r); -  } -} -#endif - -/** - * Clears expired entries in the ARP table. - * - * This function should be called every ETHARP_TMR_INTERVAL microseconds (5 seconds), - * in order to expire entries in the ARP table. - */ -void -etharp_tmr(void) -{ -  u8_t i; - -  LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer\n")); -  /* remove expired entries from the ARP table */ -  for (i = 0; i < ARP_TABLE_SIZE; ++i) { -    arp_table[i].ctime++; -    if (((arp_table[i].state == ETHARP_STATE_STABLE) && -         (arp_table[i].ctime >= ARP_MAXAGE)) || -        ((arp_table[i].state == ETHARP_STATE_PENDING)  && -         (arp_table[i].ctime >= ARP_MAXPENDING))) { -         /* pending or stable entry has become old! */ -      LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer: expired %s entry %"U16_F".\n", -           arp_table[i].state == ETHARP_STATE_STABLE ? "stable" : "pending", (u16_t)i)); -      /* clean up entries that have just been expired */ -      /* remove from SNMP ARP index tree */ -      snmp_delete_arpidx_tree(arp_table[i].netif, &arp_table[i].ipaddr); -#if ARP_QUEUEING -      /* and empty packet queue */ -      if (arp_table[i].q != NULL) { -        /* remove all queued packets */ -        LWIP_DEBUGF(ETHARP_DEBUG, ("etharp_timer: freeing entry %"U16_F", packet queue %p.\n", (u16_t)i, (void *)(arp_table[i].q))); -        free_etharp_q(arp_table[i].q); -        arp_table[i].q = NULL; -      } -#endif -      /* recycle entry for re-use */       -      arp_table[i].state = ETHARP_STATE_EMPTY; -    } -#if ARP_QUEUEING -    /* still pending entry? (not expired) */ -    if (arp_table[i].state == ETHARP_STATE_PENDING) { -        /* resend an ARP query here? */ -    } -#endif -  } -} - -/** - * Search the ARP table for a matching or new entry. - *  - * If an IP address is given, return a pending or stable ARP entry that matches - * the address. If no match is found, create a new entry with this address set, - * but in state ETHARP_EMPTY. The caller must check and possibly change the - * state of the returned entry. - *  - * If ipaddr is NULL, return a initialized new entry in state ETHARP_EMPTY. - *  - * In all cases, attempt to create new entries from an empty entry. If no - * empty entries are available and ETHARP_TRY_HARD flag is set, recycle - * old entries. Heuristic choose the least important entry for recycling. - * - * @param ipaddr IP address to find in ARP cache, or to add if not found. - * @param flags - * - ETHARP_TRY_HARD: Try hard to create a entry by allowing recycling of - * active (stable or pending) entries. - *   - * @return The ARP entry index that matched or is created, ERR_MEM if no - * entry is found or could be recycled. - */ -static s8_t -#if LWIP_NETIF_HWADDRHINT -find_entry(struct ip_addr *ipaddr, u8_t flags, struct netif *netif) -#else /* LWIP_NETIF_HWADDRHINT */ -find_entry(struct ip_addr *ipaddr, u8_t flags) -#endif /* LWIP_NETIF_HWADDRHINT */ -{ -  s8_t old_pending = ARP_TABLE_SIZE, old_stable = ARP_TABLE_SIZE; -  s8_t empty = ARP_TABLE_SIZE; -  u8_t i = 0, age_pending = 0, age_stable = 0; -#if ARP_QUEUEING -  /* oldest entry with packets on queue */ -  s8_t old_queue = ARP_TABLE_SIZE; -  /* its age */ -  u8_t age_queue = 0; -#endif - -  /* First, test if the last call to this function asked for the -   * same address. If so, we're really fast! */ -  if (ipaddr) { -    /* ipaddr to search for was given */ -#if LWIP_NETIF_HWADDRHINT -    if ((netif != NULL) && (netif->addr_hint != NULL)) { -      /* per-pcb cached entry was given */ -      u8_t per_pcb_cache = *(netif->addr_hint); -      if ((per_pcb_cache < ARP_TABLE_SIZE) && arp_table[per_pcb_cache].state == ETHARP_STATE_STABLE) { -        /* the per-pcb-cached entry is stable */ -        if (ip_addr_cmp(ipaddr, &arp_table[per_pcb_cache].ipaddr)) { -          /* per-pcb cached entry was the right one! */ -          ETHARP_STATS_INC(etharp.cachehit); -          return per_pcb_cache; -        } -      } -    } -#else /* #if LWIP_NETIF_HWADDRHINT */ -    if (arp_table[etharp_cached_entry].state == ETHARP_STATE_STABLE) { -      /* the cached entry is stable */ -      if (ip_addr_cmp(ipaddr, &arp_table[etharp_cached_entry].ipaddr)) { -        /* cached entry was the right one! */ -        ETHARP_STATS_INC(etharp.cachehit); -        return etharp_cached_entry; -      } -    } -#endif /* #if LWIP_NETIF_HWADDRHINT */ -  } - -  /** -   * a) do a search through the cache, remember candidates -   * b) select candidate entry -   * c) create new entry -   */ - -  /* a) in a single search sweep, do all of this -   * 1) remember the first empty entry (if any) -   * 2) remember the oldest stable entry (if any) -   * 3) remember the oldest pending entry without queued packets (if any) -   * 4) remember the oldest pending entry with queued packets (if any) -   * 5) search for a matching IP entry, either pending or stable -   *    until 5 matches, or all entries are searched for. -   */ - -  for (i = 0; i < ARP_TABLE_SIZE; ++i) { -    /* no empty entry found yet and now we do find one? */ -    if ((empty == ARP_TABLE_SIZE) && (arp_table[i].state == ETHARP_STATE_EMPTY)) { -      LWIP_DEBUGF(ETHARP_DEBUG, ("find_entry: found empty entry %"U16_F"\n", (u16_t)i)); -      /* remember first empty entry */ -      empty = i; -    } -    /* pending entry? */ -    else if (arp_table[i].state == ETHARP_STATE_PENDING) { -      /* if given, does IP address match IP address in ARP entry? */ -      if (ipaddr && ip_addr_cmp(ipaddr, &arp_table[i].ipaddr)) { -        LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: found matching pending entry %"U16_F"\n", (u16_t)i)); -        /* found exact IP address match, simply bail out */ -#if LWIP_NETIF_HWADDRHINT -        NETIF_SET_HINT(netif, i); -#else /* #if LWIP_NETIF_HWADDRHINT */ -        etharp_cached_entry = i; -#endif /* #if LWIP_NETIF_HWADDRHINT */ -        return i; -#if ARP_QUEUEING -      /* pending with queued packets? */ -      } else if (arp_table[i].q != NULL) { -        if (arp_table[i].ctime >= age_queue) { -          old_queue = i; -          age_queue = arp_table[i].ctime; -        } -#endif -      /* pending without queued packets? */ -      } else { -        if (arp_table[i].ctime >= age_pending) { -          old_pending = i; -          age_pending = arp_table[i].ctime; -        } -      }         -    } -    /* stable entry? */ -    else if (arp_table[i].state == ETHARP_STATE_STABLE) { -      /* if given, does IP address match IP address in ARP entry? */ -      if (ipaddr && ip_addr_cmp(ipaddr, &arp_table[i].ipaddr)) { -        LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: found matching stable entry %"U16_F"\n", (u16_t)i)); -        /* found exact IP address match, simply bail out */ -#if LWIP_NETIF_HWADDRHINT -        NETIF_SET_HINT(netif, i); -#else /* #if LWIP_NETIF_HWADDRHINT */ -        etharp_cached_entry = i; -#endif /* #if LWIP_NETIF_HWADDRHINT */ -        return i; -      /* remember entry with oldest stable entry in oldest, its age in maxtime */ -      } else if (arp_table[i].ctime >= age_stable) { -        old_stable = i; -        age_stable = arp_table[i].ctime; -      } -    } -  } -  /* { we have no match } => try to create a new entry */ -    -  /* no empty entry found and not allowed to recycle? */ -  if (((empty == ARP_TABLE_SIZE) && ((flags & ETHARP_TRY_HARD) == 0)) -      /* or don't create new entry, only search? */ -      || ((flags & ETHARP_FIND_ONLY) != 0)) { -    LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: no empty entry found and not allowed to recycle\n")); -    return (s8_t)ERR_MEM; -  } -   -  /* b) choose the least destructive entry to recycle: -   * 1) empty entry -   * 2) oldest stable entry -   * 3) oldest pending entry without queued packets -   * 4) oldest pending entry with queued packets -   *  -   * { ETHARP_TRY_HARD is set at this point } -   */  - -  /* 1) empty entry available? */ -  if (empty < ARP_TABLE_SIZE) { -    i = empty; -    LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: selecting empty entry %"U16_F"\n", (u16_t)i)); -  } -  /* 2) found recyclable stable entry? */ -  else if (old_stable < ARP_TABLE_SIZE) { -    /* recycle oldest stable*/ -    i = old_stable; -    LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: selecting oldest stable entry %"U16_F"\n", (u16_t)i)); -#if ARP_QUEUEING -    /* no queued packets should exist on stable entries */ -    LWIP_ASSERT("arp_table[i].q == NULL", arp_table[i].q == NULL); -#endif -  /* 3) found recyclable pending entry without queued packets? */ -  } else if (old_pending < ARP_TABLE_SIZE) { -    /* recycle oldest pending */ -    i = old_pending; -    LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: selecting oldest pending entry %"U16_F" (without queue)\n", (u16_t)i)); -#if ARP_QUEUEING -  /* 4) found recyclable pending entry with queued packets? */ -  } else if (old_queue < ARP_TABLE_SIZE) { -    /* recycle oldest pending */ -    i = old_queue; -    LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("find_entry: selecting oldest pending entry %"U16_F", freeing packet queue %p\n", (u16_t)i, (void *)(arp_table[i].q))); -    free_etharp_q(arp_table[i].q); -    arp_table[i].q = NULL; -#endif -    /* no empty or recyclable entries found */ -  } else { -    return (s8_t)ERR_MEM; -  } - -  /* { empty or recyclable entry found } */ -  LWIP_ASSERT("i < ARP_TABLE_SIZE", i < ARP_TABLE_SIZE); - -  if (arp_table[i].state != ETHARP_STATE_EMPTY) -  { -    snmp_delete_arpidx_tree(arp_table[i].netif, &arp_table[i].ipaddr); -  } -  /* recycle entry (no-op for an already empty entry) */ -  arp_table[i].state = ETHARP_STATE_EMPTY; - -  /* IP address given? */ -  if (ipaddr != NULL) { -    /* set IP address */ -    ip_addr_set(&arp_table[i].ipaddr, ipaddr); -  } -  arp_table[i].ctime = 0; -#if LWIP_NETIF_HWADDRHINT -  NETIF_SET_HINT(netif, i); -#else /* #if LWIP_NETIF_HWADDRHINT */ -  etharp_cached_entry = i; -#endif /* #if LWIP_NETIF_HWADDRHINT */ -  return (err_t)i; -} - -/** - * Send an IP packet on the network using netif->linkoutput - * The ethernet header is filled in before sending. - * - * @params netif the lwIP network interface on which to send the packet - * @params p the packet to send, p->payload pointing to the (uninitialized) ethernet header - * @params src the source MAC address to be copied into the ethernet header - * @params dst the destination MAC address to be copied into the ethernet header - * @return ERR_OK if the packet was sent, any other err_t on failure - */ -static err_t -etharp_send_ip(struct netif *netif, struct pbuf *p, struct eth_addr *src, struct eth_addr *dst) -{ -  struct eth_hdr *ethhdr = p->payload; -  u8_t k; - -  LWIP_ASSERT("netif->hwaddr_len must be the same as ETHARP_HWADDR_LEN for etharp!", -              (netif->hwaddr_len == ETHARP_HWADDR_LEN)); -  k = ETHARP_HWADDR_LEN; -  while(k > 0) { -    k--; -    ethhdr->dest.addr[k] = dst->addr[k]; -    ethhdr->src.addr[k]  = src->addr[k]; -  } -  ethhdr->type = htons(ETHTYPE_IP); -  LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_send_ip: sending packet %p\n", (void *)p)); -  /* send the packet */ -  return netif->linkoutput(netif, p); -} - -/** - * Update (or insert) a IP/MAC address pair in the ARP cache. - * - * If a pending entry is resolved, any queued packets will be sent - * at this point. - *  - * @param ipaddr IP address of the inserted ARP entry. - * @param ethaddr Ethernet address of the inserted ARP entry. - * @param flags Defines behaviour: - * - ETHARP_TRY_HARD Allows ARP to insert this as a new item. If not specified, - * only existing ARP entries will be updated. - * - * @return - * - ERR_OK Succesfully updated ARP cache. - * - ERR_MEM If we could not add a new ARP entry when ETHARP_TRY_HARD was set. - * - ERR_ARG Non-unicast address given, those will not appear in ARP cache. - * - * @see pbuf_free() - */ -static err_t -update_arp_entry(struct netif *netif, struct ip_addr *ipaddr, struct eth_addr *ethaddr, u8_t flags) -{ -  s8_t i; -  u8_t k; -  LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("update_arp_entry()\n")); -  LWIP_ASSERT("netif->hwaddr_len == ETHARP_HWADDR_LEN", netif->hwaddr_len == ETHARP_HWADDR_LEN); -  LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("update_arp_entry: %"U16_F".%"U16_F".%"U16_F".%"U16_F" - %02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F":%02"X16_F"\n", -                                        ip4_addr1(ipaddr), ip4_addr2(ipaddr), ip4_addr3(ipaddr), ip4_addr4(ipaddr),  -                                        ethaddr->addr[0], ethaddr->addr[1], ethaddr->addr[2], -                                        ethaddr->addr[3], ethaddr->addr[4], ethaddr->addr[5])); -  /* non-unicast address? */ -  if (ip_addr_isany(ipaddr) || -      ip_addr_isbroadcast(ipaddr, netif) || -      ip_addr_ismulticast(ipaddr)) { -    LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("update_arp_entry: will not add non-unicast IP address to ARP cache\n")); -    return ERR_ARG; -  } -  /* find or create ARP entry */ -#if LWIP_NETIF_HWADDRHINT -  i = find_entry(ipaddr, flags, netif); -#else /* LWIP_NETIF_HWADDRHINT */ -  i = find_entry(ipaddr, flags); -#endif /* LWIP_NETIF_HWADDRHINT */ -  /* bail out if no entry could be found */ -  if (i < 0) -    return (err_t)i; -   -  /* mark it stable */ -  arp_table[i].state = ETHARP_STATE_STABLE; -  /* record network interface */ -  arp_table[i].netif = netif; - -  /* insert in SNMP ARP index tree */ -  snmp_insert_arpidx_tree(netif, &arp_table[i].ipaddr); - -  LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("update_arp_entry: updating stable entry %"S16_F"\n", (s16_t)i)); -  /* update address */ -  k = ETHARP_HWADDR_LEN; -  while (k > 0) { -    k--; -    arp_table[i].ethaddr.addr[k] = ethaddr->addr[k]; -  } -  /* reset time stamp */ -  arp_table[i].ctime = 0; -#if ARP_QUEUEING -  /* this is where we will send out queued packets! */ -  while (arp_table[i].q != NULL) { -    struct pbuf *p; -    /* remember remainder of queue */ -    struct etharp_q_entry *q = arp_table[i].q; -    /* pop first item off the queue */ -    arp_table[i].q = q->next; -    /* get the packet pointer */ -    p = q->p; -    /* now queue entry can be freed */ -    memp_free(MEMP_ARP_QUEUE, q); -    /* send the queued IP packet */ -    etharp_send_ip(netif, p, (struct eth_addr*)(netif->hwaddr), ethaddr); -    /* free the queued IP packet */ -    pbuf_free(p); -  } -#endif -  return ERR_OK; -} - -/** - * Finds (stable) ethernet/IP address pair from ARP table - * using interface and IP address index. - * @note the addresses in the ARP table are in network order! - * - * @param netif points to interface index - * @param ipaddr points to the (network order) IP address index - * @param eth_ret points to return pointer - * @param ip_ret points to return pointer - * @return table index if found, -1 otherwise - */ -s8_t -etharp_find_addr(struct netif *netif, struct ip_addr *ipaddr, -         struct eth_addr **eth_ret, struct ip_addr **ip_ret) -{ -  s8_t i; - -  LWIP_UNUSED_ARG(netif); - -#if LWIP_NETIF_HWADDRHINT -  i = find_entry(ipaddr, ETHARP_FIND_ONLY, NULL); -#else /* LWIP_NETIF_HWADDRHINT */ -  i = find_entry(ipaddr, ETHARP_FIND_ONLY); -#endif /* LWIP_NETIF_HWADDRHINT */ -  if((i >= 0) && arp_table[i].state == ETHARP_STATE_STABLE) { -      *eth_ret = &arp_table[i].ethaddr; -      *ip_ret = &arp_table[i].ipaddr; -      return i; -  } -  return -1; -} - -/** - * Updates the ARP table using the given IP packet. - * - * Uses the incoming IP packet's source address to update the - * ARP cache for the local network. The function does not alter - * or free the packet. This function must be called before the - * packet p is passed to the IP layer. - * - * @param netif The lwIP network interface on which the IP packet pbuf arrived. - * @param p The IP packet that arrived on netif. - * - * @return NULL - * - * @see pbuf_free() - */ -void -etharp_ip_input(struct netif *netif, struct pbuf *p) -{ -  struct eth_hdr *ethhdr; -  struct ip_hdr *iphdr; -  LWIP_ERROR("netif != NULL", (netif != NULL), return;); -  /* Only insert an entry if the source IP address of the -     incoming IP packet comes from a host on the local network. */ -  ethhdr = p->payload; -  iphdr = (struct ip_hdr *)((u8_t*)ethhdr + SIZEOF_ETH_HDR); -#if ETHARP_SUPPORT_VLAN -  if (ethhdr->type == ETHTYPE_VLAN) { -    iphdr = (struct ip_hdr *)((u8_t*)ethhdr + SIZEOF_ETH_HDR + SIZEOF_VLAN_HDR); -  } -#endif /* ETHARP_SUPPORT_VLAN */ - -  /* source is not on the local network? */ -  if (!ip_addr_netcmp(&(iphdr->src), &(netif->ip_addr), &(netif->netmask))) { -    /* do nothing */ -    return; -  } - -  LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_ip_input: updating ETHARP table.\n")); -  /* update ARP table */ -  /* @todo We could use ETHARP_TRY_HARD if we think we are going to talk -   * back soon (for example, if the destination IP address is ours. */ -  update_arp_entry(netif, &(iphdr->src), &(ethhdr->src), 0); -} - - -/** - * Responds to ARP requests to us. Upon ARP replies to us, add entry to cache   - * send out queued IP packets. Updates cache with snooped address pairs. - * - * Should be called for incoming ARP packets. The pbuf in the argument - * is freed by this function. - * - * @param netif The lwIP network interface on which the ARP packet pbuf arrived. - * @param ethaddr Ethernet address of netif. - * @param p The ARP packet that arrived on netif. Is freed by this function. - * - * @return NULL - * - * @see pbuf_free() - */ -void -etharp_arp_input(struct netif *netif, struct eth_addr *ethaddr, struct pbuf *p) -{ -  struct etharp_hdr *hdr; -  struct eth_hdr *ethhdr; -  /* these are aligned properly, whereas the ARP header fields might not be */ -  struct ip_addr sipaddr, dipaddr; -  u8_t i; -  u8_t for_us; -#if LWIP_AUTOIP -  const u8_t * ethdst_hwaddr; -#endif /* LWIP_AUTOIP */ - -  LWIP_ERROR("netif != NULL", (netif != NULL), return;); -   -  /* drop short ARP packets: we have to check for p->len instead of p->tot_len here -     since a struct etharp_hdr is pointed to p->payload, so it musn't be chained! */ -  if (p->len < SIZEOF_ETHARP_PACKET) { -    LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, -      ("etharp_arp_input: packet dropped, too short (%"S16_F"/%"S16_F")\n", p->tot_len, -      (s16_t)SIZEOF_ETHARP_PACKET)); -    ETHARP_STATS_INC(etharp.lenerr); -    ETHARP_STATS_INC(etharp.drop); -    pbuf_free(p); -    return; -  } - -  ethhdr = p->payload; -  hdr = (struct etharp_hdr *)((u8_t*)ethhdr + SIZEOF_ETH_HDR); -#if ETHARP_SUPPORT_VLAN -  if (ethhdr->type == ETHTYPE_VLAN) { -    hdr = (struct etharp_hdr *)(((u8_t*)ethhdr) + SIZEOF_ETH_HDR + SIZEOF_VLAN_HDR); -  } -#endif /* ETHARP_SUPPORT_VLAN */ - -  /* RFC 826 "Packet Reception": */ -  if ((hdr->hwtype != htons(HWTYPE_ETHERNET)) || -      (hdr->_hwlen_protolen != htons((ETHARP_HWADDR_LEN << 8) | sizeof(struct ip_addr))) || -      (hdr->proto != htons(ETHTYPE_IP)) || -      (ethhdr->type != htons(ETHTYPE_ARP)))  { -    LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_WARNING, -      ("etharp_arp_input: packet dropped, wrong hw type, hwlen, proto, protolen or ethernet type (%"U16_F"/%"U16_F"/%"U16_F"/%"U16_F"/%"U16_F")\n", -      hdr->hwtype, ARPH_HWLEN(hdr), hdr->proto, ARPH_PROTOLEN(hdr), ethhdr->type)); -    ETHARP_STATS_INC(etharp.proterr); -    ETHARP_STATS_INC(etharp.drop); -    pbuf_free(p); -    return; -  } -  ETHARP_STATS_INC(etharp.recv); - -#if LWIP_AUTOIP -  /* We have to check if a host already has configured our random -   * created link local address and continously check if there is -   * a host with this IP-address so we can detect collisions */ -  autoip_arp_reply(netif, hdr); -#endif /* LWIP_AUTOIP */ - -  /* Copy struct ip_addr2 to aligned ip_addr, to support compilers without -   * structure packing (not using structure copy which breaks strict-aliasing rules). */ -  SMEMCPY(&sipaddr, &hdr->sipaddr, sizeof(sipaddr)); -  SMEMCPY(&dipaddr, &hdr->dipaddr, sizeof(dipaddr)); - -  /* this interface is not configured? */ -  if (netif->ip_addr.addr == 0) { -    for_us = 0; -  } else { -    /* ARP packet directed to us? */ -    for_us = ip_addr_cmp(&dipaddr, &(netif->ip_addr)); -  } - -  /* ARP message directed to us? */ -  if (for_us) { -    /* add IP address in ARP cache; assume requester wants to talk to us. -     * can result in directly sending the queued packets for this host. */ -    update_arp_entry(netif, &sipaddr, &(hdr->shwaddr), ETHARP_TRY_HARD); -  /* ARP message not directed to us? */ -  } else { -    /* update the source IP address in the cache, if present */ -    update_arp_entry(netif, &sipaddr, &(hdr->shwaddr), 0); -  } - -  /* now act on the message itself */ -  switch (htons(hdr->opcode)) { -  /* ARP request? */ -  case ARP_REQUEST: -    /* ARP request. If it asked for our address, we send out a -     * reply. In any case, we time-stamp any existing ARP entry, -     * and possiby send out an IP packet that was queued on it. */ - -    LWIP_DEBUGF (ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: incoming ARP request\n")); -    /* ARP request for our address? */ -    if (for_us) { - -      LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: replying to ARP request for our IP address\n")); -      /* Re-use pbuf to send ARP reply. -         Since we are re-using an existing pbuf, we can't call etharp_raw since -         that would allocate a new pbuf. */ -      hdr->opcode = htons(ARP_REPLY); - -      hdr->dipaddr = hdr->sipaddr; -      SMEMCPY(&hdr->sipaddr, &netif->ip_addr, sizeof(hdr->sipaddr)); - -      LWIP_ASSERT("netif->hwaddr_len must be the same as ETHARP_HWADDR_LEN for etharp!", -                  (netif->hwaddr_len == ETHARP_HWADDR_LEN)); -      i = ETHARP_HWADDR_LEN; -#if LWIP_AUTOIP -      /* If we are using Link-Local, ARP packets must be broadcast on the -       * link layer. (See RFC3927 Section 2.5) */ -      ethdst_hwaddr = ((netif->autoip != NULL) && (netif->autoip->state != AUTOIP_STATE_OFF)) ? (u8_t*)(ethbroadcast.addr) : hdr->shwaddr.addr; -#endif /* LWIP_AUTOIP */ - -      while(i > 0) { -        i--; -        hdr->dhwaddr.addr[i] = hdr->shwaddr.addr[i]; -#if LWIP_AUTOIP -        ethhdr->dest.addr[i] = ethdst_hwaddr[i]; -#else  /* LWIP_AUTOIP */ -        ethhdr->dest.addr[i] = hdr->shwaddr.addr[i]; -#endif /* LWIP_AUTOIP */ -        hdr->shwaddr.addr[i] = ethaddr->addr[i]; -        ethhdr->src.addr[i] = ethaddr->addr[i]; -      } - -      /* hwtype, hwaddr_len, proto, protolen and the type in the ethernet header -         are already correct, we tested that before */ - -      /* return ARP reply */ -      netif->linkoutput(netif, p); -    /* we are not configured? */ -    } else if (netif->ip_addr.addr == 0) { -      /* { for_us == 0 and netif->ip_addr.addr == 0 } */ -      LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: we are unconfigured, ARP request ignored.\n")); -    /* request was not directed to us */ -    } else { -      /* { for_us == 0 and netif->ip_addr.addr != 0 } */ -      LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: ARP request was not for us.\n")); -    } -    break; -  case ARP_REPLY: -    /* ARP reply. We already updated the ARP cache earlier. */ -    LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: incoming ARP reply\n")); -#if (LWIP_DHCP && DHCP_DOES_ARP_CHECK) -    /* DHCP wants to know about ARP replies from any host with an -     * IP address also offered to us by the DHCP server. We do not -     * want to take a duplicate IP address on a single network. -     * @todo How should we handle redundant (fail-over) interfaces? */ -    dhcp_arp_reply(netif, &sipaddr); -#endif -    break; -  default: -    LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_arp_input: ARP unknown opcode type %"S16_F"\n", htons(hdr->opcode))); -    ETHARP_STATS_INC(etharp.err); -    break; -  } -  /* free ARP packet */ -  pbuf_free(p); -} - -/** - * Resolve and fill-in Ethernet address header for outgoing IP packet. - * - * For IP multicast and broadcast, corresponding Ethernet addresses - * are selected and the packet is transmitted on the link. - * - * For unicast addresses, the packet is submitted to etharp_query(). In - * case the IP address is outside the local network, the IP address of - * the gateway is used. - * - * @param netif The lwIP network interface which the IP packet will be sent on. - * @param q The pbuf(s) containing the IP packet to be sent. - * @param ipaddr The IP address of the packet destination. - * - * @return - * - ERR_RTE No route to destination (no gateway to external networks), - * or the return type of either etharp_query() or etharp_send_ip(). - */ -err_t -etharp_output(struct netif *netif, struct pbuf *q, struct ip_addr *ipaddr) -{ -  struct eth_addr *dest, mcastaddr; - -  /* make room for Ethernet header - should not fail */ -  if (pbuf_header(q, sizeof(struct eth_hdr)) != 0) { -    /* bail out */ -    LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, -      ("etharp_output: could not allocate room for header.\n")); -    LINK_STATS_INC(link.lenerr); -    return ERR_BUF; -  } - -  /* assume unresolved Ethernet address */ -  dest = NULL; -  /* Determine on destination hardware address. Broadcasts and multicasts -   * are special, other IP addresses are looked up in the ARP table. */ - -  /* broadcast destination IP address? */ -  if (ip_addr_isbroadcast(ipaddr, netif)) { -    /* broadcast on Ethernet also */ -    dest = (struct eth_addr *)ðbroadcast; -  /* multicast destination IP address? */ -  } else if (ip_addr_ismulticast(ipaddr)) { -    /* Hash IP multicast address to MAC address.*/ -    mcastaddr.addr[0] = 0x01; -    mcastaddr.addr[1] = 0x00; -    mcastaddr.addr[2] = 0x5e; -    mcastaddr.addr[3] = ip4_addr2(ipaddr) & 0x7f; -    mcastaddr.addr[4] = ip4_addr3(ipaddr); -    mcastaddr.addr[5] = ip4_addr4(ipaddr); -    /* destination Ethernet address is multicast */ -    dest = &mcastaddr; -  /* unicast destination IP address? */ -  } else { -    /* outside local network? */ -    if (!ip_addr_netcmp(ipaddr, &(netif->ip_addr), &(netif->netmask))) { -      /* interface has default gateway? */ -      if (netif->gw.addr != 0) { -        /* send to hardware address of default gateway IP address */ -        ipaddr = &(netif->gw); -      /* no default gateway available */ -      } else { -        /* no route to destination error (default gateway missing) */ -        return ERR_RTE; -      } -    } -    /* queue on destination Ethernet address belonging to ipaddr */ -    return etharp_query(netif, ipaddr, q); -  } - -  /* continuation for multicast/broadcast destinations */ -  /* obtain source Ethernet address of the given interface */ -  /* send packet directly on the link */ -  return etharp_send_ip(netif, q, (struct eth_addr*)(netif->hwaddr), dest); -} - -/** - * Send an ARP request for the given IP address and/or queue a packet. - * - * If the IP address was not yet in the cache, a pending ARP cache entry - * is added and an ARP request is sent for the given address. The packet - * is queued on this entry. - * - * If the IP address was already pending in the cache, a new ARP request - * is sent for the given address. The packet is queued on this entry. - * - * If the IP address was already stable in the cache, and a packet is - * given, it is directly sent and no ARP request is sent out.  - *  - * If the IP address was already stable in the cache, and no packet is - * given, an ARP request is sent out. - *  - * @param netif The lwIP network interface on which ipaddr - * must be queried for. - * @param ipaddr The IP address to be resolved. - * @param q If non-NULL, a pbuf that must be delivered to the IP address. - * q is not freed by this function. - * - * @note q must only be ONE packet, not a packet queue! - * - * @return - * - ERR_BUF Could not make room for Ethernet header. - * - ERR_MEM Hardware address unknown, and no more ARP entries available - *   to query for address or queue the packet. - * - ERR_MEM Could not queue packet due to memory shortage. - * - ERR_RTE No route to destination (no gateway to external networks). - * - ERR_ARG Non-unicast address given, those will not appear in ARP cache. - * - */ -err_t -etharp_query(struct netif *netif, struct ip_addr *ipaddr, struct pbuf *q) -{ -  struct eth_addr * srcaddr = (struct eth_addr *)netif->hwaddr; -  err_t result = ERR_MEM; -  s8_t i; /* ARP entry index */ - -  /* non-unicast address? */ -  if (ip_addr_isbroadcast(ipaddr, netif) || -      ip_addr_ismulticast(ipaddr) || -      ip_addr_isany(ipaddr)) { -    LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: will not add non-unicast IP address to ARP cache\n")); -    return ERR_ARG; -  } - -  /* find entry in ARP cache, ask to create entry if queueing packet */ -#if LWIP_NETIF_HWADDRHINT -  i = find_entry(ipaddr, ETHARP_TRY_HARD, netif); -#else /* LWIP_NETIF_HWADDRHINT */ -  i = find_entry(ipaddr, ETHARP_TRY_HARD); -#endif /* LWIP_NETIF_HWADDRHINT */ - -  /* could not find or create entry? */ -  if (i < 0) { -    LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not create ARP entry\n")); -    if (q) { -      LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: packet dropped\n")); -      ETHARP_STATS_INC(etharp.memerr); -    } -    return (err_t)i; -  } - -  /* mark a fresh entry as pending (we just sent a request) */ -  if (arp_table[i].state == ETHARP_STATE_EMPTY) { -    arp_table[i].state = ETHARP_STATE_PENDING; -  } - -  /* { i is either a STABLE or (new or existing) PENDING entry } */ -  LWIP_ASSERT("arp_table[i].state == PENDING or STABLE", -  ((arp_table[i].state == ETHARP_STATE_PENDING) || -   (arp_table[i].state == ETHARP_STATE_STABLE))); - -  /* do we have a pending entry? or an implicit query request? */ -  if ((arp_table[i].state == ETHARP_STATE_PENDING) || (q == NULL)) { -    /* try to resolve it; send out ARP request */ -    result = etharp_request(netif, ipaddr); -    if (result != ERR_OK) { -      /* ARP request couldn't be sent */ -      /* We don't re-send arp request in etharp_tmr, but we still queue packets, -         since this failure could be temporary, and the next packet calling -         etharp_query again could lead to sending the queued packets. */ -    } -  } -   -  /* packet given? */ -  if (q != NULL) { -    /* stable entry? */ -    if (arp_table[i].state == ETHARP_STATE_STABLE) { -      /* we have a valid IP->Ethernet address mapping */ -      /* send the packet */ -      result = etharp_send_ip(netif, q, srcaddr, &(arp_table[i].ethaddr)); -    /* pending entry? (either just created or already pending */ -    } else if (arp_table[i].state == ETHARP_STATE_PENDING) { -#if ARP_QUEUEING /* queue the given q packet */ -      struct pbuf *p; -      int copy_needed = 0; -      /* IF q includes a PBUF_REF, PBUF_POOL or PBUF_RAM, we have no choice but -       * to copy the whole queue into a new PBUF_RAM (see bug #11400)  -       * PBUF_ROMs can be left as they are, since ROM must not get changed. */ -      p = q; -      while (p) { -        LWIP_ASSERT("no packet queues allowed!", (p->len != p->tot_len) || (p->next == 0)); -        if(p->type != PBUF_ROM) { -          copy_needed = 1; -          break; -        } -        p = p->next; -      } -      if(copy_needed) { -        /* copy the whole packet into new pbufs */ -        p = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_RAM); -        if(p != NULL) { -          if (pbuf_copy(p, q) != ERR_OK) { -            pbuf_free(p); -            p = NULL; -          } -        } -      } else { -        /* referencing the old pbuf is enough */ -        p = q; -        pbuf_ref(p); -      } -      /* packet could be taken over? */ -      if (p != NULL) { -        /* queue packet ... */ -        struct etharp_q_entry *new_entry; -        /* allocate a new arp queue entry */ -        new_entry = memp_malloc(MEMP_ARP_QUEUE); -        if (new_entry != NULL) { -          new_entry->next = 0; -          new_entry->p = p; -          if(arp_table[i].q != NULL) { -            /* queue was already existent, append the new entry to the end */ -            struct etharp_q_entry *r; -            r = arp_table[i].q; -            while (r->next != NULL) { -              r = r->next; -            } -            r->next = new_entry; -          } else { -            /* queue did not exist, first item in queue */ -            arp_table[i].q = new_entry; -          } -          LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: queued packet %p on ARP entry %"S16_F"\n", (void *)q, (s16_t)i)); -          result = ERR_OK; -        } else { -          /* the pool MEMP_ARP_QUEUE is empty */ -          pbuf_free(p); -          LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q)); -          /* { result == ERR_MEM } through initialization */ -        } -      } else { -        ETHARP_STATS_INC(etharp.memerr); -        LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: could not queue a copy of PBUF_REF packet %p (out of memory)\n", (void *)q)); -        /* { result == ERR_MEM } through initialization */ -      } -#else /* ARP_QUEUEING == 0 */ -      /* q && state == PENDING && ARP_QUEUEING == 0 => result = ERR_MEM */ -      /* { result == ERR_MEM } through initialization */ -      LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_query: Ethernet destination address unknown, queueing disabled, packet %p dropped\n", (void *)q)); -#endif -    } -  } -  return result; -} - -/** - * Send a raw ARP packet (opcode and all addresses can be modified) - * - * @param netif the lwip network interface on which to send the ARP packet - * @param ethsrc_addr the source MAC address for the ethernet header - * @param ethdst_addr the destination MAC address for the ethernet header - * @param hwsrc_addr the source MAC address for the ARP protocol header - * @param ipsrc_addr the source IP address for the ARP protocol header - * @param hwdst_addr the destination MAC address for the ARP protocol header - * @param ipdst_addr the destination IP address for the ARP protocol header - * @param opcode the type of the ARP packet - * @return ERR_OK if the ARP packet has been sent - *         ERR_MEM if the ARP packet couldn't be allocated - *         any other err_t on failure - */ -#if !LWIP_AUTOIP -static -#endif /* LWIP_AUTOIP */ -err_t -etharp_raw(struct netif *netif, const struct eth_addr *ethsrc_addr, -           const struct eth_addr *ethdst_addr, -           const struct eth_addr *hwsrc_addr, const struct ip_addr *ipsrc_addr, -           const struct eth_addr *hwdst_addr, const struct ip_addr *ipdst_addr, -           const u16_t opcode) -{ -  struct pbuf *p; -  err_t result = ERR_OK; -  u8_t k; /* ARP entry index */ -  struct eth_hdr *ethhdr; -  struct etharp_hdr *hdr; -#if LWIP_AUTOIP -  const u8_t * ethdst_hwaddr; -#endif /* LWIP_AUTOIP */ - -  /* allocate a pbuf for the outgoing ARP request packet */ -  p = pbuf_alloc(PBUF_RAW, SIZEOF_ETHARP_PACKET, PBUF_RAM); -  /* could allocate a pbuf for an ARP request? */ -  if (p == NULL) { -    LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_LEVEL_SERIOUS, -      ("etharp_raw: could not allocate pbuf for ARP request.\n")); -    ETHARP_STATS_INC(etharp.memerr); -    return ERR_MEM; -  } -  LWIP_ASSERT("check that first pbuf can hold struct etharp_hdr", -              (p->len >= SIZEOF_ETHARP_PACKET)); - -  ethhdr = p->payload; -  hdr = (struct etharp_hdr *)((u8_t*)ethhdr + SIZEOF_ETH_HDR); -  LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_raw: sending raw ARP packet.\n")); -  hdr->opcode = htons(opcode); - -  LWIP_ASSERT("netif->hwaddr_len must be the same as ETHARP_HWADDR_LEN for etharp!", -              (netif->hwaddr_len == ETHARP_HWADDR_LEN)); -  k = ETHARP_HWADDR_LEN; -#if LWIP_AUTOIP -  /* If we are using Link-Local, ARP packets must be broadcast on the -   * link layer. (See RFC3927 Section 2.5) */ -  ethdst_hwaddr = ((netif->autoip != NULL) && (netif->autoip->state != AUTOIP_STATE_OFF)) ? (u8_t*)(ethbroadcast.addr) : ethdst_addr->addr; -#endif /* LWIP_AUTOIP */ -  /* Write MAC-Addresses (combined loop for both headers) */ -  while(k > 0) { -    k--; -    /* Write the ARP MAC-Addresses */ -    hdr->shwaddr.addr[k] = hwsrc_addr->addr[k]; -    hdr->dhwaddr.addr[k] = hwdst_addr->addr[k]; -    /* Write the Ethernet MAC-Addresses */ -#if LWIP_AUTOIP -    ethhdr->dest.addr[k] = ethdst_hwaddr[k]; -#else  /* LWIP_AUTOIP */ -    ethhdr->dest.addr[k] = ethdst_addr->addr[k]; -#endif /* LWIP_AUTOIP */ -    ethhdr->src.addr[k]  = ethsrc_addr->addr[k]; -  } -  hdr->sipaddr = *(struct ip_addr2 *)ipsrc_addr; -  hdr->dipaddr = *(struct ip_addr2 *)ipdst_addr; - -  hdr->hwtype = htons(HWTYPE_ETHERNET); -  hdr->proto = htons(ETHTYPE_IP); -  /* set hwlen and protolen together */ -  hdr->_hwlen_protolen = htons((ETHARP_HWADDR_LEN << 8) | sizeof(struct ip_addr)); - -  ethhdr->type = htons(ETHTYPE_ARP); -  /* send ARP query */ -  result = netif->linkoutput(netif, p); -  ETHARP_STATS_INC(etharp.xmit); -  /* free ARP query packet */ -  pbuf_free(p); -  p = NULL; -  /* could not allocate pbuf for ARP request */ - -  return result; -} - -/** - * Send an ARP request packet asking for ipaddr. - * - * @param netif the lwip network interface on which to send the request - * @param ipaddr the IP address for which to ask - * @return ERR_OK if the request has been sent - *         ERR_MEM if the ARP packet couldn't be allocated - *         any other err_t on failure - */ -err_t -etharp_request(struct netif *netif, struct ip_addr *ipaddr) -{ -  LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ("etharp_request: sending ARP request.\n")); -  return etharp_raw(netif, (struct eth_addr *)netif->hwaddr, ðbroadcast, -                    (struct eth_addr *)netif->hwaddr, &netif->ip_addr, ðzero, -                    ipaddr, ARP_REQUEST); -} - -/** - * Process received ethernet frames. Using this function instead of directly - * calling ip_input and passing ARP frames through etharp in ethernetif_input, - * the ARP cache is protected from concurrent access. - * - * @param p the recevied packet, p->payload pointing to the ethernet header - * @param netif the network interface on which the packet was received - */ -err_t -ethernet_input(struct pbuf *p, struct netif *netif) -{ -  struct eth_hdr* ethhdr; -  u16_t type; - -  /* points to packet payload, which starts with an Ethernet header */ -  ethhdr = p->payload; -  LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, -    ("ethernet_input: dest:%02x:%02x:%02x:%02x:%02x:%02x, src:%02x:%02x:%02x:%02x:%02x:%02x, type:%2hx\n", -     (unsigned)ethhdr->dest.addr[0], (unsigned)ethhdr->dest.addr[1], (unsigned)ethhdr->dest.addr[2], -     (unsigned)ethhdr->dest.addr[3], (unsigned)ethhdr->dest.addr[4], (unsigned)ethhdr->dest.addr[5], -     (unsigned)ethhdr->src.addr[0], (unsigned)ethhdr->src.addr[1], (unsigned)ethhdr->src.addr[2], -     (unsigned)ethhdr->src.addr[3], (unsigned)ethhdr->src.addr[4], (unsigned)ethhdr->src.addr[5], -     (unsigned)htons(ethhdr->type))); - -  type = htons(ethhdr->type); -#if ETHARP_SUPPORT_VLAN -  if (type == ETHTYPE_VLAN) { -    struct eth_vlan_hdr *vlan = (struct eth_vlan_hdr*)(((char*)ethhdr) + SIZEOF_ETH_HDR); -#ifdef ETHARP_VLAN_CHECK /* if not, allow all VLANs */ -    if (VLAN_ID(vlan) != ETHARP_VLAN_CHECK) { -      /* silently ignore this packet: not for our VLAN */ -      pbuf_free(p); -      return ERR_OK; -    } -#endif /* ETHARP_VLAN_CHECK */ -    type = htons(vlan->tpid); -  } -#endif /* ETHARP_SUPPORT_VLAN */ - -  switch (type) { -    /* IP packet? */ -    case ETHTYPE_IP: -#if ETHARP_TRUST_IP_MAC -      /* update ARP table */ -      etharp_ip_input(netif, p); -#endif /* ETHARP_TRUST_IP_MAC */ -      /* skip Ethernet header */ -      if(pbuf_header(p, -(s16_t)SIZEOF_ETH_HDR)) { -        LWIP_ASSERT("Can't move over header in packet", 0); -        pbuf_free(p); -        p = NULL; -      } else { -        /* pass to IP layer */ -        ip_input(p, netif); -      } -      break; -       -    case ETHTYPE_ARP: -      /* pass p to ARP module */ -      etharp_arp_input(netif, (struct eth_addr*)(netif->hwaddr), p); -      break; - -#if PPPOE_SUPPORT -    case ETHTYPE_PPPOEDISC: /* PPP Over Ethernet Discovery Stage */ -      pppoe_disc_input(netif, p); -      break; - -    case ETHTYPE_PPPOE: /* PPP Over Ethernet Session Stage */ -      pppoe_data_input(netif, p); -      break; -#endif /* PPPOE_SUPPORT */ - -    default: -      ETHARP_STATS_INC(etharp.proterr); -      ETHARP_STATS_INC(etharp.drop); -      pbuf_free(p); -      p = NULL; -      break; -  } - -  /* This means the pbuf is freed or consumed, -     so the caller doesn't have to free it again */ -  return ERR_OK; -} -#endif /* LWIP_ARP */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/loopif.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/loopif.c deleted file mode 100644 index b7d6632..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/loopif.c +++ /dev/null @@ -1,68 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * Loop Interface - * - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#include "lwip/opt.h" - -#if LWIP_HAVE_LOOPIF - -#include "netif/loopif.h" -#include "lwip/snmp.h" - -/** - * Initialize a lwip network interface structure for a loopback interface - * - * @param netif the lwip network interface structure for this loopif - * @return ERR_OK if the loopif is initialized - *         ERR_MEM if private data couldn't be allocated - */ -err_t -loopif_init(struct netif *netif) -{ -  /* initialize the snmp variables and counters inside the struct netif -   * ifSpeed: no assumption can be made! -   */ -  NETIF_INIT_SNMP(netif, snmp_ifType_softwareLoopback, 0); - -  netif->name[0] = 'l'; -  netif->name[1] = 'o'; -  netif->output = netif_loop_output; -  return ERR_OK; -} - -#endif /* LWIP_HAVE_LOOPIF */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/cc.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/cc.h deleted file mode 100644 index fc9c07d..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/cc.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2001-2003 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __ARCH_CC_H__ -#define __ARCH_CC_H__ - -/* Define platform endianness */ -#ifndef BYTE_ORDER -#define BYTE_ORDER BIG_ENDIAN -#endif /* BYTE_ORDER */ - -/* Define generic types used in lwIP */ -typedef unsigned   char    u8_t; -typedef signed     char    s8_t; -typedef unsigned   short   u16_t; -typedef signed     short   s16_t; -typedef unsigned   long    u32_t; -typedef signed     long    s32_t; - -typedef u32_t mem_ptr_t; - -/* Define (sn)printf formatters for these lwIP types */ -#define U16_F "u" -#define S16_F "d" -#define X16_F "x" -#define U32_F "u" -#define S32_F "d" -#define X32_F "x" - -/* Compiler hints for packing structures */ -#define PACK_STRUCT_FIELD(x) x -#define PACK_STRUCT_STRUCT __attribute__((packed)) -#define PACK_STRUCT_BEGIN -#define PACK_STRUCT_END - -/* Plaform specific diagnostic output */ -#ifdef CONFIG_OWL -# include <owl/core/owl_debug.h> -# define LWIP_PLATFORM_DIAG(x)	owl_printf x -# define LWIP_PLATFORM_ASSERT(x) owl_assert(x) -#else -# include <printf-stdarg.h> -# define LWIP_PLATFORM_DIAG(x)	do { printk x; } while(0) -# define LWIP_PLATFORM_ASSERT(x) do {                                   \ -        printk("Assertion \"%s\" failed at line "                       \ -               "%d in %s\n",                                            \ -               x, __LINE__, __FILE__); while(1);                        \ -    } while(0) -#endif - -#endif /* __ARCH_CC_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/perf.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/perf.h deleted file mode 100644 index 4991787..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/perf.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef __PERF_H__ -#define __PERF_H__ - -#define PERF_START    /* null definition */ -#define PERF_STOP(x)  /* null definition */ - -#endif diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/lwipopts.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/lwipopts.h deleted file mode 100644 index ae4df23..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/lwipopts.h +++ /dev/null @@ -1,426 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/** - * @file - * - * lwIP Options Configuration - */ - -/* - * Copyright (c) 2001-2004 Swedish Institute of Computer Science. - * All rights reserved.  - *  - * Redistribution and use in source and binary forms, with or without modification,  - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - *    this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - *    this list of conditions and the following disclaimer in the documentation - *    and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - *    derived from this software without specific prior written permission.  - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF  - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT  - * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS  - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN  - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING  - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY  - * OF SUCH DAMAGE. - * - * This file is part of the lwIP TCP/IP stack. - *  - * Author: Adam Dunkels <adam@sics.se> - * - */ -#ifndef __LWIPOPTS_H__ -#define __LWIPOPTS_H__ - -#include "wl_api.h" - -/* -   ----------------------------------------------- -   ---------- Platform specific locking ---------- -   ----------------------------------------------- -*/ - -/**  - * NO_SYS==1: Provides VERY minimal functionality. Otherwise, - * use lwIP facilities. - */ -#define NO_SYS                          1 - - -/* -   ------------------------------------ -   ---------- Memory options ---------- -   ------------------------------------ -*/ -/** - * MEM_ALIGNMENT: should be set to the alignment of the CPU - *    4 byte alignment -> #define MEM_ALIGNMENT 4 - *    2 byte alignment -> #define MEM_ALIGNMENT 2 - */ -#define MEM_ALIGNMENT                   4 - -/** - * MEM_SIZE: the size of the heap memory. If the application will send - * a lot of data that needs to be copied, this should be set high. - */ -#define MEM_SIZE                        16000 - - -/* -   ------------------------------------------------ -   ---------- Internal Memory Pool Sizes ---------- -   ------------------------------------------------ -*/ -/** - * MEMP_NUM_PBUF: the number of memp struct pbufs (used for PBUF_ROM and PBUF_REF). - * If the application sends a lot of data out of ROM (or other static memory), - * this should be set high. - */ -#define MEMP_NUM_PBUF                   30 - -/** - * MEMP_NUM_RAW_PCB: Number of raw connection PCBs - * (requires the LWIP_RAW option) - */ -#define MEMP_NUM_RAW_PCB                4 - -/** - * MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One - * per active UDP "connection". - * (requires the LWIP_UDP option) - */ -#define MEMP_NUM_UDP_PCB                4 - -/** - * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. - * (requires the LWIP_TCP option) - */ -#define MEMP_NUM_TCP_PCB                2 - -/** - * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. - * (requires the LWIP_TCP option) - */ -#define MEMP_NUM_TCP_PCB_LISTEN         2 - -/** - * MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP segments. - * (requires the LWIP_TCP option) - */ -#define MEMP_NUM_TCP_SEG                32 - -/** - * MEMP_NUM_ARP_QUEUE: the number of simulateously queued outgoing - * packets (pbufs) that are waiting for an ARP request (to resolve - * their destination address) to finish. - * (requires the ARP_QUEUEING option) - */ -#define MEMP_NUM_ARP_QUEUE              2 - -/** - * MEMP_NUM_SYS_TIMEOUT: the number of simulateously active timeouts. - * (requires NO_SYS==0) - */ -#define MEMP_NUM_SYS_TIMEOUT            0 - -/** - * MEMP_NUM_NETBUF: the number of struct netbufs. - * (only needed if you use the sequential API, like api_lib.c) - */ -#define MEMP_NUM_NETBUF                 0 - -/** - * MEMP_NUM_NETCONN: the number of struct netconns. - * (only needed if you use the sequential API, like api_lib.c) - */ -#define MEMP_NUM_NETCONN                0 - -/** - * MEMP_NUM_TCPIP_MSG_API: the number of struct tcpip_msg, which are used - * for callback/timeout API communication.  - * (only needed if you use tcpip.c) - */ -#define MEMP_NUM_TCPIP_MSG_API          0 - -/** - * MEMP_NUM_TCPIP_MSG_INPKT: the number of struct tcpip_msg, which are used - * for incoming packets.  - * (only needed if you use tcpip.c) - */ -#define MEMP_NUM_TCPIP_MSG_INPKT        0 - -/** - * PBUF_POOL_SIZE: the number of buffers in the pbuf pool.  - */ -#define PBUF_POOL_SIZE                  32 - -/* -   --------------------------------- -   ---------- ARP options ---------- -   --------------------------------- -*/ -/** - * LWIP_ARP==1: Enable ARP functionality. - */ -#define LWIP_ARP                        1 - -/* -   -------------------------------- -   ---------- IP options ---------- -   -------------------------------- -*/ -/** - * IP_FORWARD==1: Enables the ability to forward IP packets across network - * interfaces. If you are going to run lwIP on a device with only one network - * interface, define this to 0. - */ -#define IP_FORWARD                      0 - -/** - * IP_OPTIONS: Defines the behavior for IP options. - *      IP_OPTIONS==0_ALLOWED: All packets with IP options are dropped. - *      IP_OPTIONS==1_ALLOWED: IP options are allowed (but not parsed). - */ -#define IP_OPTIONS_ALLOWED              1 - -/** - * IP_REASSEMBLY==1: Reassemble incoming fragmented IP packets. Note that - * this option does not affect outgoing packet sizes, which can be controlled - * via IP_FRAG. - */ -#define IP_REASSEMBLY                   1 - -/** - * IP_FRAG==1: Fragment outgoing IP packets if their size exceeds MTU. Note - * that this option does not affect incoming packet sizes, which can be - * controlled via IP_REASSEMBLY. - */ -#define IP_FRAG                         1 - -/** - * IP_REASS_MAXAGE: Maximum time (in multiples of IP_TMR_INTERVAL - so seconds, normally) - * a fragmented IP packet waits for all fragments to arrive. If not all fragments arrived - * in this time, the whole packet is discarded. - */ -#define IP_REASS_MAXAGE                 3 - -/** - * IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled. - * Since the received pbufs are enqueued, be sure to configure - * PBUF_POOL_SIZE > IP_REASS_MAX_PBUFS so that the stack is still able to receive - * packets even if the maximum amount of fragments is enqueued for reassembly! - */ -#define IP_REASS_MAX_PBUFS              10 - -/** - * IP_FRAG_USES_STATIC_BUF==1: Use a static MTU-sized buffer for IP - * fragmentation. Otherwise pbufs are allocated and reference the original - * packet data to be fragmented. - */ -#define IP_FRAG_USES_STATIC_BUF         0 - -/** - * IP_DEFAULT_TTL: Default value for Time-To-Live used by transport layers. - */ -#define IP_DEFAULT_TTL                  255 - -/* -   ---------------------------------- -   ---------- ICMP options ---------- -   ---------------------------------- -*/ -/** - * LWIP_ICMP==1: Enable ICMP module inside the IP stack. - * Be careful, disable that make your product non-compliant to RFC1122 - */ -#define LWIP_ICMP                       1 - -/** - * ICMP_TTL: Default value for Time-To-Live used by ICMP packets. - */ -#define ICMP_TTL                       (IP_DEFAULT_TTL) - -/* -   --------------------------------- -   ---------- RAW options ---------- -   --------------------------------- -*/ -/** - * LWIP_RAW==1: Enable application layer to hook into the IP layer itself. - */ -#define LWIP_RAW                        1 - -/* -   ---------------------------------- -   ---------- DHCP options ---------- -   ---------------------------------- -*/ -/** - * LWIP_DHCP==1: Enable DHCP module. - */ -#define LWIP_DHCP                       1 - -/* -   ------------------------------------ -   ---------- AUTOIP options ---------- -   ------------------------------------ -*/ -/** - * LWIP_AUTOIP==1: Enable AUTOIP module. - */ -#define LWIP_AUTOIP                     0 - -/* -   ---------------------------------- -   ---------- SNMP options ---------- -   ---------------------------------- -*/ -/** - * LWIP_SNMP==1: Turn on SNMP module. UDP must be available for SNMP - * transport. - */ -#define LWIP_SNMP                       0 -#define SNMP_PRIVATE_MIB                0 - -/* -   ---------------------------------- -   ---------- IGMP options ---------- -   ---------------------------------- -*/ -/** - * LWIP_IGMP==1: Turn on IGMP module.  - */ -#define LWIP_IGMP                       1 - -/* -   ---------------------------------- -   ---------- DNS options ----------- -   ---------------------------------- -*/ -/** - * LWIP_DNS==1: Turn on DNS module. UDP must be available for DNS - * transport. - */ -#define LWIP_DNS                        1 - -/* -   --------------------------------- -   ---------- UDP options ---------- -   --------------------------------- -*/ -/** - * LWIP_UDP==1: Turn on UDP. - */ -#define LWIP_UDP                        1 - -/** - * LWIP_UDPLITE==1: Turn on UDP-Lite. (Requires LWIP_UDP) - */ -#define LWIP_UDPLITE                    0 - -/** - * UDP_TTL: Default Time-To-Live value. - */ -#define UDP_TTL                         (IP_DEFAULT_TTL) - -/* -   --------------------------------- -   ---------- TCP options ---------- -   --------------------------------- -*/ -/** - * LWIP_TCP==1: Turn on TCP. - */ -#define LWIP_TCP                        1 - -/* -   ---------------------------------- -   ---------- Pbuf options ---------- -   ---------------------------------- -*/ -/** - * PBUF_LINK_HLEN: the number of bytes that should be allocated for a - * link level header. The default is 14, the standard value for - * Ethernet. - */ -#define PBUF_LINK_HLEN                  (14 + ETH_PAD_SIZE) - -/* -   ------------------------------------ -   ---------- LOOPIF options ---------- -   ------------------------------------ -*/ -/** - * LWIP_HAVE_LOOPIF==1: Support loop interface (127.0.0.1) and loopif.c - */ -#define LWIP_HAVE_LOOPIF                1 -#define LWIP_LOOPIF_MULTITHREADING      0 - -/* -   ---------------------------------------------- -   ---------- Sequential layer options ---------- -   ---------------------------------------------- -*/ - -/** - * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c) - */ -#define LWIP_NETCONN                    0 - -/* -   ------------------------------------ -   ---------- Socket options ---------- -   ------------------------------------ -*/ -/** - * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c) - */ -#define LWIP_SOCKET                     0 - -/* -   ---------------------------------------- -   ---------- Statistics options ---------- -   ---------------------------------------- -*/ -/** - * LWIP_STATS==1: Enable statistics collection in lwip_stats. - */ -#define LWIP_STATS                      1 -#define LINK_STATS                      1 - -/* Misc */ -#define LWIP_NETIF_LINK_CALLBACK        1 -#define LWIP_NETIF_STATUS_CALLBACK      1 -#define LWIP_TIMEVAL_PRIVATE 0 - -#undef DHCP_DOES_ARP_CHECK - -#if 0 -#define LWIP_DEBUG 1 -//#define NETIF_DEBUG LWIP_DBG_ON -#define DHCP_DEBUG LWIP_DBG_ON -//#define ICMP_DEBUG LWIP_DBG_ON -//#define TCP_DEBUG LWIP_DBG_ON -//#define TCP_RTO_DEBUG LWIP_DBG_ON -//#define IP_DEBUG LWIP_DBG_ON -//#define TCP_CWND_DEBUG LWIP_DBG_ON -//#define ETHARP_DEBUG LWIP_DBG_ON -//#define PBUF_DEBUG LWIP_DBG_ON -#define TCP_INPUT_DEBUG LWIP_DBG_ON -#define TCP_OUTPUT_DEBUG LWIP_DBG_ON -#endif - -#define ETH_PAD_SIZE WL_HEADER_SIZE /* size of wifiengine header */ -#define MEM_LIBC_MALLOC 1 - -#define TCP_MSS                         512 -#define TCP_SND_BUF                     4096 -#endif /* __LWIPOPTS_H__ */ diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/netif/wlif.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/netif/wlif.h deleted file mode 100644 index 6354e1c..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/netif/wlif.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef __NETIF_NRWLANIF_H__ -#define __NETIF_NRWLANIF_H__ - -#include "lwip/netif.h" -#include "lwip/err.h" - -err_t wlif_init(struct netif *netif); -void wlif_poll(struct netif *netif); - -#endif diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/netif/wlif.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/netif/wlif.c deleted file mode 100644 index 55d5b6a..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/netif/wlif.c +++ /dev/null @@ -1,386 +0,0 @@ -#include "lwip/opt.h" -#include "lwip/def.h" -#include "lwip/mem.h" -#include "lwip/pbuf.h" -#include "lwip/stats.h" -#include "lwip/sys.h" -#include "netif/etharp.h" -#include "netif/wlif.h" -#include <wl_api.h> -#include <wlap_api.h> - -#define IFNAME0 'w' -#define IFNAME1 'l' - -/* the queue size will affect the tx performance when using power save. - * A small queue will quickly become filled up if we have to wake the device - * before the actual transmission can occur. When the queue is filled up, the - * packets will be discarded and retransmission will be handled by the upper - * layers. In case of TCP, the retransmission time might be quite long. - * - * If the packets can be put in the pqueue instead, all the packets - * (if possible) will be transmitted when the device wakes up, so we don't have - * to wait for retransmission from upper layers. - */ -#define PQUEUE_SIZE 8 - -struct wlif_t { -	volatile uint8_t rx_pending; - -	struct { -		struct pbuf* buf[PQUEUE_SIZE]; -		uint8_t first; -		uint8_t last; -	} pqueue; -}; - -#define PQUEUE_EMPTY(q) (q.last == q.first) -#define PQUEUE_FULL(q) ((q.last + 1) % PQUEUE_SIZE == q.first) -#define PQUEUE_FIRST(q) (q.buf[q.first]) -#define PQUEUE_DEQUEUE(q)                                               \ -        ({                                                              \ -                struct pbuf* __p = PQUEUE_FIRST(q);                     \ -                q.first = (q.first + 1) % PQUEUE_SIZE;                  \ -                __p;                                                    \ -        }) -#define PQUEUE_ENQUEUE(q, p)                                            \ -        ({                                                              \ -                q.buf[q.last] = p;                                      \ -                q.last = (q.last + 1) % PQUEUE_SIZE;                    \ -        }) - - -static err_t process_pqueue(struct netif* netif) -{ -        struct pbuf *p; -        struct pbuf *q; -        int status; -	struct wlif_t *priv = (struct wlif_t*) netif->state; - -        /* queue empty? finished */ -        if (PQUEUE_EMPTY(priv->pqueue)) -                return ERR_OK; - -        /* get first packet in queue */ -        p = PQUEUE_FIRST(priv->pqueue); - -        status = wl_process_tx( -                p->payload + WL_HEADER_SIZE, /* ptr to eth hdr */ -                p->len - WL_HEADER_SIZE,     /* input buffer len */ -                p->tot_len - WL_HEADER_SIZE, /* pkt len */ -                p->payload,                  /* ptr to WE hdr */ -                0,                           /* prio */ -                p);                          /* pkt handle */ - -        /* if we fail due to power save mode, leave packet in queue and -         * try again when target is awake again (upon WL_RX_EVENT_WAKEUP). -         */ -	if (status == WL_RESOURCES) -		return ERR_IF; - -        /* if we fail for another reason, just discard the packet */ -        if (status != WL_SUCCESS) { -                PQUEUE_DEQUEUE(priv->pqueue); -                pbuf_free(p); -                return ERR_IF; -        } - -        /* Send the data from the pbuf to the interface, one pbuf at a -         * time. The size of the data in each pbuf is kept in the ->len -         * variable. -         */ -        for (q = p; q != NULL; q = q->next) -		wl_tx(q->payload, q->len); - -        /* remove packet from queue and dec refcnt */ -        PQUEUE_DEQUEUE(priv->pqueue); -        pbuf_free(p); -         -        LINK_STATS_INC(link.xmit); - -        /* tell caller to process next packet */ -        return ERR_INPROGRESS; -} - - -/** - * Called in interrupt context when we can read more data from the mac. - * - */ -static void -rx_isr(void* ctx) -{ -	struct netif *netif = ctx; -	struct wlif_t *priv = (struct wlif_t*) netif->state; -	priv->rx_pending = 1; -} - - -/** - * In this function, the hardware should be initialized. - * Called from wlif_init(). - * - * @param netif the already initialized lwip network interface structure - *        for this ethernetif - */ -static err_t -low_level_init(struct netif *netif) -{ -        /* device capabilities */ -        netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | -                NETIF_FLAG_IGMP; -         -        /* NETIF_FLAG_LINK_UP must be set only when we have an wlan assoc */ - -        /* set MAC hardware address length */ -        netif->hwaddr_len = ETHARP_HWADDR_LEN; - -	if (wl_get_mac_addr(netif->hwaddr) != WL_SUCCESS) -		return ERR_IF; - -        /* maximum transfer unit */ -        netif->mtu = 1500; -         -        return ERR_OK; -} - - -/** - * This function should do the actual transmission of the packet. The packet is - * contained in the pbuf that is passed to the function. This pbuf - * might be chained. - * - * @param netif the lwip network interface structure for this ethernetif - * @param p the MAC packet to send (e.g. IP packet including MAC addresses and - *        type) - * @return ERR_OK if the packet could be sent - *         an err_t value if the packet couldn't be sent - * - * @note Returning ERR_MEM here if a DMA queue of your MAC is full can lead to - *       strange results. You might consider waiting for space in the DMA queue - *       to become availale since the stack doesn't retry to send a packet - *       dropped because of memory failure (except for the TCP timers). - */ -static err_t -low_level_output(struct netif *netif, struct pbuf *p) -{   -	struct wlif_t* priv = (struct wlif_t*) netif->state; - -        /* must have a linear buffer containing up to and including -         * the ethernet header -         */ -        if (p->len < sizeof(struct eth_hdr)) -                return ERR_IF; -         -        /* queue full? drop packet */ -        if (PQUEUE_FULL(priv->pqueue)) -                return ERR_INPROGRESS; /* no one seems to check this anyway */ -		 -        /* queue packet */ -        PQUEUE_ENQUEUE(priv->pqueue, p); -        pbuf_ref(p); -        while (process_pqueue(netif) == ERR_INPROGRESS); -        return ERR_OK; /* no one seems to check this anyway */ -} - -/** - * Should allocate a pbuf and transfer the bytes of the incoming - * packet from the interface into the pbuf. - * - * @param netif the lwip network interface structure for this ethernetif - * @return a pbuf filled with the received packet (including MAC header) - *         NULL on memory error - */ -static struct pbuf * -low_level_input(struct netif *netif) -{ -        struct pbuf *p; -	struct wlif_t *priv = (struct wlif_t*) netif->state; - -        char *stripped_pkt; -        size_t stripped_pkt_len; -        u16_t vlan; -        u8_t rx_hdr_size; -        int status; -        u16_t len; - -        /* maximum packet length from wl_rx() */ -        len = WL_MAX_PKT_LEN; - -        /* We allocate a continous pbuf */ -        p = pbuf_alloc(PBUF_RAW, len, PBUF_RAM); -        if (p == NULL) { -                LWIP_DEBUGF(NETIF_DEBUG, ("low_level_input: fail to alloc " -                                          "pbuf of len:%"S32_F"\n", len)); -                return NULL; -        } - -        /* Read the entire msg */ -	priv->rx_pending = 0; -        wl_rx(p->payload, &len); -        if (len == 0) { -                LWIP_DEBUGF(NETIF_DEBUG, ("low_level_input: len was 0")); -                return NULL; -        } - -        status = wl_process_rx( -                p->payload,             /* input buf */ -                len,                    /* input buf length */ -                &stripped_pkt,           -                &stripped_pkt_len,       -                &vlan); - -        if (status == WL_ABSORBED) { -                LWIP_DEBUGF(NETIF_DEBUG, ("low_level_input: absorbed")); -                pbuf_free(p); -                return NULL; -        } -		 -        /* Data packet, remove padding */ -        rx_hdr_size = stripped_pkt - (char*) p->payload; -        pbuf_realloc(p, stripped_pkt_len + rx_hdr_size); -         -        LINK_STATS_INC(link.recv); -        return p;   -} - - -/** - * This function will be called by wlif_poll() when a packet has been received - * from the mac. Then the type of the received packet is determined and - * the appropriate input function is called. - * - * @param netif the lwip network interface structure for this ethernetif - */ -static void -wlif_input(struct netif *netif) -{ -        struct eth_hdr *ethhdr; -        struct pbuf *p; - -        /* move received packet into a new pbuf */ -        p = low_level_input(netif); -         -        /* no packet could be read, silently ignore this */ -        if (p == NULL) -                return; - -        /* points to packet payload, which starts with an Ethernet header */ -        ethhdr = p->payload; -        switch (htons(ethhdr->type)) { -                /* IP or ARP packet? */ -        case ETHTYPE_IP: -        case ETHTYPE_ARP: -#if PPPOE_SUPPORT -                /* PPPoE packet? */ -        case ETHTYPE_PPPOEDISC: -        case ETHTYPE_PPPOE: -#endif /* PPPOE_SUPPORT */ -                /* full packet send to tcpip_thread to process */ -                if (netif->input(p, netif) != ERR_OK) { -                        LWIP_DEBUGF(NETIF_DEBUG, -                                    ("wlif_input: IP input error\n")); -                        pbuf_free(p); -                        p = NULL; -                } -                break; - -        default: -                pbuf_free(p); -                p = NULL; -                break; -        } -} - -static ssize_t pkt_read_cb(char *dst, -                           void *src_handle, -                           size_t read_len, -                           int offset) { -        ssize_t rc; - -        rc = pbuf_copy_partial((struct pbuf *)src_handle, -                               dst, -                               read_len, -                               offset + WL_HEADER_SIZE); -        if ( 0 == rc ) { -                return -1; -        } - -        return rc; -} - -/** - * Should be called at the beginning of the program to set up the - * network interface. It calls the function low_level_init() to do the - * actual setup of the hardware. - * - * This function should be passed as a parameter to netif_add(). - * - * @param netif the lwip network interface structure for this ethernetif - * @return ERR_OK if the loopif is initialized - *         ERR_MEM if private data couldn't be allocated - *         any other err_t on error - */ -err_t -wlif_init(struct netif *netif) -{ -        static struct wlif_t wlif; - -        LWIP_ASSERT("netif != NULL", (netif != NULL)); - -#if LWIP_NETIF_HOSTNAME -        /* Initialize interface hostname */ -        if ( NULL == netif->hostname ) { -                netif->hostname = "wlif"; -        } -#endif /* LWIP_NETIF_HOSTNAME */ - -	netif->state = &wlif; -        netif->name[0] = IFNAME0; -        netif->name[1] = IFNAME1; - -        /* We directly use etharp_output() here to save a function call. -         * You can instead declare your own function an call etharp_output() -         * from it if you have to do some checks before sending (e.g. if link -         * is available...) */ -        netif->output = etharp_output; -        netif->linkoutput = low_level_output; -	 -	wl_register_rx_isr(rx_isr, netif); -        wl_register_pkt_read_cb(pkt_read_cb); - -        /* initialize the hardware */ -        return low_level_init(netif); -} - - -/** - * - */ -void -wlif_poll(struct netif* netif) -{ -        struct wlif_t* priv = NULL; - -        /* wl api forward progress */ -        wl_poll(); - -        if (netif) -                priv = (struct wlif_t*) netif->state; - -        /* wlif_init() not called yet? */ -        if (priv == NULL) -                return; - -	/* no packets pending? */ -	if (!priv->rx_pending) -		return; - -	/* read the pending packet */ -	wlif_input(netif); - -	/* send any packets that was queued due to filled up target queue -	 * or power save mode. -	 */ -	process_pqueue(netif); -} diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/readme.txt b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/readme.txt deleted file mode 100644 index c95f30e..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/readme.txt +++ /dev/null @@ -1 +0,0 @@ -This directory is specific to the WIFI H&D SPB104 components (\COMPONENTS\WIFI\HD_SPB104).  diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c deleted file mode 100644 index 09790c2..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c +++ /dev/null @@ -1,571 +0,0 @@ -/* This source file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/*This file is prepared for Doxygen automatic documentation generation.*/ -/*! \file ********************************************************************* - * - * \brief Abstraction layer for memory interfaces. - * - * This module contains the interfaces: - *   - MEM <-> USB; - *   - MEM <-> RAM; - *   - MEM <-> MEM. - * - * This module may be configured and expanded to support the following features: - *   - write-protected globals; - *   - password-protected data; - *   - specific features; - *   - etc. - * - * - Compiler:           IAR EWAVR32 and GNU GCC for AVR32 - * - Supported devices:  All AVR32 devices can be used. - * - AppNote: - * - * \author               Atmel Corporation: http://www.atmel.com \n - *                       Support and FAQ: http://support.atmel.no/ - * - ******************************************************************************/ - -/* Copyright (c) 2009 Atmel Corporation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. The name of Atmel may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 4. This software may only be redistributed and used in connection with an Atmel - * AVR product. - * - * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE - * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE - * - */ - -//_____ I N C L U D E S ____________________________________________________ - -#include "compiler.h" -#include "preprocessor.h" -#ifdef FREERTOS_USED -#include "FreeRTOS.h" -#include "semphr.h" -#endif -#include "ctrl_access.h" - - -//_____ D E F I N I T I O N S ______________________________________________ - -#ifdef FREERTOS_USED - -/*! \name LUN Access Protection Macros - */ -//! @{ - -/*! \brief Locks accesses to LUNs. - * - * \return \c TRUE if the access was successfully locked, else \c FALSE. - */ -#define Ctrl_access_lock()    ctrl_access_lock() - -/*! \brief Unlocks accesses to LUNs. - */ -#define Ctrl_access_unlock()  xSemaphoreGive(ctrl_access_semphr) - -//! @} - -//! Handle to the semaphore protecting accesses to LUNs. -static xSemaphoreHandle ctrl_access_semphr = NULL; - -#else - -/*! \name LUN Access Protection Macros - */ -//! @{ - -/*! \brief Locks accesses to LUNs. - * - * \return \c TRUE if the access was successfully locked, else \c FALSE. - */ -#define Ctrl_access_lock()    TRUE - -/*! \brief Unlocks accesses to LUNs. - */ -#define Ctrl_access_unlock() - -//! @} - -#endif  // FREERTOS_USED - - -#if MAX_LUN - -/*! \brief Initializes an entry of the LUN descriptor table. - * - * \param lun Logical Unit Number. - * - * \return LUN descriptor table entry initializer. - */ -#if ACCESS_USB == ENABLED && ACCESS_MEM_TO_RAM == ENABLED -#define Lun_desc_entry(lun) \ -  {\ -    TPASTE3(Lun_, lun, _test_unit_ready),\ -    TPASTE3(Lun_, lun, _read_capacity),\ -    TPASTE3(Lun_, lun, _wr_protect),\ -    TPASTE3(Lun_, lun, _removal),\ -    TPASTE3(Lun_, lun, _usb_read_10),\ -    TPASTE3(Lun_, lun, _usb_write_10),\ -    TPASTE3(Lun_, lun, _mem_2_ram),\ -    TPASTE3(Lun_, lun, _ram_2_mem),\ -    TPASTE3(LUN_, lun, _NAME)\ -  } -#elif ACCESS_USB == ENABLED -#define Lun_desc_entry(lun) \ -  {\ -    TPASTE3(Lun_, lun, _test_unit_ready),\ -    TPASTE3(Lun_, lun, _read_capacity),\ -    TPASTE3(Lun_, lun, _wr_protect),\ -    TPASTE3(Lun_, lun, _removal),\ -    TPASTE3(Lun_, lun, _usb_read_10),\ -    TPASTE3(Lun_, lun, _usb_write_10),\ -    TPASTE3(LUN_, lun, _NAME)\ -  } -#elif ACCESS_MEM_TO_RAM == ENABLED -#define Lun_desc_entry(lun) \ -  {\ -    TPASTE3(Lun_, lun, _test_unit_ready),\ -    TPASTE3(Lun_, lun, _read_capacity),\ -    TPASTE3(Lun_, lun, _wr_protect),\ -    TPASTE3(Lun_, lun, _removal),\ -    TPASTE3(Lun_, lun, _mem_2_ram),\ -    TPASTE3(Lun_, lun, _ram_2_mem),\ -    TPASTE3(LUN_, lun, _NAME)\ -  } -#else -#define Lun_desc_entry(lun) \ -  {\ -    TPASTE3(Lun_, lun, _test_unit_ready),\ -    TPASTE3(Lun_, lun, _read_capacity),\ -    TPASTE3(Lun_, lun, _wr_protect),\ -    TPASTE3(Lun_, lun, _removal),\ -    TPASTE3(LUN_, lun, _NAME)\ -  } -#endif - -//! LUN descriptor table. -static const struct -{ -  Ctrl_status (*test_unit_ready)(void); -  Ctrl_status (*read_capacity)(U32 *); -  Bool (*wr_protect)(void); -  Bool (*removal)(void); -#if ACCESS_USB == ENABLED -  Ctrl_status (*usb_read_10)(U32, U16); -  Ctrl_status (*usb_write_10)(U32, U16); -#endif -#if ACCESS_MEM_TO_RAM == ENABLED -  Ctrl_status (*mem_2_ram)(U32, void *); -  Ctrl_status (*ram_2_mem)(U32, const void *); -#endif -  const char *name; -} lun_desc[MAX_LUN] = -{ -#if LUN_0 == ENABLE -  Lun_desc_entry(0), -#endif -#if LUN_1 == ENABLE -  Lun_desc_entry(1), -#endif -#if LUN_2 == ENABLE -  Lun_desc_entry(2), -#endif -#if LUN_3 == ENABLE -  Lun_desc_entry(3), -#endif -#if LUN_4 == ENABLE -  Lun_desc_entry(4), -#endif -#if LUN_5 == ENABLE -  Lun_desc_entry(5), -#endif -#if LUN_6 == ENABLE -  Lun_desc_entry(6), -#endif -#if LUN_7 == ENABLE -  Lun_desc_entry(7) -#endif -}; - -#endif - - -#if GLOBAL_WR_PROTECT == ENABLED -Bool g_wr_protect; -#endif - - -/*! \name Control Interface - */ -//! @{ - - -#ifdef FREERTOS_USED - -Bool ctrl_access_init(void) -{ -  // If the handle to the protecting semaphore is not valid, -  if (!ctrl_access_semphr) -  { -    // try to create the semaphore. -    vSemaphoreCreateBinary(ctrl_access_semphr); - -    // If the semaphore could not be created, there is no backup solution. -    if (!ctrl_access_semphr) return FALSE; -  } - -  return TRUE; -} - - -/*! \brief Locks accesses to LUNs. - * - * \return \c TRUE if the access was successfully locked, else \c FALSE. - */ -static Bool ctrl_access_lock(void) -{ -  // If the semaphore could not be created, there is no backup solution. -  if (!ctrl_access_semphr) return FALSE; - -  // Wait for the semaphore. -  while (!xSemaphoreTake(ctrl_access_semphr, portMAX_DELAY)); - -  return TRUE; -} - -#endif  // FREERTOS_USED - - -U8 get_nb_lun(void) -{ -#if MEM_USB == ENABLE -  U8 nb_lun; - -  if (!Ctrl_access_lock()) return MAX_LUN; - -  nb_lun = MAX_LUN + host_get_lun(); - -  Ctrl_access_unlock(); - -  return nb_lun; -#else -  return MAX_LUN; -#endif -} - - -U8 get_cur_lun(void) -{ -  return LUN_ID_0; -} - - -Ctrl_status mem_test_unit_ready(U8 lun) -{ -  Ctrl_status status; - -  if (!Ctrl_access_lock()) return CTRL_FAIL; - -  status = -#if MAX_LUN -           (lun < MAX_LUN) ? lun_desc[lun].test_unit_ready() : -#endif -#if LUN_USB == ENABLE -                             Lun_usb_test_unit_ready(lun - LUN_ID_USB); -#else -                             CTRL_FAIL; -#endif - -  Ctrl_access_unlock(); - -  return status; -} - - -Ctrl_status mem_read_capacity(U8 lun, U32 *u32_nb_sector) -{ -  Ctrl_status status; - -  if (!Ctrl_access_lock()) return CTRL_FAIL; - -  status = -#if MAX_LUN -           (lun < MAX_LUN) ? lun_desc[lun].read_capacity(u32_nb_sector) : -#endif -#if LUN_USB == ENABLE -                             Lun_usb_read_capacity(lun - LUN_ID_USB, u32_nb_sector); -#else -                             CTRL_FAIL; -#endif - -  Ctrl_access_unlock(); - -  return status; -} - - -U8 mem_sector_size(U8 lun) -{ -  U8 sector_size; - -  if (!Ctrl_access_lock()) return 0; - -  sector_size = -#if MAX_LUN -                (lun < MAX_LUN) ? 1 : -#endif -#if LUN_USB == ENABLE -                                  Lun_usb_read_sector_size(lun - LUN_ID_USB); -#else -                                  0; -#endif - -  Ctrl_access_unlock(); - -  return sector_size; -} - - -Bool mem_wr_protect(U8 lun) -{ -  Bool wr_protect; - -  if (!Ctrl_access_lock()) return TRUE; - -  wr_protect = -#if MAX_LUN -               (lun < MAX_LUN) ? lun_desc[lun].wr_protect() : -#endif -#if LUN_USB == ENABLE -                                 Lun_usb_wr_protect(lun - LUN_ID_USB); -#else -                                 TRUE; -#endif - -  Ctrl_access_unlock(); - -  return wr_protect; -} - - -Bool mem_removal(U8 lun) -{ -  Bool removal; - -  if (!Ctrl_access_lock()) return TRUE; - -  removal = -#if MAX_LUN -            (lun < MAX_LUN) ? lun_desc[lun].removal() : -#endif -#if LUN_USB == ENABLE -                              Lun_usb_removal(); -#else -                              TRUE; -#endif - -  Ctrl_access_unlock(); - -  return removal; -} - - -const char *mem_name(U8 lun) -{ -  return -#if MAX_LUN -         (lun < MAX_LUN) ? lun_desc[lun].name : -#endif -#if LUN_USB == ENABLE -                           LUN_USB_NAME; -#else -                           NULL; -#endif -} - - -//! @} - - -#if ACCESS_USB == ENABLED - -/*! \name MEM <-> USB Interface - */ -//! @{ - - -Ctrl_status memory_2_usb(U8 lun, U32 addr, U16 nb_sector) -{ -  Ctrl_status status; - -  if (!Ctrl_access_lock()) return CTRL_FAIL; - -  memory_start_read_action(nb_sector); -  status = -#if MAX_LUN -           (lun < MAX_LUN) ? lun_desc[lun].usb_read_10(addr, nb_sector) : -#endif -                             CTRL_FAIL; -  memory_stop_read_action(); - -  Ctrl_access_unlock(); - -  return status; -} - - -Ctrl_status usb_2_memory(U8 lun, U32 addr, U16 nb_sector) -{ -  Ctrl_status status; - -  if (!Ctrl_access_lock()) return CTRL_FAIL; - -  memory_start_write_action(nb_sector); -  status = -#if MAX_LUN -           (lun < MAX_LUN) ? lun_desc[lun].usb_write_10(addr, nb_sector) : -#endif -                             CTRL_FAIL; -  memory_stop_write_action(); - -  Ctrl_access_unlock(); - -  return status; -} - - -//! @} - -#endif  // ACCESS_USB == ENABLED - - -#if ACCESS_MEM_TO_RAM == ENABLED - -/*! \name MEM <-> RAM Interface - */ -//! @{ - - -Ctrl_status memory_2_ram(U8 lun, U32 addr, void *ram) -{ -  Ctrl_status status; - -  if (!Ctrl_access_lock()) return CTRL_FAIL; - -  memory_start_read_action(1); -  status = -#if MAX_LUN -           (lun < MAX_LUN) ? lun_desc[lun].mem_2_ram(addr, ram) : -#endif -#if LUN_USB == ENABLE -                             Lun_usb_mem_2_ram(addr, ram); -#else -                             CTRL_FAIL; -#endif -  memory_stop_read_action(); - -  Ctrl_access_unlock(); - -  return status; -} - - -Ctrl_status ram_2_memory(U8 lun, U32 addr, const void *ram) -{ -  Ctrl_status status; - -  if (!Ctrl_access_lock()) return CTRL_FAIL; - -  memory_start_write_action(1); -  status = -#if MAX_LUN -           (lun < MAX_LUN) ? lun_desc[lun].ram_2_mem(addr, ram) : -#endif -#if LUN_USB == ENABLE -                             Lun_usb_ram_2_mem(addr, ram); -#else -                             CTRL_FAIL; -#endif -  memory_stop_write_action(); - -  Ctrl_access_unlock(); - -  return status; -} - - -//! @} - -#endif  // ACCESS_MEM_TO_RAM == ENABLED - - -#if ACCESS_STREAM == ENABLED - -/*! \name Streaming MEM <-> MEM Interface - */ -//! @{ - - -  #if ACCESS_MEM_TO_MEM == ENABLED - -#include "fat.h" - -Ctrl_status stream_mem_to_mem(U8 src_lun, U32 src_addr, U8 dest_lun, U32 dest_addr, U16 nb_sector) -{ -#if (defined __GNUC__) && (defined __AVR32__) -  __attribute__((__aligned__(4))) -#elif (defined __ICCAVR32__) -  #pragma data_alignment = 4 -#endif -  static U8 sector_buf[FS_512B]; -  Ctrl_status status = CTRL_GOOD; - -  while (nb_sector--) -  { -    if ((status = memory_2_ram(src_lun, src_addr++, sector_buf)) != CTRL_GOOD) break; -    if ((status = ram_2_memory(dest_lun, dest_addr++, sector_buf)) != CTRL_GOOD) break; -  } - -  return status; -} - -  #endif  // ACCESS_MEM_TO_MEM == ENABLED - - -Ctrl_status stream_state(U8 id) -{ -  return CTRL_GOOD; -} - - -U16 stream_stop(U8 id) -{ -  return 0; -} - - -//! @} - -#endif  // ACCESS_STREAM == ENABLED diff --git a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h b/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h deleted file mode 100644 index 358bf65..0000000 --- a/firmwares/wifishield/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h +++ /dev/null @@ -1,369 +0,0 @@ -/* This header file is part of the ATMEL AVR-UC3-SoftwareFramework-1.7.0 Release */ - -/*This file is prepared for Doxygen automatic documentation generation.*/ -/*! \file ********************************************************************* - * - * \brief Abstraction layer for memory interfaces. - * - * This module contains the interfaces: - *   - MEM <-> USB; - *   - MEM <-> RAM; - *   - MEM <-> MEM. - * - * This module may be configured and expanded to support the following features: - *   - write-protected globals; - *   - password-protected data; - *   - specific features; - *   - etc. - * - * - Compiler:           IAR EWAVR32 and GNU GCC for AVR32 - * - Supported devices:  All AVR32 devices can be used. - * - AppNote: - * - * \author               Atmel Corporation: http://www.atmel.com \n - *                       Support and FAQ: http://support.atmel.no/ - * - ******************************************************************************/ - -/* Copyright (c) 2009 Atmel Corporation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. The name of Atmel may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 4. This software may only be redistributed and used in connection with an Atmel - * AVR product. - * - * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE - * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE - * - */ - -#ifndef _CTRL_ACCESS_H_ -#define _CTRL_ACCESS_H_ - -#include "compiler.h" -#include "conf_access.h" - - -//! Status returned by CTRL_ACCESS interfaces. -typedef enum -{ -  CTRL_GOOD       = PASS,     //!< Success, memory ready. -  CTRL_FAIL       = FAIL,     //!< An error occurred. -  CTRL_NO_PRESENT = FAIL + 1, //!< Memory unplugged. -  CTRL_BUSY       = FAIL + 2  //!< Memory not initialized or changed. -} Ctrl_status; - - -// FYI: Each Logical Unit Number (LUN) corresponds to a memory. - -// Check LUN defines. -#ifndef LUN_0 -  #error LUN_0 must be defined as ENABLE or DISABLE in conf_access.h -#endif -#ifndef LUN_1 -  #error LUN_1 must be defined as ENABLE or DISABLE in conf_access.h -#endif -#ifndef LUN_2 -  #error LUN_2 must be defined as ENABLE or DISABLE in conf_access.h -#endif -#ifndef LUN_3 -  #error LUN_3 must be defined as ENABLE or DISABLE in conf_access.h -#endif -#ifndef LUN_4 -  #error LUN_4 must be defined as ENABLE or DISABLE in conf_access.h -#endif -#ifndef LUN_5 -  #error LUN_5 must be defined as ENABLE or DISABLE in conf_access.h -#endif -#ifndef LUN_6 -  #error LUN_6 must be defined as ENABLE or DISABLE in conf_access.h -#endif -#ifndef LUN_7 -  #error LUN_7 must be defined as ENABLE or DISABLE in conf_access.h -#endif -#ifndef LUN_USB -  #error LUN_USB must be defined as ENABLE or DISABLE in conf_access.h -#endif - -/*! \name LUN IDs - */ -//! @{ -#define LUN_ID_0        (0)                 //!< First static LUN. -#define LUN_ID_1        (LUN_ID_0 + LUN_0) -#define LUN_ID_2        (LUN_ID_1 + LUN_1) -#define LUN_ID_3        (LUN_ID_2 + LUN_2) -#define LUN_ID_4        (LUN_ID_3 + LUN_3) -#define LUN_ID_5        (LUN_ID_4 + LUN_4) -#define LUN_ID_6        (LUN_ID_5 + LUN_5) -#define LUN_ID_7        (LUN_ID_6 + LUN_6) -#define MAX_LUN         (LUN_ID_7 + LUN_7)  //!< Number of static LUNs. -#define LUN_ID_USB      (MAX_LUN)           //!< First dynamic LUN (USB host mass storage). -//! @} - - -// Include LUN header files. -#if LUN_0 == ENABLE -  #include LUN_0_INCLUDE -#endif -#if LUN_1 == ENABLE -  #include LUN_1_INCLUDE -#endif -#if LUN_2 == ENABLE -  #include LUN_2_INCLUDE -#endif -#if LUN_3 == ENABLE -  #include LUN_3_INCLUDE -#endif -#if LUN_4 == ENABLE -  #include LUN_4_INCLUDE -#endif -#if LUN_5 == ENABLE -  #include LUN_5_INCLUDE -#endif -#if LUN_6 == ENABLE -  #include LUN_6_INCLUDE -#endif -#if LUN_7 == ENABLE -  #include LUN_7_INCLUDE -#endif -#if LUN_USB == ENABLE -  #include LUN_USB_INCLUDE -#endif - - -// Check the configuration of write protection in conf_access.h. -#ifndef GLOBAL_WR_PROTECT -  #error GLOBAL_WR_PROTECT must be defined as ENABLED or DISABLED in conf_access.h -#endif - - -#if GLOBAL_WR_PROTECT == ENABLED - -//! Write protect. -extern Bool g_wr_protect; - -#endif - - -/*! \name Control Interface - */ -//! @{ - -#ifdef FREERTOS_USED - -/*! \brief Initializes the LUN access locker. - * - * \return \c TRUE if the locker was successfully initialized, else \c FALSE. - */ -extern Bool ctrl_access_init(void); - -#endif  // FREERTOS_USED - -/*! \brief Returns the number of LUNs. - * - * \return Number of LUNs in the system. - */ -extern U8 get_nb_lun(void); - -/*! \brief Returns the current LUN. - * - * \return Current LUN. - * - * \todo Implement. - */ -extern U8 get_cur_lun(void); - -/*! \brief Tests the memory state and initializes the memory if required. - * - * The TEST UNIT READY SCSI primary command allows an application client to poll - * a LUN until it is ready without having to allocate memory for returned data. - * - * This command may be used to check the media status of LUNs with removable - * media. - * - * \param lun Logical Unit Number. - * - * \return Status. - */ -extern Ctrl_status mem_test_unit_ready(U8 lun); - -/*! \brief Returns the address of the last valid sector (512 bytes) in the - *         memory. - * - * \param lun           Logical Unit Number. - * \param u32_nb_sector Pointer to the address of the last valid sector. - * - * \return Status. - */ -extern Ctrl_status mem_read_capacity(U8 lun, U32 *u32_nb_sector); - -/*! \brief Returns the size of the physical sector. - * - * \param lun Logical Unit Number. - * - * \return Sector size (unit: 512 bytes). - */ -extern U8 mem_sector_size(U8 lun); - -/*! \brief Returns the write-protection state of the memory. - * - * \param lun Logical Unit Number. - * - * \return \c TRUE if the memory is write-protected, else \c FALSE. - * - * \note Only used by removable memories with hardware-specific write - *       protection. - */ -extern Bool mem_wr_protect(U8 lun); - -/*! \brief Tells whether the memory is removable. - * - * \param lun Logical Unit Number. - * - * \return \c TRUE if the memory is removable, else \c FALSE. - */ -extern Bool mem_removal(U8 lun); - -/*! \brief Returns a pointer to the LUN name. - * - * \param lun Logical Unit Number. - * - * \return Pointer to the LUN name string. - */ -extern const char *mem_name(U8 lun); - -//! @} - - -#if ACCESS_USB == ENABLED - -/*! \name MEM <-> USB Interface - */ -//! @{ - -/*! \brief Tranfers data from the memory to USB. - * - * \param lun       Logical Unit Number. - * \param addr      Address of first memory sector to read. - * \param nb_sector Number of sectors to transfer. - * - * \return Status. - */ -extern Ctrl_status memory_2_usb(U8 lun, U32 addr, U16 nb_sector); - -/*! \brief Tranfers data from USB to the memory. - * - * \param lun       Logical Unit Number. - * \param addr      Address of first memory sector to write. - * \param nb_sector Number of sectors to transfer. - * - * \return Status. - */ -extern Ctrl_status usb_2_memory(U8 lun, U32 addr, U16 nb_sector); - -//! @} - -#endif  // ACCESS_USB == ENABLED - - -#if ACCESS_MEM_TO_RAM == ENABLED - -/*! \name MEM <-> RAM Interface - */ -//! @{ - -/*! \brief Copies 1 data sector from the memory to RAM. - * - * \param lun   Logical Unit Number. - * \param addr  Address of first memory sector to read. - * \param ram   Pointer to RAM buffer to write. - * - * \return Status. - */ -extern Ctrl_status memory_2_ram(U8 lun, U32 addr, void *ram); - -/*! \brief Copies 1 data sector from RAM to the memory. - * - * \param lun   Logical Unit Number. - * \param addr  Address of first memory sector to write. - * \param ram   Pointer to RAM buffer to read. - * - * \return Status. - */ -extern Ctrl_status ram_2_memory(U8 lun, U32 addr, const void *ram); - -//! @} - -#endif  // ACCESS_MEM_TO_RAM == ENABLED - - -#if ACCESS_STREAM == ENABLED - -/*! \name Streaming MEM <-> MEM Interface - */ -//! @{ - -//! Erroneous streaming data transfer ID. -#define ID_STREAM_ERR         0xFF - -  #if ACCESS_MEM_TO_MEM == ENABLED - -/*! \brief Copies data from one memory to another. - * - * \param src_lun   Source Logical Unit Number. - * \param src_addr  Source address of first memory sector to read. - * \param dest_lun  Destination Logical Unit Number. - * \param dest_addr Destination address of first memory sector to write. - * \param nb_sector Number of sectors to copy. - * - * \return Status. - */ -extern Ctrl_status stream_mem_to_mem(U8 src_lun, U32 src_addr, U8 dest_lun, U32 dest_addr, U16 nb_sector); - -  #endif  // ACCESS_MEM_TO_MEM == ENABLED - -/*! \brief Returns the state of a streaming data transfer. - * - * \param id  Transfer ID. - * - * \return Status. - * - * \todo Implement. - */ -extern Ctrl_status stream_state(U8 id); - -/*! \brief Stops a streaming data transfer. - * - * \param id  Transfer ID. - * - * \return Number of remaining sectors. - * - * \todo Implement. - */ -extern U16 stream_stop(U8 id); - -//! @} - -#endif  // ACCESS_STREAM == ENABLED - - -#endif  // _CTRL_ACCESS_H_  | 
