From 51c2a1437b720d584d2f8dd7e01efeb608f991a4 Mon Sep 17 00:00:00 2001 From: david gauchard Date: Tue, 22 Dec 2020 22:36:21 +0100 Subject: [PATCH] more lwIP physical interfaces (#6680) This commit adds W5500 W5100 and ENC28j60 drivers from @njh with credits They are available in libraries/ An example is added in W5500 examples directory plus: * Extract dhcp server from lwip2 and add it to the core as a class. It must always be present, it is linked and can be called by fw on boot. So it cannot be stored in a library. * ethernet: static or dhcp works * PPPServer: example * bring WiFi.config() to the lwIP generic interface (argument reorder common function) * move hostname() from WiFI-STA to generic interface * remove non readable characters from dhcp-server comments * dhcp-server: magic_cookie is part of bootp rfc * fixes from https://github.com/d-a-v/W5500lwIP/issues/17 * enable lwip_hook_dhcp_parse_option() * +ethernet tcp client example in w5500 library examples --- cores/esp8266/LwipDhcpServer-NonOS.cpp | 64 + cores/esp8266/LwipDhcpServer.cpp | 1613 +++++++++++++++++ cores/esp8266/LwipDhcpServer.h | 124 ++ cores/esp8266/LwipIntf.cpp | 156 ++ cores/esp8266/LwipIntf.h | 29 +- cores/esp8266/LwipIntfCB.cpp | 16 +- cores/esp8266/LwipIntfDev.h | 386 ++++ .../esp8266}/wl_definitions.h | 2 +- .../RangeExtender-NAPT/RangeExtender-NAPT.ino | 6 +- .../examples/StaticLease/StaticLease.ino | 5 +- libraries/ESP8266WiFi/src/ESP8266WiFi.h | 2 +- libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp | 23 +- libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp | 112 +- libraries/ESP8266WiFi/src/ESP8266WiFiSTA.h | 7 +- libraries/ESP8266WiFi/src/WiFiClient.cpp | 2 +- libraries/ESP8266WiFi/src/WiFiServer.h | 2 +- libraries/ESP8266WiFi/src/WiFiUdp.cpp | 2 +- .../lwIP_PPP/examples/PPPServer/PPPServer.ino | 111 ++ libraries/lwIP_PPP/library.properties | 10 + libraries/lwIP_PPP/src/PPPServer.cpp | 196 ++ libraries/lwIP_PPP/src/PPPServer.h | 77 + libraries/lwIP_enc28j60/library.properties | 10 + libraries/lwIP_enc28j60/src/ENC28J60lwIP.h | 10 + .../lwIP_enc28j60/src/utility/enc28j60.cpp | 744 ++++++++ .../lwIP_enc28j60/src/utility/enc28j60.h | 149 ++ libraries/lwIP_w5100/library.properties | 10 + libraries/lwIP_w5100/src/W5100lwIP.h | 10 + libraries/lwIP_w5100/src/utility/w5100.cpp | 369 ++++ libraries/lwIP_w5100/src/utility/w5100.h | 499 +++++ .../examples/TCPClient/TCPClient.ino | 102 ++ libraries/lwIP_w5500/library.properties | 10 + libraries/lwIP_w5500/src/W5500lwIP.h | 10 + libraries/lwIP_w5500/src/utility/w5500.cpp | 442 +++++ libraries/lwIP_w5500/src/utility/w5500.h | 767 ++++++++ tests/host/Makefile | 1 + tests/host/common/user_interface.cpp | 43 + tests/restyle.sh | 2 + tools/sdk/include/ipv4_addr.h | 11 +- tools/sdk/include/user_interface.h | 6 +- tools/sdk/lib/liblwip2-1460-feat.a | Bin 2506734 -> 2411882 bytes tools/sdk/lib/liblwip2-1460.a | Bin 1728182 -> 1633626 bytes tools/sdk/lib/liblwip2-536-feat.a | Bin 2506638 -> 2411786 bytes tools/sdk/lib/liblwip2-536.a | Bin 1728090 -> 1633534 bytes tools/sdk/lib/liblwip6-1460-feat.a | Bin 2356304 -> 2259348 bytes tools/sdk/lib/liblwip6-536-feat.a | Bin 2356212 -> 2259256 bytes tools/sdk/lwip2/builder | 2 +- tools/sdk/lwip2/include/arch/cc.h | 1 + tools/sdk/lwip2/include/lwip-git-hash.h | 2 +- tools/sdk/lwip2/include/lwip/priv/tcp_priv.h | 2 +- tools/sdk/lwip2/include/lwipopts.h | 26 +- tools/sdk/lwip2/include/netif/ppp/fsm.h | 182 ++ tools/sdk/lwip2/include/netif/ppp/ipcp.h | 134 ++ tools/sdk/lwip2/include/netif/ppp/lcp.h | 179 ++ tools/sdk/lwip2/include/netif/ppp/ppp.h | 698 +++++++ tools/sdk/lwip2/include/netif/ppp/ppp_opts.h | 610 +++++++ tools/sdk/lwip2/include/netif/ppp/pppos.h | 126 ++ tools/sdk/lwip2/include/netif/ppp/vj.h | 169 ++ 57 files changed, 8114 insertions(+), 157 deletions(-) create mode 100644 cores/esp8266/LwipDhcpServer-NonOS.cpp create mode 100644 cores/esp8266/LwipDhcpServer.cpp create mode 100644 cores/esp8266/LwipDhcpServer.h create mode 100644 cores/esp8266/LwipIntf.cpp create mode 100644 cores/esp8266/LwipIntfDev.h rename {libraries/ESP8266WiFi/src/include => cores/esp8266}/wl_definitions.h (96%) create mode 100644 libraries/lwIP_PPP/examples/PPPServer/PPPServer.ino create mode 100644 libraries/lwIP_PPP/library.properties create mode 100644 libraries/lwIP_PPP/src/PPPServer.cpp create mode 100644 libraries/lwIP_PPP/src/PPPServer.h create mode 100644 libraries/lwIP_enc28j60/library.properties create mode 100644 libraries/lwIP_enc28j60/src/ENC28J60lwIP.h create mode 100644 libraries/lwIP_enc28j60/src/utility/enc28j60.cpp create mode 100644 libraries/lwIP_enc28j60/src/utility/enc28j60.h create mode 100644 libraries/lwIP_w5100/library.properties create mode 100644 libraries/lwIP_w5100/src/W5100lwIP.h create mode 100644 libraries/lwIP_w5100/src/utility/w5100.cpp create mode 100644 libraries/lwIP_w5100/src/utility/w5100.h create mode 100644 libraries/lwIP_w5500/examples/TCPClient/TCPClient.ino create mode 100644 libraries/lwIP_w5500/library.properties create mode 100644 libraries/lwIP_w5500/src/W5500lwIP.h create mode 100644 libraries/lwIP_w5500/src/utility/w5500.cpp create mode 100644 libraries/lwIP_w5500/src/utility/w5500.h create mode 100644 tools/sdk/lwip2/include/netif/ppp/fsm.h create mode 100644 tools/sdk/lwip2/include/netif/ppp/ipcp.h create mode 100644 tools/sdk/lwip2/include/netif/ppp/lcp.h create mode 100644 tools/sdk/lwip2/include/netif/ppp/ppp.h create mode 100644 tools/sdk/lwip2/include/netif/ppp/ppp_opts.h create mode 100644 tools/sdk/lwip2/include/netif/ppp/pppos.h create mode 100644 tools/sdk/lwip2/include/netif/ppp/vj.h diff --git a/cores/esp8266/LwipDhcpServer-NonOS.cpp b/cores/esp8266/LwipDhcpServer-NonOS.cpp new file mode 100644 index 0000000000..0a0f0b77b1 --- /dev/null +++ b/cores/esp8266/LwipDhcpServer-NonOS.cpp @@ -0,0 +1,64 @@ +/* + lwIPDhcpServer-NonOS.cpp - DHCP server wrapper + + Copyright (c) 2020 esp8266 arduino. All rights reserved. + This file is part of the esp8266 core for Arduino environment. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +// STARTS/STOPS DHCP SERVER ON WIFI AP INTERFACE +// these functions must exists as-is with "C" interface, +// nonos-sdk calls them at boot time and later + +#include // LWIP_VERSION + +#include +#include "LwipDhcpServer.h" + +extern netif netif_git[2]; + +// global DHCP instance for softAP interface +DhcpServer dhcpSoftAP(&netif_git[SOFTAP_IF]); + +extern "C" +{ + + void dhcps_start(struct ip_info *info, netif* apnetif) + { + // apnetif is esp interface, replaced by lwip2's + // netif_git[SOFTAP_IF] interface in constructor + (void)apnetif; + +#if 0 + // can't use C++ now, global ctors are not initialized yet + dhcpSoftAP.begin(info); +#else + (void)info; + // initial version: emulate nonos-sdk in DhcpServer class before + // trying to change legacy behavor + // `fw_has_started_softap_dhcps` will be read in DhcpServer::DhcpServer + // which is called when c++ ctors are initialized, specifically + // dhcpSoftAP intialized with AP interface number above. + fw_has_started_softap_dhcps = 1; +#endif + } + + void dhcps_stop() + { + dhcpSoftAP.end(); + } + +} // extern "C" diff --git a/cores/esp8266/LwipDhcpServer.cpp b/cores/esp8266/LwipDhcpServer.cpp new file mode 100644 index 0000000000..2fa0b12d84 --- /dev/null +++ b/cores/esp8266/LwipDhcpServer.cpp @@ -0,0 +1,1613 @@ +/* + lwIPDhcpServer.c - DHCP server + + Copyright (c) 2016 Espressif. All rights reserved. + Copyright (c) 2020 esp8266 arduino. All rights reserved. + This file is part of the esp8266 core for Arduino environment. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + // original sources (no license provided) + // ESP8266_NONOS_SDK/third_party/lwip/app/dhcpserver.c + // ESP8266_NONOS_SDK/third_party/include/lwip/app/dhcpserver.h +*/ + +// lwIPDhcpServer.{cc,h} encapsulate original nonos-sdk dhcp server +// nearly as-is. This is an initial version to guaranty legacy behavior +// with same default values. + +// vv this comment is supposed to be removed after the first commit +// Logic and coding style in this file can be wrong but left to the closest +// of the initial version for easier issue tracking. +// (better is enemy of [good = already working]) +// ^^ this comment is supposed to be removed after the first commit + +#include // LWIP_VERSION + +#define DHCPS_LEASE_TIME_DEF (120) + +#define USE_DNS + +#include "lwip/inet.h" +#include "lwip/err.h" +#include "lwip/pbuf.h" +#include "lwip/udp.h" +#include "lwip/mem.h" +#include "osapi.h" + +#include "LwipDhcpServer.h" + +#include "user_interface.h" +#include "mem.h" + +typedef struct dhcps_state +{ + sint16_t state; +} dhcps_state; + +typedef struct dhcps_msg +{ + uint8_t op, htype, hlen, hops; + uint8_t xid[4]; + uint16_t secs, flags; + uint8_t ciaddr[4]; + uint8_t yiaddr[4]; + uint8_t siaddr[4]; + uint8_t giaddr[4]; + uint8_t chaddr[16]; + uint8_t sname[64]; + uint8_t file[128]; + uint8_t options[312]; +} dhcps_msg; + +#ifndef LWIP_OPEN_SRC +struct dhcps_lease +{ + bool enable; + struct ipv4_addr start_ip; + struct ipv4_addr end_ip; +}; + +enum dhcps_offer_option +{ + OFFER_START = 0x00, + OFFER_ROUTER = 0x01, + OFFER_END +}; +#endif + +typedef enum +{ + DHCPS_TYPE_DYNAMIC, + DHCPS_TYPE_STATIC +} dhcps_type_t; + +typedef enum +{ + DHCPS_STATE_ONLINE, + DHCPS_STATE_OFFLINE +} dhcps_state_t; + +struct dhcps_pool +{ + struct ipv4_addr ip; + uint8 mac[6]; + uint32 lease_timer; + dhcps_type_t type; + dhcps_state_t state; + +}; + +#define DHCPS_LEASE_TIMER dhcps_lease_time //0x05A0 +#define DHCPS_MAX_LEASE 0x64 +#define BOOTP_BROADCAST 0x8000 + +#define DHCP_REQUEST 1 +#define DHCP_REPLY 2 +#define DHCP_HTYPE_ETHERNET 1 +#define DHCP_HLEN_ETHERNET 6 +#define DHCP_MSG_LEN 236 + +#define DHCPS_SERVER_PORT 67 +#define DHCPS_CLIENT_PORT 68 + +#define DHCPDISCOVER 1 +#define DHCPOFFER 2 +#define DHCPREQUEST 3 +#define DHCPDECLINE 4 +#define DHCPACK 5 +#define DHCPNAK 6 +#define DHCPRELEASE 7 + +#define DHCP_OPTION_SUBNET_MASK 1 +#define DHCP_OPTION_ROUTER 3 +#define DHCP_OPTION_DNS_SERVER 6 +#define DHCP_OPTION_REQ_IPADDR 50 +#define DHCP_OPTION_LEASE_TIME 51 +#define DHCP_OPTION_MSG_TYPE 53 +#define DHCP_OPTION_SERVER_ID 54 +#define DHCP_OPTION_INTERFACE_MTU 26 +#define DHCP_OPTION_PERFORM_ROUTER_DISCOVERY 31 +#define DHCP_OPTION_BROADCAST_ADDRESS 28 +#define DHCP_OPTION_REQ_LIST 55 +#define DHCP_OPTION_END 255 + +//#define USE_CLASS_B_NET 1 +#define DHCPS_DEBUG 0 +#define MAX_STATION_NUM 8 + +#define DHCPS_STATE_OFFER 1 +#define DHCPS_STATE_DECLINE 2 +#define DHCPS_STATE_ACK 3 +#define DHCPS_STATE_NAK 4 +#define DHCPS_STATE_IDLE 5 +#define DHCPS_STATE_RELEASE 6 + +#define dhcps_router_enabled(offer) ((offer & OFFER_ROUTER) != 0) + +#ifdef MEMLEAK_DEBUG +const char mem_debug_file[] ICACHE_RODATA_ATTR = __FILE__; +#endif + +#if DHCPS_DEBUG +#define LWIP_IS_OK(what,err) ({ int ret = 1, errval = (err); if (errval != ERR_OK) { os_printf("DHCPS ERROR: %s (lwip:%d)\n", what, errval); ret = 0; } ret; }) +#else +#define LWIP_IS_OK(what,err) ((err) == ERR_OK) +#endif + +const uint32 DhcpServer::magic_cookie = 0x63538263; // https://tools.ietf.org/html/rfc1497 + +int fw_has_started_softap_dhcps = 0; + +//////////////////////////////////////////////////////////////////////////////////// + +DhcpServer::DhcpServer(netif* netif): _netif(netif) +{ + pcb_dhcps = nullptr; + dns_address.addr = 0; + plist = nullptr; + offer = 0xFF; + renew = false; + dhcps_lease_time = DHCPS_LEASE_TIME_DEF; //minute + + if (netif->num == SOFTAP_IF && fw_has_started_softap_dhcps == 1) + { + // When nonos-sdk starts DHCPS at boot: + // 1. `fw_has_started_softap_dhcps` is already initialized to 1 + // 2. global ctor DhcpServer's `dhcpSoftAP(&netif_git[SOFTAP_IF])` is called + // 3. (that's here) => begin(legacy-values) is called + ip_info ip = + { + { 0x0104a8c0 }, // IP 192.168.4.1 + { 0x00ffffff }, // netmask 255.255.255.0 + { 0 } // gateway 0.0.0.0 + }; + begin(&ip); + fw_has_started_softap_dhcps = 2; // not 1, ending intial boot sequence + } +}; + +// wifi_softap_set_station_info is missing in user_interface.h: +extern "C" void wifi_softap_set_station_info(uint8_t* mac, struct ipv4_addr*); + +void DhcpServer::dhcps_set_dns(int num, const ipv4_addr_t* dns) +{ + (void)num; + if (!ip4_addr_isany(dns)) + { + ip4_addr_copy(dns_address, *dns); + } +} + +/****************************************************************************** + FunctionName : node_insert_to_list + Description : insert the node to the list + Parameters : arg -- Additional argument to pass to the callback function + Returns : none +*******************************************************************************/ +void DhcpServer::node_insert_to_list(list_node **phead, list_node* pinsert) +{ + list_node *plist = nullptr; + struct dhcps_pool *pdhcps_pool = nullptr; + struct dhcps_pool *pdhcps_node = nullptr; + if (*phead == nullptr) + { + *phead = pinsert; + } + else + { + plist = *phead; + pdhcps_node = (struct dhcps_pool*)pinsert->pnode; + pdhcps_pool = (struct dhcps_pool*)plist->pnode; + + if (pdhcps_node->ip.addr < pdhcps_pool->ip.addr) + { + pinsert->pnext = plist; + *phead = pinsert; + } + else + { + while (plist->pnext != nullptr) + { + pdhcps_pool = (struct dhcps_pool*)plist->pnext->pnode; + if (pdhcps_node->ip.addr < pdhcps_pool->ip.addr) + { + pinsert->pnext = plist->pnext; + plist->pnext = pinsert; + break; + } + plist = plist->pnext; + } + + if (plist->pnext == nullptr) + { + plist->pnext = pinsert; + } + } + } + // pinsert->pnext = nullptr; +} + +/****************************************************************************** + FunctionName : node_delete_from_list + Description : remove the node from list + Parameters : arg -- Additional argument to pass to the callback function + Returns : none +*******************************************************************************/ +void DhcpServer::node_remove_from_list(list_node **phead, list_node* pdelete) +{ + list_node *plist = nullptr; + + plist = *phead; + if (plist == nullptr) + { + *phead = nullptr; + } + else + { + if (plist == pdelete) + { + *phead = plist->pnext; + pdelete->pnext = nullptr; + } + else + { + while (plist != nullptr) + { + if (plist->pnext == pdelete) + { + plist->pnext = pdelete->pnext; + pdelete->pnext = nullptr; + } + plist = plist->pnext; + } + } + } +} + +/****************************************************************************** + FunctionName : add_dhcps_lease + Description : add static lease on the list, this will be the next available @ + Parameters : mac address + Returns : true if ok and false if this mac already exist or if all ip are already reserved +*******************************************************************************/ +bool DhcpServer::add_dhcps_lease(uint8 *macaddr) +{ + struct dhcps_pool *pdhcps_pool = nullptr; + list_node *pback_node = nullptr; + + uint32 start_ip = dhcps_lease.start_ip.addr; + uint32 end_ip = dhcps_lease.end_ip.addr; + + for (pback_node = plist; pback_node != nullptr; pback_node = pback_node->pnext) + { + pdhcps_pool = (dhcps_pool*)pback_node->pnode; + if (memcmp(pdhcps_pool->mac, macaddr, sizeof(pdhcps_pool->mac)) == 0) + { +#if DHCPS_DEBUG + os_printf("this mac already exist"); +#endif + return false; + } + else + { + start_ip = htonl((ntohl(start_ip) + 1)); + } + } + + if (start_ip > end_ip) + { +#if DHCPS_DEBUG + os_printf("no more ip available"); +#endif + return false; + } + + pdhcps_pool = (struct dhcps_pool *)zalloc(sizeof(struct dhcps_pool)); + pdhcps_pool->ip.addr = start_ip; + memcpy(pdhcps_pool->mac, macaddr, sizeof(pdhcps_pool->mac)); + pdhcps_pool->lease_timer = DHCPS_LEASE_TIMER; + pdhcps_pool->type = DHCPS_TYPE_STATIC; + pdhcps_pool->state = DHCPS_STATE_ONLINE; + pback_node = (list_node *)zalloc(sizeof(list_node)); + pback_node->pnode = pdhcps_pool; + pback_node->pnext = nullptr; + node_insert_to_list(&plist, pback_node); + + return true; +} + +/////////////////////////////////////////////////////////////////////////////////// +/* + DHCP msg + + @param optptr -- DHCP msg + @param type -- option + + @return uint8_t* DHCP msg +*/ +/////////////////////////////////////////////////////////////////////////////////// +uint8_t* DhcpServer::add_msg_type(uint8_t *optptr, uint8_t type) +{ + + *optptr++ = DHCP_OPTION_MSG_TYPE; + *optptr++ = 1; + *optptr++ = type; + return optptr; +} +/////////////////////////////////////////////////////////////////////////////////// +/* + DHCP msg offer + + @param optptr -- DHCP msg + + @return uint8_t* DHCP msg +*/ +/////////////////////////////////////////////////////////////////////////////////// +uint8_t* DhcpServer::add_offer_options(uint8_t *optptr) +{ + //struct ipv4_addr ipadd; + //ipadd.addr = server_address.addr; +#define ipadd (_netif->ip_addr) + + //struct ip_info if_ip; + //bzero(&if_ip, sizeof(struct ip_info)); + //wifi_get_ip_info(SOFTAP_IF, &if_ip); +#define if_ip (*_netif) + + *optptr++ = DHCP_OPTION_SUBNET_MASK; + *optptr++ = 4; + *optptr++ = ip4_addr1(ip_2_ip4(&if_ip.netmask)); + *optptr++ = ip4_addr2(ip_2_ip4(&if_ip.netmask)); + *optptr++ = ip4_addr3(ip_2_ip4(&if_ip.netmask)); + *optptr++ = ip4_addr4(ip_2_ip4(&if_ip.netmask)); + + *optptr++ = DHCP_OPTION_LEASE_TIME; + *optptr++ = 4; + *optptr++ = ((DHCPS_LEASE_TIMER * 60) >> 24) & 0xFF; + *optptr++ = ((DHCPS_LEASE_TIMER * 60) >> 16) & 0xFF; + *optptr++ = ((DHCPS_LEASE_TIMER * 60) >> 8) & 0xFF; + *optptr++ = ((DHCPS_LEASE_TIMER * 60) >> 0) & 0xFF; + + *optptr++ = DHCP_OPTION_SERVER_ID; + *optptr++ = 4; + *optptr++ = ip4_addr1(ip_2_ip4(&ipadd)); + *optptr++ = ip4_addr2(ip_2_ip4(&ipadd)); + *optptr++ = ip4_addr3(ip_2_ip4(&ipadd)); + *optptr++ = ip4_addr4(ip_2_ip4(&ipadd)); + + if (dhcps_router_enabled(offer) && ip_2_ip4(&if_ip.gw)->addr) + { + *optptr++ = DHCP_OPTION_ROUTER; + *optptr++ = 4; + *optptr++ = ip4_addr1(ip_2_ip4(&if_ip.gw)); + *optptr++ = ip4_addr2(ip_2_ip4(&if_ip.gw)); + *optptr++ = ip4_addr3(ip_2_ip4(&if_ip.gw)); + *optptr++ = ip4_addr4(ip_2_ip4(&if_ip.gw)); + } + +#ifdef USE_DNS + *optptr++ = DHCP_OPTION_DNS_SERVER; + *optptr++ = 4; + if (dns_address.addr == 0) + { + *optptr++ = ip4_addr1(ip_2_ip4(&ipadd)); + *optptr++ = ip4_addr2(ip_2_ip4(&ipadd)); + *optptr++ = ip4_addr3(ip_2_ip4(&ipadd)); + *optptr++ = ip4_addr4(ip_2_ip4(&ipadd)); + } + else + { + *optptr++ = ip4_addr1(&dns_address); + *optptr++ = ip4_addr2(&dns_address); + *optptr++ = ip4_addr3(&dns_address); + *optptr++ = ip4_addr4(&dns_address); + } +#endif + + *optptr++ = DHCP_OPTION_BROADCAST_ADDRESS; + *optptr++ = 4; + // XXXFIXME do better than that, we have netmask + *optptr++ = ip4_addr1(ip_2_ip4(&ipadd)); + *optptr++ = ip4_addr2(ip_2_ip4(&ipadd)); + *optptr++ = ip4_addr3(ip_2_ip4(&ipadd)); + *optptr++ = 255; + + *optptr++ = DHCP_OPTION_INTERFACE_MTU; + *optptr++ = 2; + *optptr++ = 0x05; + *optptr++ = 0xdc; // 1500 + + *optptr++ = DHCP_OPTION_PERFORM_ROUTER_DISCOVERY; + *optptr++ = 1; + *optptr++ = 0x00; + +#if 0 // vendor specific unititialized (??) + *optptr++ = 43; // vendor specific + *optptr++ = 6; + // unitialized ? +#endif + +#if 0 // already set (DHCP_OPTION_SUBNET_MASK==1) (??) + *optptr++ = 0x01; + *optptr++ = 4; + *optptr++ = 0; + *optptr++ = 0; + *optptr++ = 0; + *optptr++ = 2; +#endif + + return optptr; + +#undef ipadd +#undef if_ip +} +/////////////////////////////////////////////////////////////////////////////////// +/* + DHCP msg + + @param optptr -- DHCP msg + + @return uint8_t* DHCP msg +*/ +/////////////////////////////////////////////////////////////////////////////////// +uint8_t* DhcpServer::add_end(uint8_t *optptr) +{ + + *optptr++ = DHCP_OPTION_END; + return optptr; +} +/////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +void DhcpServer::create_msg(struct dhcps_msg *m) +{ + struct ipv4_addr client; + + client.addr = client_address.addr; + + m->op = DHCP_REPLY; + m->htype = DHCP_HTYPE_ETHERNET; + m->hlen = 6; + m->hops = 0; + m->secs = 0; + m->flags = htons(BOOTP_BROADCAST); + + memcpy((char *) m->yiaddr, (char *) &client.addr, sizeof(m->yiaddr)); + memset((char *) m->ciaddr, 0, sizeof(m->ciaddr)); + memset((char *) m->siaddr, 0, sizeof(m->siaddr)); + memset((char *) m->giaddr, 0, sizeof(m->giaddr)); + memset((char *) m->sname, 0, sizeof(m->sname)); + memset((char *) m->file, 0, sizeof(m->file)); + memset((char *) m->options, 0, sizeof(m->options)); + memcpy((char *) m->options, &magic_cookie, sizeof(magic_cookie)); +} +/////////////////////////////////////////////////////////////////////////////////// +/* + OFFER + + @param -- m DHCP msg +*/ +/////////////////////////////////////////////////////////////////////////////////// +void DhcpServer::send_offer(struct dhcps_msg *m) +{ + uint8_t *end; + struct pbuf *p, *q; + u8_t *data; + u16_t cnt = 0; + u16_t i; + create_msg(m); + + end = add_msg_type(&m->options[4], DHCPOFFER); + end = add_offer_options(end); + end = add_end(end); + + p = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcps_msg), PBUF_RAM); +#if DHCPS_DEBUG + os_printf("udhcp: send_offer>>p->ref = %d\n", p->ref); +#endif + if (p != nullptr) + { + +#if DHCPS_DEBUG + os_printf("dhcps: send_offer>>pbuf_alloc succeed\n"); + os_printf("dhcps: send_offer>>p->tot_len = %d\n", p->tot_len); + os_printf("dhcps: send_offer>>p->len = %d\n", p->len); +#endif + q = p; + while (q != nullptr) + { + data = (u8_t *)q->payload; + for (i = 0; i < q->len; i++) + { + data[i] = ((u8_t *) m)[cnt++]; + } + + q = q->next; + } + } + else + { + +#if DHCPS_DEBUG + os_printf("dhcps: send_offer>>pbuf_alloc failed\n"); +#endif + return; + } + if (!LWIP_IS_OK("send_offer", udp_sendto(pcb_dhcps, p, &broadcast_dhcps, DHCPS_CLIENT_PORT))) + { +#if DHCPS_DEBUG + os_printf("dhcps: send_offer>>udp_sendto\n"); +#endif + } + if (p->ref != 0) + { +#if DHCPS_DEBUG + os_printf("udhcp: send_offer>>free pbuf\n"); +#endif + pbuf_free(p); + } +} +/////////////////////////////////////////////////////////////////////////////////// +/* + NAK + + @param m DHCP msg +*/ +/////////////////////////////////////////////////////////////////////////////////// +void DhcpServer::send_nak(struct dhcps_msg *m) +{ + + u8_t *end; + struct pbuf *p, *q; + u8_t *data; + u16_t cnt = 0; + u16_t i; + create_msg(m); + + end = add_msg_type(&m->options[4], DHCPNAK); + end = add_end(end); + + p = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcps_msg), PBUF_RAM); +#if DHCPS_DEBUG + os_printf("udhcp: send_nak>>p->ref = %d\n", p->ref); +#endif + if (p != nullptr) + { + +#if DHCPS_DEBUG + os_printf("dhcps: send_nak>>pbuf_alloc succeed\n"); + os_printf("dhcps: send_nak>>p->tot_len = %d\n", p->tot_len); + os_printf("dhcps: send_nak>>p->len = %d\n", p->len); +#endif + q = p; + while (q != nullptr) + { + data = (u8_t *)q->payload; + for (i = 0; i < q->len; i++) + { + data[i] = ((u8_t *) m)[cnt++]; + } + + q = q->next; + } + } + else + { + +#if DHCPS_DEBUG + os_printf("dhcps: send_nak>>pbuf_alloc failed\n"); +#endif + return; + } + LWIP_IS_OK("dhcps send nak", udp_sendto(pcb_dhcps, p, &broadcast_dhcps, DHCPS_CLIENT_PORT)); + if (p->ref != 0) + { +#if DHCPS_DEBUG + os_printf("udhcp: send_nak>>free pbuf\n"); +#endif + pbuf_free(p); + } +} +/////////////////////////////////////////////////////////////////////////////////// +/* + ACK DHCP + + @param m DHCP msg +*/ +/////////////////////////////////////////////////////////////////////////////////// +void DhcpServer::send_ack(struct dhcps_msg *m) +{ + + u8_t *end; + struct pbuf *p, *q; + u8_t *data; + u16_t cnt = 0; + u16_t i; + create_msg(m); + + end = add_msg_type(&m->options[4], DHCPACK); + end = add_offer_options(end); + end = add_end(end); + + p = pbuf_alloc(PBUF_TRANSPORT, sizeof(struct dhcps_msg), PBUF_RAM); +#if DHCPS_DEBUG + os_printf("udhcp: send_ack>>p->ref = %d\n", p->ref); +#endif + if (p != nullptr) + { + +#if DHCPS_DEBUG + os_printf("dhcps: send_ack>>pbuf_alloc succeed\n"); + os_printf("dhcps: send_ack>>p->tot_len = %d\n", p->tot_len); + os_printf("dhcps: send_ack>>p->len = %d\n", p->len); +#endif + q = p; + while (q != nullptr) + { + data = (u8_t *)q->payload; + for (i = 0; i < q->len; i++) + { + data[i] = ((u8_t *) m)[cnt++]; + } + + q = q->next; + } + } + else + { + +#if DHCPS_DEBUG + os_printf("dhcps: send_ack>>pbuf_alloc failed\n"); +#endif + return; + } + if (!LWIP_IS_OK("dhcps send ack", udp_sendto(pcb_dhcps, p, &broadcast_dhcps, DHCPS_CLIENT_PORT))) + { +#if DHCPS_DEBUG + os_printf("dhcps: send_ack>>udp_sendto\n"); +#endif + } + + if (p->ref != 0) + { +#if DHCPS_DEBUG + os_printf("udhcp: send_ack>>free pbuf\n"); +#endif + pbuf_free(p); + } +} +/////////////////////////////////////////////////////////////////////////////////// +/* + DHCP + + @param optptr DHCP msg ะต + @param len + + @return uint8_t* DHCP Server +*/ +/////////////////////////////////////////////////////////////////////////////////// +uint8_t DhcpServer::parse_options(uint8_t *optptr, sint16_t len) +{ + struct ipv4_addr client; + bool is_dhcp_parse_end = false; + struct dhcps_state s; + + client.addr = client_address.addr; + + u8_t *end = optptr + len; + u16_t type = 0; + + s.state = DHCPS_STATE_IDLE; + + while (optptr < end) + { +#if DHCPS_DEBUG + os_printf("dhcps: (sint16_t)*optptr = %d\n", (sint16_t)*optptr); +#endif + switch ((sint16_t) *optptr) + { + + case DHCP_OPTION_MSG_TYPE: //53 + type = *(optptr + 2); + break; + + case DHCP_OPTION_REQ_IPADDR://50 + //os_printf("dhcps:0x%08x,0x%08x\n",client.addr,*(uint32*)(optptr+2)); + if (memcmp((char *) &client.addr, (char *) optptr + 2, 4) == 0) + { +#if DHCPS_DEBUG + os_printf("dhcps: DHCP_OPTION_REQ_IPADDR = 0 ok\n"); +#endif + s.state = DHCPS_STATE_ACK; + } + else + { +#if DHCPS_DEBUG + os_printf("dhcps: DHCP_OPTION_REQ_IPADDR != 0 err\n"); +#endif + s.state = DHCPS_STATE_NAK; + } + break; + case DHCP_OPTION_END: + { + is_dhcp_parse_end = true; + } + break; + } + + if (is_dhcp_parse_end) + { + break; + } + + optptr += optptr[1] + 2; + } + + switch (type) + { + case DHCPDISCOVER://1 + s.state = DHCPS_STATE_OFFER; +#if DHCPS_DEBUG + os_printf("dhcps: DHCPD_STATE_OFFER\n"); +#endif + break; + + case DHCPREQUEST://3 + if (!(s.state == DHCPS_STATE_ACK || s.state == DHCPS_STATE_NAK)) + { + if (renew == true) + { + s.state = DHCPS_STATE_ACK; + } + else + { + s.state = DHCPS_STATE_NAK; + } +#if DHCPS_DEBUG + os_printf("dhcps: DHCPD_STATE_NAK\n"); +#endif + } + break; + + case DHCPDECLINE://4 + s.state = DHCPS_STATE_IDLE; +#if DHCPS_DEBUG + os_printf("dhcps: DHCPD_STATE_IDLE\n"); +#endif + break; + + case DHCPRELEASE://7 + s.state = DHCPS_STATE_RELEASE; +#if DHCPS_DEBUG + os_printf("dhcps: DHCPD_STATE_IDLE\n"); +#endif + break; + } +#if DHCPS_DEBUG + os_printf("dhcps: return s.state = %d\n", s.state); +#endif + return s.state; +} +/////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// +sint16_t DhcpServer::parse_msg(struct dhcps_msg *m, u16_t len) +{ + if (memcmp((char *)m->options, + &magic_cookie, + sizeof(magic_cookie)) == 0) + { + struct ipv4_addr ip; + memcpy(&ip.addr, m->ciaddr, sizeof(ip.addr)); + client_address.addr = dhcps_client_update(m->chaddr, &ip); + + sint16_t ret = parse_options(&m->options[4], len); + + if (ret == DHCPS_STATE_RELEASE) + { + dhcps_client_leave(m->chaddr, &ip, true); // force to delete + client_address.addr = ip.addr; + } + + return ret; + } + return 0; +} +/////////////////////////////////////////////////////////////////////////////////// +/* + DHCP + udp_recv() callback + + @param arg + @param pcb + @param p + @param addr + @param port +*/ +/////////////////////////////////////////////////////////////////////////////////// + +void DhcpServer::S_handle_dhcp(void *arg, + struct udp_pcb *pcb, + struct pbuf *p, + const ip_addr_t *addr, + uint16_t port) +{ + DhcpServer* instance = reinterpret_cast(arg); + instance->handle_dhcp(pcb, p, addr, port); +} + +void DhcpServer::handle_dhcp( + struct udp_pcb *pcb, + struct pbuf *p, + const ip_addr_t *addr, + uint16_t port) +{ + (void)pcb; + (void)addr; + (void)port; + + struct dhcps_msg *pmsg_dhcps = nullptr; + sint16_t tlen = 0; + u16_t i = 0; + u16_t dhcps_msg_cnt = 0; + u8_t *p_dhcps_msg = nullptr; + u8_t *data = nullptr; + +#if DHCPS_DEBUG + os_printf("dhcps: handle_dhcp-> receive a packet\n"); +#endif + if (p == nullptr) + { + return; + } + + pmsg_dhcps = (struct dhcps_msg *)zalloc(sizeof(struct dhcps_msg)); + if (nullptr == pmsg_dhcps) + { + pbuf_free(p); + return; + } + p_dhcps_msg = (u8_t *)pmsg_dhcps; + tlen = p->tot_len; + data = (u8_t*)p->payload; + +#if DHCPS_DEBUG + os_printf("dhcps: handle_dhcp-> p->tot_len = %d\n", tlen); + os_printf("dhcps: handle_dhcp-> p->len = %d\n", p->len); +#endif + + for (i = 0; i < p->len; i++) + { + p_dhcps_msg[dhcps_msg_cnt++] = data[i]; + } + + if (p->next != nullptr) + { +#if DHCPS_DEBUG + os_printf("dhcps: handle_dhcp-> p->next != nullptr\n"); + os_printf("dhcps: handle_dhcp-> p->next->tot_len = %d\n", p->next->tot_len); + os_printf("dhcps: handle_dhcp-> p->next->len = %d\n", p->next->len); +#endif + + data = (u8_t*)p->next->payload; + for (i = 0; i < p->next->len; i++) + { + p_dhcps_msg[dhcps_msg_cnt++] = data[i]; + } + } + +#if DHCPS_DEBUG + os_printf("dhcps: handle_dhcp-> parse_msg(p)\n"); +#endif + + switch (parse_msg(pmsg_dhcps, tlen - 240)) + { + + case DHCPS_STATE_OFFER://1 +#if DHCPS_DEBUG + os_printf("dhcps: handle_dhcp-> DHCPD_STATE_OFFER\n"); +#endif + send_offer(pmsg_dhcps); + break; + case DHCPS_STATE_ACK://3 +#if DHCPS_DEBUG + os_printf("dhcps: handle_dhcp-> DHCPD_STATE_ACK\n"); +#endif + send_ack(pmsg_dhcps); + if (_netif->num == SOFTAP_IF) + { + wifi_softap_set_station_info(pmsg_dhcps->chaddr, &client_address); + } + break; + case DHCPS_STATE_NAK://4 +#if DHCPS_DEBUG + os_printf("dhcps: handle_dhcp-> DHCPD_STATE_NAK\n"); +#endif + send_nak(pmsg_dhcps); + break; + default : + break; + } +#if DHCPS_DEBUG + os_printf("dhcps: handle_dhcp-> pbuf_free(p)\n"); +#endif + pbuf_free(p); + free(pmsg_dhcps); + pmsg_dhcps = nullptr; +} +/////////////////////////////////////////////////////////////////////////////////// +void DhcpServer::init_dhcps_lease(uint32 ip) +{ + uint32 softap_ip = 0, local_ip = 0; + uint32 start_ip = 0; + uint32 end_ip = 0; + if (dhcps_lease.enable == true) + { + softap_ip = htonl(ip); + start_ip = htonl(dhcps_lease.start_ip.addr); + end_ip = htonl(dhcps_lease.end_ip.addr); + /*config ip information can't contain local ip*/ + if ((start_ip <= softap_ip) && (softap_ip <= end_ip)) + { + dhcps_lease.enable = false; + } + else + { + /*config ip information must be in the same segment as the local ip*/ + softap_ip >>= 8; + if (((start_ip >> 8 != softap_ip) || (end_ip >> 8 != softap_ip)) + || (end_ip - start_ip > DHCPS_MAX_LEASE)) + { + dhcps_lease.enable = false; + } + } + } + + if (dhcps_lease.enable == false) + { + local_ip = softap_ip = htonl(ip); + softap_ip &= 0xFFFFFF00; + local_ip &= 0xFF; + if (local_ip >= 0x80) + { + local_ip -= DHCPS_MAX_LEASE; + } + else + { + local_ip ++; + } + + bzero(&dhcps_lease, sizeof(dhcps_lease)); + dhcps_lease.start_ip.addr = softap_ip | local_ip; + dhcps_lease.end_ip.addr = softap_ip | (local_ip + DHCPS_MAX_LEASE - 1); + dhcps_lease.start_ip.addr = htonl(dhcps_lease.start_ip.addr); + dhcps_lease.end_ip.addr = htonl(dhcps_lease.end_ip.addr); + } + // dhcps_lease.start_ip.addr = htonl(dhcps_lease.start_ip.addr); + // dhcps_lease.end_ip.addr= htonl(dhcps_lease.end_ip.addr); + // os_printf("start_ip = 0x%x, end_ip = 0x%x\n",dhcps_lease.start_ip, dhcps_lease.end_ip); +} +/////////////////////////////////////////////////////////////////////////////////// + +bool DhcpServer::begin(struct ip_info *info) +{ + if (pcb_dhcps != nullptr) + { + udp_remove(pcb_dhcps); + } + + pcb_dhcps = udp_new(); + if (pcb_dhcps == nullptr || info == nullptr) + { + os_printf("dhcps_start(): could not obtain pcb\n"); + return false; + } + + // wrong: answer will go to sta IP4_ADDR(&broadcast_dhcps, 255, 255, 255, 255); + // good: going to ap IP4_ADDR(&broadcast_dhcps, 192, 168, 4, 255); + // semi proper way: + broadcast_dhcps = _netif->ip_addr; + ip_2_ip4(&broadcast_dhcps)->addr &= ip_2_ip4(&_netif->netmask)->addr; + ip_2_ip4(&broadcast_dhcps)->addr |= ~ip_2_ip4(&_netif->netmask)->addr; + //XXXFIXMEIPV6 broadcast address? + + server_address = info->ip; + init_dhcps_lease(server_address.addr); + + udp_bind(pcb_dhcps, IP_ADDR_ANY, DHCPS_SERVER_PORT); + udp_recv(pcb_dhcps, S_handle_dhcp, this); +#if DHCPS_DEBUG + os_printf("dhcps:dhcps_start->udp_recv function Set a receive callback handle_dhcp for UDP_PCB pcb_dhcps\n"); +#endif + + if (_netif->num == SOFTAP_IF) + { + wifi_set_ip_info(SOFTAP_IF, info); // added for lwip-git, not sure whether useful + } + _netif->flags |= NETIF_FLAG_UP | NETIF_FLAG_LINK_UP; // added for lwip-git + + return true; +} + +DhcpServer::~DhcpServer() +{ + end(); +} + +void DhcpServer::end() +{ + if (!pcb_dhcps) + { + return; + } + + udp_disconnect(pcb_dhcps); + udp_remove(pcb_dhcps); + pcb_dhcps = nullptr; + + //udp_remove(pcb_dhcps); + list_node *pnode = nullptr; + list_node *pback_node = nullptr; + struct dhcps_pool* dhcp_node = nullptr; + struct ipv4_addr ip_zero; + + memset(&ip_zero, 0x0, sizeof(ip_zero)); + pnode = plist; + while (pnode != nullptr) + { + pback_node = pnode; + pnode = pback_node->pnext; + node_remove_from_list(&plist, pback_node); + dhcp_node = (struct dhcps_pool*)pback_node->pnode; + //dhcps_client_leave(dhcp_node->mac,&dhcp_node->ip,true); // force to delete + if (_netif->num == SOFTAP_IF) + { + wifi_softap_set_station_info(dhcp_node->mac, &ip_zero); + } + free(pback_node->pnode); + pback_node->pnode = nullptr; + free(pback_node); + pback_node = nullptr; + } +} + +bool DhcpServer::isRunning() +{ + return !!_netif->state; +} + + +/****************************************************************************** + FunctionName : set_dhcps_lease + Description : set the lease information of DHCP server + Parameters : please -- Additional argument to set the lease information, + Little-Endian. + Returns : true or false +*******************************************************************************/ +bool DhcpServer::set_dhcps_lease(struct dhcps_lease *please) +{ + uint32 softap_ip = 0; + uint32 start_ip = 0; + uint32 end_ip = 0; + + if (_netif->num == SOFTAP_IF || _netif->num == STATION_IF) + { + uint8 opmode = wifi_get_opmode(); + if (opmode == STATION_MODE || opmode == NULL_MODE) + { + return false; + } + } + + if (please == nullptr || isRunning()) + { + return false; + } + + if (please->enable) + { + // logic below is subject for improvement + // - is wrong + // - limited to /24 address plans +#if 1 + softap_ip = ip_2_ip4(&_netif->ip_addr)->addr; +#else + struct ip_info info; + bzero(&info, sizeof(struct ip_info)); + wifi_get_ip_info(SOFTAP_IF, &info); + softap_ip = htonl(info.ip.addr); + start_ip = htonl(please->start_ip.addr); + end_ip = htonl(please->end_ip.addr); +#endif + /*config ip information can't contain local ip*/ + if ((start_ip <= softap_ip) && (softap_ip <= end_ip)) + { + return false; + } + + /*config ip information must be in the same segment as the local ip*/ + softap_ip >>= 8; + if ((start_ip >> 8 != softap_ip) + || (end_ip >> 8 != softap_ip)) + { + return false; + } + + if (end_ip - start_ip > DHCPS_MAX_LEASE) + { + return false; + } + + bzero(&dhcps_lease, sizeof(dhcps_lease)); + // dhcps_lease.start_ip.addr = start_ip; + // dhcps_lease.end_ip.addr = end_ip; + dhcps_lease.start_ip.addr = please->start_ip.addr; + dhcps_lease.end_ip.addr = please->end_ip.addr; + } + dhcps_lease.enable = please->enable; + // dhcps_lease_flag = false; + return true; +} + +/****************************************************************************** + FunctionName : get_dhcps_lease + Description : get the lease information of DHCP server + Parameters : please -- Additional argument to get the lease information, + Little-Endian. + Returns : true or false +*******************************************************************************/ +bool DhcpServer::get_dhcps_lease(struct dhcps_lease *please) +{ + if (_netif->num == SOFTAP_IF) + { + uint8 opmode = wifi_get_opmode(); + if (opmode == STATION_MODE || opmode == NULL_MODE) + { + return false; + } + } + + if (nullptr == please) + { + return false; + } + + // if (dhcps_lease_flag){ + if (dhcps_lease.enable == false) + { + if (isRunning()) + { + return false; + } + } + else + { + // bzero(please, sizeof(dhcps_lease)); + // if (!isRunning()){ + // please->start_ip.addr = htonl(dhcps_lease.start_ip.addr); + // please->end_ip.addr = htonl(dhcps_lease.end_ip.addr); + // } + } + + // if (isRunning()){ + // bzero(please, sizeof(dhcps_lease)); + // please->start_ip.addr = dhcps_lease.start_ip.addr; + // please->end_ip.addr = dhcps_lease.end_ip.addr; + // } + please->start_ip.addr = dhcps_lease.start_ip.addr; + please->end_ip.addr = dhcps_lease.end_ip.addr; + return true; +} + +void DhcpServer::kill_oldest_dhcps_pool(void) +{ + list_node *pre = nullptr, *p = nullptr; + list_node *minpre = nullptr, *minp = nullptr; + struct dhcps_pool *pdhcps_pool = nullptr, *pmin_pool = nullptr; + pre = plist; + p = pre->pnext; + minpre = pre; + minp = p; + while (p != nullptr) + { + pdhcps_pool = (struct dhcps_pool*)p->pnode; + pmin_pool = (struct dhcps_pool*)minp->pnode; + if (pdhcps_pool->lease_timer < pmin_pool->lease_timer) + { + minp = p; + minpre = pre; + } + pre = p; + p = p->pnext; + } + minpre->pnext = minp->pnext; pdhcps_pool->state = DHCPS_STATE_OFFLINE; + free(minp->pnode); + minp->pnode = nullptr; + free(minp); + minp = nullptr; +} + +void DhcpServer::dhcps_coarse_tmr(void) +{ + uint8 num_dhcps_pool = 0; + list_node *pback_node = nullptr; + list_node *pnode = nullptr; + struct dhcps_pool *pdhcps_pool = nullptr; + pnode = plist; + while (pnode != nullptr) + { + pdhcps_pool = (struct dhcps_pool*)pnode->pnode; + if (pdhcps_pool->type == DHCPS_TYPE_DYNAMIC) + { + pdhcps_pool->lease_timer --; + } + if (pdhcps_pool->lease_timer == 0) + { + pback_node = pnode; + pnode = pback_node->pnext; + node_remove_from_list(&plist, pback_node); + free(pback_node->pnode); + pback_node->pnode = nullptr; + free(pback_node); + pback_node = nullptr; + } + else + { + pnode = pnode ->pnext; + num_dhcps_pool ++; + } + } + + if (num_dhcps_pool >= MAX_STATION_NUM) + { + kill_oldest_dhcps_pool(); + } +} + +bool DhcpServer::set_dhcps_offer_option(uint8 level, void* optarg) +{ + bool offer_flag = true; + //uint8 option = 0; + if (optarg == nullptr && !isRunning()) + { + return false; + } + + if (level <= OFFER_START || level >= OFFER_END) + { + return false; + } + + switch (level) + { + case OFFER_ROUTER: + offer = (*(uint8 *)optarg) & 0x01; + offer_flag = true; + break; + default : + offer_flag = false; + break; + } + return offer_flag; +} + +bool DhcpServer::set_dhcps_lease_time(uint32 minute) +{ + if (_netif->num == SOFTAP_IF) + { + uint8 opmode = wifi_get_opmode(); + if (opmode == STATION_MODE || opmode == NULL_MODE) + { + return false; + } + } + + if (isRunning()) + { + return false; + } + + if (minute == 0) + { + return false; + } + dhcps_lease_time = minute; + return true; +} + +bool DhcpServer::reset_dhcps_lease_time(void) +{ + if (_netif->num == SOFTAP_IF) + { + uint8 opmode = wifi_get_opmode(); + if (opmode == STATION_MODE || opmode == NULL_MODE) + { + return false; + } + } + + if (isRunning()) + { + return false; + } + dhcps_lease_time = DHCPS_LEASE_TIME_DEF; + return true; +} + +uint32 DhcpServer::get_dhcps_lease_time(void) // minute +{ + return dhcps_lease_time; +} + +void DhcpServer::dhcps_client_leave(u8 *bssid, struct ipv4_addr *ip, bool force) +{ + struct dhcps_pool *pdhcps_pool = nullptr; + list_node *pback_node = nullptr; + + if ((bssid == nullptr) || (ip == nullptr)) + { + return; + } + + for (pback_node = plist; pback_node != nullptr; pback_node = pback_node->pnext) + { + pdhcps_pool = (struct dhcps_pool*)pback_node->pnode; + if (memcmp(pdhcps_pool->mac, bssid, sizeof(pdhcps_pool->mac)) == 0) + { + if (memcmp(&pdhcps_pool->ip.addr, &ip->addr, sizeof(pdhcps_pool->ip.addr)) == 0) + { + if ((pdhcps_pool->type == DHCPS_TYPE_STATIC) || (force)) + { + if (pback_node != nullptr) + { + node_remove_from_list(&plist, pback_node); + free(pback_node); + pback_node = nullptr; + } + + if (pdhcps_pool != nullptr) + { + free(pdhcps_pool); + pdhcps_pool = nullptr; + } + } + else + { + pdhcps_pool->state = DHCPS_STATE_OFFLINE; + } + + struct ipv4_addr ip_zero; + memset(&ip_zero, 0x0, sizeof(ip_zero)); + if (_netif->num == SOFTAP_IF) + { + wifi_softap_set_station_info(bssid, &ip_zero); + } + break; + } + } + } +} + +uint32 DhcpServer::dhcps_client_update(u8 *bssid, struct ipv4_addr *ip) +{ + struct dhcps_pool *pdhcps_pool = nullptr; + list_node *pback_node = nullptr; + list_node *pmac_node = nullptr; + list_node *pip_node = nullptr; + bool flag = false; + uint32 start_ip = dhcps_lease.start_ip.addr; + uint32 end_ip = dhcps_lease.end_ip.addr; + dhcps_type_t type = DHCPS_TYPE_DYNAMIC; + if (bssid == nullptr) + { + return IPADDR_ANY; + } + + if (ip) + { + if (IPADDR_BROADCAST == ip->addr) + { + return IPADDR_ANY; + } + else if (IPADDR_ANY == ip->addr) + { + ip = nullptr; + } + else + { + type = DHCPS_TYPE_STATIC; + } + } + + renew = false; + for (pback_node = plist; pback_node != nullptr; pback_node = pback_node->pnext) + { + pdhcps_pool = (struct dhcps_pool*)pback_node->pnode; + //os_printf("mac:"MACSTR"bssid:"MACSTR"\r\n",MAC2STR(pdhcps_pool->mac),MAC2STR(bssid)); + if (memcmp(pdhcps_pool->mac, bssid, sizeof(pdhcps_pool->mac)) == 0) + { + pmac_node = pback_node; + if (ip == nullptr) + { + flag = true; + break; + } + } + if (ip != nullptr) + { + if (memcmp(&pdhcps_pool->ip.addr, &ip->addr, sizeof(pdhcps_pool->ip.addr)) == 0) + { + pip_node = pback_node; + } + } + else if (flag == false) + { + if (memcmp(&pdhcps_pool->ip.addr, &start_ip, sizeof(pdhcps_pool->ip.addr)) != 0) + { + flag = true; + } + else + { + start_ip = htonl((ntohl(start_ip) + 1)); + } + } + } + + if ((ip == nullptr) && (flag == false)) + { + if (plist == nullptr) + { + if (start_ip <= end_ip) + { + flag = true; + } + else + { + return IPADDR_ANY; + } + } + else + { + if (start_ip > end_ip) + { + return IPADDR_ANY; + } + //start_ip = htonl((ntohl(start_ip) + 1)); + flag = true; + } + } + + if (pmac_node != nullptr) // update new ip + { + if (pip_node != nullptr) + { + pdhcps_pool = (struct dhcps_pool*)pip_node->pnode; + + if (pip_node != pmac_node) + { + if (pdhcps_pool->state != DHCPS_STATE_OFFLINE) // ip is used + { + return IPADDR_ANY; + } + + // mac exists and ip exists in other node,delete mac + node_remove_from_list(&plist, pmac_node); + free(pmac_node->pnode); + pmac_node->pnode = nullptr; + free(pmac_node); + pmac_node = pip_node; + memcpy(pdhcps_pool->mac, bssid, sizeof(pdhcps_pool->mac)); + } + else + { + renew = true; + type = DHCPS_TYPE_DYNAMIC; + } + + pdhcps_pool->lease_timer = DHCPS_LEASE_TIMER; + pdhcps_pool->type = type; + pdhcps_pool->state = DHCPS_STATE_ONLINE; + + } + else + { + pdhcps_pool = (struct dhcps_pool*)pmac_node->pnode; + if (ip != nullptr) + { + pdhcps_pool->ip.addr = ip->addr; + } + else if (flag == true) + { + pdhcps_pool->ip.addr = start_ip; + } + else // no ip to distribute + { + return IPADDR_ANY; + } + + node_remove_from_list(&plist, pmac_node); + pdhcps_pool->lease_timer = DHCPS_LEASE_TIMER; + pdhcps_pool->type = type; + pdhcps_pool->state = DHCPS_STATE_ONLINE; + node_insert_to_list(&plist, pmac_node); + } + } + else // new station + { + if (pip_node != nullptr) // maybe ip has used + { + pdhcps_pool = (struct dhcps_pool*)pip_node->pnode; + if (pdhcps_pool->state != DHCPS_STATE_OFFLINE) + { + return IPADDR_ANY; + } + memcpy(pdhcps_pool->mac, bssid, sizeof(pdhcps_pool->mac)); + pdhcps_pool->lease_timer = DHCPS_LEASE_TIMER; + pdhcps_pool->type = type; + pdhcps_pool->state = DHCPS_STATE_ONLINE; + } + else + { + pdhcps_pool = (struct dhcps_pool *)zalloc(sizeof(struct dhcps_pool)); + if (ip != nullptr) + { + pdhcps_pool->ip.addr = ip->addr; + } + else if (flag == true) + { + pdhcps_pool->ip.addr = start_ip; + } + else // no ip to distribute + { + free(pdhcps_pool); + return IPADDR_ANY; + } + if (pdhcps_pool->ip.addr > end_ip) + { + free(pdhcps_pool); + return IPADDR_ANY; + } + memcpy(pdhcps_pool->mac, bssid, sizeof(pdhcps_pool->mac)); + pdhcps_pool->lease_timer = DHCPS_LEASE_TIMER; + pdhcps_pool->type = type; + pdhcps_pool->state = DHCPS_STATE_ONLINE; + pback_node = (list_node *)zalloc(sizeof(list_node)); + pback_node->pnode = pdhcps_pool; + pback_node->pnext = nullptr; + node_insert_to_list(&plist, pback_node); + } + } + + return pdhcps_pool->ip.addr; +} diff --git a/cores/esp8266/LwipDhcpServer.h b/cores/esp8266/LwipDhcpServer.h new file mode 100644 index 0000000000..e93166981d --- /dev/null +++ b/cores/esp8266/LwipDhcpServer.h @@ -0,0 +1,124 @@ +/* + lwIPDhcpServer.h - DHCP server + + Copyright (c) 2016 Espressif. All rights reserved. + Copyright (c) 2020 esp8266 arduino. All rights reserved. + This file is part of the esp8266 core for Arduino environment. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + // original sources (no license provided) + // ESP8266_NONOS_SDK/third_party/lwip/app/dhcpserver.c + // ESP8266_NONOS_SDK/third_party/include/lwip/app/dhcpserver.h +*/ + +// lwIPDhcpServer.{cc,h} encapsulate original nonos-sdk dhcp server +// nearly as-is. This is an initial version to guaranty legacy behavior +// with same default values. + +#ifndef __DHCPS_H__ +#define __DHCPS_H__ + +#include // LWIP_VERSION + +class DhcpServer +{ +public: + + DhcpServer(netif* netif); + ~DhcpServer(); + + void setDns(int num, const ipv4_addr_t* dns); + + bool begin(ip_info* info); + void end(); + bool isRunning(); + + // this is the C interface encapsulated in a class + // (originally dhcpserver.c in lwIP-v1.4 in NonOS-SDK) + // (not changing everything at once) + // the API below is subject to change + + // legacy public C structure and API to eventually turn into C++ + + void init_dhcps_lease(uint32 ip); + bool set_dhcps_lease(struct dhcps_lease *please); + bool get_dhcps_lease(struct dhcps_lease *please); + bool set_dhcps_offer_option(uint8 level, void* optarg); + bool set_dhcps_lease_time(uint32 minute); + bool reset_dhcps_lease_time(void); + uint32 get_dhcps_lease_time(void); + bool add_dhcps_lease(uint8 *macaddr); + + void dhcps_set_dns(int num, const ipv4_addr_t* dns); + +protected: + + // legacy C structure and API to eventually turn into C++ + + typedef struct _list_node + { + void *pnode; + struct _list_node *pnext; + } list_node; + + void node_insert_to_list(list_node **phead, list_node* pinsert); + void node_remove_from_list(list_node **phead, list_node* pdelete); + uint8_t* add_msg_type(uint8_t *optptr, uint8_t type); + uint8_t* add_offer_options(uint8_t *optptr); + uint8_t* add_end(uint8_t *optptr); + void create_msg(struct dhcps_msg *m); + void send_offer(struct dhcps_msg *m); + void send_nak(struct dhcps_msg *m); + void send_ack(struct dhcps_msg *m); + uint8_t parse_options(uint8_t *optptr, sint16_t len); + sint16_t parse_msg(struct dhcps_msg *m, u16_t len); + static void S_handle_dhcp(void *arg, + struct udp_pcb *pcb, + struct pbuf *p, + const ip_addr_t *addr, + uint16_t port); + void handle_dhcp( + struct udp_pcb *pcb, + struct pbuf *p, + const ip_addr_t *addr, + uint16_t port); + void kill_oldest_dhcps_pool(void); + void dhcps_coarse_tmr(void); // CURRENTLY NOT CALLED + void dhcps_client_leave(u8 *bssid, struct ipv4_addr *ip, bool force); + uint32 dhcps_client_update(u8 *bssid, struct ipv4_addr *ip); + + netif* _netif; + + struct udp_pcb *pcb_dhcps; + ip_addr_t broadcast_dhcps; + struct ipv4_addr server_address; + struct ipv4_addr client_address; + struct ipv4_addr dns_address; + uint32 dhcps_lease_time; + + struct dhcps_lease dhcps_lease; + list_node *plist; + uint8 offer; + bool renew; + + static const uint32 magic_cookie; +}; + +// SoftAP DHCP server always exists and is started on boot +extern DhcpServer dhcpSoftAP; +extern "C" int fw_has_started_softap_dhcps; + +#endif // __DHCPS_H__ diff --git a/cores/esp8266/LwipIntf.cpp b/cores/esp8266/LwipIntf.cpp new file mode 100644 index 0000000000..d2746745cc --- /dev/null +++ b/cores/esp8266/LwipIntf.cpp @@ -0,0 +1,156 @@ + +extern "C" { +#include "lwip/err.h" +#include "lwip/ip_addr.h" +#include "lwip/dns.h" +#include "lwip/dhcp.h" +#include "lwip/init.h" // LWIP_VERSION_ +#if LWIP_IPV6 +#include "lwip/netif.h" // struct netif +#endif + +#include +} + +#include "debug.h" +#include "LwipIntf.h" + +// args | esp order arduino order +// ---- + --------- ------------- +// local_ip | local_ip local_ip +// arg1 | gateway dns1 +// arg2 | netmask gateway +// arg3 | dns1 netmask +// +// result stored into gateway/netmask/dns1 + +bool LwipIntf::ipAddressReorder(const IPAddress& local_ip, const IPAddress& arg1, const IPAddress& arg2, const IPAddress& arg3, + IPAddress& gateway, IPAddress& netmask, IPAddress& dns1) +{ + //To allow compatibility, check first octet of 3rd arg. If 255, interpret as ESP order, otherwise Arduino order. + gateway = arg1; + netmask = arg2; + dns1 = arg3; + + if (netmask[0] != 255) + { + //octet is not 255 => interpret as Arduino order + gateway = arg2; + netmask = arg3[0] == 0 ? IPAddress(255, 255, 255, 0) : arg3; //arg order is arduino and 4th arg not given => assign it arduino default + dns1 = arg1; + } + + // check whether all is IPv4 (or gateway not set) + if (!(local_ip.isV4() && netmask.isV4() && (!gateway.isSet() || gateway.isV4()))) + { + return false; + } + + //ip and gateway must be in the same netmask + if (gateway.isSet() && (local_ip.v4() & netmask.v4()) != (gateway.v4() & netmask.v4())) + { + return false; + } + + return true; +} + +/** + Get ESP8266 station DHCP hostname + @return hostname +*/ +String LwipIntf::hostname(void) +{ + return wifi_station_get_hostname(); +} + +/** + Set ESP8266 station DHCP hostname + @param aHostname max length:24 + @return ok +*/ +bool LwipIntf::hostname(const char* aHostname) +{ + /* + vvvv RFC952 vvvv + ASSUMPTIONS + 1. A "name" (Net, Host, Gateway, or Domain name) is a text string up + to 24 characters drawn from the alphabet (A-Z), digits (0-9), minus + sign (-), and period (.). Note that periods are only allowed when + they serve to delimit components of "domain style names". (See + RFC-921, "Domain Name System Implementation Schedule", for + background). No blank or space characters are permitted as part of a + name. No distinction is made between upper and lower case. The first + character must be an alpha character. The last character must not be + a minus sign or period. A host which serves as a GATEWAY should have + "-GATEWAY" or "-GW" as part of its name. Hosts which do not serve as + Internet gateways should not use "-GATEWAY" and "-GW" as part of + their names. A host which is a TAC should have "-TAC" as the last + part of its host name, if it is a DoD host. Single character names + or nicknames are not allowed. + ^^^^ RFC952 ^^^^ + + - 24 chars max + - only a..z A..Z 0..9 '-' + - no '-' as last char + */ + + size_t len = strlen(aHostname); + + if (len == 0 || len > 32) + { + // nonos-sdk limit is 32 + // (dhcp hostname option minimum size is ~60) + DEBUGV("WiFi.(set)hostname(): empty or large(>32) name\n"); + return false; + } + + // check RFC compliance + bool compliant = (len <= 24); + for (size_t i = 0; compliant && i < len; i++) + if (!isalnum(aHostname[i]) && aHostname[i] != '-') + { + compliant = false; + } + if (aHostname[len - 1] == '-') + { + compliant = false; + } + + if (!compliant) + { + DEBUGV("hostname '%s' is not compliant with RFC952\n", aHostname); + } + + bool ret = wifi_station_set_hostname(aHostname); + if (!ret) + { + DEBUGV("WiFi.hostname(%s): wifi_station_set_hostname() failed\n", aHostname); + return false; + } + + // now we should inform dhcp server for this change, using lwip_renew() + // looping through all existing interface + // harmless for AP, also compatible with ethernet adapters (to come) + for (netif* intf = netif_list; intf; intf = intf->next) + { + + // unconditionally update all known interfaces + intf->hostname = wifi_station_get_hostname(); + + if (netif_dhcp_data(intf) != nullptr) + { + // renew already started DHCP leases + err_t lwipret = dhcp_renew(intf); + if (lwipret != ERR_OK) + { + DEBUGV("WiFi.hostname(%s): lwIP error %d on interface %c%c (index %d)\n", + intf->hostname, (int)lwipret, intf->name[0], intf->name[1], intf->num); + ret = false; + } + } + } + + return ret && compliant; +} + diff --git a/cores/esp8266/LwipIntf.h b/cores/esp8266/LwipIntf.h index cb8bb92dcc..972a7c8008 100644 --- a/cores/esp8266/LwipIntf.h +++ b/cores/esp8266/LwipIntf.h @@ -3,6 +3,7 @@ #define _LWIPINTF_H #include +#include #include @@ -12,15 +13,31 @@ class LwipIntf using CBType = std::function ; - static bool stateUpCB (LwipIntf::CBType&& cb); - -private: - - LwipIntf () { } // private, cannot be directly allocated + static bool stateUpCB(LwipIntf::CBType&& cb); + + // reorder WiFi.config() parameters for a esp8266/official Arduino dual-compatibility API + // args | esp order arduino order + // ---- + --------- ------------- + // local_ip | local_ip local_ip + // arg1 | gateway dns1 + // arg2 | netmask [Agateway + // arg3 | dns1 netmask + // + // result stored into gateway/netmask/dns1 + static + bool ipAddressReorder(const IPAddress& local_ip, const IPAddress& arg1, const IPAddress& arg2, const IPAddress& arg3, + IPAddress& gateway, IPAddress& netmask, IPAddress& dns1); + + String hostname(); + bool hostname(const String& aHostname) + { + return hostname(aHostname.c_str()); + } + bool hostname(const char* aHostname); protected: - static bool stateChangeSysCB (LwipIntf::CBType&& cb); + static bool stateChangeSysCB(LwipIntf::CBType&& cb); }; #endif // _LWIPINTF_H diff --git a/cores/esp8266/LwipIntfCB.cpp b/cores/esp8266/LwipIntfCB.cpp index b978918a72..1e495c5fd3 100644 --- a/cores/esp8266/LwipIntfCB.cpp +++ b/cores/esp8266/LwipIntfCB.cpp @@ -8,14 +8,16 @@ static int netifStatusChangeListLength = 0; LwipIntf::CBType netifStatusChangeList [NETIF_STATUS_CB_SIZE]; -extern "C" void netif_status_changed (struct netif* netif) +extern "C" void netif_status_changed(struct netif* netif) { // override the default empty weak function for (int i = 0; i < netifStatusChangeListLength; i++) + { netifStatusChangeList[i](netif); + } } -bool LwipIntf::stateChangeSysCB (LwipIntf::CBType&& cb) +bool LwipIntf::stateChangeSysCB(LwipIntf::CBType&& cb) { if (netifStatusChangeListLength >= NETIF_STATUS_CB_SIZE) { @@ -29,14 +31,14 @@ bool LwipIntf::stateChangeSysCB (LwipIntf::CBType&& cb) return true; } -bool LwipIntf::stateUpCB (LwipIntf::CBType&& cb) +bool LwipIntf::stateUpCB(LwipIntf::CBType&& cb) { - return stateChangeSysCB([cb](netif* nif) + return stateChangeSysCB([cb](netif * nif) { if (netif_is_up(nif)) schedule_function([cb, nif]() - { - cb(nif); - }); + { + cb(nif); + }); }); } diff --git a/cores/esp8266/LwipIntfDev.h b/cores/esp8266/LwipIntfDev.h new file mode 100644 index 0000000000..dded934992 --- /dev/null +++ b/cores/esp8266/LwipIntfDev.h @@ -0,0 +1,386 @@ + +#ifndef _LWIPINTFDEV_H +#define _LWIPINTFDEV_H + +// TODO: +// remove all Serial.print +// unchain pbufs + +#include +#include +#include +#include +#include +#include + +#include // wifi_get_macaddr() + +#include "SPI.h" +#include "Schedule.h" +#include "LwipIntf.h" +#include "wl_definitions.h" + +#ifndef DEFAULT_MTU +#define DEFAULT_MTU 1500 +#endif + +template +class LwipIntfDev: public LwipIntf, public RawDev +{ + +public: + + LwipIntfDev(int8_t cs = SS, SPIClass& spi = SPI, int8_t intr = -1): + RawDev(cs, spi, intr), + _mtu(DEFAULT_MTU), + _intrPin(intr), + _started(false), + _default(false) + { + memset(&_netif, 0, sizeof(_netif)); + } + + boolean config(const IPAddress& local_ip, const IPAddress& arg1, const IPAddress& arg2, const IPAddress& arg3, const IPAddress& dns2); + + // default mac-address is inferred from esp8266's STA interface + boolean begin(const uint8_t *macAddress = nullptr, const uint16_t mtu = DEFAULT_MTU); + + const netif* getNetIf() const + { + return &_netif; + } + + IPAddress localIP() const + { + return IPAddress(ip4_addr_get_u32(ip_2_ip4(&_netif.ip_addr))); + } + IPAddress subnetMask() const + { + return IPAddress(ip4_addr_get_u32(ip_2_ip4(&_netif.netmask))); + } + IPAddress gatewayIP() const + { + return IPAddress(ip4_addr_get_u32(ip_2_ip4(&_netif.gw))); + } + + void setDefault(); + + bool connected() + { + return !!ip4_addr_get_u32(ip_2_ip4(&_netif.ip_addr)); + } + + // ESP8266WiFi API compatibility + + wl_status_t status(); + +protected: + + err_t netif_init(); + void netif_status_callback(); + + static err_t netif_init_s(netif* netif); + static err_t linkoutput_s(netif *netif, struct pbuf *p); + static void netif_status_callback_s(netif* netif); + + // called on a regular basis or on interrupt + err_t handlePackets(); + + // members + + netif _netif; + + uint16_t _mtu; + int8_t _intrPin; + uint8_t _macAddress[6]; + bool _started; + bool _default; + +}; + +template +boolean LwipIntfDev::config(const IPAddress& localIP, const IPAddress& gateway, const IPAddress& netmask, const IPAddress& dns1, const IPAddress& dns2) +{ + if (_started) + { + DEBUGV("LwipIntfDev: use config() then begin()\n"); + return false; + } + + IPAddress realGateway, realNetmask, realDns1; + if (!ipAddressReorder(localIP, gateway, netmask, dns1, realGateway, realNetmask, realDns1)) + { + return false; + } + ip4_addr_set_u32(ip_2_ip4(&_netif.ip_addr), localIP.v4()); + ip4_addr_set_u32(ip_2_ip4(&_netif.gw), realGateway.v4()); + ip4_addr_set_u32(ip_2_ip4(&_netif.netmask), realNetmask.v4()); + + return true; +} + +template +boolean LwipIntfDev::begin(const uint8_t* macAddress, const uint16_t mtu) +{ + if (mtu) + { + _mtu = mtu; + } + + if (macAddress) + { + memcpy(_macAddress, macAddress, 6); + } + else + { + _netif.num = 2; + for (auto n = netif_list; n; n = n->next) + if (n->num >= _netif.num) + { + _netif.num = n->num + 1; + } + +#if 1 + // forge a new mac-address from the esp's wifi sta one + // I understand this is cheating with an official mac-address + wifi_get_macaddr(STATION_IF, (uint8*)_macAddress); +#else + // https://serverfault.com/questions/40712/what-range-of-mac-addresses-can-i-safely-use-for-my-virtual-machines + memset(_macAddress, 0, 6); + _macAddress[0] = 0xEE; +#endif + _macAddress[3] += _netif.num; // alter base mac address + _macAddress[0] &= 0xfe; // set as locally administered, unicast, per + _macAddress[0] |= 0x02; // https://en.wikipedia.org/wiki/MAC_address#Universal_vs._local + } + + if (!RawDev::begin(_macAddress)) + { + return false; + } + + // setup lwIP netif + + _netif.hwaddr_len = sizeof _macAddress; + memcpy(_netif.hwaddr, _macAddress, sizeof _macAddress); + + // due to netif_add() api: ... + ip_addr_t ip_addr, netmask, gw; + ip_addr_copy(ip_addr, _netif.ip_addr); + ip_addr_copy(netmask, _netif.netmask); + ip_addr_copy(gw, _netif.gw); + + if (!netif_add(&_netif, ip_2_ip4(&ip_addr), ip_2_ip4(&netmask), ip_2_ip4(&gw), this, netif_init_s, ethernet_input)) + { + return false; + } + + _netif.flags |= NETIF_FLAG_UP; + + if (localIP().v4() == 0) + { + switch (dhcp_start(&_netif)) + { + case ERR_OK: + break; + + case ERR_IF: + return false; + + default: + netif_remove(&_netif); + return false; + } + } + + _started = true; + + if (_intrPin >= 0) + { + if (RawDev::interruptIsPossible()) + { + //attachInterrupt(_intrPin, [&]() { this->handlePackets(); }, FALLING); + } + else + { + ::printf((PGM_P)F("lwIP_Intf: Interrupt not implemented yet, enabling transparent polling\r\n")); + _intrPin = -1; + } + } + + if (_intrPin < 0 && !schedule_recurrent_function_us([&]() +{ + this->handlePackets(); + return true; + }, 100)) + { + netif_remove(&_netif); + return false; + } + + return true; +} + +template +wl_status_t LwipIntfDev::status() +{ + return _started ? (connected() ? WL_CONNECTED : WL_DISCONNECTED) : WL_NO_SHIELD; +} + +template +err_t LwipIntfDev::linkoutput_s(netif *netif, struct pbuf *pbuf) +{ + LwipIntfDev* ths = (LwipIntfDev*)netif->state; + + if (pbuf->len != pbuf->tot_len || pbuf->next) + { + Serial.println("ERRTOT\r\n"); + } + + uint16_t len = ths->sendFrame((const uint8_t*)pbuf->payload, pbuf->len); + +#if PHY_HAS_CAPTURE + if (phy_capture) + { + phy_capture(ths->_netif.num, (const char*)pbuf->payload, pbuf->len, /*out*/1, /*success*/len == pbuf->len); + } +#endif + + return len == pbuf->len ? ERR_OK : ERR_MEM; +} + +template +err_t LwipIntfDev::netif_init_s(struct netif* netif) +{ + return ((LwipIntfDev*)netif->state)->netif_init(); +} + +template +void LwipIntfDev::netif_status_callback_s(struct netif* netif) +{ + ((LwipIntfDev*)netif->state)->netif_status_callback(); +} + +template +err_t LwipIntfDev::netif_init() +{ + _netif.name[0] = 'e'; + _netif.name[1] = '0' + _netif.num; + _netif.mtu = _mtu; + _netif.chksum_flags = NETIF_CHECKSUM_ENABLE_ALL; + _netif.flags = + NETIF_FLAG_ETHARP + | NETIF_FLAG_IGMP + | NETIF_FLAG_BROADCAST + | NETIF_FLAG_LINK_UP; + + // lwIP's doc: This function typically first resolves the hardware + // address, then sends the packet. For ethernet physical layer, this is + // usually lwIP's etharp_output() + _netif.output = etharp_output; + + // lwIP's doc: This function outputs the pbuf as-is on the link medium + // (this must points to the raw ethernet driver, meaning: us) + _netif.linkoutput = linkoutput_s; + + _netif.status_callback = netif_status_callback_s; + + return ERR_OK; +} + +template +void LwipIntfDev::netif_status_callback() +{ + if (connected()) + { + if (_default) + { + netif_set_default(&_netif); + } + sntp_stop(); + sntp_init(); + } + else if (netif_default == &_netif) + { + netif_set_default(nullptr); + } +} + +template +err_t LwipIntfDev::handlePackets() +{ + int pkt = 0; + while (1) + { + if (++pkt == 10) + // prevent starvation + { + return ERR_OK; + } + + uint16_t tot_len = RawDev::readFrameSize(); + if (!tot_len) + { + return ERR_OK; + } + + // from doc: use PBUF_RAM for TX, PBUF_POOL from RX + // however: + // PBUF_POOL can return chained pbuf (not in one piece) + // and WiznetDriver does not have the proper API to deal with that + // so in the meantime, we use PBUF_RAM instead which is currently + // guarantying to deliver a continuous chunk of memory. + // TODO: tweak the wiznet driver to allow copying partial chunk + // of received data and use PBUF_POOL. + pbuf* pbuf = pbuf_alloc(PBUF_RAW, tot_len, PBUF_RAM); + if (!pbuf || pbuf->len < tot_len) + { + if (pbuf) + { + pbuf_free(pbuf); + } + RawDev::discardFrame(tot_len); + return ERR_BUF; + } + + uint16_t len = RawDev::readFrameData((uint8_t*)pbuf->payload, tot_len); + if (len != tot_len) + { + // tot_len is given by readFrameSize() + // and is supposed to be honoured by readFrameData() + // todo: ensure this test is unneeded, remove the print + Serial.println("read error?\r\n"); + pbuf_free(pbuf); + return ERR_BUF; + } + + err_t err = _netif.input(pbuf, &_netif); + +#if PHY_HAS_CAPTURE + if (phy_capture) + { + phy_capture(_netif.num, (const char*)pbuf->payload, tot_len, /*out*/0, /*success*/err == ERR_OK); + } +#endif + + if (err != ERR_OK) + { + pbuf_free(pbuf); + return err; + } + // (else) allocated pbuf is now lwIP's responsibility + + } +} + +template +void LwipIntfDev::setDefault() +{ + _default = true; + if (connected()) + { + netif_set_default(&_netif); + } +} + +#endif // _LWIPINTFDEV_H diff --git a/libraries/ESP8266WiFi/src/include/wl_definitions.h b/cores/esp8266/wl_definitions.h similarity index 96% rename from libraries/ESP8266WiFi/src/include/wl_definitions.h rename to cores/esp8266/wl_definitions.h index e20ee928ca..b58085ac59 100644 --- a/libraries/ESP8266WiFi/src/include/wl_definitions.h +++ b/cores/esp8266/wl_definitions.h @@ -69,7 +69,7 @@ enum wl_enc_type { /* Values map to 802.11 encryption suites... */ ENC_TYPE_AUTO = 8 }; -#if !defined(LWIP_INTERNAL) && !defined(__LWIP_TCP_H__) +#if !defined(LWIP_INTERNAL) && !defined(__LWIP_TCP_H__) && !defined(LWIP_HDR_TCPBASE_H) enum wl_tcp_state { CLOSED = 0, LISTEN = 1, diff --git a/libraries/ESP8266WiFi/examples/RangeExtender-NAPT/RangeExtender-NAPT.ino b/libraries/ESP8266WiFi/examples/RangeExtender-NAPT/RangeExtender-NAPT.ino index 9676857b1c..a98e894873 100644 --- a/libraries/ESP8266WiFi/examples/RangeExtender-NAPT/RangeExtender-NAPT.ino +++ b/libraries/ESP8266WiFi/examples/RangeExtender-NAPT/RangeExtender-NAPT.ino @@ -13,7 +13,7 @@ #include #include #include -#include +#include #define NAPT 1000 #define NAPT_PORT 10 @@ -57,8 +57,8 @@ void setup() { WiFi.dnsIP(1).toString().c_str()); // give DNS servers to AP side - dhcps_set_dns(0, WiFi.dnsIP(0)); - dhcps_set_dns(1, WiFi.dnsIP(1)); + dhcpSoftAP.dhcps_set_dns(0, WiFi.dnsIP(0)); + dhcpSoftAP.dhcps_set_dns(1, WiFi.dnsIP(1)); WiFi.softAPConfig( // enable AP, with android-compatible google domain IPAddress(172, 217, 28, 254), diff --git a/libraries/ESP8266WiFi/examples/StaticLease/StaticLease.ino b/libraries/ESP8266WiFi/examples/StaticLease/StaticLease.ino index 4beaabe2b6..e4520c4720 100644 --- a/libraries/ESP8266WiFi/examples/StaticLease/StaticLease.ino +++ b/libraries/ESP8266WiFi/examples/StaticLease/StaticLease.ino @@ -4,6 +4,7 @@ #include #include #include +#include /* Set these to your desired credentials. */ const char *ssid = "ESPap"; @@ -75,8 +76,8 @@ void setup() { ... any client not listed will use next IP address available from the range (here 192.168.0.102 and more) */ - wifi_softap_add_dhcps_lease(mac_CAM); // always 192.168.0.100 - wifi_softap_add_dhcps_lease(mac_PC); // always 192.168.0.101 + dhcpSoftAP.add_dhcps_lease(mac_CAM); // always 192.168.0.100 + dhcpSoftAP.add_dhcps_lease(mac_PC); // always 192.168.0.101 /* Start Access Point. You can remove the password parameter if you want the AP to be open. */ WiFi.softAP(ssid, password); Serial.print("AP IP address: "); diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFi.h b/libraries/ESP8266WiFi/src/ESP8266WiFi.h index d26e1db6bd..819739eaea 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFi.h +++ b/libraries/ESP8266WiFi/src/ESP8266WiFi.h @@ -25,7 +25,7 @@ #include extern "C" { -#include "include/wl_definitions.h" +#include } #include "IPAddress.h" diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp index 418a48b5cc..202042c780 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiAP.cpp @@ -33,11 +33,11 @@ extern "C" { #include "osapi.h" #include "mem.h" #include "user_interface.h" +#include // LWIP_VERSION_* } #include "debug.h" - - +#include "LwipDhcpServer.h" // ----------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------- Private functions ------------------------------------------------ @@ -156,13 +156,7 @@ bool ESP8266WiFiAPClass::softAP(const char* ssid, const char* passphrase, int ch DEBUG_WIFI("[AP] softap config unchanged\n"); } - if(wifi_softap_dhcps_status() != DHCP_STARTED) { - DEBUG_WIFI("[AP] DHCP not started, starting...\n"); - if(!wifi_softap_dhcps_start()) { - DEBUG_WIFI("[AP] wifi_softap_dhcps_start failed!\n"); - ret = false; - } - } + dhcpSoftAP.end(); // check IP config struct ip_info ip; @@ -182,6 +176,8 @@ bool ESP8266WiFiAPClass::softAP(const char* ssid, const char* passphrase, int ch ret = false; } + dhcpSoftAP.begin(&ip); + return ret; } @@ -237,19 +233,22 @@ bool ESP8266WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPA dhcp_lease.end_ip.addr = ip.v4(); DEBUG_WIFI("[APConfig] DHCP IP end: %s\n", ip.toString().c_str()); - if(!wifi_softap_set_dhcps_lease(&dhcp_lease)) { + if(!dhcpSoftAP.set_dhcps_lease(&dhcp_lease)) + { DEBUG_WIFI("[APConfig] wifi_set_ip_info failed!\n"); ret = false; } // set lease time to 720min --> 12h - if(!wifi_softap_set_dhcps_lease_time(720)) { + if(!dhcpSoftAP.set_dhcps_lease_time(720)) + { DEBUG_WIFI("[APConfig] wifi_softap_set_dhcps_lease_time failed!\n"); ret = false; } uint8 mode = info.gw.addr ? 1 : 0; - if(!wifi_softap_set_dhcps_offer_option(OFFER_ROUTER, &mode)) { + if(!dhcpSoftAP.set_dhcps_offer_option(OFFER_ROUTER, &mode)) + { DEBUG_WIFI("[APConfig] wifi_softap_set_dhcps_offer_option failed!\n"); ret = false; } diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp index 0959bba7c7..a75c115c26 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp @@ -26,6 +26,7 @@ #include "ESP8266WiFiGeneric.h" #include "ESP8266WiFiSTA.h" #include "PolledTimeout.h" +#include "LwipIntf.h" #include "c_types.h" #include "ets_sys.h" @@ -281,28 +282,9 @@ bool ESP8266WiFiSTAClass::config(IPAddress local_ip, IPAddress arg1, IPAddress a return true; } - //To allow compatibility, check first octet of 3rd arg. If 255, interpret as ESP order, otherwise Arduino order. - IPAddress gateway = arg1; - IPAddress subnet = arg2; - IPAddress dns1 = arg3; - - if(subnet[0] != 255) - { - //octet is not 255 => interpret as Arduino order - gateway = arg2; - subnet = arg3[0] == 0 ? IPAddress(255,255,255,0) : arg3; //arg order is arduino and 4th arg not given => assign it arduino default - dns1 = arg1; - } - - // check whether all is IPv4 (or gateway not set) - if (!(local_ip.isV4() && subnet.isV4() && (!gateway.isSet() || gateway.isV4()))) { - return false; - } - - //ip and gateway must be in the same subnet - if((local_ip.v4() & subnet.v4()) != (gateway.v4() & subnet.v4())) { + IPAddress gateway, subnet, dns1; + if (!ipAddressReorder(local_ip, arg1, arg2, arg3, gateway, subnet, dns1)) return false; - } #if !CORE_MOCK // get current->previous IP address @@ -522,94 +504,6 @@ IPAddress ESP8266WiFiSTAClass::dnsIP(uint8_t dns_no) { return IPAddress(dns_getserver(dns_no)); } - -/** - * Get ESP8266 station DHCP hostname - * @return hostname - */ -String ESP8266WiFiSTAClass::hostname(void) { - return wifi_station_get_hostname(); -} - -/** - * Set ESP8266 station DHCP hostname - * @param aHostname max length:24 - * @return ok - */ -bool ESP8266WiFiSTAClass::hostname(const char* aHostname) { - /* - vvvv RFC952 vvvv - ASSUMPTIONS - 1. A "name" (Net, Host, Gateway, or Domain name) is a text string up - to 24 characters drawn from the alphabet (A-Z), digits (0-9), minus - sign (-), and period (.). Note that periods are only allowed when - they serve to delimit components of "domain style names". (See - RFC-921, "Domain Name System Implementation Schedule", for - background). No blank or space characters are permitted as part of a - name. No distinction is made between upper and lower case. The first - character must be an alpha character. The last character must not be - a minus sign or period. A host which serves as a GATEWAY should have - "-GATEWAY" or "-GW" as part of its name. Hosts which do not serve as - Internet gateways should not use "-GATEWAY" and "-GW" as part of - their names. A host which is a TAC should have "-TAC" as the last - part of its host name, if it is a DoD host. Single character names - or nicknames are not allowed. - ^^^^ RFC952 ^^^^ - - - 24 chars max - - only a..z A..Z 0..9 '-' - - no '-' as last char - */ - - size_t len = strlen(aHostname); - - if (len == 0 || len > 32) { - // nonos-sdk limit is 32 - // (dhcp hostname option minimum size is ~60) - DEBUG_WIFI_GENERIC("WiFi.(set)hostname(): empty or large(>32) name\n"); - return false; - } - - // check RFC compliance - bool compliant = (len <= 24); - for (size_t i = 0; compliant && i < len; i++) - if (!isalnum(aHostname[i]) && aHostname[i] != '-') - compliant = false; - if (aHostname[len - 1] == '-') - compliant = false; - - if (!compliant) { - DEBUG_WIFI_GENERIC("hostname '%s' is not compliant with RFC952\n", aHostname); - } - - bool ret = wifi_station_set_hostname(aHostname); - if (!ret) { - DEBUG_WIFI_GENERIC("WiFi.hostname(%s): wifi_station_set_hostname() failed\n", aHostname); - return false; - } - - // now we should inform dhcp server for this change, using lwip_renew() - // looping through all existing interface - // harmless for AP, also compatible with ethernet adapters (to come) - for (netif* intf = netif_list; intf; intf = intf->next) { - - // unconditionally update all known interfaces - intf->hostname = wifi_station_get_hostname(); - - if (netif_dhcp_data(intf) != nullptr) { - // renew already started DHCP leases - err_t lwipret = dhcp_renew(intf); - if (lwipret != ERR_OK) { - DEBUG_WIFI_GENERIC("WiFi.hostname(%s): lwIP error %d on interface %c%c (index %d)\n", - intf->hostname, (int)lwipret, intf->name[0], intf->name[1], intf->num); - ret = false; - } - } - } - - return ret && compliant; -} - /** * Return Connection status. * @return one of the value defined in wl_status_t diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.h b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.h index d845b290ca..6dbb6406c1 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.h +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.h @@ -27,9 +27,10 @@ #include "ESP8266WiFiType.h" #include "ESP8266WiFiGeneric.h" #include "user_interface.h" +#include "LwipIntf.h" -class ESP8266WiFiSTAClass { +class ESP8266WiFiSTAClass: public LwipIntf { // ---------------------------------------------------------------------------------------------- // ---------------------------------------- STA function ---------------------------------------- // ---------------------------------------------------------------------------------------------- @@ -69,10 +70,6 @@ class ESP8266WiFiSTAClass { IPAddress gatewayIP(); IPAddress dnsIP(uint8_t dns_no = 0); - String hostname(); - bool hostname(const String& aHostname) { return hostname(aHostname.c_str()); } - bool hostname(const char* aHostname); - // STA WiFi info wl_status_t status(); String SSID() const; diff --git a/libraries/ESP8266WiFi/src/WiFiClient.cpp b/libraries/ESP8266WiFi/src/WiFiClient.cpp index 825f2ed839..5aa09b8874 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClient.cpp @@ -24,7 +24,7 @@ extern "C" { - #include "include/wl_definitions.h" + #include "wl_definitions.h" #include "osapi.h" #include "ets_sys.h" } diff --git a/libraries/ESP8266WiFi/src/WiFiServer.h b/libraries/ESP8266WiFi/src/WiFiServer.h index 2023840545..59aea48faf 100644 --- a/libraries/ESP8266WiFi/src/WiFiServer.h +++ b/libraries/ESP8266WiFi/src/WiFiServer.h @@ -23,7 +23,7 @@ #define wifiserver_h extern "C" { - #include "include/wl_definitions.h" + #include "wl_definitions.h" struct tcp_pcb; } diff --git a/libraries/ESP8266WiFi/src/WiFiUdp.cpp b/libraries/ESP8266WiFi/src/WiFiUdp.cpp index a0a5c1d4e4..fc4bfe324e 100644 --- a/libraries/ESP8266WiFi/src/WiFiUdp.cpp +++ b/libraries/ESP8266WiFi/src/WiFiUdp.cpp @@ -25,7 +25,7 @@ extern "C" { - #include "include/wl_definitions.h" + #include "wl_definitions.h" #include "osapi.h" #include "ets_sys.h" } diff --git a/libraries/lwIP_PPP/examples/PPPServer/PPPServer.ino b/libraries/lwIP_PPP/examples/PPPServer/PPPServer.ino new file mode 100644 index 0000000000..ed2943c278 --- /dev/null +++ b/libraries/lwIP_PPP/examples/PPPServer/PPPServer.ino @@ -0,0 +1,111 @@ + +// This is still beta / a work in progress + +// To run this sketch an (other) USB-serial converter is needed connected to RX-TX ports (below) +// hardware serial is used for logging +// software serial is used for the PPP link +// this example is subject for changes once everything is stabilized + +// testing on linux: +// sudo /usr/sbin/pppd /dev/ttyUSB1 38400 noipdefault nocrtscts local defaultroute noauth nodetach debug dump +// sudo /usr/sbin/pppd /dev/ttyUSB1 38400 noipdefault nocrtscts local defaultroute noauth + +// proxy arp is needed but we don't have it +// http://lwip.100.n7.nabble.com/PPP-proxy-arp-support-tp33286p33345.html +// using NAT instead + +#if LWIP_FEATURES && !LWIP_IPV6 + +#include +#include +#include +#include +#include +#include + +#ifndef STASSID +#define STASSID "your-ssid" +#define STAPSK "your-password" +#endif + +#define LOGGERBAUD 115200 +#define PPPLINKBAUD 38400 + +#define NAPT 200 +#define NAPT_PORT 3 + +#define RX 13 // d1mini D7 +#define TX 15 // d1mini D8 + +SoftwareSerial ppplink(RX, TX); +HardwareSerial& logger = Serial; +PPPServer ppp(&ppplink); + +void PPPConnectedCallback(netif* nif) { + logger.printf("ppp: ip=%s/mask=%s/gw=%s\n", + IPAddress(&nif->ip_addr).toString().c_str(), + IPAddress(&nif->netmask).toString().c_str(), + IPAddress(&nif->gw).toString().c_str()); + + logger.printf("Heap before: %d\n", ESP.getFreeHeap()); + err_t ret = ip_napt_init(NAPT, NAPT_PORT); + logger.printf("ip_napt_init(%d,%d): ret=%d (OK=%d)\n", NAPT, NAPT_PORT, (int)ret, (int)ERR_OK); + if (ret == ERR_OK) { + ret = ip_napt_enable_no(nif->num, 1); + logger.printf("ip_napt_enable(nif): ret=%d (OK=%d)\n", (int)ret, (int)ERR_OK); + if (ret == ERR_OK) { + logger.printf("PPP client is NATed\n"); + } + + // could not make this work yet, + // but packets are arriving on ppp client (= linux host) + logger.printf("redirect22=%d\n", ip_portmap_add(IP_PROTO_TCP, ip_2_ip4(&nif->ip_addr)->addr, 22, ip_2_ip4(&nif->gw)->addr, 22)); + logger.printf("redirect80=%d\n", ip_portmap_add(IP_PROTO_TCP, ip_2_ip4(&nif->ip_addr)->addr, 80, ip_2_ip4(&nif->gw)->addr, 80)); + logger.printf("redirect443=%d\n", ip_portmap_add(IP_PROTO_TCP, ip_2_ip4(&nif->ip_addr)->addr, 443, ip_2_ip4(&nif->gw)->addr, 443)); + } + logger.printf("Heap after napt init: %d\n", ESP.getFreeHeap()); + if (ret != ERR_OK) { + logger.printf("NAPT initialization failed\n"); + } +} + +void setup() { + logger.begin(LOGGERBAUD); + + WiFi.persistent(false); + WiFi.mode(WIFI_STA); + WiFi.begin(STASSID, STAPSK); + while (WiFi.status() != WL_CONNECTED) { + logger.print('.'); + delay(500); + } + logger.printf("\nSTA: %s (dns: %s / %s)\n", + WiFi.localIP().toString().c_str(), + WiFi.dnsIP(0).toString().c_str(), + WiFi.dnsIP(1).toString().c_str()); + + ppplink.begin(PPPLINKBAUD); + ppplink.enableIntTx(true); + logger.println(); + logger.printf("\n\nhey, trying to be a PPP server here\n\n"); + logger.printf("Now try this on your linux host:\n\n"); + logger.printf("connect a serial<->usb module (e.g. to /dev/ttyUSB1) and link it to the ESP (esprx=%d esptx=%d), then run:\n\n", RX, TX); + logger.printf("sudo /usr/sbin/pppd /dev/ttyUSB1 %d noipdefault nocrtscts local defaultroute noauth nodetach debug dump\n\n", PPPLINKBAUD); + + ppp.ifUpCb(PPPConnectedCallback); + bool ret = ppp.begin(WiFi.localIP()); + logger.printf("ppp: %d\n", ret); +} + + +#else + +void setup() { + Serial.begin(115200); + Serial.printf("\n\nPPP/NAPT not supported in this configuration\n"); +} + +#endif + +void loop() { +} diff --git a/libraries/lwIP_PPP/library.properties b/libraries/lwIP_PPP/library.properties new file mode 100644 index 0000000000..9b2293dbfb --- /dev/null +++ b/libraries/lwIP_PPP/library.properties @@ -0,0 +1,10 @@ +name=lwIP_PPP +version=1 +author=lwIP +maintainer=esp8266/Arduino +sentence=PPP interface +paragraph=PPP interface for esp8266 arduino +category=Network +url=https://github.com/esp8266/Arduino +architectures=esp8266 +dot_a_linkage=true diff --git a/libraries/lwIP_PPP/src/PPPServer.cpp b/libraries/lwIP_PPP/src/PPPServer.cpp new file mode 100644 index 0000000000..98fddd7777 --- /dev/null +++ b/libraries/lwIP_PPP/src/PPPServer.cpp @@ -0,0 +1,196 @@ + +// This is still beta / a work in progress + +// testing on linux: +// sudo /usr/sbin/pppd /dev/ttyUSB1 38400 noipdefault nocrtscts local defaultroute noauth nodetach debug dump +// sudo /usr/sbin/pppd /dev/ttyUSB1 38400 noipdefault nocrtscts local defaultroute noauth + +// proxy arp is needed but we don't have it +// http://lwip.100.n7.nabble.com/PPP-proxy-arp-support-tp33286p33345.html +// using NAT instead (see in example) + +#include +#include +#include +#include + +#include "PPPServer.h" + +PPPServer::PPPServer(Stream* sio): _sio(sio), _cb(netif_status_cb_s), _enabled(false) +{ +} + +bool PPPServer::handlePackets() +{ + size_t avail; + if ((avail = _sio->available()) > 0) + { + // XXX block peeking would be useful here + if (avail > _bufsize) + { + avail = _bufsize; + } + avail = _sio->readBytes(_buf, avail); + pppos_input(_ppp, _buf, avail); + } + return _enabled; +} + +void PPPServer::link_status_cb_s(ppp_pcb* pcb, int err_code, void* ctx) +{ + bool stop = true; + netif* nif = ppp_netif(pcb); + + switch (err_code) + { + case PPPERR_NONE: /* No error. */ + { +#if LWIP_DNS + const ip_addr_t *ns; +#endif /* LWIP_DNS */ + ets_printf("ppp_link_status_cb: PPPERR_NONE\n\r"); +#if LWIP_IPV4 + ets_printf(" our_ip4addr = %s\n\r", ip4addr_ntoa(netif_ip4_addr(nif))); + ets_printf(" his_ipaddr = %s\n\r", ip4addr_ntoa(netif_ip4_gw(nif))); + ets_printf(" netmask = %s\n\r", ip4addr_ntoa(netif_ip4_netmask(nif))); +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 + ets_printf(" our_ip6addr = %s\n\r", ip6addr_ntoa(netif_ip6_addr(nif, 0))); +#endif /* LWIP_IPV6 */ + +#if LWIP_DNS + ns = dns_getserver(0); + ets_printf(" dns1 = %s\n\r", ipaddr_ntoa(ns)); + ns = dns_getserver(1); + ets_printf(" dns2 = %s\n\r", ipaddr_ntoa(ns)); +#endif /* LWIP_DNS */ +#if PPP_IPV6_SUPPORT + ets_printf(" our6_ipaddr = %s\n\r", ip6addr_ntoa(netif_ip6_addr(nif, 0))); +#endif /* PPP_IPV6_SUPPORT */ + } + stop = false; + break; + + case PPPERR_PARAM: /* Invalid parameter. */ + ets_printf("ppp_link_status_cb: PPPERR_PARAM\n"); + break; + + case PPPERR_OPEN: /* Unable to open PPP session. */ + ets_printf("ppp_link_status_cb: PPPERR_OPEN\n"); + break; + + case PPPERR_DEVICE: /* Invalid I/O device for PPP. */ + ets_printf("ppp_link_status_cb: PPPERR_DEVICE\n"); + break; + + case PPPERR_ALLOC: /* Unable to allocate resources. */ + ets_printf("ppp_link_status_cb: PPPERR_ALLOC\n"); + break; + + case PPPERR_USER: /* User interrupt. */ + ets_printf("ppp_link_status_cb: PPPERR_USER\n"); + break; + + case PPPERR_CONNECT: /* Connection lost. */ + ets_printf("ppp_link_status_cb: PPPERR_CONNECT\n"); + break; + + case PPPERR_AUTHFAIL: /* Failed authentication challenge. */ + ets_printf("ppp_link_status_cb: PPPERR_AUTHFAIL\n"); + break; + + case PPPERR_PROTOCOL: /* Failed to meet protocol. */ + ets_printf("ppp_link_status_cb: PPPERR_PROTOCOL\n"); + break; + + case PPPERR_PEERDEAD: /* Connection timeout. */ + ets_printf("ppp_link_status_cb: PPPERR_PEERDEAD\n"); + break; + + case PPPERR_IDLETIMEOUT: /* Idle Timeout. */ + ets_printf("ppp_link_status_cb: PPPERR_IDLETIMEOUT\n"); + break; + + case PPPERR_CONNECTTIME: /* PPPERR_CONNECTTIME. */ + ets_printf("ppp_link_status_cb: PPPERR_CONNECTTIME\n"); + break; + + case PPPERR_LOOPBACK: /* Connection timeout. */ + ets_printf("ppp_link_status_cb: PPPERR_LOOPBACK\n"); + break; + + default: + ets_printf("ppp_link_status_cb: unknown errCode %d\n", err_code); + break; + } + + if (stop) + { + netif_remove(&static_cast(ctx)->_netif); + } +} + +u32_t PPPServer::output_cb_s(ppp_pcb* pcb, u8_t* data, u32_t len, void* ctx) +{ + (void)pcb; + (void)ctx; + return static_cast(ctx)->_sio->write(data, len); +} + +void PPPServer::netif_status_cb_s(netif* nif) +{ + ets_printf("PPPNETIF: %c%c%d is %s\n", nif->name[0], nif->name[1], nif->num, + netif_is_up(nif) ? "UP" : "DOWN"); +#if LWIP_IPV4 + ets_printf("IPV4: Host at %s ", ip4addr_ntoa(netif_ip4_addr(nif))); + ets_printf("mask %s ", ip4addr_ntoa(netif_ip4_netmask(nif))); + ets_printf("gateway %s\n", ip4addr_ntoa(netif_ip4_gw(nif))); +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 + ets_printf("IPV6: Host at %s\n", ip6addr_ntoa(netif_ip6_addr(nif, 0))); +#endif /* LWIP_IPV6 */ + ets_printf("FQDN: %s\n", netif_get_hostname(nif)); +} + +bool PPPServer::begin(const IPAddress& ourAddress, const IPAddress& peer) +{ + // lwip2-src/doc/ppp.txt + + _ppp = pppos_create(&_netif, PPPServer::output_cb_s, PPPServer::link_status_cb_s, this); + if (!_ppp) + { + return false; + } + + ppp_set_ipcp_ouraddr(_ppp, ip_2_ip4((const ip_addr_t*)ourAddress)); + ppp_set_ipcp_hisaddr(_ppp, ip_2_ip4((const ip_addr_t*)peer)); + + //ip4_addr_t addr; + //IP4_ADDR(&addr, 10,0,1,254); + //ppp_set_ipcp_dnsaddr(_ppp, 0, &addr); + + //ppp_set_auth(_ppp, PPPAUTHTYPE_ANY, "login", "password"); + //ppp_set_auth_required(_ppp, 1); + + ppp_set_silent(_ppp, 1); + ppp_listen(_ppp); + netif_set_status_callback(&_netif, _cb); + + _enabled = true; + if (!schedule_recurrent_function_us([&]() +{ + return this->handlePackets(); + }, 1000)) + { + netif_remove(&_netif); + return false; + } + + return true; +} + +void PPPServer::stop() +{ + _enabled = false; + ppp_close(_ppp, 0); +} diff --git a/libraries/lwIP_PPP/src/PPPServer.h b/libraries/lwIP_PPP/src/PPPServer.h new file mode 100644 index 0000000000..e2c95658a6 --- /dev/null +++ b/libraries/lwIP_PPP/src/PPPServer.h @@ -0,0 +1,77 @@ +/* + 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: Dirk Ziegelmeier + +*/ + + +#ifndef __PPPSERVER_H +#define __PPPSERVER_H + +#include +#include +#include +#include +#include + +class PPPServer +{ +public: + + PPPServer(Stream* sio); + + bool begin(const IPAddress& ourAddress, const IPAddress& peer = IPAddress(172, 31, 255, 254)); + void stop(); + + void ifUpCb(void (*cb)(netif*)) + { + _cb = cb; + } + const ip_addr_t* getPeerAddress() const + { + return &_netif.gw; + } + +protected: + + static constexpr size_t _bufsize = 128; + Stream* _sio; + ppp_pcb* _ppp; + netif _netif; + void (*_cb)(netif*); + uint8_t _buf[_bufsize]; + bool _enabled; + + // feed ppp from stream - to call on a regular basis or on interrupt + bool handlePackets(); + + static u32_t output_cb_s(ppp_pcb* pcb, u8_t* data, u32_t len, void* ctx); + static void link_status_cb_s(ppp_pcb* pcb, int err_code, void* ctx); + static void netif_status_cb_s(netif* nif); + +}; + +#endif // __PPPSERVER_H diff --git a/libraries/lwIP_enc28j60/library.properties b/libraries/lwIP_enc28j60/library.properties new file mode 100644 index 0000000000..444e0f1c41 --- /dev/null +++ b/libraries/lwIP_enc28j60/library.properties @@ -0,0 +1,10 @@ +name=lwIP_enc28j60 +version=1 +author=Nicholas Humfrey +maintainer=esp8266/Arduino +sentence=Ethernet driver +paragraph=ENC28J60 ethernet drivers for lwIP and esp8266 Arduino from https://github.com/njh/EtherSia/tree/master/src/enc28j60.cpp +category=Network +url=https://github.com/esp8266/Arduino +architectures=esp8266 +dot_a_linkage=true diff --git a/libraries/lwIP_enc28j60/src/ENC28J60lwIP.h b/libraries/lwIP_enc28j60/src/ENC28J60lwIP.h new file mode 100644 index 0000000000..e525e94069 --- /dev/null +++ b/libraries/lwIP_enc28j60/src/ENC28J60lwIP.h @@ -0,0 +1,10 @@ + +#ifndef _ENC28J60LWIP_H +#define _ENC28J60LWIP_H + +#include +#include + +using ENC28J60lwIP = LwipIntfDev; + +#endif // _ENC28J60LWIP_H diff --git a/libraries/lwIP_enc28j60/src/utility/enc28j60.cpp b/libraries/lwIP_enc28j60/src/utility/enc28j60.cpp new file mode 100644 index 0000000000..42d1af7fc2 --- /dev/null +++ b/libraries/lwIP_enc28j60/src/utility/enc28j60.cpp @@ -0,0 +1,744 @@ +/* + Copyright (c) 2012-2013, Thingsquare, http://www.thingsquare.com/. + Copyright (c) 2016, Nicholas Humfrey + 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 copyright holder 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 COPYRIGHT HOLDERS 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 + COPYRIGHT HOLDER 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. + +*/ + +// original sources: https://github.com/njh/EtherSia/tree/master/src/enc28j60.cpp + +#include +#include + +#include +#include +#include +#include + +#include "enc28j60.h" + + +void serial_printf(const char *fmt, ...) +{ + char buf[128]; + va_list args; + va_start(args, fmt); + vsnprintf(buf, 128, fmt, args); + va_end(args); + Serial.print(buf); +} + +#define DEBUG 0 +#if DEBUG +#define PRINTF(...) printf(__VA_ARGS__) +#else +#define PRINTF(...) do { (void)0; } while (0) +#endif + +#define EIE 0x1b +#define EIR 0x1c +#define ESTAT 0x1d +#define ECON2 0x1e +#define ECON1 0x1f + +#define ESTAT_CLKRDY 0x01 +#define ESTAT_TXABRT 0x02 + +#define ECON1_RXEN 0x04 +#define ECON1_TXRTS 0x08 + +#define ECON2_AUTOINC 0x80 +#define ECON2_PKTDEC 0x40 + +#define EIR_TXIF 0x08 + +#define ERXTX_BANK 0x00 + +#define ERDPTL 0x00 +#define ERDPTH 0x01 +#define EWRPTL 0x02 +#define EWRPTH 0x03 +#define ETXSTL 0x04 +#define ETXSTH 0x05 +#define ETXNDL 0x06 +#define ETXNDH 0x07 +#define ERXSTL 0x08 +#define ERXSTH 0x09 +#define ERXNDL 0x0a +#define ERXNDH 0x0b +#define ERXRDPTL 0x0c +#define ERXRDPTH 0x0d + +#define RX_BUF_START 0x0000 +#define RX_BUF_END 0x0fff + +#define TX_BUF_START 0x1200 + +/* MACONx registers are in bank 2 */ +#define MACONX_BANK 0x02 + +#define MACON1 0x00 +#define MACON3 0x02 +#define MACON4 0x03 +#define MABBIPG 0x04 +#define MAIPGL 0x06 +#define MAIPGH 0x07 +#define MAMXFLL 0x0a +#define MAMXFLH 0x0b + +#define MACON1_TXPAUS 0x08 +#define MACON1_RXPAUS 0x04 +#define MACON1_MARXEN 0x01 + +#define MACON3_PADCFG_FULL 0xe0 +#define MACON3_TXCRCEN 0x10 +#define MACON3_FRMLNEN 0x02 +#define MACON3_FULDPX 0x01 + +#define MAX_MAC_LENGTH 1518 + +#define MAADRX_BANK 0x03 +#define MAADR1 0x04 /* MAADR<47:40> */ +#define MAADR2 0x05 /* MAADR<39:32> */ +#define MAADR3 0x02 /* MAADR<31:24> */ +#define MAADR4 0x03 /* MAADR<23:16> */ +#define MAADR5 0x00 /* MAADR<15:8> */ +#define MAADR6 0x01 /* MAADR<7:0> */ +#define MISTAT 0x0a +#define EREVID 0x12 + +#define EPKTCNT_BANK 0x01 +#define ERXFCON 0x18 +#define EPKTCNT 0x19 + +#define ERXFCON_UCEN 0x80 +#define ERXFCON_ANDOR 0x40 +#define ERXFCON_CRCEN 0x20 +#define ERXFCON_MCEN 0x02 +#define ERXFCON_BCEN 0x01 + +// The ENC28J60 SPI Interface supports clock speeds up to 20 MHz +static const SPISettings spiSettings(20000000, MSBFIRST, SPI_MODE0); + +ENC28J60::ENC28J60(int8_t cs, SPIClass& spi, int8_t intr): + _bank(ERXTX_BANK), _cs(cs), _spi(spi) +{ + (void)intr; +} + +void +ENC28J60::enc28j60_arch_spi_select(void) +{ + SPI.beginTransaction(spiSettings); + digitalWrite(_cs, LOW); +} + +void +ENC28J60::enc28j60_arch_spi_deselect(void) +{ + digitalWrite(_cs, HIGH); + SPI.endTransaction(); +} + + +/*---------------------------------------------------------------------------*/ +uint8_t +ENC28J60::is_mac_mii_reg(uint8_t reg) +{ + /* MAC or MII register (otherwise, ETH register)? */ + switch (_bank) + { + case MACONX_BANK: + return reg < EIE; + case MAADRX_BANK: + return reg <= MAADR2 || reg == MISTAT; + case ERXTX_BANK: + case EPKTCNT_BANK: + default: + return 0; + } +} +/*---------------------------------------------------------------------------*/ +uint8_t +ENC28J60::readreg(uint8_t reg) +{ + uint8_t r; + enc28j60_arch_spi_select(); + SPI.transfer(0x00 | (reg & 0x1f)); + if (is_mac_mii_reg(reg)) + { + /* MAC and MII registers require that a dummy byte be read first. */ + SPI.transfer(0); + } + r = SPI.transfer(0); + enc28j60_arch_spi_deselect(); + return r; +} +/*---------------------------------------------------------------------------*/ +void +ENC28J60::writereg(uint8_t reg, uint8_t data) +{ + enc28j60_arch_spi_select(); + SPI.transfer(0x40 | (reg & 0x1f)); + SPI.transfer(data); + enc28j60_arch_spi_deselect(); +} +/*---------------------------------------------------------------------------*/ +void +ENC28J60::setregbitfield(uint8_t reg, uint8_t mask) +{ + if (is_mac_mii_reg(reg)) + { + writereg(reg, readreg(reg) | mask); + } + else + { + enc28j60_arch_spi_select(); + SPI.transfer(0x80 | (reg & 0x1f)); + SPI.transfer(mask); + enc28j60_arch_spi_deselect(); + } +} +/*---------------------------------------------------------------------------*/ +void +ENC28J60::clearregbitfield(uint8_t reg, uint8_t mask) +{ + if (is_mac_mii_reg(reg)) + { + writereg(reg, readreg(reg) & ~mask); + } + else + { + enc28j60_arch_spi_select(); + SPI.transfer(0xa0 | (reg & 0x1f)); + SPI.transfer(mask); + enc28j60_arch_spi_deselect(); + } +} +/*---------------------------------------------------------------------------*/ +void +ENC28J60::setregbank(uint8_t new_bank) +{ + writereg(ECON1, (readreg(ECON1) & 0xfc) | (new_bank & 0x03)); + _bank = new_bank; +} +/*---------------------------------------------------------------------------*/ +void +ENC28J60::writedata(const uint8_t *data, int datalen) +{ + int i; + enc28j60_arch_spi_select(); + /* The Write Buffer Memory (WBM) command is 0 1 1 1 1 0 1 0 */ + SPI.transfer(0x7a); + for (i = 0; i < datalen; i++) + { + SPI.transfer(data[i]); + } + enc28j60_arch_spi_deselect(); +} +/*---------------------------------------------------------------------------*/ +void +ENC28J60::writedatabyte(uint8_t byte) +{ + writedata(&byte, 1); +} +/*---------------------------------------------------------------------------*/ +int +ENC28J60::readdata(uint8_t *buf, int len) +{ + int i; + enc28j60_arch_spi_select(); + /* THe Read Buffer Memory (RBM) command is 0 0 1 1 1 0 1 0 */ + SPI.transfer(0x3a); + for (i = 0; i < len; i++) + { + buf[i] = SPI.transfer(0); + } + enc28j60_arch_spi_deselect(); + return i; +} +/*---------------------------------------------------------------------------*/ +uint8_t +ENC28J60::readdatabyte(void) +{ + uint8_t r; + readdata(&r, 1); + return r; +} + +/*---------------------------------------------------------------------------*/ +void +ENC28J60::softreset(void) +{ + enc28j60_arch_spi_select(); + /* The System Command (soft reset) is 1 1 1 1 1 1 1 1 */ + SPI.transfer(0xff); + enc28j60_arch_spi_deselect(); + _bank = ERXTX_BANK; +} + +/*---------------------------------------------------------------------------*/ +//#if DEBUG +uint8_t +ENC28J60::readrev(void) +{ + uint8_t rev; + setregbank(MAADRX_BANK); + rev = readreg(EREVID); + switch (rev) + { + case 2: + return 1; + case 6: + return 7; + default: + return rev; + } +} +//#endif + +/*---------------------------------------------------------------------------*/ + +bool +ENC28J60::reset(void) +{ + PRINTF("enc28j60: resetting chip\n"); + + pinMode(_cs, OUTPUT); + digitalWrite(_cs, HIGH); + SPI.begin(); + + /* + 6.0 INITIALIZATION + + Before the ENC28J60 can be used to transmit and receive packets, + certain device settings must be initialized. Depending on the + application, some configuration options may need to be + changed. Normally, these tasks may be accomplished once after + Reset and do not need to be changed thereafter. + + 6.1 Receive Buffer + + Before receiving any packets, the receive buffer must be + initialized by programming the ERXST and ERXND pointers. All + memory between and including the ERXST and ERXND addresses will be + dedicated to the receive hardware. It is recommended that the + ERXST pointer be programmed with an even address. + + Applications expecting large amounts of data and frequent packet + delivery may wish to allocate most of the memory as the receive + buffer. Applications that may need to save older packets or have + several packets ready for transmission should allocate less + memory. + + When programming the ERXST pointer, the ERXWRPT registers will + automatically be updated with the same values. The address in + ERXWRPT will be used as the starting location when the receive + hardware begins writing received data. For tracking purposes, the + ERXRDPT registers should additionally be programmed with the same + value. To program ERXRDPT, the host controller must write to + ERXRDPTL first, followed by ERXRDPTH. See Section 7.2.4 โ€œFreeing + Receive Buffer Space for more information + + 6.2 Transmission Buffer + + All memory which is not used by the receive buffer is considered + the transmission buffer. Data which is to be transmitted should be + written into any unused space. After a packet is transmitted, + however, the hardware will write a seven-byte status vector into + memory after the last byte in the packet. Therefore, the host + controller should leave at least seven bytes between each packet + and the beginning of the receive buffer. No explicit action is + required to initialize the transmission buffer. + + 6.3 Receive Filters + + The appropriate receive filters should be enabled or disabled by + writing to the ERXFCON register. See Section 8.0 โ€œReceive Filters + for information on how to configure it. + + 6.4 Waiting For OST + + If the initialization procedure is being executed immediately + following a Power-on Reset, the ESTAT.CLKRDY bit should be polled + to make certain that enough time has elapsed before proceeding to + modify the MAC and PHY registers. For more information on the OST, + see Section 2.2 โ€œOscillator Start-up Timer. + */ + + softreset(); + + /* Workaround for erratum #2. */ + delayMicroseconds(1000); + + /* Wait for OST */ + PRINTF("waiting for ESTAT_CLKRDY\n"); + while ((readreg(ESTAT) & ESTAT_CLKRDY) == 0) {}; + PRINTF("ESTAT_CLKRDY\n"); + + setregbank(ERXTX_BANK); + /* Set up receive buffer */ + writereg(ERXSTL, RX_BUF_START & 0xff); + writereg(ERXSTH, RX_BUF_START >> 8); + writereg(ERXNDL, RX_BUF_END & 0xff); + writereg(ERXNDH, RX_BUF_END >> 8); + writereg(ERDPTL, RX_BUF_START & 0xff); + writereg(ERDPTH, RX_BUF_START >> 8); + writereg(ERXRDPTL, RX_BUF_END & 0xff); + writereg(ERXRDPTH, RX_BUF_END >> 8); + + /* Receive filters */ + setregbank(EPKTCNT_BANK); + writereg(ERXFCON, ERXFCON_UCEN | ERXFCON_CRCEN | ERXFCON_MCEN); + + /* + 6.5 MAC Initialization Settings + + Several of the MAC registers require configuration during + initialization. This only needs to be done once; the order of + programming is unimportant. + + 1. Set the MARXEN bit in MACON1 to enable the MAC to receive + frames. If using full duplex, most applications should also set + TXPAUS and RXPAUS to allow IEEE defined flow control to function. + + 2. Configure the PADCFG, TXCRCEN and FULDPX bits of MACON3. Most + applications should enable automatic padding to at least 60 bytes + and always append a valid CRC. For convenience, many applications + may wish to set the FRMLNEN bit as well to enable frame length + status reporting. The FULDPX bit should be set if the application + will be connected to a full-duplex configured remote node; + otherwise, it should be left clear. + + 3. Configure the bits in MACON4. For conformance to the IEEE 802.3 + standard, set the DEFER bit. + + 4. Program the MAMXFL registers with the maximum frame length to + be permitted to be received or transmitted. Normal network nodes + are designed to handle packets that are 1518 bytes or less. + + 5. Configure the Back-to-Back Inter-Packet Gap register, + MABBIPG. Most applications will program this register with 15h + when Full-Duplex mode is used and 12h when Half-Duplex mode is + used. + + 6. Configure the Non-Back-to-Back Inter-Packet Gap register low + byte, MAIPGL. Most applications will program this register with + 12h. + + 7. If half duplex is used, the Non-Back-to-Back Inter-Packet Gap + register high byte, MAIPGH, should be programmed. Most + applications will program this register to 0Ch. + + 8. If Half-Duplex mode is used, program the Retransmission and + Collision Window registers, MACLCON1 and MACLCON2. Most + applications will not need to change the default Reset values. If + the network is spread over exceptionally long cables, the default + value of MACLCON2 may need to be increased. + + 9. Program the local MAC address into the MAADR1:MAADR6 registers. + */ + + setregbank(MACONX_BANK); + + /* Turn on reception and IEEE-defined flow control */ + setregbitfield(MACON1, MACON1_MARXEN | MACON1_TXPAUS | MACON1_RXPAUS); + + /* Set padding, crc, full duplex */ + setregbitfield(MACON3, MACON3_PADCFG_FULL | MACON3_TXCRCEN | MACON3_FULDPX | + MACON3_FRMLNEN); + + /* Don't modify MACON4 */ + + /* Set maximum frame length in MAMXFL */ + writereg(MAMXFLL, MAX_MAC_LENGTH & 0xff); + writereg(MAMXFLH, MAX_MAC_LENGTH >> 8); + + /* Set back-to-back inter packet gap */ + writereg(MABBIPG, 0x15); + + /* Set non-back-to-back packet gap */ + writereg(MAIPGL, 0x12); + + /* Set MAC address */ + setregbank(MAADRX_BANK); + writereg(MAADR6, _localMac[5]); + writereg(MAADR5, _localMac[4]); + writereg(MAADR4, _localMac[3]); + writereg(MAADR3, _localMac[2]); + writereg(MAADR2, _localMac[1]); + writereg(MAADR1, _localMac[0]); + + /* + 6.6 PHY Initialization Settings + + Depending on the application, bits in three of the PHY moduleโ€™s + registers may also require configuration. The PHCON1.PDPXMD bit + partially controls the deviceโ€™s half/full-duplex + configuration. Normally, this bit is initialized correctly by the + external circuitry (see Section 2.6 โ€œLED Configuration). If the + external circuitry is not present or incorrect, however, the host + controller must program the bit properly. Alternatively, for an + externally configurable system, the PDPXMD bit may be read and the + FULDPX bit be programmed to match. + + For proper duplex operation, the PHCON1.PDPXMD bit must also match + the value of the MACON3.FULDPX bit. + + If using half duplex, the host controller may wish to set the + PHCON2.HDLDIS bit to prevent automatic loopback of the data which + is transmitted. The PHY register, PHLCON, controls the outputs of + LEDA and LEDB. If an application requires a LED configuration + other than the default, PHLCON must be altered to match the new + requirements. The settings for LED operation are discussed in + Section 2.6 โ€œLED Configuration. The PHLCON register is shown in + Register 2-2 (page 9). + */ + + /* Don't worry about PHY configuration for now */ + + /* Turn on autoincrement for buffer access */ + setregbitfield(ECON2, ECON2_AUTOINC); + + /* Turn on reception */ + writereg(ECON1, ECON1_RXEN); + + return true; +} +/*---------------------------------------------------------------------------*/ +boolean +ENC28J60::begin(const uint8_t *address) +{ + _localMac = address; + + bool ret = reset(); + uint8_t rev = readrev(); + + PRINTF("ENC28J60 rev. B%d\n", rev); + + return ret && rev != 255; +} + +/*---------------------------------------------------------------------------*/ + +uint16_t +ENC28J60::sendFrame(const uint8_t *data, uint16_t datalen) +{ + uint16_t dataend; + + /* + 1. Appropriately program the ETXST pointer to point to an unused + location in memory. It will point to the per packet control + byte. In the example, it would be programmed to 0120h. It is + recommended that an even address be used for ETXST. + + 2. Use the WBM SPI command to write the per packet control byte, + the destination address, the source MAC address, the + type/length and the data payload. + + 3. Appropriately program the ETXND pointer. It should point to the + last byte in the data payload. In the example, it would be + programmed to 0156h. + + 4. Clear EIR.TXIF, set EIE.TXIE and set EIE.INTIE to enable an + interrupt when done (if desired). + + 5. Start the transmission process by setting + ECON1.TXRTS. + */ + + setregbank(ERXTX_BANK); + /* Set up the transmit buffer pointer */ + writereg(ETXSTL, TX_BUF_START & 0xff); + writereg(ETXSTH, TX_BUF_START >> 8); + writereg(EWRPTL, TX_BUF_START & 0xff); + writereg(EWRPTH, TX_BUF_START >> 8); + + /* Write the transmission control register as the first byte of the + output packet. We write 0x00 to indicate that the default + configuration (the values in MACON3) will be used. */ + writedatabyte(0x00); /* MACON3 */ + + writedata(data, datalen); + + /* Write a pointer to the last data byte. */ + dataend = TX_BUF_START + datalen; + writereg(ETXNDL, dataend & 0xff); + writereg(ETXNDH, dataend >> 8); + + /* Clear EIR.TXIF */ + clearregbitfield(EIR, EIR_TXIF); + + /* Don't care about interrupts for now */ + + /* Send the packet */ + setregbitfield(ECON1, ECON1_TXRTS); + while ((readreg(ECON1) & ECON1_TXRTS) > 0); + +#if DEBUG + if ((readreg(ESTAT) & ESTAT_TXABRT) != 0) + { + uint16_t erdpt; + uint8_t tsv[7]; + erdpt = (readreg(ERDPTH) << 8) | readreg(ERDPTL); + writereg(ERDPTL, (dataend + 1) & 0xff); + writereg(ERDPTH, (dataend + 1) >> 8); + readdata(tsv, sizeof(tsv)); + writereg(ERDPTL, erdpt & 0xff); + writereg(ERDPTH, erdpt >> 8); + PRINTF("enc28j60: tx err: %d: %02x:%02x:%02x:%02x:%02x:%02x\n" + " tsv: %02x%02x%02x%02x%02x%02x%02x\n", datalen, + 0xff & data[0], 0xff & data[1], 0xff & data[2], + 0xff & data[3], 0xff & data[4], 0xff & data[5], + tsv[6], tsv[5], tsv[4], tsv[3], tsv[2], tsv[1], tsv[0]); + } + else + { + PRINTF("enc28j60: tx: %d: %02x:%02x:%02x:%02x:%02x:%02x\n", datalen, + 0xff & data[0], 0xff & data[1], 0xff & data[2], + 0xff & data[3], 0xff & data[4], 0xff & data[5]); + } +#endif + + //sent_packets++; + //PRINTF("enc28j60: sent_packets %d\n", sent_packets); + return datalen; +} + +/*---------------------------------------------------------------------------*/ + +uint16_t +ENC28J60::readFrame(uint8_t *buffer, uint16_t bufsize) +{ + readFrameSize(); + return readFrameData(buffer, bufsize); +} + +uint16_t +ENC28J60::readFrameSize() +{ + uint8_t n; + + uint8_t nxtpkt[2]; + uint8_t status[2]; + uint8_t length[2]; + + setregbank(EPKTCNT_BANK); + n = readreg(EPKTCNT); + + if (n == 0) + { + return 0; + } + + PRINTF("enc28j60: EPKTCNT 0x%02x\n", n); + + setregbank(ERXTX_BANK); + /* Read the next packet pointer */ + nxtpkt[0] = readdatabyte(); + nxtpkt[1] = readdatabyte(); + _next = (nxtpkt[1] << 8) + nxtpkt[0]; + + PRINTF("enc28j60: nxtpkt 0x%02x%02x\n", _nxtpkt[1], _nxtpkt[0]); + + length[0] = readdatabyte(); + length[1] = readdatabyte(); + _len = (length[1] << 8) + length[0]; + + PRINTF("enc28j60: length 0x%02x%02x\n", length[1], length[0]); + + status[0] = readdatabyte(); + status[1] = readdatabyte(); + + /* This statement is just to avoid a compiler warning: */ + (void)status[0]; + PRINTF("enc28j60: status 0x%02x%02x\n", status[1], status[0]); + + return _len; +} + +void +ENC28J60::discardFrame(uint16_t framesize) +{ + (void)framesize; + (void)readFrameData(nullptr, 0); +} + +uint16_t +ENC28J60::readFrameData(uint8_t *buffer, uint16_t framesize) +{ + if (framesize < _len) + { + + buffer = nullptr; + + /* flush rx fifo */ + for (uint16_t i = 0; i < _len; i++) + { + readdatabyte(); + } + } + else + { + readdata(buffer, _len); + } + + /* Read an additional byte at odd lengths, to avoid FIFO corruption */ + if ((_len % 2) != 0) + { + readdatabyte(); + } + + /* Errata #14 */ + if (_next == RX_BUF_START) + { + _next = RX_BUF_END; + } + else + { + _next = _next - 1; + } + writereg(ERXRDPTL, _next & 0xff); + writereg(ERXRDPTH, _next >> 8); + + setregbitfield(ECON2, ECON2_PKTDEC); + + if (!buffer) + { + PRINTF("enc28j60: rx err: flushed %d\n", _len); + return 0; + } + PRINTF("enc28j60: rx: %d: %02x:%02x:%02x:%02x:%02x:%02x\n", _len, + 0xff & buffer[0], 0xff & buffer[1], 0xff & buffer[2], + 0xff & buffer[3], 0xff & buffer[4], 0xff & buffer[5]); + + //received_packets++; + //PRINTF("enc28j60: received_packets %d\n", received_packets); + + return _len; +} diff --git a/libraries/lwIP_enc28j60/src/utility/enc28j60.h b/libraries/lwIP_enc28j60/src/utility/enc28j60.h new file mode 100644 index 0000000000..0545039026 --- /dev/null +++ b/libraries/lwIP_enc28j60/src/utility/enc28j60.h @@ -0,0 +1,149 @@ +/** + Header file for direct Ethernet frame access to the ENC28J60 controller + @file enc28j60.h +*/ + +/* + Copyright (c) 2012-2013, Thingsquare, http://www.thingsquare.com/. + 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 copyright holder 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 COPYRIGHT HOLDERS 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 + COPYRIGHT HOLDER 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. + +*/ + +// original sources: https://github.com/njh/EtherSia/tree/master/src/enc28j60.h + +#ifndef ENC28J60_H +#define ENC28J60_H + +#include + +/** + Send and receive Ethernet frames directly using a ENC28J60 controller. +*/ +class ENC28J60 +{ + +public: + /** + Constructor that uses the default hardware SPI pins + @param cs the Arduino Chip Select / Slave Select pin (default 10 on Uno) + */ + ENC28J60(int8_t cs = SS, SPIClass& spi = SPI, int8_t intr = -1); + + /** + Initialise the Ethernet controller + Must be called before sending or receiving Ethernet frames + + @param address the local MAC address for the Ethernet interface + @return Returns true if setting up the Ethernet interface was successful + */ + boolean begin(const uint8_t *address); + + /** + Send an Ethernet frame + @param data a pointer to the data to send + @param datalen the length of the data in the packet + @return the number of bytes transmitted + */ + virtual uint16_t sendFrame(const uint8_t *data, uint16_t datalen); + + /** + Read an Ethernet frame + @param buffer a pointer to a buffer to write the packet to + @param bufsize the available space in the buffer + @return the length of the received packet + or 0 if no packet was received + */ + virtual uint16_t readFrame(uint8_t *buffer, uint16_t bufsize); + +protected: + + static constexpr bool interruptIsPossible() + { + return false; + } + + /** + Read an Ethernet frame size + @return the length of data do receive + or 0 if no frame was received + */ + uint16_t readFrameSize(); + + /** + discard an Ethernet frame + @param framesize readFrameSize()'s result + */ + void discardFrame(uint16_t framesize); + + /** + Read an Ethernet frame data + readFrameSize() must be called first, + its result must be passed into framesize parameter + @param buffer a pointer to a buffer to write the frame to + @param framesize readFrameSize()'s result + @return the length of the received frame + or 0 if a problem occured + */ + uint16_t readFrameData(uint8_t *frame, uint16_t framesize); + +private: + + uint8_t is_mac_mii_reg(uint8_t reg); + uint8_t readreg(uint8_t reg); + void writereg(uint8_t reg, uint8_t data); + void setregbitfield(uint8_t reg, uint8_t mask); + void clearregbitfield(uint8_t reg, uint8_t mask); + void setregbank(uint8_t new_bank); + void writedata(const uint8_t *data, int datalen); + void writedatabyte(uint8_t byte); + int readdata(uint8_t *buf, int len); + uint8_t readdatabyte(void); + void softreset(void); + uint8_t readrev(void); + bool reset(void); + + void enc28j60_arch_spi_init(void); + uint8_t enc28j60_arch_spi_write(uint8_t data); + uint8_t enc28j60_arch_spi_read(void); + void enc28j60_arch_spi_select(void); + void enc28j60_arch_spi_deselect(void); + + // Previously defined in contiki/core/sys/clock.h + void clock_delay_usec(uint16_t dt); + + uint8_t _bank; + int8_t _cs; + SPIClass& _spi; + + const uint8_t *_localMac; + + /* readFrame*() state */ + uint16_t _next, _len; +}; + +#endif /* ENC28J60_H */ diff --git a/libraries/lwIP_w5100/library.properties b/libraries/lwIP_w5100/library.properties new file mode 100644 index 0000000000..b65d4fdb64 --- /dev/null +++ b/libraries/lwIP_w5100/library.properties @@ -0,0 +1,10 @@ +name=lwIP_w5500 +version=1 +author=Nicholas Humfrey +maintainer=esp8266/Arduino +sentence=Ethernet driver +paragraph=Wiznet5100 ethernet drivers for lwIP and esp8266 Arduino from https://github.com/njh/W5100MacRaw +category=Network +url=https://github.com/esp8266/Arduino +architectures=esp8266 +dot_a_linkage=true diff --git a/libraries/lwIP_w5100/src/W5100lwIP.h b/libraries/lwIP_w5100/src/W5100lwIP.h new file mode 100644 index 0000000000..c8f549529d --- /dev/null +++ b/libraries/lwIP_w5100/src/W5100lwIP.h @@ -0,0 +1,10 @@ + +#ifndef _W5100LWIP_H +#define _W5100LWIP_H + +#include +#include + +using Wiznet5100lwIP = LwipIntfDev; + +#endif // _W5500LWIP_H diff --git a/libraries/lwIP_w5100/src/utility/w5100.cpp b/libraries/lwIP_w5100/src/utility/w5100.cpp new file mode 100644 index 0000000000..6377aa5b63 --- /dev/null +++ b/libraries/lwIP_w5100/src/utility/w5100.cpp @@ -0,0 +1,369 @@ +/* + Copyright (c) 2013, WIZnet Co., Ltd. + Copyright (c) 2016, Nicholas Humfrey + 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 copyright holder 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 COPYRIGHT HOLDERS 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 + COPYRIGHT HOLDER 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. + +*/ + +// original sources: https://github.com/njh/W5100MacRaw + +#include +#include "w5100.h" + + +uint8_t Wiznet5100::wizchip_read(uint16_t address) +{ + uint8_t ret; + + wizchip_cs_select(); + _spi.transfer(0x0F); + _spi.transfer((address & 0xFF00) >> 8); + _spi.transfer((address & 0x00FF) >> 0); + ret = _spi.transfer(0); + wizchip_cs_deselect(); + + return ret; +} + +uint16_t Wiznet5100::wizchip_read_word(uint16_t address) +{ + return ((uint16_t)wizchip_read(address) << 8) + wizchip_read(address + 1); +} + + +void Wiznet5100::wizchip_read_buf(uint16_t address, uint8_t* pBuf, uint16_t len) +{ + for (uint16_t i = 0; i < len; i++) + { + pBuf[i] = wizchip_read(address + i); + } +} + +void Wiznet5100::wizchip_write(uint16_t address, uint8_t wb) +{ + wizchip_cs_select(); + _spi.transfer(0xF0); + _spi.transfer((address & 0xFF00) >> 8); + _spi.transfer((address & 0x00FF) >> 0); + _spi.transfer(wb); // Data write (write 1byte data) + wizchip_cs_deselect(); +} + +void Wiznet5100::wizchip_write_word(uint16_t address, uint16_t word) +{ + wizchip_write(address, (uint8_t)(word >> 8)); + wizchip_write(address + 1, (uint8_t) word); +} + +void Wiznet5100::wizchip_write_buf(uint16_t address, const uint8_t* pBuf, uint16_t len) +{ + for (uint16_t i = 0; i < len; i++) + { + wizchip_write(address + i, pBuf[i]); + } +} + +void Wiznet5100::setSn_CR(uint8_t cr) +{ + // Write the command to the Command Register + wizchip_write(Sn_CR, cr); + + // Now wait for the command to complete + while (wizchip_read(Sn_CR)); +} + +uint16_t Wiznet5100::getSn_TX_FSR() +{ + uint16_t val = 0, val1 = 0; + do + { + val1 = wizchip_read_word(Sn_TX_FSR); + if (val1 != 0) + { + val = wizchip_read_word(Sn_TX_FSR); + } + } while (val != val1); + return val; +} + + +uint16_t Wiznet5100::getSn_RX_RSR() +{ + uint16_t val = 0, val1 = 0; + do + { + val1 = wizchip_read_word(Sn_RX_RSR); + if (val1 != 0) + { + val = wizchip_read_word(Sn_RX_RSR); + } + } while (val != val1); + return val; +} + +void Wiznet5100::wizchip_send_data(const uint8_t *wizdata, uint16_t len) +{ + uint16_t ptr; + uint16_t size; + uint16_t dst_mask; + uint16_t dst_ptr; + + ptr = getSn_TX_WR(); + + dst_mask = ptr & TxBufferMask; + dst_ptr = TxBufferAddress + dst_mask; + + if (dst_mask + len > TxBufferLength) + { + size = TxBufferLength - dst_mask; + wizchip_write_buf(dst_ptr, wizdata, size); + wizdata += size; + size = len - size; + dst_ptr = TxBufferAddress; + wizchip_write_buf(dst_ptr, wizdata, size); + } + else + { + wizchip_write_buf(dst_ptr, wizdata, len); + } + + ptr += len; + + setSn_TX_WR(ptr); +} + +void Wiznet5100::wizchip_recv_data(uint8_t *wizdata, uint16_t len) +{ + uint16_t ptr; + uint16_t size; + uint16_t src_mask; + uint16_t src_ptr; + + ptr = getSn_RX_RD(); + + src_mask = ptr & RxBufferMask; + src_ptr = RxBufferAddress + src_mask; + + + if ((src_mask + len) > RxBufferLength) + { + size = RxBufferLength - src_mask; + wizchip_read_buf(src_ptr, wizdata, size); + wizdata += size; + size = len - size; + src_ptr = RxBufferAddress; + wizchip_read_buf(src_ptr, wizdata, size); + } + else + { + wizchip_read_buf(src_ptr, wizdata, len); + } + + ptr += len; + + setSn_RX_RD(ptr); +} + +void Wiznet5100::wizchip_recv_ignore(uint16_t len) +{ + uint16_t ptr; + + ptr = getSn_RX_RD(); + ptr += len; + setSn_RX_RD(ptr); +} + +void Wiznet5100::wizchip_sw_reset() +{ + setMR(MR_RST); + getMR(); // for delay + + setSHAR(_mac_address); +} + + +Wiznet5100::Wiznet5100(int8_t cs, SPIClass& spi, int8_t intr): + _spi(spi), _cs(cs) +{ + (void)intr; +} + +boolean Wiznet5100::begin(const uint8_t *mac_address) +{ + memcpy(_mac_address, mac_address, 6); + + pinMode(_cs, OUTPUT); + wizchip_cs_deselect(); + +#if 0 + _spi.begin(); + _spi.setClockDivider(SPI_CLOCK_DIV4); // 4 MHz? + _spi.setBitOrder(MSBFIRST); + _spi.setDataMode(SPI_MODE0); +#endif + + wizchip_sw_reset(); + + // Set the size of the Rx and Tx buffers + wizchip_write(RMSR, RxBufferSize); + wizchip_write(TMSR, TxBufferSize); + + // Set our local MAC address + setSHAR(_mac_address); + + // Open Socket 0 in MACRaw mode + setSn_MR(Sn_MR_MACRAW); + setSn_CR(Sn_CR_OPEN); + if (getSn_SR() != SOCK_MACRAW) + { + // Failed to put socket 0 into MACRaw mode + return false; + } + + // Success + return true; +} + +void Wiznet5100::end() +{ + setSn_CR(Sn_CR_CLOSE); + + // clear all interrupt of the socket + setSn_IR(0xFF); + + // Wait for socket to change to closed + while (getSn_SR() != SOCK_CLOSED); +} + +uint16_t Wiznet5100::readFrame(uint8_t *buffer, uint16_t bufsize) +{ + uint16_t data_len = readFrameSize(); + + if (data_len == 0) + { + return 0; + } + + if (data_len > bufsize) + { + // Packet is bigger than buffer - drop the packet + discardFrame(data_len); + return 0; + } + + return readFrameData(buffer, data_len); +} + +uint16_t Wiznet5100::readFrameSize() +{ + uint16_t len = getSn_RX_RSR(); + + if (len == 0) + { + return 0; + } + + uint8_t head[2]; + uint16_t data_len = 0; + + wizchip_recv_data(head, 2); + setSn_CR(Sn_CR_RECV); + + data_len = head[0]; + data_len = (data_len << 8) + head[1]; + data_len -= 2; + + return data_len; +} + +void Wiznet5100::discardFrame(uint16_t framesize) +{ + wizchip_recv_ignore(framesize); + setSn_CR(Sn_CR_RECV); +} + +uint16_t Wiznet5100::readFrameData(uint8_t *buffer, uint16_t framesize) +{ + wizchip_recv_data(buffer, framesize); + setSn_CR(Sn_CR_RECV); + +#if 1 + // let lwIP deal with mac address filtering + return framesize; +#else + // W5100 doesn't have any built-in MAC address filtering + if ((buffer[0] & 0x01) || memcmp(&buffer[0], _mac_address, 6) == 0) + { + // Addressed to an Ethernet multicast address or our unicast address + return framesize; + } + else + { + return 0; + } +#endif +} + +uint16_t Wiznet5100::sendFrame(const uint8_t *buf, uint16_t len) +{ + // Wait for space in the transmit buffer + while (1) + { + uint16_t freesize = getSn_TX_FSR(); + if (getSn_SR() == SOCK_CLOSED) + { + return -1; + } + if (len <= freesize) + { + break; + } + }; + + wizchip_send_data(buf, len); + setSn_CR(Sn_CR_SEND); + + while (1) + { + uint8_t tmp = getSn_IR(); + if (tmp & Sn_IR_SENDOK) + { + setSn_IR(Sn_IR_SENDOK); + // Packet sent ok + break; + } + else if (tmp & Sn_IR_TIMEOUT) + { + setSn_IR(Sn_IR_TIMEOUT); + // There was a timeout + return -1; + } + } + + return len; +} diff --git a/libraries/lwIP_w5100/src/utility/w5100.h b/libraries/lwIP_w5100/src/utility/w5100.h new file mode 100644 index 0000000000..300cb334a4 --- /dev/null +++ b/libraries/lwIP_w5100/src/utility/w5100.h @@ -0,0 +1,499 @@ +/* + Copyright (c) 2013, WIZnet Co., Ltd. + Copyright (c) 2016, Nicholas Humfrey + 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 copyright holder 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 COPYRIGHT HOLDERS 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 + COPYRIGHT HOLDER 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. + +*/ + +// original sources: https://github.com/njh/W5100MacRaw + +#ifndef W5100_H +#define W5100_H + +#include +#include +#include + + +class Wiznet5100 +{ + +public: + /** + Constructor that uses the default hardware SPI pins + @param cs the Arduino Chip Select / Slave Select pin (default 10) + */ + Wiznet5100(int8_t cs = SS, SPIClass& spi = SPI, int8_t intr = -1); + + /** + Initialise the Ethernet controller + Must be called before sending or receiving Ethernet frames + + @param address the local MAC address for the Ethernet interface + @return Returns true if setting up the Ethernet interface was successful + */ + boolean begin(const uint8_t *address); + + /** + Shut down the Ethernet controlled + */ + void end(); + + /** + Send an Ethernet frame + @param data a pointer to the data to send + @param datalen the length of the data in the packet + @return the number of bytes transmitted + */ + uint16_t sendFrame(const uint8_t *data, uint16_t datalen); + + /** + Read an Ethernet frame + @param buffer a pointer to a buffer to write the packet to + @param bufsize the available space in the buffer + @return the length of the received packet + or 0 if no packet was received + */ + uint16_t readFrame(uint8_t *buffer, uint16_t bufsize); + +protected: + + static constexpr bool interruptIsPossible() + { + return false; + } + + /** + Read an Ethernet frame size + @return the length of data do receive + or 0 if no frame was received + */ + uint16_t readFrameSize(); + + /** + discard an Ethernet frame + @param framesize readFrameSize()'s result + */ + void discardFrame(uint16_t framesize); + + /** + Read an Ethernet frame data + readFrameSize() must be called first, + its result must be passed into framesize parameter + @param buffer a pointer to a buffer to write the frame to + @param framesize readFrameSize()'s result + @return the length of the received frame + or 0 if a problem occured + */ + uint16_t readFrameData(uint8_t *frame, uint16_t framesize); + + +private: + static const uint16_t TxBufferAddress = 0x4000; /* Internal Tx buffer address of the iinchip */ + static const uint16_t RxBufferAddress = 0x6000; /* Internal Rx buffer address of the iinchip */ + static const uint8_t TxBufferSize = 0x3; /* Buffer size configuration: 0=1kb, 1=2kB, 2=4kB, 3=8kB */ + static const uint8_t RxBufferSize = 0x3; /* Buffer size configuration: 0=1kb, 1=2kB, 2=4kB, 3=8kB */ + static const uint16_t TxBufferLength = (1 << TxBufferSize) << 10; /* Length of Tx buffer in bytes */ + static const uint16_t RxBufferLength = (1 << RxBufferSize) << 10; /* Length of Rx buffer in bytes */ + static const uint16_t TxBufferMask = TxBufferLength - 1; + static const uint16_t RxBufferMask = RxBufferLength - 1; + + + SPIClass& _spi; + int8_t _cs; + uint8_t _mac_address[6]; + + /** + Default function to select chip. + @note This function help not to access wrong address. If you do not describe this function or register any functions, + null function is called. + */ + inline void wizchip_cs_select() + { + digitalWrite(_cs, LOW); + } + + /** + Default function to deselect chip. + @note This function help not to access wrong address. If you do not describe this function or register any functions, + null function is called. + */ + inline void wizchip_cs_deselect() + { + digitalWrite(_cs, HIGH); + } + + /** + Read a 1 byte value from a register. + @param address Register address + @return The value of register + */ + uint8_t wizchip_read(uint16_t address); + + /** + Reads a 2 byte value from a register. + @param address Register address + @return The value of register + */ + uint16_t wizchip_read_word(uint16_t address); + + /** + It reads sequence data from registers. + @param address Register address + @param pBuf Pointer buffer to read data + @param len Data length + */ + void wizchip_read_buf(uint16_t address, uint8_t* pBuf, uint16_t len); + + /** + Write a 1 byte value to a register. + @param address Register address + @param wb Write data + @return void + */ + void wizchip_write(uint16_t address, uint8_t wb); + + /** + Write a 2 byte value to a register. + @param address Register address + @param wb Write data + @return void + */ + void wizchip_write_word(uint16_t address, uint16_t word); + + /** + It writes sequence data to registers. + @param address Register address + @param pBuf Pointer buffer to write data + @param len Data length + */ + void wizchip_write_buf(uint16_t address, const uint8_t* pBuf, uint16_t len); + + + /** + Reset WIZCHIP by softly. + */ + void wizchip_sw_reset(void); + + /** + It copies data to internal TX memory + + @details This function reads the Tx write pointer register and after that, + it copies the wizdata(pointer buffer) of the length of len(variable) bytes to internal TX memory + and updates the Tx write pointer register. + This function is being called by send() and sendto() function also. + + @param wizdata Pointer buffer to write data + @param len Data length + @sa wizchip_recv_data() + */ + void wizchip_send_data(const uint8_t *wizdata, uint16_t len); + + /** + It copies data to your buffer from internal RX memory + + @details This function read the Rx read pointer register and after that, + it copies the received data from internal RX memory + to wizdata(pointer variable) of the length of len(variable) bytes. + This function is being called by recv() also. + + @param wizdata Pointer buffer to read data + @param len Data length + @sa wizchip_send_data() + */ + void wizchip_recv_data(uint8_t *wizdata, uint16_t len); + + /** + It discard the received data in RX memory. + @details It discards the data of the length of len(variable) bytes in internal RX memory. + @param len Data length + */ + void wizchip_recv_ignore(uint16_t len); + + /** + Get @ref Sn_TX_FSR register + @return uint16_t. Value of @ref Sn_TX_FSR. + */ + uint16_t getSn_TX_FSR(); + + /** + Get @ref Sn_RX_RSR register + @return uint16_t. Value of @ref Sn_RX_RSR. + */ + uint16_t getSn_RX_RSR(); + + + /** Common registers */ + enum + { + MR = 0x0000, ///< Mode Register address (R/W) + GAR = 0x0001, ///< Gateway IP Register address (R/W) + SUBR = 0x0005, ///< Subnet mask Register address (R/W) + SHAR = 0x0009, ///< Source MAC Register address (R/W) + SIPR = 0x000F, ///< Source IP Register address (R/W) + IR = 0x0015, ///< Interrupt Register (R/W) + IMR = 0x0016, ///< Socket Interrupt Mask Register (R/W) + RTR = 0x0017, ///< Timeout register address (1 is 100us) (R/W) + RCR = 0x0019, ///< Retry count register (R/W) + RMSR = 0x001A, ///< Receive Memory Size + TMSR = 0x001B, ///< Transmit Memory Size + }; + + /** Socket registers */ + enum + { + Sn_MR = 0x0400, ///< Socket Mode register(R/W) + Sn_CR = 0x0401, ///< Socket command register (R/W) + Sn_IR = 0x0402, ///< Socket interrupt register (R) + Sn_SR = 0x0403, ///< Socket status register (R) + Sn_PORT = 0x0404, ///< Source port register (R/W) + Sn_DHAR = 0x0406, ///< Peer MAC register address (R/W) + Sn_DIPR = 0x040C, ///< Peer IP register address (R/W) + Sn_DPORT = 0x0410, ///< Peer port register address (R/W) + Sn_MSSR = 0x0412, ///< Maximum Segment Size(Sn_MSSR0) register address (R/W) + Sn_PROTO = 0x0414, ///< IP Protocol(PROTO) Register (R/W) + Sn_TOS = 0x0415, ///< IP Type of Service(TOS) Register (R/W) + Sn_TTL = 0x0416, ///< IP Time to live(TTL) Register (R/W) + Sn_TX_FSR = 0x0420, ///< Transmit free memory size register (R) + Sn_TX_RD = 0x0422, ///< Transmit memory read pointer register address (R) + Sn_TX_WR = 0x0424, ///< Transmit memory write pointer register address (R/W) + Sn_RX_RSR = 0x0426, ///< Received data size register (R) + Sn_RX_RD = 0x0428, ///< Read point of Receive memory (R/W) + Sn_RX_WR = 0x042A, ///< Write point of Receive memory (R) + }; + + /** Mode register values */ + enum + { + MR_RST = 0x80, ///< Reset + MR_PB = 0x10, ///< Ping block + MR_AI = 0x02, ///< Address Auto-Increment in Indirect Bus Interface + MR_IND = 0x01, ///< Indirect Bus Interface mode + }; + + /** Socket Mode Register values @ref Sn_MR */ + enum + { + Sn_MR_CLOSE = 0x00, ///< Unused socket + Sn_MR_TCP = 0x01, ///< TCP + Sn_MR_UDP = 0x02, ///< UDP + Sn_MR_IPRAW = 0x03, ///< IP LAYER RAW SOCK + Sn_MR_MACRAW = 0x04, ///< MAC LAYER RAW SOCK + Sn_MR_ND = 0x20, ///< No Delayed Ack(TCP) flag + Sn_MR_MF = 0x40, ///< Use MAC filter + Sn_MR_MULTI = 0x80, ///< support multicating + }; + + /** Socket Command Register values */ + enum + { + Sn_CR_OPEN = 0x01, ///< Initialise or open socket + Sn_CR_CLOSE = 0x10, ///< Close socket + Sn_CR_SEND = 0x20, ///< Update TX buffer pointer and send data + Sn_CR_SEND_MAC = 0x21, ///< Send data with MAC address, so without ARP process + Sn_CR_SEND_KEEP = 0x22, ///< Send keep alive message + Sn_CR_RECV = 0x40, ///< Update RX buffer pointer and receive data + }; + + /** Socket Interrupt register values */ + enum + { + Sn_IR_CON = 0x01, ///< CON Interrupt + Sn_IR_DISCON = 0x02, ///< DISCON Interrupt + Sn_IR_RECV = 0x04, ///< RECV Interrupt + Sn_IR_TIMEOUT = 0x08, ///< TIMEOUT Interrupt + Sn_IR_SENDOK = 0x10, ///< SEND_OK Interrupt + }; + + /** Socket Status Register values */ + enum + { + SOCK_CLOSED = 0x00, ///< Closed + SOCK_INIT = 0x13, ///< Initiate state + SOCK_LISTEN = 0x14, ///< Listen state + SOCK_SYNSENT = 0x15, ///< Connection state + SOCK_SYNRECV = 0x16, ///< Connection state + SOCK_ESTABLISHED = 0x17, ///< Success to connect + SOCK_FIN_WAIT = 0x18, ///< Closing state + SOCK_CLOSING = 0x1A, ///< Closing state + SOCK_TIME_WAIT = 0x1B, ///< Closing state + SOCK_CLOSE_WAIT = 0x1C, ///< Closing state + SOCK_LAST_ACK = 0x1D, ///< Closing state + SOCK_UDP = 0x22, ///< UDP socket + SOCK_IPRAW = 0x32, ///< IP raw mode socket + SOCK_MACRAW = 0x42, ///< MAC raw mode socket + }; + + /** + Set Mode Register + @param (uint8_t)mr The value to be set. + @sa getMR() + */ + inline void setMR(uint8_t mode) + { + wizchip_write(MR, mode); + } + + /** + Get Mode Register + @return uint8_t. The value of Mode register. + @sa setMR() + */ + inline uint8_t getMR() + { + return wizchip_read(MR); + } + + /** + Set local MAC address + @param (uint8_t*)shar Pointer variable to set local MAC address. It should be allocated 6 bytes. + @sa getSHAR() + */ + inline void setSHAR(const uint8_t* macaddr) + { + wizchip_write_buf(SHAR, macaddr, 6); + } + + /** + Get local MAC address + @param (uint8_t*)shar Pointer variable to get local MAC address. It should be allocated 6 bytes. + @sa setSHAR() + */ + inline void getSHAR(uint8_t* macaddr) + { + wizchip_read_buf(SHAR, macaddr, 6); + } + + /** + Get @ref Sn_TX_WR register + @param (uint16_t)txwr Value to set @ref Sn_TX_WR + @sa GetSn_TX_WR() + */ + inline uint16_t getSn_TX_WR() + { + return wizchip_read_word(Sn_TX_WR); + } + + /** + Set @ref Sn_TX_WR register + @param (uint16_t)txwr Value to set @ref Sn_TX_WR + @sa GetSn_TX_WR() + */ + inline void setSn_TX_WR(uint16_t txwr) + { + wizchip_write_word(Sn_TX_WR, txwr); + } + + /** + Get @ref Sn_RX_RD register + @regurn uint16_t. Value of @ref Sn_RX_RD. + @sa setSn_RX_RD() + */ + inline uint16_t getSn_RX_RD() + { + return wizchip_read_word(Sn_RX_RD); + } + + /** + Set @ref Sn_RX_RD register + @param (uint16_t)rxrd Value to set @ref Sn_RX_RD + @sa getSn_RX_RD() + */ + inline void setSn_RX_RD(uint16_t rxrd) + { + wizchip_write_word(Sn_RX_RD, rxrd); + } + + /** + Set @ref Sn_MR register + @param (uint8_t)mr Value to set @ref Sn_MR + @sa getSn_MR() + */ + inline void setSn_MR(uint8_t mr) + { + wizchip_write(Sn_MR, mr); + } + + /** + Get @ref Sn_MR register + @return uint8_t. Value of @ref Sn_MR. + @sa setSn_MR() + */ + inline uint8_t getSn_MR() + { + return wizchip_read(Sn_MR); + } + + /** + Set @ref Sn_CR register, then wait for the command to execute + @param (uint8_t)cr Value to set @ref Sn_CR + @sa getSn_CR() + */ + void setSn_CR(uint8_t cr); + + /** + Get @ref Sn_CR register + @return uint8_t. Value of @ref Sn_CR. + @sa setSn_CR() + */ + inline uint8_t getSn_CR() + { + return wizchip_read(Sn_CR); + } + + /** + Get @ref Sn_SR register + @return uint8_t. Value of @ref Sn_SR. + */ + inline uint8_t getSn_SR() + { + return wizchip_read(Sn_SR); + } + + /** + Get @ref Sn_IR register + @return uint8_t. Value of @ref Sn_IR. + @sa setSn_IR() + */ + inline uint8_t getSn_IR() + { + return wizchip_read(Sn_IR); + } + + /** + Set @ref Sn_IR register + @param (uint8_t)ir Value to set @ref Sn_IR + @sa getSn_IR() + */ + inline void setSn_IR(uint8_t ir) + { + wizchip_write(Sn_IR, ir); + } +}; + +#endif // W5100_H diff --git a/libraries/lwIP_w5500/examples/TCPClient/TCPClient.ino b/libraries/lwIP_w5500/examples/TCPClient/TCPClient.ino new file mode 100644 index 0000000000..56dcb8092b --- /dev/null +++ b/libraries/lwIP_w5500/examples/TCPClient/TCPClient.ino @@ -0,0 +1,102 @@ +/* + This sketch establishes a TCP connection to a "quote of the day" service. + It sends a "hello" message, and then prints received data. +*/ + +#include +#include +//or #include +//or #include + +#include // WiFiClient (-> TCPClient) +#include // ESP8266WiFiClass::preinitWiFiOff() + +const char* host = "djxmmx.net"; +const uint16_t port = 17; + +using TCPClient = WiFiClient; + +#define CSPIN 16 // wemos/lolin/nodemcu D0 +Wiznet5500lwIP eth(CSPIN); + +void preinit() { + // (no C++ in function) + // disable wifi + ESP8266WiFiClass::preinitWiFiOff(); +} + +void setup() { + Serial.begin(115200); + + SPI.begin(); + SPI.setClockDivider(SPI_CLOCK_DIV4); // 4 MHz? + SPI.setBitOrder(MSBFIRST); + SPI.setDataMode(SPI_MODE0); + eth.setDefault(); // use ethernet for default route + if (!eth.begin()) { + Serial.println("ethernet hardware not found ... sleeping"); + while (1) { + delay(1000); + } + } else { + Serial.print("connecting ethernet"); + while (!eth.connected()) { + Serial.print("."); + delay(1000); + } + } + Serial.println(); + Serial.print("ethernet IP address: "); + Serial.println(eth.localIP()); +} + +void loop() { + static bool wait = false; + + Serial.print("connecting to "); + Serial.print(host); + Serial.print(':'); + Serial.println(port); + + TCPClient client; + if (!client.connect(host, port)) { + Serial.println("connection failed"); + delay(5000); + return; + } + + // This will send a string to the server + Serial.println("sending data to server"); + if (client.connected()) { + client.println("hello from ESP8266"); + } + + // wait for data to be available + unsigned long timeout = millis(); + while (client.available() == 0) { + if (millis() - timeout > 5000) { + Serial.println(">>> Client Timeout !"); + client.stop(); + delay(60000); + return; + } + } + + // Read all the lines of the reply from server and print them to Serial + Serial.println("receiving from remote server"); + // not testing 'client.connected()' since we do not need to send data here + while (client.available()) { + char ch = static_cast(client.read()); + Serial.print(ch); + } + + // Close the connection + Serial.println(); + Serial.println("closing connection"); + client.stop(); + + if (wait) { + delay(300000); // execute once every 5 minutes, don't flood remote service + } + wait = true; +} diff --git a/libraries/lwIP_w5500/library.properties b/libraries/lwIP_w5500/library.properties new file mode 100644 index 0000000000..8cb76d861d --- /dev/null +++ b/libraries/lwIP_w5500/library.properties @@ -0,0 +1,10 @@ +name=lwIP_w5500 +version=1 +author=Nicholas Humfrey +maintainer=esp8266/Arduino +sentence=Ethernet driver +paragraph=Wiznet5500 ethernet drivers for lwIP and esp8266 Arduino from https://github.com/njh/W5500MacRaw +category=Network +url=https://github.com/esp8266/Arduino +architectures=esp8266 +dot_a_linkage=true diff --git a/libraries/lwIP_w5500/src/W5500lwIP.h b/libraries/lwIP_w5500/src/W5500lwIP.h new file mode 100644 index 0000000000..1e8f201331 --- /dev/null +++ b/libraries/lwIP_w5500/src/W5500lwIP.h @@ -0,0 +1,10 @@ + +#ifndef _W5500LWIP_H +#define _W5500LWIP_H + +#include +#include + +using Wiznet5500lwIP = LwipIntfDev; + +#endif // _W5500LWIP_H diff --git a/libraries/lwIP_w5500/src/utility/w5500.cpp b/libraries/lwIP_w5500/src/utility/w5500.cpp new file mode 100644 index 0000000000..b3c3ce0162 --- /dev/null +++ b/libraries/lwIP_w5500/src/utility/w5500.cpp @@ -0,0 +1,442 @@ +/* + Copyright (c) 2013, WIZnet Co., Ltd. + Copyright (c) 2016, Nicholas Humfrey + 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 copyright holder 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 COPYRIGHT HOLDERS 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 + COPYRIGHT HOLDER 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. + +*/ + +// original sources: https://github.com/njh/W5500MacRaw + +#include +#include "w5500.h" + + +uint8_t Wiznet5500::wizchip_read(uint8_t block, uint16_t address) +{ + uint8_t ret; + + wizchip_cs_select(); + + block |= AccessModeRead; + + wizchip_spi_write_byte((address & 0xFF00) >> 8); + wizchip_spi_write_byte((address & 0x00FF) >> 0); + wizchip_spi_write_byte(block); + + ret = wizchip_spi_read_byte(); + + wizchip_cs_deselect(); + return ret; +} + +uint16_t Wiznet5500::wizchip_read_word(uint8_t block, uint16_t address) +{ + return ((uint16_t)wizchip_read(block, address) << 8) + wizchip_read(block, address + 1); +} + +void Wiznet5500::wizchip_read_buf(uint8_t block, uint16_t address, uint8_t* pBuf, uint16_t len) +{ + uint16_t i; + + wizchip_cs_select(); + + block |= AccessModeRead; + + wizchip_spi_write_byte((address & 0xFF00) >> 8); + wizchip_spi_write_byte((address & 0x00FF) >> 0); + wizchip_spi_write_byte(block); + for (i = 0; i < len; i++) + { + pBuf[i] = wizchip_spi_read_byte(); + } + + wizchip_cs_deselect(); +} + +void Wiznet5500::wizchip_write(uint8_t block, uint16_t address, uint8_t wb) +{ + wizchip_cs_select(); + + block |= AccessModeWrite; + + wizchip_spi_write_byte((address & 0xFF00) >> 8); + wizchip_spi_write_byte((address & 0x00FF) >> 0); + wizchip_spi_write_byte(block); + wizchip_spi_write_byte(wb); + + wizchip_cs_deselect(); +} + +void Wiznet5500::wizchip_write_word(uint8_t block, uint16_t address, uint16_t word) +{ + wizchip_write(block, address, (uint8_t)(word >> 8)); + wizchip_write(block, address + 1, (uint8_t) word); +} + +void Wiznet5500::wizchip_write_buf(uint8_t block, uint16_t address, const uint8_t* pBuf, uint16_t len) +{ + uint16_t i; + + wizchip_cs_select(); + + block |= AccessModeWrite; + + wizchip_spi_write_byte((address & 0xFF00) >> 8); + wizchip_spi_write_byte((address & 0x00FF) >> 0); + wizchip_spi_write_byte(block); + for (i = 0; i < len; i++) + { + wizchip_spi_write_byte(pBuf[i]); + } + + wizchip_cs_deselect(); +} + +void Wiznet5500::setSn_CR(uint8_t cr) +{ + // Write the command to the Command Register + wizchip_write(BlockSelectSReg, Sn_CR, cr); + + // Now wait for the command to complete + while (wizchip_read(BlockSelectSReg, Sn_CR)); +} + +uint16_t Wiznet5500::getSn_TX_FSR() +{ + uint16_t val = 0, val1 = 0; + do + { + val1 = wizchip_read_word(BlockSelectSReg, Sn_TX_FSR); + if (val1 != 0) + { + val = wizchip_read_word(BlockSelectSReg, Sn_TX_FSR); + } + } while (val != val1); + return val; +} + + +uint16_t Wiznet5500::getSn_RX_RSR() +{ + uint16_t val = 0, val1 = 0; + do + { + val1 = wizchip_read_word(BlockSelectSReg, Sn_RX_RSR); + if (val1 != 0) + { + val = wizchip_read_word(BlockSelectSReg, Sn_RX_RSR); + } + } while (val != val1); + return val; +} + +void Wiznet5500::wizchip_send_data(const uint8_t *wizdata, uint16_t len) +{ + uint16_t ptr = 0; + + if (len == 0) + { + return; + } + ptr = getSn_TX_WR(); + wizchip_write_buf(BlockSelectTxBuf, ptr, wizdata, len); + + ptr += len; + + setSn_TX_WR(ptr); +} + +void Wiznet5500::wizchip_recv_data(uint8_t *wizdata, uint16_t len) +{ + uint16_t ptr; + + if (len == 0) + { + return; + } + ptr = getSn_RX_RD(); + wizchip_read_buf(BlockSelectRxBuf, ptr, wizdata, len); + ptr += len; + + setSn_RX_RD(ptr); +} + +void Wiznet5500::wizchip_recv_ignore(uint16_t len) +{ + uint16_t ptr; + + ptr = getSn_RX_RD(); + ptr += len; + setSn_RX_RD(ptr); +} + +void Wiznet5500::wizchip_sw_reset() +{ + setMR(MR_RST); + getMR(); // for delay + + setSHAR(_mac_address); +} + +int8_t Wiznet5500::wizphy_getphylink() +{ + int8_t tmp; + if (getPHYCFGR() & PHYCFGR_LNK_ON) + { + tmp = PHY_LINK_ON; + } + else + { + tmp = PHY_LINK_OFF; + } + return tmp; +} + +int8_t Wiznet5500::wizphy_getphypmode() +{ + int8_t tmp = 0; + if (getPHYCFGR() & PHYCFGR_OPMDC_PDOWN) + { + tmp = PHY_POWER_DOWN; + } + else + { + tmp = PHY_POWER_NORM; + } + return tmp; +} + +void Wiznet5500::wizphy_reset() +{ + uint8_t tmp = getPHYCFGR(); + tmp &= PHYCFGR_RST; + setPHYCFGR(tmp); + tmp = getPHYCFGR(); + tmp |= ~PHYCFGR_RST; + setPHYCFGR(tmp); +} + +int8_t Wiznet5500::wizphy_setphypmode(uint8_t pmode) +{ + uint8_t tmp = 0; + tmp = getPHYCFGR(); + if ((tmp & PHYCFGR_OPMD) == 0) + { + return -1; + } + tmp &= ~PHYCFGR_OPMDC_ALLA; + if (pmode == PHY_POWER_DOWN) + { + tmp |= PHYCFGR_OPMDC_PDOWN; + } + else + { + tmp |= PHYCFGR_OPMDC_ALLA; + } + setPHYCFGR(tmp); + wizphy_reset(); + tmp = getPHYCFGR(); + if (pmode == PHY_POWER_DOWN) + { + if (tmp & PHYCFGR_OPMDC_PDOWN) + { + return 0; + } + } + else + { + if (tmp & PHYCFGR_OPMDC_ALLA) + { + return 0; + } + } + return -1; +} + + +Wiznet5500::Wiznet5500(int8_t cs, SPIClass& spi, int8_t intr): + _spi(spi), _cs(cs) +{ + (void)intr; +} + +boolean Wiznet5500::begin(const uint8_t *mac_address) +{ + memcpy(_mac_address, mac_address, 6); + + pinMode(_cs, OUTPUT); + wizchip_cs_deselect(); + +#if 0 + _spi.begin(); + _spi.setClockDivider(SPI_CLOCK_DIV4); // 4 MHz? + _spi.setBitOrder(MSBFIRST); + _spi.setDataMode(SPI_MODE0); +#endif + + wizchip_sw_reset(); + + // Use the full 16Kb of RAM for Socket 0 + setSn_RXBUF_SIZE(16); + setSn_TXBUF_SIZE(16); + + // Set our local MAC address + setSHAR(_mac_address); + + // Open Socket 0 in MACRaw mode + setSn_MR(Sn_MR_MACRAW); + setSn_CR(Sn_CR_OPEN); + if (getSn_SR() != SOCK_MACRAW) + { + // Failed to put socket 0 into MACRaw mode + return false; + } + + // Success + return true; +} + +void Wiznet5500::end() +{ + setSn_CR(Sn_CR_CLOSE); + + // clear all interrupt of the socket + setSn_IR(0xFF); + + // Wait for socket to change to closed + while (getSn_SR() != SOCK_CLOSED); +} + +uint16_t Wiznet5500::readFrame(uint8_t *buffer, uint16_t bufsize) +{ + uint16_t data_len = readFrameSize(); + + if (data_len == 0) + { + return 0; + } + + if (data_len > bufsize) + { + // Packet is bigger than buffer - drop the packet + discardFrame(data_len); + return 0; + } + + return readFrameData(buffer, data_len); +} + +uint16_t Wiznet5500::readFrameSize() +{ + uint16_t len = getSn_RX_RSR(); + + if (len == 0) + { + return 0; + } + + uint8_t head[2]; + uint16_t data_len = 0; + + wizchip_recv_data(head, 2); + setSn_CR(Sn_CR_RECV); + + data_len = head[0]; + data_len = (data_len << 8) + head[1]; + data_len -= 2; + + return data_len; +} + +void Wiznet5500::discardFrame(uint16_t framesize) +{ + wizchip_recv_ignore(framesize); + setSn_CR(Sn_CR_RECV); +} + +uint16_t Wiznet5500::readFrameData(uint8_t *buffer, uint16_t framesize) +{ + wizchip_recv_data(buffer, framesize); + setSn_CR(Sn_CR_RECV); + +#if 1 + // let lwIP deal with mac address filtering + return framesize; +#else + // Had problems with W5500 MAC address filtering (the Sn_MR_MFEN option) + // Do it in software instead: + if ((buffer[0] & 0x01) || memcmp(&buffer[0], _mac_address, 6) == 0) + { + // Addressed to an Ethernet multicast address or our unicast address + return framesize; + } + else + { + return 0; + } +#endif +} + +uint16_t Wiznet5500::sendFrame(const uint8_t *buf, uint16_t len) +{ + // Wait for space in the transmit buffer + while (1) + { + uint16_t freesize = getSn_TX_FSR(); + if (getSn_SR() == SOCK_CLOSED) + { + return -1; + } + if (len <= freesize) + { + break; + } + }; + + wizchip_send_data(buf, len); + setSn_CR(Sn_CR_SEND); + + while (1) + { + uint8_t tmp = getSn_IR(); + if (tmp & Sn_IR_SENDOK) + { + setSn_IR(Sn_IR_SENDOK); + // Packet sent ok + break; + } + else if (tmp & Sn_IR_TIMEOUT) + { + setSn_IR(Sn_IR_TIMEOUT); + // There was a timeout + return -1; + } + } + + return len; +} diff --git a/libraries/lwIP_w5500/src/utility/w5500.h b/libraries/lwIP_w5500/src/utility/w5500.h new file mode 100644 index 0000000000..428689b8e5 --- /dev/null +++ b/libraries/lwIP_w5500/src/utility/w5500.h @@ -0,0 +1,767 @@ +/* + Copyright (c) 2013, WIZnet Co., Ltd. + Copyright (c) 2016, Nicholas Humfrey + 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 copyright holder 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 COPYRIGHT HOLDERS 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 + COPYRIGHT HOLDER 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. + +*/ + +// original sources: https://github.com/njh/W5500MacRaw + +#ifndef W5500_H +#define W5500_H + +#include +#include +#include + + + +class Wiznet5500 +{ + +public: + /** + Constructor that uses the default hardware SPI pins + @param cs the Arduino Chip Select / Slave Select pin (default 10) + */ + Wiznet5500(int8_t cs = SS, SPIClass& spi = SPI, int8_t intr = -1); + + + /** + Initialise the Ethernet controller + Must be called before sending or receiving Ethernet frames + + @param address the local MAC address for the Ethernet interface + @return Returns true if setting up the Ethernet interface was successful + */ + boolean begin(const uint8_t *address); + + /** + Shut down the Ethernet controlled + */ + void end(); + + /** + Send an Ethernet frame + @param data a pointer to the data to send + @param datalen the length of the data in the packet + @return the number of bytes transmitted + */ + uint16_t sendFrame(const uint8_t *data, uint16_t datalen); + + /** + Read an Ethernet frame + @param buffer a pointer to a buffer to write the packet to + @param bufsize the available space in the buffer + @return the length of the received packet + or 0 if no packet was received + */ + uint16_t readFrame(uint8_t *buffer, uint16_t bufsize); + +protected: + + static constexpr bool interruptIsPossible() + { + return false; + } + + /** + Read an Ethernet frame size + @return the length of data do receive + or 0 if no frame was received + */ + uint16_t readFrameSize(); + + /** + discard an Ethernet frame + @param framesize readFrameSize()'s result + */ + void discardFrame(uint16_t framesize); + + /** + Read an Ethernet frame data + readFrameSize() must be called first, + its result must be passed into framesize parameter + @param buffer a pointer to a buffer to write the frame to + @param framesize readFrameSize()'s result + @return the length of the received frame + or 0 if a problem occured + */ + uint16_t readFrameData(uint8_t *frame, uint16_t framesize); + + +private: + + //< SPI interface Read operation in Control Phase + static const uint8_t AccessModeRead = (0x00 << 2); + + //< SPI interface Read operation in Control Phase + static const uint8_t AccessModeWrite = (0x01 << 2); + + //< Common register block in Control Phase + static const uint8_t BlockSelectCReg = (0x00 << 3); + + //< Socket 0 register block in Control Phase + static const uint8_t BlockSelectSReg = (0x01 << 3); + + //< Socket 0 Tx buffer address block + static const uint8_t BlockSelectTxBuf = (0x02 << 3); + + //< Socket 0 Rx buffer address block + static const uint8_t BlockSelectRxBuf = (0x03 << 3); + + + + SPIClass& _spi; + int8_t _cs; + uint8_t _mac_address[6]; + + /** + Default function to select chip. + @note This function help not to access wrong address. If you do not describe this function or register any functions, + null function is called. + */ + inline void wizchip_cs_select() + { + digitalWrite(_cs, LOW); + } + + /** + Default function to deselect chip. + @note This function help not to access wrong address. If you do not describe this function or register any functions, + null function is called. + */ + inline void wizchip_cs_deselect() + { + digitalWrite(_cs, HIGH); + } + + /** + Default function to read in SPI interface. + @note This function help not to access wrong address. If you do not describe this function or register any functions, + null function is called. + */ + inline uint8_t wizchip_spi_read_byte() + { + return _spi.transfer(0); + } + + /** + Default function to write in SPI interface. + @note This function help not to access wrong address. If you do not describe this function or register any functions, + null function is called. + */ + inline void wizchip_spi_write_byte(uint8_t wb) + { + _spi.transfer(wb); + } + + + /** + Read a 1 byte value from a register. + @param address Register address + @return The value of register + */ + uint8_t wizchip_read(uint8_t block, uint16_t address); + + /** + Reads a 2 byte value from a register. + @param address Register address + @return The value of register + */ + uint16_t wizchip_read_word(uint8_t block, uint16_t address); + + /** + It reads sequence data from registers. + @param address Register address + @param pBuf Pointer buffer to read data + @param len Data length + */ + void wizchip_read_buf(uint8_t block, uint16_t address, uint8_t* pBuf, uint16_t len); + + /** + Write a 1 byte value to a register. + @param address Register address + @param wb Write data + @return void + */ + void wizchip_write(uint8_t block, uint16_t address, uint8_t wb); + + /** + Write a 2 byte value to a register. + @param address Register address + @param wb Write data + @return void + */ + void wizchip_write_word(uint8_t block, uint16_t address, uint16_t word); + + /** + It writes sequence data to registers. + @param address Register address + @param pBuf Pointer buffer to write data + @param len Data length + */ + void wizchip_write_buf(uint8_t block, uint16_t address, const uint8_t* pBuf, uint16_t len); + + /** + Get @ref Sn_TX_FSR register + @return uint16_t. Value of @ref Sn_TX_FSR. + */ + uint16_t getSn_TX_FSR(); + + /** + Get @ref Sn_RX_RSR register + @return uint16_t. Value of @ref Sn_RX_RSR. + */ + uint16_t getSn_RX_RSR(); + + + /** + Reset WIZCHIP by softly. + */ + void wizchip_sw_reset(); + + /** + Get the link status of phy in WIZCHIP + */ + int8_t wizphy_getphylink(); + + /** + Get the power mode of PHY in WIZCHIP + */ + int8_t wizphy_getphypmode(); + + /** + Reset Phy + */ + void wizphy_reset(); + + /** + set the power mode of phy inside WIZCHIP. Refer to @ref PHYCFGR in W5500, @ref PHYSTATUS in W5200 + @param pmode Settig value of power down mode. + */ + int8_t wizphy_setphypmode(uint8_t pmode); + + /** + It copies data to internal TX memory + + @details This function reads the Tx write pointer register and after that, + it copies the wizdata(pointer buffer) of the length of len(variable) bytes to internal TX memory + and updates the Tx write pointer register. + This function is being called by send() and sendto() function also. + + @param wizdata Pointer buffer to write data + @param len Data length + @sa wizchip_recv_data() + */ + void wizchip_send_data(const uint8_t *wizdata, uint16_t len); + + /** + It copies data to your buffer from internal RX memory + + @details This function read the Rx read pointer register and after that, + it copies the received data from internal RX memory + to wizdata(pointer variable) of the length of len(variable) bytes. + This function is being called by recv() also. + + @param wizdata Pointer buffer to read data + @param len Data length + @sa wizchip_send_data() + */ + void wizchip_recv_data(uint8_t *wizdata, uint16_t len); + + /** + It discard the received data in RX memory. + @details It discards the data of the length of len(variable) bytes in internal RX memory. + @param len Data length + */ + void wizchip_recv_ignore(uint16_t len); + + + + /** Common registers */ + enum + { + MR = 0x0000, ///< Mode Register address (R/W) + SHAR = 0x0009, ///< Source MAC Register address (R/W) + INTLEVEL = 0x0013, ///< Set Interrupt low level timer register address (R/W) + IR = 0x0015, ///< Interrupt Register (R/W) + _IMR_ = 0x0016, ///< Interrupt mask register (R/W) + SIR = 0x0017, ///< Socket Interrupt Register (R/W) + SIMR = 0x0018, ///< Socket Interrupt Mask Register (R/W) + _RTR_ = 0x0019, ///< Timeout register address (1 is 100us) (R/W) + _RCR_ = 0x001B, ///< Retry count register (R/W) + UIPR = 0x0028, ///< Unreachable IP register address in UDP mode (R) + UPORTR = 0x002C, ///< Unreachable Port register address in UDP mode (R) + PHYCFGR = 0x002E, ///< PHY Status Register (R/W) + VERSIONR = 0x0039, ///< Chip version register address (R) + }; + + /** Socket registers */ + enum + { + Sn_MR = 0x0000, ///< Socket Mode register (R/W) + Sn_CR = 0x0001, ///< Socket command register (R/W) + Sn_IR = 0x0002, ///< Socket interrupt register (R) + Sn_SR = 0x0003, ///< Socket status register (R) + Sn_PORT = 0x0004, ///< Source port register (R/W) + Sn_DHAR = 0x0006, ///< Peer MAC register address (R/W) + Sn_DIPR = 0x000C, ///< Peer IP register address (R/W) + Sn_DPORT = 0x0010, ///< Peer port register address (R/W) + Sn_MSSR = 0x0012, ///< Maximum Segment Size(Sn_MSSR0) register address (R/W) + Sn_TOS = 0x0015, ///< IP Type of Service(TOS) Register (R/W) + Sn_TTL = 0x0016, ///< IP Time to live(TTL) Register (R/W) + Sn_RXBUF_SIZE = 0x001E, ///< Receive memory size register (R/W) + Sn_TXBUF_SIZE = 0x001F, ///< Transmit memory size register (R/W) + Sn_TX_FSR = 0x0020, ///< Transmit free memory size register (R) + Sn_TX_RD = 0x0022, ///< Transmit memory read pointer register address (R) + Sn_TX_WR = 0x0024, ///< Transmit memory write pointer register address (R/W) + Sn_RX_RSR = 0x0026, ///< Received data size register (R) + Sn_RX_RD = 0x0028, ///< Read point of Receive memory (R/W) + Sn_RX_WR = 0x002A, ///< Write point of Receive memory (R) + Sn_IMR = 0x002C, ///< Socket interrupt mask register (R) + Sn_FRAG = 0x002D, ///< Fragment field value in IP header register (R/W) + Sn_KPALVTR = 0x002F, ///< Keep Alive Timer register (R/W) + }; + + /** Mode register values */ + enum + { + MR_RST = 0x80, ///< Reset + MR_WOL = 0x20, ///< Wake on LAN + MR_PB = 0x10, ///< Ping block + MR_PPPOE = 0x08, ///< Enable PPPoE + MR_FARP = 0x02, ///< Enable UDP_FORCE_ARP CHECHK + }; + + /* Interrupt Register values */ + enum + { + IR_CONFLICT = 0x80, ///< Check IP conflict + IR_UNREACH = 0x40, ///< Get the destination unreachable message in UDP sending + IR_PPPoE = 0x20, ///< Get the PPPoE close message + IR_MP = 0x10, ///< Get the magic packet interrupt + }; + + /* Interrupt Mask Register values */ + enum + { + IM_IR7 = 0x80, ///< IP Conflict Interrupt Mask + IM_IR6 = 0x40, ///< Destination unreachable Interrupt Mask + IM_IR5 = 0x20, ///< PPPoE Close Interrupt Mask + IM_IR4 = 0x10, ///< Magic Packet Interrupt Mask + }; + + /** Socket Mode Register values @ref Sn_MR */ + enum + { + Sn_MR_CLOSE = 0x00, ///< Unused socket + Sn_MR_TCP = 0x01, ///< TCP + Sn_MR_UDP = 0x02, ///< UDP + Sn_MR_MACRAW = 0x04, ///< MAC LAYER RAW SOCK + Sn_MR_UCASTB = 0x10, ///< Unicast Block in UDP Multicasting + Sn_MR_ND = 0x20, ///< No Delayed Ack(TCP), Multicast flag + Sn_MR_BCASTB = 0x40, ///< Broadcast block in UDP Multicasting + Sn_MR_MULTI = 0x80, ///< Support UDP Multicasting + Sn_MR_MIP6B = 0x10, ///< IPv6 packet Blocking in @ref Sn_MR_MACRAW mode + Sn_MR_MMB = 0x20, ///< Multicast Blocking in @ref Sn_MR_MACRAW mode + Sn_MR_MFEN = 0x80, ///< MAC filter enable in @ref Sn_MR_MACRAW mode + }; + + /** Socket Command Register values */ + enum + { + Sn_CR_OPEN = 0x01, ///< Initialise or open socket + Sn_CR_LISTEN = 0x02, ///< Wait connection request in TCP mode (Server mode) + Sn_CR_CONNECT = 0x04, ///< Send connection request in TCP mode (Client mode) + Sn_CR_DISCON = 0x08, ///< Send closing request in TCP mode + Sn_CR_CLOSE = 0x10, ///< Close socket + Sn_CR_SEND = 0x20, ///< Update TX buffer pointer and send data + Sn_CR_SEND_MAC = 0x21, ///< Send data with MAC address, so without ARP process + Sn_CR_SEND_KEEP = 0x22, ///< Send keep alive message + Sn_CR_RECV = 0x40, ///< Update RX buffer pointer and receive data + }; + + /** Socket Interrupt register values */ + enum + { + Sn_IR_CON = 0x01, ///< CON Interrupt + Sn_IR_DISCON = 0x02, ///< DISCON Interrupt + Sn_IR_RECV = 0x04, ///< RECV Interrupt + Sn_IR_TIMEOUT = 0x08, ///< TIMEOUT Interrupt + Sn_IR_SENDOK = 0x10, ///< SEND_OK Interrupt + }; + + /** Socket Status Register values */ + enum + { + SOCK_CLOSED = 0x00, ///< Closed + SOCK_INIT = 0x13, ///< Initiate state + SOCK_LISTEN = 0x14, ///< Listen state + SOCK_SYNSENT = 0x15, ///< Connection state + SOCK_SYNRECV = 0x16, ///< Connection state + SOCK_ESTABLISHED = 0x17, ///< Success to connect + SOCK_FIN_WAIT = 0x18, ///< Closing state + SOCK_CLOSING = 0x1A, ///< Closing state + SOCK_TIME_WAIT = 0x1B, ///< Closing state + SOCK_CLOSE_WAIT = 0x1C, ///< Closing state + SOCK_LAST_ACK = 0x1D, ///< Closing state + SOCK_UDP = 0x22, ///< UDP socket + SOCK_MACRAW = 0x42, ///< MAC raw mode socket + }; + + + /* PHYCFGR register value */ + enum + { + PHYCFGR_RST = ~(1 << 7), //< For PHY reset, must operate AND mask. + PHYCFGR_OPMD = (1 << 6), // Configre PHY with OPMDC value + PHYCFGR_OPMDC_ALLA = (7 << 3), + PHYCFGR_OPMDC_PDOWN = (6 << 3), + PHYCFGR_OPMDC_NA = (5 << 3), + PHYCFGR_OPMDC_100FA = (4 << 3), + PHYCFGR_OPMDC_100F = (3 << 3), + PHYCFGR_OPMDC_100H = (2 << 3), + PHYCFGR_OPMDC_10F = (1 << 3), + PHYCFGR_OPMDC_10H = (0 << 3), + PHYCFGR_DPX_FULL = (1 << 2), + PHYCFGR_DPX_HALF = (0 << 2), + PHYCFGR_SPD_100 = (1 << 1), + PHYCFGR_SPD_10 = (0 << 1), + PHYCFGR_LNK_ON = (1 << 0), + PHYCFGR_LNK_OFF = (0 << 0), + }; + + enum + { + PHY_SPEED_10 = 0, ///< Link Speed 10 + PHY_SPEED_100 = 1, ///< Link Speed 100 + PHY_DUPLEX_HALF = 0, ///< Link Half-Duplex + PHY_DUPLEX_FULL = 1, ///< Link Full-Duplex + PHY_LINK_OFF = 0, ///< Link Off + PHY_LINK_ON = 1, ///< Link On + PHY_POWER_NORM = 0, ///< PHY power normal mode + PHY_POWER_DOWN = 1, ///< PHY power down mode + }; + + + /** + Set Mode Register + @param (uint8_t)mr The value to be set. + @sa getMR() + */ + inline void setMR(uint8_t mode) + { + wizchip_write(BlockSelectCReg, MR, mode); + } + + /** + Get Mode Register + @return uint8_t. The value of Mode register. + @sa setMR() + */ + inline uint8_t getMR() + { + return wizchip_read(BlockSelectCReg, MR); + } + + /** + Set local MAC address + @param (uint8_t*)shar Pointer variable to set local MAC address. It should be allocated 6 bytes. + @sa getSHAR() + */ + inline void setSHAR(const uint8_t* macaddr) + { + wizchip_write_buf(BlockSelectCReg, SHAR, macaddr, 6); + } + + /** + Get local MAC address + @param (uint8_t*)shar Pointer variable to get local MAC address. It should be allocated 6 bytes. + @sa setSHAR() + */ + inline void getSHAR(uint8_t* macaddr) + { + wizchip_read_buf(BlockSelectCReg, SHAR, macaddr, 6); + } + + /** + Set @ref IR register + @param (uint8_t)ir Value to set @ref IR register. + @sa getIR() + */ + inline void setIR(uint8_t ir) + { + wizchip_write(BlockSelectCReg, IR, (ir & 0xF0)); + } + + /** + Get @ref IR register + @return uint8_t. Value of @ref IR register. + @sa setIR() + */ + inline uint8_t getIR() + { + return wizchip_read(BlockSelectCReg, IR) & 0xF0; + } + + /** + Set @ref _IMR_ register + @param (uint8_t)imr Value to set @ref _IMR_ register. + @sa getIMR() + */ + inline void setIMR(uint8_t imr) + { + wizchip_write(BlockSelectCReg, _IMR_, imr); + } + + /** + Get @ref _IMR_ register + @return uint8_t. Value of @ref _IMR_ register. + @sa setIMR() + */ + inline uint8_t getIMR() + { + return wizchip_read(BlockSelectCReg, _IMR_); + } + + /** + Set @ref PHYCFGR register + @param (uint8_t)phycfgr Value to set @ref PHYCFGR register. + @sa getPHYCFGR() + */ + inline void setPHYCFGR(uint8_t phycfgr) + { + wizchip_write(BlockSelectCReg, PHYCFGR, phycfgr); + } + + /** + Get @ref PHYCFGR register + @return uint8_t. Value of @ref PHYCFGR register. + @sa setPHYCFGR() + */ + inline uint8_t getPHYCFGR() + { + return wizchip_read(BlockSelectCReg, PHYCFGR); + } + + /** + Get @ref VERSIONR register + @return uint8_t. Value of @ref VERSIONR register. + */ + inline uint8_t getVERSIONR() + { + return wizchip_read(BlockSelectCReg, VERSIONR); + } + + /** + Set @ref Sn_MR register + @param (uint8_t)mr Value to set @ref Sn_MR + @sa getSn_MR() + */ + inline void setSn_MR(uint8_t mr) + { + wizchip_write(BlockSelectSReg, Sn_MR, mr); + } + + /** + Get @ref Sn_MR register + @return uint8_t. Value of @ref Sn_MR. + @sa setSn_MR() + */ + inline uint8_t getSn_MR() + { + return wizchip_read(BlockSelectSReg, Sn_MR); + } + + /** + Set @ref Sn_CR register, then wait for the command to execute + @param (uint8_t)cr Value to set @ref Sn_CR + @sa getSn_CR() + */ + void setSn_CR(uint8_t cr); + + /** + Get @ref Sn_CR register + @return uint8_t. Value of @ref Sn_CR. + @sa setSn_CR() + */ + inline uint8_t getSn_CR() + { + return wizchip_read(BlockSelectSReg, Sn_CR); + } + + /** + Set @ref Sn_IR register + @param (uint8_t)ir Value to set @ref Sn_IR + @sa getSn_IR() + */ + inline void setSn_IR(uint8_t ir) + { + wizchip_write(BlockSelectSReg, Sn_IR, (ir & 0x1F)); + } + + /** + Get @ref Sn_IR register + @return uint8_t. Value of @ref Sn_IR. + @sa setSn_IR() + */ + inline uint8_t getSn_IR() + { + return (wizchip_read(BlockSelectSReg, Sn_IR) & 0x1F); + } + + /** + Set @ref Sn_IMR register + @param (uint8_t)imr Value to set @ref Sn_IMR + @sa getSn_IMR() + */ + inline void setSn_IMR(uint8_t imr) + { + wizchip_write(BlockSelectSReg, Sn_IMR, (imr & 0x1F)); + } + + /** + Get @ref Sn_IMR register + @return uint8_t. Value of @ref Sn_IMR. + @sa setSn_IMR() + */ + inline uint8_t getSn_IMR() + { + return (wizchip_read(BlockSelectSReg, Sn_IMR) & 0x1F); + } + + /** + Get @ref Sn_SR register + @return uint8_t. Value of @ref Sn_SR. + */ + inline uint8_t getSn_SR() + { + return wizchip_read(BlockSelectSReg, Sn_SR); + } + + /** + Set @ref Sn_RXBUF_SIZE register + @param (uint8_t)rxbufsize Value to set @ref Sn_RXBUF_SIZE + @sa getSn_RXBUF_SIZE() + */ + inline void setSn_RXBUF_SIZE(uint8_t rxbufsize) + { + wizchip_write(BlockSelectSReg, Sn_RXBUF_SIZE, rxbufsize); + } + + /** + Get @ref Sn_RXBUF_SIZE register + @return uint8_t. Value of @ref Sn_RXBUF_SIZE. + @sa setSn_RXBUF_SIZE() + */ + inline uint8_t getSn_RXBUF_SIZE() + { + return wizchip_read(BlockSelectSReg, Sn_RXBUF_SIZE); + } + + /** + Set @ref Sn_TXBUF_SIZE register + @param (uint8_t)txbufsize Value to set @ref Sn_TXBUF_SIZE + @sa getSn_TXBUF_SIZE() + */ + inline void setSn_TXBUF_SIZE(uint8_t txbufsize) + { + wizchip_write(BlockSelectSReg, Sn_TXBUF_SIZE, txbufsize); + } + + /** + Get @ref Sn_TXBUF_SIZE register + @return uint8_t. Value of @ref Sn_TXBUF_SIZE. + @sa setSn_TXBUF_SIZE() + */ + inline uint8_t getSn_TXBUF_SIZE() + { + return wizchip_read(BlockSelectSReg, Sn_TXBUF_SIZE); + } + + /** + Get @ref Sn_TX_RD register + @return uint16_t. Value of @ref Sn_TX_RD. + */ + inline uint16_t getSn_TX_RD() + { + return wizchip_read_word(BlockSelectSReg, Sn_TX_RD); + } + + /** + Set @ref Sn_TX_WR register + @param (uint16_t)txwr Value to set @ref Sn_TX_WR + @sa GetSn_TX_WR() + */ + inline void setSn_TX_WR(uint16_t txwr) + { + wizchip_write_word(BlockSelectSReg, Sn_TX_WR, txwr); + } + + /** + Get @ref Sn_TX_WR register + @return uint16_t. Value of @ref Sn_TX_WR. + @sa setSn_TX_WR() + */ + inline uint16_t getSn_TX_WR() + { + return wizchip_read_word(BlockSelectSReg, Sn_TX_WR); + } + + /** + Set @ref Sn_RX_RD register + @param (uint16_t)rxrd Value to set @ref Sn_RX_RD + @sa getSn_RX_RD() + */ + inline void setSn_RX_RD(uint16_t rxrd) + { + wizchip_write_word(BlockSelectSReg, Sn_RX_RD, rxrd); + } + + /** + Get @ref Sn_RX_RD register + @return uint16_t. Value of @ref Sn_RX_RD. + @sa setSn_RX_RD() + */ + inline uint16_t getSn_RX_RD() + { + return wizchip_read_word(BlockSelectSReg, Sn_RX_RD); + } + + /** + Get @ref Sn_RX_WR register + @return uint16_t. Value of @ref Sn_RX_WR. + */ + inline uint16_t getSn_RX_WR() + { + return wizchip_read_word(BlockSelectSReg, Sn_RX_WR); + } +}; + +#endif // W5500_H diff --git a/tests/host/Makefile b/tests/host/Makefile index 45b87522fc..65b36e7d66 100644 --- a/tests/host/Makefile +++ b/tests/host/Makefile @@ -299,6 +299,7 @@ ARDUINO_LIBS := \ IPAddress.cpp \ Updater.cpp \ base64.cpp \ + LwipIntf.cpp \ LwipIntfCB.cpp \ ) \ $(addprefix $(abspath ../../libraries/ESP8266WiFi/src)/,\ diff --git a/tests/host/common/user_interface.cpp b/tests/host/common/user_interface.cpp index f7061e38a5..b3a302df18 100644 --- a/tests/host/common/user_interface.cpp +++ b/tests/host/common/user_interface.cpp @@ -41,6 +41,49 @@ #include "MocklwIP.h" +#include + +bool DhcpServer::set_dhcps_lease(struct dhcps_lease *please) +{ + (void)please; + return false; +} + +bool DhcpServer::set_dhcps_lease_time(uint32 minute) +{ + (void)minute; + return false; +} + +bool DhcpServer::set_dhcps_offer_option(uint8 level, void* optarg) +{ + (void)level; + (void)optarg; + return false; +} + +void DhcpServer::end () +{ +} + +bool DhcpServer::begin (struct ip_info *info) +{ + (void)info; + return false; +} + +DhcpServer::DhcpServer (netif* netif) +{ + (void)netif; +} + +DhcpServer::~DhcpServer () +{ + end(); +} + +DhcpServer dhcpSoftAP(nullptr); + extern "C" { diff --git a/tests/restyle.sh b/tests/restyle.sh index c50c5f6413..f2961d63b4 100755 --- a/tests/restyle.sh +++ b/tests/restyle.sh @@ -13,6 +13,8 @@ test -d libraries all=" libraries/ESP8266mDNS libraries/Wire +libraries/lwIP* +cores/esp8266/Lwip* cores/esp8266/core_esp8266_si2c.cpp libraries/Netdump " diff --git a/tools/sdk/include/ipv4_addr.h b/tools/sdk/include/ipv4_addr.h index 8d8747866e..e48d5fee45 100644 --- a/tools/sdk/include/ipv4_addr.h +++ b/tools/sdk/include/ipv4_addr.h @@ -34,13 +34,17 @@ // hence ipv4_addr/t is IPv4 version/copy of IPv4 ip_addr/_t // when IPv6 is enabled so we can deal with IPv4 use from firmware API. +#define ipv4_addr ip4_addr +#define ipv4_addr_t ip4_addr_t + // official lwIP's definitions #include "lwip/ip_addr.h" +#if LWIP_VERSION_MAJOR == 1 +struct ip4_addr { uint32_t addr; }; +typedef struct ip4_addr ip4_addr_t; +#else #include -#define ipv4_addr ip4_addr -#define ipv4_addr_t ip4_addr_t - // defined in lwip-v1.4 sources only, used in fw struct ip_info { struct ipv4_addr ip; @@ -48,4 +52,5 @@ struct ip_info { struct ipv4_addr gw; }; +#endif #endif // __IPV4_ADDR_H__ diff --git a/tools/sdk/include/user_interface.h b/tools/sdk/include/user_interface.h index 04d60645a4..e69821b372 100644 --- a/tools/sdk/include/user_interface.h +++ b/tools/sdk/include/user_interface.h @@ -382,13 +382,17 @@ void wifi_softap_free_station_info(void); bool wifi_softap_dhcps_start(void); bool wifi_softap_dhcps_stop(void); +#if 1 // dhcp server +// these functions are open-source, in dhcp server, +// which is now moved to lwIPDhcpServer.cpp (lwip2) +// (but still there with lwip1) bool wifi_softap_set_dhcps_lease(struct dhcps_lease *please); bool wifi_softap_get_dhcps_lease(struct dhcps_lease *please); uint32 wifi_softap_get_dhcps_lease_time(void); bool wifi_softap_set_dhcps_lease_time(uint32 minute); bool wifi_softap_reset_dhcps_lease_time(void); - bool wifi_softap_add_dhcps_lease(uint8 *macaddr); // add static lease on the list, this will be the next available @ +#endif // dhcp server enum dhcp_status wifi_softap_dhcps_status(void); bool wifi_softap_set_dhcps_offer_option(uint8 level, void* optarg); diff --git a/tools/sdk/lib/liblwip2-1460-feat.a b/tools/sdk/lib/liblwip2-1460-feat.a index 094ce1a47253cbeaa4d053b97e3e6deb78b5e7c5..3ba746cd2b561c14b75df4b4f9aaf4ede0b73f13 100644 GIT binary patch delta 125106 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 delta 208290 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 F{{hVK8(jbZ diff --git a/tools/sdk/lib/liblwip2-1460.a b/tools/sdk/lib/liblwip2-1460.a index 48fbcdce95c1f9d5dc1b35245f9bebc937426639..3b0c847bc06738451981bbc341d862586e496af0 100644 GIT binary patch delta 84647 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 Srg6K8#VY1+{h{)aqW=#)c9D$$ delta 169677 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 Jir(ba`~NNOyb%BZ diff --git a/tools/sdk/lib/liblwip2-536-feat.a b/tools/sdk/lib/liblwip2-536-feat.a index 360564bbdce5beb9903b0e25d87a793b246b0390..b841a47c61a509ed312297bc7fab158073e379ff 100644 GIT binary patch delta 125141 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 bE7K$XrhFM^%9RP;_JtnH_<3EK2Xp-&gsW0R delta 208465 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 B{z?D< diff --git a/tools/sdk/lib/liblwip2-536.a b/tools/sdk/lib/liblwip2-536.a index 013f7d53ca51df00e68300735364972ff56d1990..9b2f8725ac4dab00c36d5c4b5f3134c89edd4889 100644 GIT binary patch delta 84819 zcmc${349b)`YwD<^`3NhI^7`)30cWP2xK8Z*pmQZhp?{_0)#~&gb+YwX+Q^e1*4Wa zL83B_yC`a-qJqu{Dmvh}ub?<8Iu7nLd=@XJ%HE_N`Fj%y}_F$ZLhj?DKz?!oOiq zdgqG&PwADnMOflQ(#Bu?{|ANtk0ok5u~Gc5Q`m@P-?CBscgVS9lK4;L>U5j1k~<+! z{EEU9^q%!!Q`<)2e&FPPpZ+yoxc>u%|C8|lqAdI$y|OwG^VK5pUs3GyUyA=H^7g-0 zcqfkjFDU$91wj5@{|@qJe<=PVEo~J3{|<%!L*%#tkBa|W6pkho(C-)j9g1IiwfNtl zun4~V;r|vTyzsjCE$XzZzxXXmv=@p*dzh#H7ZlM%;%`t=-7SKY+~5DdMp}RWp2N-_ zw$x>7mp0WcS+U~0x`j&?G}SfLH?L}_ThY|AbVZ|n^lML=TCYxeP+v9K6Kq`?%+|l!=gn!&NzC0d zBst#JIx_M3J+-M0N2;Ke9u2FSdafu|vs`JP5@R|n*;AX{nC@?t&fy1aLXZO2?KxaI z^C_39pttXKCGQz_`aV~Oq$%J^ip06({HUn3wKhA+UedRBnZ9C@D?fDTQ6U6OmE$5r zfmk5sM_%&FmmGh*Awk;my-IAHG+d4(2w_*OU49PWZE->1)$dD^UBb`7j!ko|hum&= zENyHNHtF0Yh0yLp6k9N9CNI+c6yn%4M;A9juJZsVCRZRto6Y#06HBS(cHDr7Hn&Ug zVt3>tb%)(%cb&%w(!Bu}=MHGP?7J9uY^(?id#BJiFwO@kc^)zBSqY1YKfp@C-XmcZ zu+45?7fZ`_yAvS~BZm%K8a>mFLd)SuQ@#`-6Ao9}4V2fw1&2HBD&if`aW zYGC0>K)yVoxba}@!hH!+b9?%_@1fqiaLH5Q8Ui)psX`t+{S;#tF%>Wo6ZXpl<|DPdW=Z}Trh5lWLd_g~dF;Y3-p8{sB|3PGNjejS6UhO}K zLT>S|Lg*@gKB6`IW1+LsUy5^+(Eh5QPLU}~%i*2y+h8#4e*+oc=>GvRHu%H9>;2QA zyUyQ+^M(FLkogPz`&DY0NMWr%3z9YdR}i||{{r+|{Kar`mH$(iZ1%5#WTpRV*hgwJ zociX@GCBMbBF^%aAh{afI7BS-eF)dO`rg7BW#F>29s0NXM!R+BLY7{$;eJ%rE?%`_-~eVIya z&e>Gjj1)xJSA?RK2&#uHegiBH3)rRm5~v56+ki{PQ(XifMOeTqeQd1uAlq8NXK?Ni z8e70`Fy7!cq#nqWLD~oef2Lxd4BZDVAvgr?2fE9o_rWCxYutUo_K|7qt7*YxxEdHL zRf%Q>*}Mb8rDrU{x(3r3HcAHWf-6PAZ}j#wnOgJ;Ri;Y!9H^8BU!lr$sS3J(a5eH3 zm}zhWf)nlfCuy=E{&HrbMW$upS}C-_Eo*K4}SVr{NdU)x3AnsSp&WTul? zC^tbhnTlg#y~kaou!K4@iZi- zWGr8`nCzmL89Ftcl`MN`c`9^TdO4*%v~tBxPaj~gm1MQ;BAp!_!86&pwe9xwM^PxU zrx9D*?nW1R7xpq2*fA5i?9U^1muWPSV|DsRNDQZQv_ivak#z$s%0$f@gA(I`ydZxA zPy^X2(L}9;iBinNh@YqpQ}HK@F6S|skEOFK0^2}g+4dtNC$dmJmif#%DHrHNQghcR<4|+trsG%39^eJ>$(MC8^AMX0=r%g z*$&9UuUmw4=xzv4nzFDE`42+&Dx5a0iY{-VyUSzJ$t*$_x$g%zv#&uMh>OVl1o1yX z`2n0FP(ozeH*yk(t-UC?tRsx~n)EK#kOYj29u&0wm4;MFye7Lb(^*jN0?J;F5Jc$D z0eU0^oPi7a2a!1l)Cmegz9&8R0(2XLkTpn)>Sq0 zY$TKfZTX^+vw<|%HU@395HkS9d90GFpmG_=sO%SI88se;;C>3LaDwI#3jYRt43wXV zXn!$MmnBHsg=Aw+pYEJ1r`TdPh0*F=c4n(fHJkWz)`D$@ojjJ|yDaD~mvIufM>@;F zTo00MyD@lmugAJUJ|unY|JwF>MF=6^+2H4Nug8cEzMH|%=y5*6$01_Rr9$or%UBk) z8q(lO*Ck*+Lu&C*V3lvcc`~fRTW$NCTsc+SJ|kC7Lj%i|(;c>CsOM@c1sh!cb~7&G z86&}OMomyr!$w?Dd@opL^&%wPy=9G%`=vHp<)}7)ALQQ~MW}7Bg;huV`d9 zqQO$vT>yT7ord4CROHiQXNWpl?w4%2TcndI-w%>)K0n%@(c-qqEEdFQ6v8l2Aq#bj z?0p!r_2AclvKO)QZ;{m$-Vec@RAlLHkrOHV0Q_52ypzp!i=4wI6F{UGP&Q{c2%CL= z%vTT$1Qmvtx2&f0qWw^9fTSK|^zp4mAHM>E-+_#J-Vv?mkwu6gwhI``c7zZ%wy4pah{CwMl*f_;*!U_aBH>ne~N;DAu$Rh+m<8K*=p!oExU8* zdK;d+YQy+jdJsYVsl-*0+#t1XuR-F54#${0#;0pAy&3&ME-_5A<<)>>8{-?Mm&hWT z&H|-^l;xh(0SVb;TAqNQaiF}hkcJJ@WzTW=nks$rBUtOD9GxnA(wZo%M^0op!u)a3 zuyWalVdcF?G2U>g7VzkzDae(~lTMCl`AoEJ7~&W$EKjQ0>s-W}&*Tdbes`EXyW|R% z8SXe(W;~dzY}pB?Y z3i^4F8j;7KG*NSEL=KBSUom?hxtKOPAnF%sKLFTQ6~jllOy^tBm!JwH{ZT)Ga}(oF-65G(@~cY~EA&?MODw^GO-)I$3r1Z@W8_d(DMx)DYTa+k3^#%$8q z$S{zI{xdLs&jJvcAlUY=fthYgA#FqK8$hD#NSqpA;&KF;UA*fI$eJO$Mad?sQK=a+ zGsnvKfKS;u-&R$WA@Z2ne?h&kns?q#=OFMr68JOS%mlNMZt4f}WMa6_n;fE_#I$8J z?GXr;ZM)*5v7gLkYz{LgLH$(09988KLc}=GK+ak8+|HAlv)=H`hXFNZ^@c_-kmy>1 z6X)|a2#RK|0%Mi9oH;%t%o_|Dn{Ynu>2%eY{Y9TeoGtb^=#d+g1(I#KNWSlGcB4I+ zcR?~9sf`3xC|~y!u?{zZzYsKtO%ua_82l$jh}got5!-GI?fIDqxZOyvW3Xq7LLK5V z8KFtLaAFj-;_f7zOnk^NG$ProicqqeD^<$PnX2gznaMG7hH8s)O-JaAOqRF^SDnLt zGCAfj7#=W%JXMY2Wt@^yf})4CnjIPbiE)bUjm&iW3ZjRQvwJ}W4CgGbPMxWQF5W$= zb_^=-gNFWMszDN*UOxLisCvDi1DQ`bWF0Fup{2Ji&a7kRAAgM`)0 zFb`w{E>2@&Y}C9B?*tOnY#uxe1-1ayFa{y8pNsWBd?z|PDe$^<*1U^~AqAV9!{0*@ zkpgevu~QYA7Af#Nm^c7ZU^k+ap@>MKb_{^6sMKB?1#TJrEy zNR|``x68PiDM*gwsddy`13RR|xz3vNFeH$YMmTG}M1vzG^>U6_goHPuN;-?-*Wf}* z9w&Xn-3TWIZik1DA|lD34MwmeK>nWa&YF8+gp}0BS@Si*N#5o9#IN0ndg=+;OaJLx zUw6If4S!suS9jS>c6Q(~RR7okj()MDLK^0t%#g782d1E3>7^NoT_m0oZqh>f+|61i zed|XtX(16WOHqCKmu->KfCc)|BAMjt<`AVJEh$os;jvIZdXY0!)V=&H>qQXwt;zL> zl~a=>?DcFd9UAf%$HHdNNkK_Zsh4inQuKW<*kh`uCe4VQ>6nh(l=YNR6Zt8bu~hAa zOmtYqFUvC;5=p+Z|J-&0N z%7OZ+xBN-N1{pqL_%M@DF)o#{EWRN<<&YHR45axfqe6yLcgVpD@lK?m&}PwDVF6f`D*Kf6O#1yKJsC` zLf5>J8GYpxsh~U%d9Xq@+Z;PI>Cp7}3j!IfM`k(oaRX(#_NmrdKO<4k7%ZKU%LYnK z%8w#f4w6G8>>M5}4{G0?QP81~5_w^WbV=7sLOL8aslWV)*2VQ#lW7Da-_!?J$#jey zcqsHWagMe}>c`#oPWt&(a-H_1Y|WZi(7JJPoL*EdZ_?hD@E}$Huv!k$bS9Re*Et-{ z)+-x2>qow_JG47Az20LF>FbBedhH%thepIc4DCaE&SnH}s*#=bZN;$;?L|{Ecereo zujyY8mltTq&S+)G8}#-X+1qiu9eL1S{9R0ES66!bvBh@g2w5eyEtDj-K0U*u?;M`u zh+HyKUMls}gxDCz{VMWtkH17e7VGe}J~218wQ*{U9y40*OKw^)zpj4SvK0&JTN)OM zWexRsOuu?n!@|~io)rDVE8>!M&lp+N8gp)}UOPrEtXZ*WQA2aX!n(z4>*^OSY!<^O zO{$wZdAMk7Xj!_bZt>ChL-mm{v8mb?>>|^}tx!?>B!rc<|pcJJ4ad6qXws*6K}TW#t)ZNuA1tE*HxLz4kHb z)?XYeXX)*Y$?n#xJ&F2&adJlds@3!1aozIzRp-I!H4Tk=Odnqt{ef|^%*Ed;@U%le zF-}%z82MVUx}|A#OWmSI(cG|db;GKbx|XHO8z7D3j+YfOcj1cF^OrSv&)56Z$`&7gz`*odw_r)b zg7fsdYURwNmgc1mt5hiuoiKj9Xel*f>!kO+YGIWwmkSVAnGee@IzLZ4Yd2L)`N2FDas>Jm3Cd-MP zja2H^)Gu3&Uv?HPTGh~^{2W!IKQUQu53OowUenNAXC@^0Gmt)Jik#&`9#p*<32eSB zl%zi~MLuI+T~XH(SwB_2@6b!GkL#)je(~E|pFY2*p5Eq4*RN~~l=Z`Gp$<$lc#@T7 za>m6bx`;%;=o&-A5{omvx-rq?HYRt{H+8XRd$<6j&M3Wjq$5dx{~>3(e(dM?>^Lq= zc+iLxBlP;VxCiv6ktpZgnf8EQxg##~`arNmZ`u)8se5k@)JBf%h?^(%BX%vI2f9Gz z-d&+gedO0#P>-1>(`AO4BV}w<9=r0x%9{ zMAj-OCgDO=%7|lY^>>%Z969lZr7~&IL_>*ZJ~!jRd!_`;>^zk1$p$XOg>uS>V<+oV zmdc!zDMm2w5E#sKh-0Vd+mOQ4sYdW^!{*=2FbE_c6E= zPB@fD^YwNFm(DjtJWI36Vt^Car*RO+{;DeVPtTLZQ>Um9BaypfaOx0aNGf+4rRo#ro04Lo{JNXM?ut~ zj5yYm0}8o}XWY>~x?IK&GZ_kGBhS2@KxCe9@DgjvRgpr_TZKU1tiZU|xXY5pr$d^M zY7`i8Y?GnZ&6M{vSlpl*K-Hx=?5nyopbjp890!U@$O{z|7vsWclo7|8@@=NP z4OjXt%@%coDW{A$+R|<}<#a0(BwKL8aSw?0GjR=)i8TWNQKtHvD`d{p^pMB7Z!Kf#h9+HZ>7oOnSHooY5xEC5S_ zsA84jZ!K67L|3jdw3@(@AbQmlZ39b!D6PfN+6|Tj(Lz)7Dp(Rk_nM+_!IB{Qw#7&> zO+zaJK{Rr;VQU~*5=7ff(HyWOh~8Xnl*BTyB#7K=4AFY9B#0{37)5w5SQ11xu94N@ zSAki3Z{kXlz&ze1&NA>Z>X_IGk!07!p&F0bedEDP6L+#;+^q{)gcA;$kUbRSGeGKx z6<2OB3JxJ5kx}pV zTJTdA{3i>3!Ge!i@aq<=x~`ePhZgx~7HqQ_>8kvDOa^UH#944B3r@A*5)1BY!GkP# zs0EL);29Q-pWeb9xo@@vTxr2KS@0eUe$9g4vEbtt{D}qs-GaaAz{vl1^ zrfOm>INpMjEx6EvODwpL1rM@d{v;;DW<5={1n`HdXq#xV;Efi1r3L@df*-NqXD#@s z1%F_{;lEp$A1&B}XU0({axECoGdtu}7Cga%&$HkQEcj9jzTdz`|NFoa;J^$MO*q?v z)$d|vY4OdmsLoLfe$Rq`uwc9EjDEZYr}OcC)KGUzK!pVlx8O+@TxY?{EcgNo-fF?E z7Tg}i%>R8+2KaFcK4`(OTJYz@<`VmqMgBAKYIb7GDQ@6R3W@-+S#o@-ly744$Oi5h z{|gzAWd!sDj?VY}C^sXIwBYF$yxM{UI(5XR z(FGQ~#G=z;k)LnD8^RW)%Pav`S@5;QrW1Eq@BtSwycmxE zCevh5T5nO>WWkpan+aTP!Pf#aF;>m(7X3e3@O>8j!^ElwA^)$EF>~-PF>h^g90Lvk zvs8Ydyikb+Ul)yHfd@3vxL#sYCt$&yEIL^hc`h;D)`O@}(BM(V}w;aVCu5c$gSfbNKY>)6ZMvuUPOufx|MB>L^P8nZz=Q zQ5rnD0*8QkXJ2g589;0n^$-glNo>X)M_i=Lh*=h$xo2=#EU-jqB<^WMxRBUvbQ^&~ zz-)JyS#+)^Hl4W1f^Q=>K!M~Tgnc#SwZ{=ZGejQlmRnw{|83$dAi1J76_ z`ymbwa0r-e0_CPo2CwV$;#x#6e^IAsz-33L3@rv_ z%KtqK0K-~%oB?KzpR(YC(Fo8vY{5r>8FwJ$$1VCFTkw|_{jV+hKLUrNiJi7Yu%pbB zcQBf4!C4kuWWoK3(NK8|1`e5c9OY(aCR*@pVpIc;u&84MgAt7urDh90pV+L9^%nd) z3%<;Pw_EV_7JQ2Z-=?rR{@-H>c))`9TJSy#{*whCvfv{Y{Hg`NXTirU_#|INjppo2 z3;w}^f3#p58c9^&Wx;V4%x)XiNwwe%3(hyO%71rDK$!*ivEU&VJk)~6T5zoe&$Qrk zEO?OxpPRt(->lbFmVmVu9Jb(#EcglwzQ%%YwBR-i-etjec3>=BcXu#YHd*jK3*K+R zhb;K8!jZ98%Apd!&}_R3Ke0}VJbaaW(FS(YcE#@6E@#{2q#JG^r+2+Uo+k?;+it+O zF`W*f3qaZhfaGzE|YS8|6HktkoY_keC!1--b6hoC`U0Wku%fkaH8lE5QWK z8+H!9QM|!|FS6jvEchA=zTSd=Z^5@(@E-H`Qi8DSJu1$C0EgefOJ* zcKy+zaYd2$pOPbO`mAa31zOOlm)!5l(`+_@sxwdX+geY2ou}p4^h3|c zyl&}u^2d?6lG(zMd=7rn!F3*pPZAjB1r5@Zo|XAsD$Y{B6Y3`rJP(wi-}9_Y)z>^L zllAwXm4TEi=VH({16gBHTkG`*Y;{|EmaQ3e#&2P?m19xAUU&To>f6pzKLT}nM)h2a z`XPNf)HP|>H~mTG75;Qqw0AAh3M|o5?D`StcT0embhHx0<5P=1$Mk3>O7)CC!z+Fe zY*qgj>Rda_0~J}+N9!w~-eve%>I0$oFw}6t>y|6NPt{-kvrO)`@GP}c2fE8%L8sfTXPK;p`V^>9z1*UHSbu=(2hUR9 z1@#tbsQ0m`pVUu7z3}6+)RPySai+qe9_!F+52BQvSijT3N)V5M&}YWxf%=0O#tin< zcOFEs;XT%0sV{?iw3G+7{^Osi`Y#7jY-7(-d)VT|V2jmd`jA61UtX#&=H*WP8eH^S z{*(|%c@r^~nAxnh#Q2N;0d)Gma8?494MOaP+C0!OP}J?up$97h&ti?ksqf$IPK@{Q z;VdMYDYolFo|j2Mevs>i$YzSuociu(WMX{xv((e{Yp6c>EcGI%zU?tzV*JFj<@yIu z4>y=rOyi;m{E4Us5YlNL^B^a#B*SA7`XglX0LOx&nOh4PGZ8%kc)s>3CWPn_4dX|o zh%>vx;Q7mh_yYG*^Po8%6g9{%-J_9cWK zBD{MOW27??Hlpd=aaR0iaS!!oG!a~*>D+pjy|$}R04T6|(3uR1+I!rv7lz0>u7y2`a`NqxD)RO8m5`Z<-PBj~3$6 zD1&R%QGUL_%vG9UyYD(PBg}y;nsF}@iN>MoqA?hh(1)T&G|UA(#7XQhxc+WKaUL}1 zwqEl~s;{jUH{$3_^^lCwKbYuBb>2Gz&*1F({(4uobN2)M{6Sy;lFT)C!{F8ziIJyX zlKMKQv15k5BH&7ntQw_#7tAenKZL}6_(IQ9mdG6+@X86=yQi08>^^*v=P8d|HAj0k zTee;@F|0)-IA4*ex;1mn__1k1X8ac;sVKF#<)KM>gm= z%bXL&Wkqb9F|8cdMN?8Ou zd^q|?Iqm>5Kl1))*NW(VA7y&UA=l!_6O&wZF8%%wT%iutlDSDKk>ek@9(3tn-e{4} z`vLkZZgS0b>78d;Hn@jV`}FsNmoX8&Ue-PN^`M}q!S}MvXYB5{T=C!iR@fP zCkF4gxCr};BTw&lo!b#Lf<)dr!v&7Go^t8I?H#E_iuWYlt?BR0am7SFXm!Oo^q1eT z7*u(l@FvUdp_LXn6VfLN` z>cyvAog#tDU7AbRT<$Y10BZ9i8(r=>@ODE?$e}t#>-g;C$TJ&a>{%&s zZb7Nv5}SHTzkhX1M_VeMo76dSe02;O=KNRAB*l$uBCW6ZroXAjIAS_HP>%I?#I!W& zC-3%K#YvIWd;B*iMx9WKuN?62ze1n?bceg;N__3p?z}QN?2^a6az`Hf$}=&f-+hZW zYOCDH(L1+zXV>W0j*B}ZN9L0we;OCJ=o$UrS9{F@)Nk4CS{PY#jklu@mPeZ6ldsYu z7u@76b?AkGK!*h;e#xvrATlcu|LJ6wf>R&(vDat%Tpp?Y*xS*3%OfR!_da)2uU;4* zHPBlbXkHi}X({rB-ZTj}3cF86zI{IUP)tla2OJzf zpVl|u?@rfWel?goe%mYcDQ^ZptWW-Q$Jg~qT7Bv>^__pVC#H|d_S+L58l9csDB6?X zOLG>;iUfT4o0qNC;4?K}f3H?!7lq?evkMng+so%WQ%59f&!y{CuLZk>|9W~qCTf4* zptdz$X1#E_tX)*M$I6!}&dx9m#>#?>vJAV|-tEDDn@4Tm(tfIj6GL|U7u_~HHQ^0a zw|~)Z`>4%Z+L!H!!?Lns^NpU&+xNG(f17#f{<}7B+VpMWO@p&j9Qk`s)JQ417i6}7 zd&%RP^E(l)PI06bjJVD5j7>hLi2{$;doXA(2tK2Ufe%F<(zcEjMb}2k;uj6joLS=g zG0PIWC+4L#K35~MUwl0?vn4H*zelSXDoS^pK9(I{m{Xv&W0Ao3ba?$ODnvLxW)_VA zYtK@?7Q-Ll+! z@FBTen>Vjz@jh+qQ^I@6))K~i?g_^1Thl{nX7^m~eRPiW)+oKOw)J7*{o~d=5j)VU zdDBXYS~HtkrhV9b%UT1+;?RP8=IZCIUo^P|yc<`>Qo8mXbJ}(FPx6}v2*Vf11 z_0?lXsFOjc{($)DLYn7tMAdzSq1DVE>tQ;cAUA34H~(>Yx5r~w5=n=jh@7t;tNu` z-CD7^@7}=3TeI6wZz|vPkWJ*LYR`>0o%OF@$~19!RmJvq7dVF^wbJi@@!BhF)zxBA zNZVR^dQncCH*C*tUp8ucx6MU|YRXPy(belnO%Gfre(_61MzzDfXiB$izhhBQL+8kT z=4Z6{N6WP53PiyU`Nc0Nlpa3$Ij?GekwptDp58pYqaW?sWnQ7!bWdslV#Gp3W)v{8b$?E({R?3H2$zNwB1rId&PL*kLTI*L^zdv1( zQvE<+^vHg`bLshyv@s&_)b@g0#9)`NH!h2iahqRj6`t}ckp_Cn+%G&M6dS=Qu8Q~o1 zEg$6HUzCY2=AQT<*gb!c1IA}oWlt3H5EW)r4QwgwT|HE!mX(xz+rPJW3UK#qJ#Z|T zSzBEcTiZKxQoUX7HFU?t4RSE*BV@DgJzaIr=>l!JcWm!Laq>aRdc?`yyk`5IW$mZ? z1|8YY$n5dXGQZP%T~?bu?r1Pe-lp$7795$nUFoGe%hEk1+57Lvc4TH{WzTgT@=o(c zwBx~VwM-iZX70!&{7rT?@vE>w8!lJd?RZj;uW|Ln6Tyq|A{#s~n^gjzPHUM#>wM{6zb^Z@=zR0{zq{!Gv>TA=;$*u7Y*xt48@(#o?o2waeNaxCY#hyD>yz z-#h5J_XUWBXAV+xKkZ@B*gad2ru&db2jdQKj~(}miiz>;fl>Dn_Z9TUlcqO*8cYfI zMrPdaDOntvMlI~c^KEsb0z507+{MD@fs4X-Ka!EYE+{%p#4iM6Dz!Pe7mM#NNLcvZ zM=3|1jR zAao_N?7_xpi@_y?l31bLWzvnfCWqRoiG9)73(`U#!esNgiOkH{dT=QUGv_zd-C??#!(f^pf|DclR-o;{|wdm$249W17g?RKca zBHwz98I(B+A?~ioXhO^=x1h&&BVx=L8@(1DE~{e3DMosphhc2L$Tpz`@SUoNnWz}M z=O2g|j+v}Dr{@*ejG3t-xjj>u&TPeaJT6ps%sEOeCa|h`frzQI(KoN>9+Ym(JjDcr zvx#1Da7>Op&s|TiZbqW9jYg$=?t>$-O^UI5u0n9^s^t1AT-~0B(3N5@R87_E;fuMk z>s8YTc+MxYQ85W9ALg|)UyzC2)R}LR+H78Z*cZXxz4;`vz&p{sj#c{yMDk9yv2h8{ zW6(AkyXOicgvI3ce5~L9MKCYSrs8XXXZ;oQRdZweed~?-YP~f?h*6I{fu*n0qmX!k$-=UYKm@ESN;)3yYwu>Fy$X< zw#$JuFv@6`o(thHwy|W3P4L7qWDJ=K)ZA5Y-#^wi7rv%>E=P^{$JrXe6nR!N(s~f&vmgZWAbdBVbzdJqCfz$G5TUKEAWz@a=*{r*9Za z+2xxJiQD%wBp%;2?2f33Iq)G&46T>?^3ui+{YbFYJH7JZk>vuB`D)dY?=~GNNhKv4W^9-M5za5lMZhPJ ze+0_ff%2AfTnTZo%nx-OpsWYLBHr~`8tfM2i_P6G2c0Dhh#awg&w z)-U}gm^J=N6iyC{aWTMYIKYxxkMm?%(v_R{l}k}{E5dI?IEs(e;j(W+k!P#-t&cg? zr{0`oWZU=p58niwW8pwxEH3hu~!CMq^ zAeJ9F0|(Fo_andm@4-AozDo5Km#mIz+sH@7Wh|LQ(A|rytNRw4in

5FuS{E9c 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 delta 169301 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 diff --git a/tools/sdk/lib/liblwip6-536-feat.a b/tools/sdk/lib/liblwip6-536-feat.a index 941543f6cbbd6ea95e7d44d88c7ebcc23d202484..956514dd1e04dbf9d6a7033879c75e58329a7284 100644 GIT binary patch delta 94973 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�_ip2>(Db2*^^>2>hZu+{OoN%%fB z)9V!OHP+X{R><@Uyau+1xK}f=IXWleMcERCo?${a?=mFt$+;y==EO%-mCB&Aj+t zVde|resjs7V~hB;LAR6Ta+-aNSPboP_)L6M%q`$@P6Pu^maF4)5!hr3Mw*w{S>mSR zj$(cv$K}ry&oi&ZEb&LpPvLQ! z#Q$aXd5V123OtSSg%KNz|1f-nkuzhAP8*B=FdV_i_;EZQGjj#_+KY|Be;B^Q$Q;J# zG>f0L_}_T^i>FW~abmvvckbqlN4}3^oS!idbaCYKO&#Oo@p!eFuag;O-heR6%qRF9 zGf%nKR%tTp*r;nMWtU|CqUwoCo7& z@mQK}g#s&bt%A-o^ZZ@c+!&7y%ng%+er@8}K6ASk#c&uj^W2R$;^B-g#p56|^CyV; zEjlg?<2-%SeEH6i_yRM2@x@y#ah$%RUB}n?9a6#bHyhfF$NMF|)4UsxdD!={+4v8` zA&cjk(=5)LMcEEd4nOcaiM~^qM7G?RC}=-@gIiv7H5o3vv_}t zUy8>;W^NUh**>omMoPRcrjPk!@jr&^tb#$>y-N5|LbxUHc)yvAvN6VakMw7@4FndGvx;>@OY7ckx3=-m~7_E_(2-ube5S1yBgwJW?tDgHn+lK zQ*%!|UKmtwAI}Ou+q%fYytd)U=9$V5kZE44OfpZyd$jm{Zz#s~3upZN(qK4#|3+OQ!!a(Kq#j6D+! zXdjRJuUe=BLUh_xCVE~0#u(2u7~Zj*0&^PTTolfhv*&C+6(19KL!R5u-&>q98v8l; zwtYOKdu=qphI*ocPOE{xkidO7@dW&bfjn1AI|syvW_2!! z9RBV@tY%dAGt3t#zoGpPVA60?e3lD7QJVAPd3H?)?}W#aMljHrn@5?>%*0&|u; z9o@ya&GH`c1LB9pkJB~7&zMIJ?L+amLF)4SN~1WB@Y~lo61#b%h{KLPY~Eo< zALh!ElP9i4+h%AStXz(tZ|^Cg(c-Wx4@+Ijc&BKSJRp8b{Gyn5;=BBh#9xVd+dXo4 zyvC6m@6p`^6~tl39X8{z({J-Y$r&S_ES@7?F1}0ra0R|htxUHMllZ^IuLQ@gj>mJ4N$U6Fzk-a3c#&0#7cX92aVv2bao8J% zt*|kC@xRbVn(A}^*2yKy^r)X>F8Szfq zrVTs2uo-{ExE&x5!|nk2HE#}eJBK%}yGD5>nJ(BB&ToKCxj)9l!~$9D`n#85}zfWBRRLyw#KVq zuJI@=M<6*{XwH}G|A;HV+i9ElIoh7qyvyCK@w?&!;*Z70#9xcUJ|S#{*(ZeW8a>A( zn{fiJJ)KivuE9zy9KR;&@+*mJiuoNlm(xt#O5CZ~_>qv}g4c((g%~Kl6y`$gz(P!r z{AmNlsgF7cqVTy{Mf_ z#Qq>Dj1-R*Poizc>?_iFCd^&40n4#e@^2BdJ4v?!>%%PZ;`ZW;#G}QF#esM;-N}nye~+@j zqXC8|@~}2=X?Q2>o?Nff_MF%weqVAvk@)B0FKKK4H*u-zJpNlnB^2Du_+^P$9WNZ} z!0r>F=91Hiwgu`U?jbot#rzV5%fGtVzBfgZ=Fv9eg)nD43yX29kbE+_cpt>j86Ux&ru`?r#-`hU7AOqG(4$!$aOno^ zX>4h{`f;|Fq)p<7!ldBuIq|CgE{VS`eqX##d{}%$`~z(Z@e9nA`G^aFD5 ztz1qGaR+fP8s`ZP!|95VN5fe#uQ;bzoChxNI!U_0l5pVke2K53D>ECv)5sh+3Es@O z?bnB#gNc4T&$s9+E{g2;X=`O4%vSiW@UY|@5q~TB-&sBnZD%FtoH!Yu-?^pnQ>Bn8 z&K6grZGmdh9nd<43nZtVxU0B_xW9OCFtL3s{n0+W((sj{2yeJU&QCc{F|)X!l~kPaaG!8Q3K{I zCSZ2^m_=-}S{xcsju z@v7pwG-rmPvA8+RdHsrbSIO@o?k^rJ9wi}(UnZH!_q|Y4Dt11U%XhnLVSmKv-5b&_#sz-pP};r z423Wk=xg|O$=M^`C;100pEsX=Bk>=C^ri9mMRELvDTd}a3HSUj4x8IPwqU#|Zw zNxD(INW4sZyLhd5gLsqpG1_LlUAzPKxu5uZ4{yi>Z;L+^e~? ze82b+@#ErW#D(Hl#IH5?g08p5tNZ&Tcu@Sg_?Y;l__X*}@gL$?i{h=EEKZLcJqa?T zB3E2RTuWR}+)Ug`+)>D9&zqB7MNKhp zR(A0&;_l*p;(_AfL2NZ{J(($?*4h+9y6P zJ|X@={EIjxxp>7(iFtR6+aPgq)5y`)6+6FhN#T!%)C@PW*EtxlCZ6vPk?LV$_TAzp zn=4){UM^lGUL(Foe4qHi$o;~F*(w!JiJuYwTl}*44e{GSm9^OJ-$>{O@h{?YV%|3B z))il!EpoazTU=4h-w1NkwvUYeF?0)_sFxG>he-V}@mTSAF@IUewRf#}u6Ths5QqIq z+3tNXiU(Qsb22(UElJOcUlxZwTiL{4Nc^kd{GE8^d@rHj#eW5j?m~4+iQ>gh7iR>c zQ0-Ti5c~9TYuG~EUVNdL-Tt`zQQ|Ab6UEcSGb2aGm7Ao(7cUdDdrCL6jp8lh$HY$t zeb-_AUXTzw9CA&3CjLtNt(bis#;yyWGv3b<|4qzpP+gm`lEuc)A8=ai4-BP)dF?ae zLC*BVoOE_=$(1vmTe3e_$BS9m4v9#Ao3H>boO?+M)e&61ny6DETsJZlD6q*Ze zZkSWLBRg?&vuP%7C+;K;e^cDr>=k5;O^L_G2XEgU&#!g8WX%yT6fX@j?uqB8hn+ZB zBTohUKFg2SdR?;E5t3V`PsOK#*yp&-HnCK3bqR4fad|O&!f`i_wh*@ycM|syhus8X z5jYHv;?dR4P)QmmzEV6@JVVT0c-#WrCSD_6CuXNR?grEyrFgZ2r#*)kq~aCv9`Sp@ zvm3MWefH7gCi_|Zhxojhz2LYzMsvk^;+o=y;-=#6bW{7AMenE(F8cuS5HY*Mad&`T zD-M4=8tcwsj>Ol{4Wjru@qOaWY1nBlX{%Ih6YmngE@sC#ZrV@9Uy8pGvs)aOA1iI< zlP1*_;B;|$agI1oTvNMqEsvrFB7j4uMw{oZxnA8ZxcUT z?B?F{#f7kg75CT7<%uDLPd3F2$SGsM?N&I}jdmx{%~fIDMxe}ja!h#wKNOBy%-SH^Lt^%-6UMpzFS-KE9(LRW2gU5e*2RyCPl`{A*&mO~FDWi3 zE)V-IshU*ei`kct%V{INSbT~2GVus8JJfNv3bM<2v+vzhT=0DHGV!fqcEaNt+9rNk z{HpkX_+#;ZLr2d)?|Z56$`#KbNt`XNC}syhZh_i~FBV@SX8$_w-n5Clf6x`eUIkI+ zFjL|;i8X(%!~-!q;&E+m6SFrS7k|qfuK$0eV!!yX_=xyh@pob`qj&~M;xuttF}n4^ z{iA4rLw%`eF1|qAQQTSFOWapHPJE@9-2+AQ#roe=REW9?atpLZ;_NlZ#h(%vieC_i z-D%j0?U6Y9Pj~Gcq`5yi9FdAI#q5vBP4K&zT@$%@x;RfB)N$T#jl886MszCjke-v;;+Qt zio-7xTK>PG{Wv!^4f0$!VsZi`v;tX@R{^6G}Z36a% zcWM+?UufLt73+QjkSDi%t`Qt=A$9pXT|Ud%3p zT$|g);g>vZUhfvgvHl+x6>x8x_;YdiO;DTogv3vY*)fp2wJF9gM>dMqI8&T0W)DCy z-;x?g1$zT>6Ng_NwH)>W=u z_o4!R{z!bac&2!^*cUGr-!5hkZEm4Ainq}0(1=6$wOsQ{lEki=+{Em)&6&M4IiC=- z!zLF`7MB*66Z^SRs3NW{t}kvOZY^e~P;SQk#KXj+#8V?jufG{mv0Qwcc#U|S_(Abj zarli}yGcFM*65VP|s7cV2OC9WrK7M#DSa@_AAp#pI) zabGbzvU0PzN<2k8UCb`6T>c92ospw$dbd=BUyrqQ-XihG#ZQUZ7nYmBTVi&L<>H@< z*+Z6#pQ#*tG`Dg)zc#->YV)iwZXs?hE)aJUvnwsv&M+~1)pGG`#q3}U@o3J=q=KDo zxe2xeFLf##_n(wdq4)*y>*77)ed2>+cGcx(^ItJL?Q(H09USc_-k|9!;$rsY<>F1n zt;Oxd-NZe`?CQ(4bA|Yts+hm4xK=9Wi06yhO_~SlWhl3v1 z|9w}04~Rb&vsbQI9uhE|5&tFrN1RfvIKPy*j<^Br$MV=DeoR>^T8l3fcNJeO4!@0? z7dGQvD)HgsE5s9u?R!&;3*HRzGV!hA@Y}dHv+&!v=0_ywaq(;7x5Rrx`_WQ=C>7t* zc3<6h;-AI8iO-8;SQs~L1#zypzPPb3g^R?!!~?`b#3RLH#S_I-#EZns%y_4PA4ZUh z)uDq`UzM-w?~wRT@hjrj#P5p#BmPSKt@sb|c`>^_!&dY?4&|dl=tkmZ;8^yPYZx=rxepvj9_%-o6;=RsX|3j_-e=0sMJ|X@|{Hr(x zPiVI?rNouRdEyqZ?%6fY`vaM?HI(}TI+lrJ4yAKdj# z`Fx)p$GL^tBmP``OngFoO8l$%4>5b3bM2QGSB^Y9d=lnKMFVjYae=s-_%iVb@fE>< z7vu552VaSAE9qaHfTh44UL2mGOGIv+2-|HAm6Blm4V%M*sE?J2Jh~)opIOi1A8PSI z7>B;;Fy66on8FXyaly>tI~tcR93JE6mhP1NJl`?rA&OxHudcC~IJD%^&h831S|7F# z&1N@%?UT4KY5NTGdAt#JA1^&xc%E|2vH;p_LTPxGH+&D42pL6l+%qf^;u6U_Al`p&7Tmin*%&mQ&nOmE` z{>?_|N6p;YyJ*{Gd&K+1>@&~h95ds=`!D`WW<~Pa^Lr}!G3;@caLWh#*$9mt>1CMl zCp(Y75zHLyNH5>a#o!MwGEO%#W1ogUwwP(pBL2Xl^APc<$lMa>u-7WMd{fQb#y6Pp zj0=BAkqyyHEzX5rY34%TW#&TjcZ8XbKT3FynDN=6_k{Ra{-h+6xYWG2m*&&<4Kts% zd(GA0L*^Rr=i;x;eAe>bUba&Q{?%L${@cuFVF|ppn8PpIcoY_Rg$B8GIXCQu^`FeORf7G56u&~5D z2VN;&C*EM5i=2ndE8!=_h32)0?-IXlUWfQTv(Lg|E8GKrW!?yXC+5AuT+pqE|7Ct0 zPQpQs@h4#34@|!ZR}fb*zk+x@^Q&;P6zqRa@Gc5%tzs|S#e4wnWj+iKHvbHdGkYTp96q#2<=35q~NEPJG5(744j- zeXM;R3cNp*RnW0>)# zXmq;xM)4vsZwz+%cbHpY+I8m6F#CLE4*M*4nl6L=&*S;OqeAFc#qXGT-2TwaL-k=Z zKD6|{G~)v$@4sez2;lu_t_GhqSBE(h%sBk9`_z)y|18u&Jku(8#ZXaP!^{hYx@H`? zyk_Q>a65B1xQn>Ac`)Mr&12!g=1G{pcMS`;pkhNa#dF0=&A3|eZZmg)SBnGjePZ5y z%=VejyN{ipgMC+cSt{N%b8YsTyTb>}J>gHyec)r}e(-u*-wHfdzh>qk`91ML^9IC^h`$m4AU-RO z;Sz}}um#id9%<*YX8$2nTwmPW{50b2&CkJI&CkP^h)0UA7GH1XIbu;M z9{;g)yHQwW74&-XBjRVwuOWx`Idj@K;P=dX;6vtj;p5_;#Js_o)9%Imy;3+LMFm`H ziL01DKtr|6`{Bmo3(Q9m?i{FF*4JXHH8$Yv#Gbe_0A|nt3AmkD14C-ucXl>95TEn&}Vb zPVhN%cbGRgGk+*tL0sKD3h_pfeQzQP?X2P&xVw2OJV-oBJi*KkY_2h15A#Om%Pu0`FL+dFj2w+!}sK{D$~lb4TRtGZ(;z&0XNH%si5w z68~cE&V$JxR_FzLcpJlo=mVyhdF5K#JPs~zo&r}f&xLD=8=2Yu1?GkDh2~{&SJ>yw zSQyRoBF0rOU8F5E=;Rq;FKsfh0v ze`@wwaoh^i;Zx?B@UP7n86FE_|q!r1ROd!<6SVjiJ^JMD{p=qt}3o= z-ivq>aT{@G^8w`a68i(Ja0nH{&7Z?pn7@E0i)WdSBR*fe#C#I*mF6Geb>fZYUl8Z* z(^xUzV_~~h`~g32=KH!=#e2*ti1SuzZWW&WJ~o$wdHXcu{2>P3K22xCKZ<`d=OBKr z9QHqxSV+hycB+{7QoEcSGvBgRH`jxCTQzg&rsgJaTQkp=UBtc3ozVNX*WVT3Vdh@& z7&A|!SC~h`bLfgVCtzzW65l3XD_(ELQ_S09=BHxYV4n?P!M$g#A|HNP{HB?w%lE{* zubR^~Mf`K|F>`ao&(f7~fdj`dN9Pj7_Pw%J;L_!o`F^junG07(+|-PDd%WM8jpo5! z#Jt6taehqKPkgC(bZG2nS{YuLq?&yeGNq!DxTd)WavF(w z?=`my&uksV-Nk*xL(KhB9x)mAYGo^Bon&lb-YFE@`w4)4QeJM=m+ z@55&Na>O^8$HRqmRnKdK`Fp#H3fS!8eP&+Y9Wocdyg!>0(_e{CihmOSAx^;6mYbIM zYG?BIx!Dje!&t%HQPJEDu3_dyM}2conD=KhpPRIuc`)2n+{er{=Ka~sr$?A4!2WnC zOcu{H^MYcIc{04jd@a1vJRQDEe82b+G4IdjLd-_~bCLb9z>aQMF$Wc|o9DvsnX#9= zgJxc=erCP}{#txm{G0i9nz4r+&fsBqmYEk6^UY7eyjPn!|AJSEd4INxZ!$lN zoJYm~GV}W21@UXJ&xu*_o>UwZA2A<9&T%pC$>y}YZur%F82;OQ3@(u!<mZr;4u+jqU$CCYWy(yZ~8l zJ_oNd{{si&P2#QQ1e}_A-!^AP7m9h`HsgG&|CX6=XU-}e>|GWS7z zgm}F962zyNuZCxd=f!#a#|);RVzE`+2;XMr)e(CaV$MQ%gLw)3koa*idm3W?GUV`n z?##UCv)=!R4;2~v{|hVB!#@7n%yazr=9cgo^93+_7h>ac^3Spc{cnX^WE^rk^S({`-N59hl+2^Tj3wfe5=J9 z!#QI*mK%8+%$va(r?bpFV)6!X#_1a7XW{y0es0*DonkU+KML)wg6<~nZ9a%NZvbch zQFy3$oOqJ>I`h}apDSK!K8^W%D_sHR&ETBD5Ab?3-|=iV^Vsm1xeUDB%+K}MNfM`} zUlhM;<{J{;JkA_?FYL3>5`_a+K_3<$HFrS#8}o(mDe=$Zzs!6C!#hCOK3&S(59a#@ z#$n&9R9x`##SP4ZFahr>=LDC*9nE9mi^P4+S0FyXJQ3y%=9x9HOFi6MAm+{HnKiKe zS;79DT+#yZGVu!W8u5DZX7QtDUfgas4}zaFUkbm-TiZEf7Tyr^j&v74U>=5?!{Vdn zk%*rZ|0F&u{>MBP`6Vkw?fX}ukYNS7qWOB59Y}E@=z8WG;pXCY;x6W!kkivVA0B94 z2#+u?hOel^<3DD=!epsnr%^6G-+U`_mWbJb6mwP}&b!v>Rq%TAYM6JeGk!Pxgn2!@ z!+byH@4Zx1z%CH)HE+TMhs?ZoJ1RbDeiZSa#ea$uD@O~#oHTI;?PKX4M@6nx@Vc+M znMW?(_s%tV8g6dh0k=07!rjEY;hp&}BhLPy=w0wA^J_3~erKHar%K@lGY^dm%zNNl z#B0n)5MM9m4exA}@onN~#V?zAG<-d>AO4ib8AJNRq!_we`TU*O-( zzrlZ-|A0$Wi57@1C(bpWL%c>69{;h_EHtnRUUIb*cMxAB?kB#?oQr8kiLW$QLVT*3 zfBV0|T#HvY?74~yQ47A=%)ia7HaCFpF*k-E5I-*7VdkIgUlhM-Zh<&EuHwA-fz(H^ z?+RZ?1$(Y?@gL0XFv0I;o(p($J#%<2C}HjbmlNlTtD7%EPW@v09&fs5L#*IU_jC`q zz|5}JyNmmod0}~}c?irK@Hy=Wc!HUqmQ4{~Zyt|0-+70}e-@To#awumnHQOXc$0Xm z_-XTUQcRaNH`^!>7$#;NQ$U;J?MZ0iO*$k9b-0 z8*tpb2hJ1M7S}iXA0nwU3pH_dgWcL&JW$LV?U}Z82|q1<-uwdMubMxD-!&hH z_lrLfe7CFF5tAO;$?`WU+E@i$ zVD@6Tk}>l=eSdQjJj~3u?qkfU@YUjJ;@Rdj>7YvxI1y_whc zo6ULfqvjg$)8ZG*H4)!!t^>a<{t))L_N@3+Dvp~QB7RDI#>|t@Idd~O2?rsz(;6;q zZVOj1w}&g4JHh$I_PvJ11+S%3i@U6(#F`Lc9;m6FQ;O*k)&0`UN)jS@4N4($7_$pL6SJ_nx_$MT~UNJ_xz*qjQdi?hZ2x&c?%FN>sFR>*+)bpuvp!_CC4&6N@F zDDE!4L_EY?7x|;b6U>bfM?YxM@xKKM*INbco7=-n%?0pn;??HvhzH_LV)m8Bm0`|P z=Kk=`B4hvWw!)>Tc*{HjeqX#_{E3(yr*Q_%|3-XD{Ihu+a{e%nhyS5@{J#N(WIVDV zI?cQQE-$WPz8Ud+^Gdj(xRv=X#M_(K!`;Mv&07%nhge}N3ZukVh_5k!j+~j|dE#Z} zlgL>iUSs|q@%84P;0Gi7-mfTZvkH2L`7HdB`A_&wvzLeulEm!ojax1m@nhounoA=7 zi}){dX~Yw2+3}x+(zT+7=nCdcxT-k^t|M-0<~JhRh&!7*Bi`G5DLhC#%sh<0F+Ro> z;48)K5{_#&2Jz|Q8^jCD`soGj-DW%Vm^rYO!F7;Jo71dnRt~rF#muY_9n;n ze}=cRuRB-RZa#yGo#x-+-RAS~J7zBlms#S^%n68pE&krjACv!GeBSJrLPcVoXd&oS zb2?mBoFlF(u50EOSDK02nzIq_Y|e#ynJdGC>e%tW1_~psg5P=>FP>svw0G7?l4b*?=eqUzr2= zwE156H}eDV-{vRa68PH=w=P{)9It1`e^ykJidy0Z=I4>q(!2+5XZ`^0WjL|+r@X8 z2Owv?c(X5s$He~<|JytW6TfC23cqI_4u2^A$UGA9({!!q7OY>z=goZndC3imlhVc6 z;;Q1><}^&(*qjcxG?#@tm^0vR<}CPPb2dD<0gwM!y2>bwvxhg!#TpgZj&WD%M zIE!%wR*LTu-!Fbx{G>Sz^Y@;!LK!slin$#8hB*`7YtDfWnDJq#_pzA^#~uJPaZGOr z|0@1VoQO)7lScbCL55UR6z7TSn%iRrEzBL^j^+Zmhj_4ftazfiJM#T&t-)X)9emSxq-t)7^D(0bLpBa0``$Wth z{n!xW--*wdmm&VAn7#Wk|7OHXns0?O%q!uFjnEpC_)%NFRRnN-^Sy8jaeHw$^9JPf zHE)E6h}pd#+kXi0tIUtXQ_W9uZLW6(c)ocDyhO}y|JcwT#P2kJ0B;aKB!1ld5ptd~ ze+IuvSD5?5lf|>lLlB=I8rz?RB~~#UUTMA@UMs%G zd==vNnXiU-&^Wu{x#ztkenY(1+zdGf%q`)=!R}Oag2S!}*#tx1i+>aUEiTcdIKQlz z{TZ^I3(!tAa~rshxgFfZ+yTBIvLD`dc%fDFL`6^W0P|49hlwvYbDLdl9tBSq-zZ*a z9)q0aW^UuvO|TQV)K{W#uT@Nd9}qt--XUgJh@5sR@?R6bZJvhsJ~Izlhs``3ePy1@ z7vU)@(7%`$!RN&63XwBoJl(tm&NeTHtBLEHS0dg_+*aHL_Sq;GV5WI9JWssT{2=11%#Xn9%#ZO!xUsn4Z4*Cl-i8U-vmqCV-fw;i{=&Qi z{!V;W%+3ipEpy75pMxuh#x~!HLOrYCpB7r0Uxqu2`-z8}cOz$lc)EDD`8DJ$G`|V6 zb3!fkQJzXMT4T*sV+cuORGaa2azt92Zv;*P(e4UJgl3tb*q*_CCl3sspq4K^mt#ud{e4jjKBz zw#SJlif5R4=$&KcDQ%J1zf}rr#rKFen|XMC%-kD(#@rWvUi_-LKjM4LgW$d51Cjmk zueyh=Vg!!EQ;Ev+1<|h&FVcrRkrg5QA z0AD4ZD!xJN!#*eIiV2om1^4Cc=05P<=7I2L^APwk@iXS3h`%C!*UZ!U0rP11bMrXN z-}}0_;QeIgx%|BODmVp~FkDc+)hc7=J}xh=Z03HgW#(>bByMY7f%rwCvHfpHp`TT7 zUtVgy7ak*?Aih?7gLr}XX7OtCcC>kq`8oIjUkZzbJlHyhr?j_+#-A@waCG zRV>AiR-ped^X!z+KHBVbN%Kc=hB#MT-TX0f>X<);o0*Tm?aW8vF70{z$9`quVyPG` z9%cR(Iai1$nolA=-TWOq$NW9K*!(NJ!u%(^)_flG_cjz2Z~zfMVg3gbJZI*OSg(lp zm`ftQPyC7aOYwK&Gc>yg$-u;aS_Pee&qugb_|_@S%&(G{H}giUD&kt^YKS*B^QNo| z%(dW7;vQoE5-AKb*Tn?m%#GlQ;u+#O;zi~r$iLOhw{mOEE#Z63yjg2YWIw!fYnxQ; zFt2;=K_)5-u$+Z=Q~L zCG(ANO>rY}D{&_?Z|?13UIh1d_E8vSg`44V;z{P)5Wmj+AbgW}iTP2)SDK%N*O_<1 z_nTjU9}+(WhsS?b?39XK;yvbGw%$pX+8uuG#`dri93of689BfDjqGqDm3>0H)wRKReT5EVEzgA&A-7*#jDJJ zBfd_2zd4qG@6?)kU))pX67WuQDR`Hg0Sj+hMLK-ITn;`W{??p{_-S(m_$PBNT=GI} z-p0{yE0ht(#nsGyB^=%ASfMuD#9S9{ZLSX&m~mm_^)mBfb)a~J8Sm7+@!~0FUaZa% z&%cnze=I3Z_1?C!z35R0#c-IH7Zx6#hbRnz<>mhJB2i^RRaA_oo|*+lae~`_uKKcKDNd&iu(d z=b7RKG~cUYNLdjUf+x`#dalL7F2c<(M%B$5=j8KG#2ijBWIiiSN-K_+6ITu$tZAGx zrX$YE9Qey~?gz8)6mJrT-Dz9?&M+P{Zh|K8I^z&_Vr_0(8qJx*POQy6B|bQG@J^GQ z#pUtm7!Jo7GXEHSJ}N2RyJR{-cn)&lPoz2Li5rUB(9NR!upek1F){Q{5AL6kQoFEe zvz+(R68fA9{_c=-f5OmH!TlX``X$_PI{2QCKb{Ucb;9F`AA(hU{PD-&2p?zv5;VRL zk01XM%;#g9Gr?Xy*8DA~T7buGXM?E)IrU>>f@V##vx02}Ipr#p`wK@~Jg+8U?mRs6 zRa832xIQH-c_&^Wb=Ssz%L>jRGhtIwP^NQE?c}2f*ABydIwSmgQZSm~k{S3sCk$_3 z_)JppB*Q-CQQ26IP@Ie=|Nd6E~c#&G;uP=+Fh}LrVnxx**I>Dw~9@ ztYG+f$>4s5k0U%c%>InwlBvP>43DjVtMM?qVONA}rUjk4BFvw4s2L1663YtaGQPcZ zu!`|+Ir!UunEoEad&&k!7*5K?cOb)XaNHH6+R_(UZE{%KlEsdgHZ3fUWU&CnhGA1nT=9co`ps$BH7swydw~~& z-52HLr|?UJQ(6R*zKGRG9-15TJ`OUv=j12P>yJy=;3uwVpYE9A2Atcj4|e~UpB2nR zIi)GCcV{;ZZtb2^BjNPy;K}YewG*~34nE@J!5f3W`B-yVP`d}#Yt~$R0v-(Lfo2D< zh~d+V8_Abm!u3(G8BEx+FPMKcmK}W719N(AA5K}}nk4l^@p}}vhsA~{CJg>2=+qN! z-v1%4rh|z+(a^|mW8i8q{oEIL%HiO84W4SFg6b);O35ouU`Ga>Q)2naJMmS6^TF<8 zvGPHcUOAa5Z7#T=b&KY~>0_~YVV_<(7k^nIinJ`ezd`P?@&8l5;f~zJh5r-j(6i!} z*WDDs{JTo$6#iYhQmffTAv6*%9I&)fnPEkt#)nEwD184&r5Ppur>T+ORBG~hQPR{q zko3oEm8X_)p~9)}R&G1OO>(RPmiP7ART59T$WQksh3PXSy!y4uR~Po(UZP7vVV$|v8z#F}iqm&5lyrvI?J7~P@TFU-ch|PBE}Xvl zfAcC9{&jct?V58%aB6Gy?+X(isJ<{o=TnIAwMB^wv(n>*v$t1IsvOG?=Dk;aazaL# m!tdUzexi6QxK#;Ke=m_8JYJ?`v!MU)B`Or&H?ziHDgOs{f~YnC delta 179939 zcmc$H2Y6LQ*Y33Y0Sm%s#UNt= z1$#k1RODbm!GaADEC>n;eps-gqGIK~Yxdq@CI$2ZMRJUGj9vlnBQ7S;n$9|KFw1-x%a^udx4T zbmASxK_S{{Q=|WXQRx3l!j|6;v;Q824m0bm|1+{*{yY13cv;TrZf2$Dl!|&|BLvag^ zGm`>^ceDSTLjQSSLU{`NJ4)<$1^ZjNVKz(ruP9_FB$avC-%+w>ANyOnGRTrm`m_^E z{@GW?YZCe@pKc)0#H?zN| z)W21D{3}PcMR=C*#K(uZN2G*mW=?BpteRb0-B?@IR5z!V>4L`ErmC9yMpi$!rnaiC zzOifa~qf%Q>J^~rN4yDAfJ>l9Z#EEJ)eA^GygBj=MBxBKD~B+)!c@ry1DiL zLFGT@U-f2w?Rhgw5veK{IHi}Ns$h6IyRNpriOP9lt?ER`$k8-Cd_hA^byF>4IXQCb z_P@Q$!)#CArbN^>He}00Yv(Vlo!@zGPQ>g*bq(1N152g6uDLWv%**c@6mPFii+lV) z`*E!zujlrXJr>4@qHlP-Yw7rB?fO(wYc2hJmv( zCqrsZS2yQFq?m|$aCLVSL65oaM2M@0WT5vQqQyq^a=uM^--cr znz_lbe?jh%RmQYKq&gsx%-c!sjdhn=0vZ!#L7p7ShyMxglIXt3qH8r0beG%CK#RG2 z*t>^FtFcVG137S4P(0>*6(Jr^wsQrTsJaH`=^UW4Vy7I)%TAG7GlhwgN%jz8&KJo`Uk+B6@DM^a{p+^m-%Nxvech|*h~Ct zkji5JZICSTXTqU{{xhh;1^!eoV@>`O2yOIlhUR?#wa}U8e;oS;rgealcZ}rVbA;&67qLJ?l1K(243MmD?K=Z_{;p!u(;H(p^%sOvk|)3zXS#s`G+Cu zLVp=T7x<%Lr^){WJZ|)BsKfdGZ((7czZjwL;5j%Od2wt6JdAc&sbZqWM?Q`?AzuWv z>wR~_?gZbPNH5S~WnM!n+t9*i?;c5SGhMZGS$2-g9m5OqLSxX1N8 z>Afu(Z`AzS=`8B~7;0dVt|zgNIwnJ+&@;&|BTvzVkxw8+-wwFMe9Mq$?)xVMnr{pW z!{YlVyt4WtA+h=Hg2e9Y5(4A!^&xM3pCW?G_Zu~4-!cTdeQO}`u-GZ^MK3kqJo{Ia zf|m-%7b%OO3T1*6kfz0#AyfDk*v4YJBeoH3quq^S_I-yVGRtkh^yQ1#1QpFpPzf*MQBCfR*DhFou7c)8n}&8 zNaC_*ZVTLx!to{R-0pyb;sv>%5;_o=Ng2uDG4F$WCs2iK`#SRY-mr2wKx36JkH@>g z9S!V44t-sD%2aU21J`tfGrj>_R_MvVZc;7bt{)NjdEiD0E9cPB;a0*4sZmZ$VZ z3d}c>%X+r*gkhvKhC6MrYv&0;a`GasS3FOkn)i*@Suam`&?@eSjiO|7uv!=UctRbS ztkqdRPxuK*_?mc12wueUgf5iA5}y1Z*aXhB-40=C$J_FUMP@smtCd*Agmyefd&w@Y zhFEhm@n}1qthHrge>&G0+VLf=ucAaY@&Hwao2sinJeK1cXRQWmVqFIB5;_gX z{GOO51huAcUKD9Vju;Cr!HyT(hC!%HS}&pSejX!y9h~L^l4(fNC24O^c(O+2#gGNY zH+}_4I<*mqJCGlIBx~~_?DHtiL;V>e7!Bj3+X?mCwuWGomP>t)#I)%KqO^h1z$ljX zF{Se%x91}89T49*5e>fWTttAlJ$aM`Y6oiTqUQP`?@Gc-&|nIX9-ZLPZX43S0+QvR zj49a7jAd*C9BI!-YL{XbKxMc9vW%MnRsp=I2RfJ2Q~|!V=cBX`)JO9&ma)}PI`wx- z&l*aR@VR}6kNo$h_Co6#q?b-wx-%L3A-e^#u8Qn9WcNZg*pMMZSwBMd63WPk$I>dP z299t$m1qozZ@dNSZClY91oBSAy$$)BpsZ-@9*0H5w)}wlLSG+@+HA9rBJSrNI{Cmj z>q7j-9w=YE1NP8ee<@lUh zj)!3HMVZYMkxC zXX*U79BQb)co@sAV|*)jQ?b(Edn$xo#yoJJAhktMpc-C*{U}(4x7xZ%?fDpO-MIFA zthOBTi!gJ8dV6gi1J5$nfT31=s~%VHw-lX}M^lT>*kYJJa-j-R2>tsc5|kvewi`*n zwSQxt<-Le-DzF?Xn5Kn{KgqR;vRo>&-hupkxJTJqR|&stz7JQ07omuUBIM6lH13RN zfFdyW9)kGL<9RHLOa>sLXvif?tEGBc#_iF5_ubo@uDoWKbunnq|Dp zKFCIa9|~%F7mZNMcz+UJ2|A@bcZz>;pj$kUkKFXdq&28U&L;dTZHWww5xzwQS(Y0gn7@>jvu0WdqOF zn@e%VESOA3{%0dSl!0aWY7J$F&U+EH;2-!{mbn8e*-*)N3!o>!ZMv?kc(k4}*?I<2 z>p}aNBRCh7ITcdfbYUG0Q^UBIZ-%ih($8VMGZ|xr?@~o( zBkZsqhVlp7l>)nVdlTiu`*Jyt@79Vm`*D5g!P3UU2i}_7X`IX^4>m@k&FkZ2Yo0+3 za47sJAz!EjXar~ZpQ6k0fL?y!jq_p!Vs=6!4e*Q*offYKT?Oi1S1+aA$Q_Q;;xTe4 zS{yuf0LYjG z*)qsxN*RrAENdZTMvkTRzNOTr-j-F=4q<%btI+N#ClPPAq8fSz_IHA^GQeC#UTS=# z$nD6JLOn*)K)*wt3n_aOrGYhm)4+~)WZ(oM9|QH4Me~|087GD&njsa@nQ#h}th7TL zWc+|D9|q)kunRN_KrEvtb~Gs|MUa`j{%D7+84gW2FU%~1O!n~60GkoG=zL(-6v(zx z4vZ19#|X4czSTxvQX5SJ@r^FH)bkH2maV}DAQ=V^%0RuO|64mz&8`H$l+J_2P-f`x zte=mX?KVpy1Xg{>&k91mQ%|quBtY#M)O|O06h%%*T@{bfz1Hy_y|OgA!A!X9Vom6VRF}(lrRjWm};Tp(D@Kl`m~`(DubQ@^E;$xL4#fe zla5xB1j-nSVCv&ekWmMjDqMxV+Dwnbw;Zq@?qvzo)0ymmxhCS^1aXPWv@Y* z$hQy7V*o_H#}S*x9HQ7|_VQwyHDbr&`a8;=#h61B70n~dX2CvD;8881j80BOzPor- z`4dQy$W>`8KM6ZT@fX|6pGML|34`qAD`18wp};=)Bba|0RRs_C;Xsr$lzYoop|OHO z%y%zb`~zYlUxa2aqhX&YDjgx0p#X@YI>W8;NQ@{d4LMm16(VoFr+g2DL@{&iWp^TF zBH!y!ItEvXVrDzaKScsW$s--*-#|u`kuu0rZbRcIO6X=UKLd+I30>{wxQ)PwymLf# zJ8vKy*%eb<@!b$ds`$+nlOSqlCPj-ouL-0^Gat`GC1$O?jB|qGME_uWaqu2o-pVdy z7H3a)FIx|Hd5o4Iu8N3B_5DQ_AMPJ7&TX~FHLos<lqi#gw0&ZEOwdhn1{euTRrJ@+?7UWa44ErV z5d9O;v^%3PT6l_D>NX_kSowu4F9sKL`^QrohmGEe^^s-<87u#b2x(z$B(kfc6UC4s zo)-S3CtvK~`^3fl`Rn1l0X&x@6O29R56>OQ|6#Fh(6~(#IY)f0n>Wvn6q~ZGJ_k)W zEGM+)c{PFX_%hy!^P}O_<#f7#n6xdH<{N6;h=+!8SNPY#JdJDLNL>NlcHwaq+`;)? zF=Z%kgLH9-6*mv%QT(9THJ>Za3u7}0MUZ!1p6N7%%5d*U*i=dVd< zo;uerN^ePsD;iodw6bdSfXb>-C4<vqIYp7OdPrJ0Lll30q0d5d{`>>}J| zs=s9Jf~JNAxCK?)LZ@`8tffpV2lQvSn^P_CbyYPs&211LUgStBq`NUPN#j;n zOOXy3K5UrG#mG^kS!Mq*rB$Ox_8T^;ayUxb_ifsC@yo?LSu`%>f#&q&Ht}?~ZejK8 z^HowliY$l|lX+tE2~_jjSH*}szew|Ms0msFHFFzKK}}WFvuDp;MAa)xw|PWFqG-)u!YUM;$gNBq)124XYw)z0mozSzQ#E~d^^8W=Fm=K7s%f+5*4Lg-azMqX zf#Jk%L6Pw-d9(=^7r_88@QzB5NrKnd!0pD$ZNFX!w|lf&D9n z4;Ug&?DfQLxINnEC3UKrX)|l5T_Uzz%sYslw?`*54{k~o?cPa@7Qvm-4iTQfBb)cs zr-;1i!8}h(*;4DY{Ag3ETbAv}eiv1Z9w)p%q{XMz%v~^bb}d8pso@x%hi?5X zXwWN3bVyH2_M)`wYGlFHHa0d#N5qK(6CBBD(`HuBKkxd;(IrfF9lhaETNX#}h|U!G z?)ccC-Z7}bRZW{aXAbU2%Jw2XsvJJNqIvFuB+++sbbE0_I66W+9FBGmno~PxTEh}H zzjj(}-NM=$Sz5B-sl`)rRNhOeUKTXuRn47WRWo-{eJ<*_(CoD{7g0BQq*rphgZdXb zLvzkrc;73zJk+$bs;03?-ugAh6Na1%t7W&ts3N^bComiK`MbJv z8>?h1n_ks0dqE>xG!t>i$@A4o<{D?BH_#A+QDuQxb4998e3P3HXdbxMA1SlZ($Pir zA|5AlFXo-aogoL7+4Z%Hki0Phz!mCo;*Ouv;@vddNyn-in!j5(DLi&MUuhFloSsxs zJO^WV-zXjw9g3~#V$y6L?Uh3{Mr+Jgm?n6$+T8e9;ZksnxOlSxOeH|H1NogZ9oRx^Dw|R5Kul=miBB?)i`|ou6#qS>` z_7(MRPqg@T4%~T)0y_WNYKpkE9_-+IW241u^}JZLaz{@Qmwp}@6pO)Q_sJNIkLF2eMLHp*5y%aGUTh^OrOS$lS) z5w7!D><;kedd1H=iZAEEa<*{K=fio9m^h!ePRnDXu^J$yY-yx`%>~~Z_#Vl35x32U zAKiqz5pjEnj&$fHhR~spxC94WAKHYu9Bs6&NN2_DF@q#G&P$q+SMYj?)OZd>l3SB-4 zhgeKtsqP57E5vI{c&|jG)~K#yF-NA2uzRRzwUo#A873uc01gyPt`K$`a&n&!#}3jgq2^#kA#sNKP`s?vdgP znC7EIhuInUu~qI5Yd(`p=B5-1jnU~+@7+mHhy3*x%vJieUz1-3#^EIJdZ5_TJM znbgG)V525PIwT|PHsrDjE5tW27cy#3`d$ScY*h3Vjbwz~hJ3UkpF&3vCxC4Ni1bND z*gXY1Y_%Yg&ypPFKnIu|vsk%$#IjY^!c;vVXataqu-lLWGF~YjS;6DIf2maQ)(W08 zW)y{EDGG|k44YyTb{lf(Dw0mu^emAZDd?556ljNyN{Hlk$fZXk#Mn#uC86mulnufm z77aTEN5XDH9t7qyu)}r*loxQfw@s9&l)-;BkVTh-ARXXgiX8{;=Z84 zkbuvjy?zNO7Kbs_%|GHTv@ z33k|4fk>ZZgx!W*wjHC)Z!~mBM%XNK6md(vw7S<&A|YW@iCPYyDfX{I4>s%tNwgF@ zY`Z~}e$c>fLoOT7G6=D~0wNuf5q2*Voi9V-8O{8CBRCUB!tPPxVg$Ea0F3Qh5XGhz zL)dM|0jcnAy$qw>3h^u%TtPC%)_`JzjIG1b3Br)|4T8-PgL)3X6gzDDK%`1C!frz@ zi+C{v*xmz?4#^0+4Y@4h5Cqu10g(>L2)hkAAdAV+Yu!%jR(PB|O#2+h`T)}fmV>3dDpt0i$K8i$?5h92J zS8{3pC|DwhN)6FhV2L1F2oah7U958WVw-Py!7ZM-l6%RPhwB8bp2s{%;`Eg~jpUsm zCxX1yYCecWqrnnEG=DYkMWQCKL=Zh?h}MH8f+#XME+7)F;_XOvJ7h$V557u|eHbhe zL^m3uvtWrJdjBdt*&s$oB8WP#(IXavC4%U~RS`+zhBdm=Qy?RP{Mj{n!8Cv+g6JDV zv=S^4M6K59CAtkP5k!}+<-_QjEaTK(v3Wq8=0DhcAQQ(an8q635j$*YAl^wr%)-v= z7b>`yg3A>=OvifTnxq6wQ}9d$H!1is1+P``4GO+R!J8GlO~HF`O|T`GZzusDDEMOq zf2QCc6nsv>bn(nAxp)OunXBr{E$557DuHf~ZjfWJ@y)H7oL46nuxc_SuN|&_jxd?ueS{(;ZS1 z?@};53~0(j_bK>c z1wXIgR~7uGg5Oo}F$I4C95RdaXC;8{!kY3{3ht<2y7g)5%uw(g1ve^~9vU?D>9IEh zhZsGEY6j3P3KOqWuu!nP#bi{$U5fkx1=C}9rkx!Menr9iCDz*?dq)X)U%|%}{HcP! zR`59m+id3(_A59|!8r=<6H=IQ3ZAZDy3=ar<}wA}py1mTyj8(ZDfkryA2P7a|4Aj_ zdj&I`lFWqZLbr*t72I3FLlitg!HX4qm4Y|eG3uK}?@`_!!AUMoa!$iSP^IR6W8U6v4nw7vzS1Ea5C&CqcoficYqIyAW=z>-PYT0nP;* z8mK5$63)_<=<#C{k5_bR6?vV4>lK})iu_UqUryL?Lg*Ofk8QIO@Hk;q0eTgCNs%8m z&ZRdhXs#teb*|D0or?(l?8=h62bswwb^&z~n?D$&F$U5zdk- z>~aOKA#B9mtmtngj5Qo>+kj($QKRf>Q>O&X%fuK)Usvz}Qwcgp75Q-mpCX(rZXf9h zgvdC}0WI$H_8bcK5;mO4Cu}tIo`j7I_9vVKBiQHxix^-kgvlf~e5_XRbi#Vv5Sy1_^g0As*8pY~-w)f_oD->|8<^V+n1G75Q4iC`GzZa$86V*lGmOm6bOLgJ^qS z(fQ2Kp(`=JD)K*p$>|rNAMl=cB3HpZ6kK88c9g(mVzLS0iWA`=0Jb{dm>{l4iY;~a z*jOXKSCEE**Nb_ZF_+y$qHGz5J)i_Xtl(V=-lO2XgtPUyZz=La3jRRR`Am_2sbjqo ze^&xnY^tVoo@*nHh)mC1$P;AIr8slVNh3u4Wn@iP6Va|rXYbVML%1?1&aP41y59Pje-{w z4jGB9CC13vdcq*uZpJYNL`8QO$qk)H2pc(jOu^49c&~zACk&$PO&rN)3~=Zj3NVa* zOgK&Iu+IpCXgj0GTO*dK-$%g{6+E3Vx-xCEfMX0iPtjRUIFhacVOvQ`7((epe>DZT zrI=k$a$qW?+evQZ_)Y~sr08!`@OEH|OEa#Q6#Z8f{8kLoHxoOgMEFQi`j>*gQt)X7 z|47(y+68Y->{oEAf;$pMca-_h0TV+Ew!Rc#zxfZ4}&I!JQSHui#z^E($43nSv`6 zJVwFe6+BhJ(-k~d!Ho)DuHcmhmib?!1YD!w^$NaO!CMr3kAfdo@S_TTQo*|v{8AjA zcQA|nRVCn{g5Oo}F$JHHIQ;3I^dQ}c@UM6A*Dbh}v-dvS${7*<;y!-073{*T{5Ou5 zk;=5B=IG}V#PK_VuJFST^B;Kg=sme&+XFEPJGSuyTKMzFcq|V)xAWiQ!dqYCui6sR z_1X9msK-%Ka#l^lp?;n z)tW4J9_0z5?QPcR#QPC=(g>u>2{cgB^fX`ma+J4E&Bnz%5*34JyJjkGdf-U5g5v9= zSTT+}23x^ncr>ME8qUH-V0!baUy{ZB2+O+U0vl(bMoEwj%D$Q8UEK%4ppuT;^c@MfN>YrN0$H&pgZVtJl6Awcv7lCB6hoa;Xc_-ikwRMbOCd5*A*$c?$9T%8$Fn9>nvPJNu$e7f@7Z{9P%h*b!M+S$Bx&aBvwnd%rf&-O?*f<~|I(vOHR#Ye{ z(ij0Uy>7f9kwNHIxuRO*F@5SUNaU59&|gspWMY(JV)X?k7InrG9b#2{WK5q`7nnGH zGpfkQ_!z~+jfM$o*0i-lJIWHPmc+&QH(d~fhgUmK*8;wKAx9;(Y}H~!Z%2IGPD9<4 z-!cr30f>36gRvxk zE9Li5@G+DyK8A8Ard_s^ZUg%9PGm&qKq)mLcM|F{B1bY-Ki+|i$PM4JOdH;YUw_r9 z+qLki+bs*HnN~#K3Eued3eEcQrWO%>c;%`Uo2}s$n{D<}En=y;WvzX1fqr49_JvriRz=ax8Mly2#5H z)gGMgvVV6}hL^nLnDtlj&@&LjV1G@#k?o8KZ+g>_Vfzme1-uS~2fgbU{cmEsjydN4 zRXq7p#}H9zb=tzGPF|ScF}JhwKjz?DNBUn<4a2YJ|6(+Z3_SH0iJ)Y{NM`O|#9^fH z>|Z2$-v2n_|AU9^0q2~*q@-IpntXv3A^k+0K={oz&T)UWCkySSj?N3RO+_qAN}N0C z=pg#M?~e<=R^W{LOXTn$J)KYK6-u4r+5XP#G_%tjT%8slcGft5zOkj%p%Ev9Tm9@D z8q*?@4RLLR>(>D-A~eLr@Lj`P+x4Uhd&oM!YQb0+C?dRItUIG`i!vJJ481~I-{hWR zy3!3_qDYMoZ`$Y{_UB*yxy=)`(2N{zPt-t^y9Dky)Zibd!esQrYVKqwD6kAKBJoT z%*ES!bSXsJ=HCZ1d3Csdt#4t+vdvia-v}z6f?;JH?n(8<`=DRNj>a&qVYz!2K}Cmg z_Tpb9kgNoHuT|-OKw5#yR89hXObn&+ zJHW5RP%149r9ultS}@AgW&_L=t8VnY*y}pLe}IbV@>F(f_(m_T^UEzxjG2!hU@It( z&R<3Jd^G|d1bzX+Jz{0EuYK$H0S|$4^XcvkE<2tjrU=Y5Fc*ov&AzN5PXX=#Nu}ce zhlyzqr4*bslRz{tW%(75H)%}>wB~uI+MQ(;u{Ookqv4?^AS1|l}jAQ$rgKFqjy+lyf`4dSbeR`553sv1o%YyHf;Rt_S7bjASnY z7*5PRU~U0eN6cej-UE1B9N6IN=-1H9&zef5VEPNM@WpqU4p;-qe+~L80G1F#on;fi zZN!`evmIcYs1&}=oelxM1NY@N1*&cU?Na2R#5(EFueh~ikzE$1+D7=XPWZc00c4g z*`MbCo)oKY_Ql0~1^7A17eXExgtcJ!ft!743F4J)zP^!vpzthg`HDLTbQdRVT5LG^ zQQsVn_1GDR&VoE_xyAK+(hAz8-$4>mhLoL`{t>?8G2fmFQ53~ni^w~YqQlpn^F`Js z(g0^(Q@dNi4~g&IjffXBJ#n7Arxf`f1;3==HxztOWFLx%&pWD!K2h)~1=ApECT|xf zJaKKrGtZ=YcnV&#^T#K)SAsh$IA83d;BrM&so>G#YXpns-Z)RFNs%vBa7e+IE0_jp z)1zAzyhXv(cugG|$xXaV!7u6<(`Rh2C;>FUn-PvFn8tKdPCeAb)HO})6vw9f<3s6+ zC`-ZF3Z}8&j5a{QbOtcx;}k3}kfN8+HcydXuHdV59Fj`(Q6JOLCI!<8#FXz+Fr7_I z`CAI66N@STT)}i&G35+ny@})F#GjFIfp)oytWd$_3LYx5XQI5uDIz*2nWh>Pyhy?H z83t2_PF&n2bIfj3@GT17q+mLinfj0Ec!G>g=Q1_zFNUIDfkuzZ&vW#3Z@gh>B+MSeo4oA%Y0P{phHD6v3e(iioCOrlqM0o~7V=1=H-z)W1@}*C_Y~1=AEx-nByU-lt=|)jgsF zJf>ip=$R1?DEK`Ef1u!x75u4!zgF;f3ic$5`Z@l9Hy-moGo56yZVtwU0!7qK!2=as zrr_ZU9;INKk(#C(6ud~m%M?tLR_N>HvR(Y|*t~=BAm=drrgY;u3)c%eF{!c zaEh1%6QTBsC`Z8s3Z@mVnap4Xk5KR!1=BLv)SsnbS`nM_RXW!D}MmVQnJ66=DJVNYh^2e9ARYV;X zoTFe`zMIhoDVWysysh3erU>5xf3Fa&=uOd$3cf|bn-qMvg6~%_T?{boJg?wa75s*R z>3RY5#p?_FS&?+Tz>FN(T4)RXJ-u|@`dn~E+3ep`3hd5;1vqKLcwbkOjjOE zJ9jAfUIjm>V7fQ~{g5oU7nFe46ue)-?<)9+g6YzRneb@^|E%EO6iin?OnpCHT{D?f zB_J&rp0&vTkI{U#`0;iBaK2HL?DG%TV($?f_W6hLo5d$!`75H!8#sI=uEar$zE>Q2 z1A*g2yZw;v6bo?B67Caw_d~i*#JvgW8c~abmhhn1@g}4jh3x>O+r=0<>=yUX;k5XX z4&6n`K^&UIO?22SKA}Tz(d8{1PKqmW(43EmLvO*%O406Zuqpo(3*QFYAYKB?kBYc= zD6MT``a6*J7EgfXi-ql7NP~}xvF}29jkxDs{~|5rG12M}*cvhCkRRW(6nhT&+t^`od9Az$D0(0E zN86sbmM$!fuq4Nd+Qa@R+t=Wa%Nw89AQ)f5*mM|%-ViU*VXOEW2k*FB@xn6h9xg>2 z8Li*NOSlu$f8pC~ZDT8(!12Td-DnldkN8_|;Nhw}esFNazo+GDzq~qs%?W?_niDa1 z#G6;=rL^pqm~h!Iu`jPO?*r(!>9Uu_-P`iV1iBeuE9jcvC0|_X;Te`fixzI(GtkE^ zzZ(C?IoW{auF%%JE-N6eC<(Ny+5B;J?C1XPt7E2i?x|JBKVKbqt2(Z(-yhb%>XLN3 zHIQDC9&79Lc>4lvua9?+O}DU&bj=>c(?7&_2t8A`*gcvZclc)YPfi~^tV3geE1T~~ z9u%*Y+Ig_JDWgWasPJRqDGjs^9Xz)i7XbTpw|DbvtIx8um(O`Dp6z@eiPKx_X{`R9 z-PqddalWaESQS45TK0_|c)@YwF)ExQjKICH}dX9A9%>G8JqyFRyn z%Q|KUx1D+KY0dsGHZtCpoPE)q_H-*>jVtPzj=*C*GyQnJzISMQx9!^AA*|E-ZiUW_ znE5}onO<7P`oD0fxVR}LZqO6j-hphyUFVJu^bIa4vu;L$ZD8QK|AOex55=HKpxO&` z=Yyxu&Sn(EW=v}p+MB~N`fID7VsB`k>8o*Loc+{a+q;8#7J4f7X0c#y?AU*G@?8Fg z*8Xw+hGqBerk5Yn@RtYA>ecwHN`I|%D@E*DiV=c&G}5+octgYYz&sU(?%m9DFV?;u z&D|d*>o3l4&YjXU_OABb=jBdq9vjMN|AuCdW*L5M?=5V#RXQWcX2$9WnZSB5bF@+i zG4^#7GS+T|xqXev$57~dar#>RlgE=c@!b1wy?2*Zx`uV=7(8$$u-xm>vUtDI=LVOi zTUmMa*r}d}Jv%0G&*06QnkO zhX2mENUJZDcb6bSUP9$zTG)b z%&fNg{aISObH}Iqrc7O#$x2N++L7^PkJt*uH|JW%fZV&v(va?QZGcKg6cTXsavEO>g7&IB(oMyVDzc2cu6; zFF3rn6vq+HbKP6_w^^r;&YsyX-EN!ix0cdfu=MBu2nL&W7`5$^Q-%{+Md<$*FMBIIxO@ZbJ~?ufk8e`ZHcwhXoKv&6&3 z&vc}#C2V@z@iY7NN2)a=(lsscnDzP2Ju}-~Hp$jw)!Kvn8`4{IFl+W@6`i`TTDx)W zHEWk&R*@-|_YVX^uyaD%i{i)WsHMd}pB8v4E$-vA*zeO~{ClQ&Pv>iVY{BW(Kb@lz zoBGe_S##>DKlZ4Zs{=lVVK z=kau3hqjs8W=($g`5N>qNhKz@;P@IkF#WWEjzldH6xsA?+Uk^Z9<6j>__4u(d|OJS zr_F)vAU{rJyBeb!^7bL&H?(Um+ff-vv2{X$%dHaoZqTseF%T9x#Y$Cmoz+TLjIXz? zjkyY{A1W3_qJ`M+ePu z5wwiI%xK(BU;fp&b0Ct{@MoE59Gte-aWPhNI=;uHDa~pd2|w^p8LOkS6FheY==Dnb z5?FIsS7L9W8xs~w%22|yC_(*KFqTWAfE_9GNnVB`vN%)ffHkZ2ZQKpjoYoQ?ob-CJ z)mq>@i6Gb4kXQ>{cL77cEpa^(Uj?>PuyX}+8Efn1j7dc{rLwKJi!gH?5~m3iq|F1yz&W{nGEhHN;|CfG}&A11Tu$i2PX zM!L*J-&?Q`ab67^%PimH29mwPLZ6JclWsJ92-`l7C(vv7(HBwZe4Wv__AXNJ=}9{Z zBYVS;cMjF8*M&&jdpn@!os8QMmXNnSL{{%I6u8a%G(>jqK2*EI>xW&ZcQT^6yzNmr z5#BARFt>Lcvgu(y{m(DXE|K(#y|*uf%uiou3i;{l(3kq#!lMOX~ATHwv5k zkLyJ-cS0aBL~oV3j!7B)K_v$EJoFBnUIP*H?0X^c`l&a0SIZhWg2Xg$1@;y%y;W`X zz680Ac@{xrMB8Zpgrd<)a%edyV2%*_6nWfu_>jUQ@Qah{5H}E_d_>?MC#25;)S@Er zj}vMo*1!}LT!dHWQsU`psYsnE3{aDfz;93J_azm9mna&3d-5W!|5G=tpVjKmKFa_!Y%@!yjt!M+oyLoG+(zbDBsb2!id=OggnlP?f< zG*C|w@!ykv2s<8#MhQjWwKeF45aoM zOVRPy6RH*b^`sG{5P`p*oJ0)#^<)DjjK7{-jZjP-DH{>^>j|;=>q)BUHz|-h(1j9; zz)w#|il3gmjusSwpPmqlpPoE~Lj-<$axvoKrziEOun7G0WG&bP&g@k7ma}eg=cGVe z{*-umQXm(rgtK(06Iqi3?RcUXJ~@!W*NfSc10DF?LQD=U4gF45Z{`829fy^=tFsuc zTisop^g9|kmbklG?t&WZzXOrGPcR+_=Kz#Rth?N~pVST`qI-yiTxG7kC_DF1$#7RP z^~>QFDi$ras;-8)M@Yu%+J%TA_bAEPT}zP<_jnn}=}M(^CQ8QTIthQ=lcicjY~%cC z_#~KxeDkwS!snOHcnVw2# z_E;EqInbdzBlS$W2Eu}8wBh3uC}q!B>4@DGCwf-}5@%7Wo{1JpA%QvRtLg*2mpGpz zL$4qSZ@u2sUFVR7w?Q&i*FJ{ULW=@mF*_lbrDL-yIl5; zSl4UfIi%GTgNrYS9BEqq)+>u&Ef@ z>8*z7QrT3UvM!?s>D|P21=?+NnbA$QA!E_ydN*;=KhL5EOD5J;NJfW9Cc*VIJdLif zkQ*tk)u^fHp_X64baGM8iXLW(K>f~keGF0baOx~p_LWN$UrY^54BdnhV%{9&l6${I z&Nc4`5LmqQzN^(+fC{jAH^Zdedk>5_yh|Z*dS8RY8;uH!RC;yQ2+P$hU6_Y z0sf5lYQ)ziY2TtG`11}e@hH;7#y|KjKKH zzFq|y4@#F$$2{W5e-H82K|t2huSdGjETcKe3lQuAWemj5C7!Mgq{PPNGx@px5JV0u zMah~dzN`%-b)rcDALnRIrUH;Izzf%Y9` zk`oiX0Q-p94u<|)Lp_gW zjKD4pdB)GkWxk#D@|PTic*{cn6H?B6vI>oiYXMwh#f(7fc0IwPc&NA?R*xHx%s)x} z=D3|#LPQH4zHyw`Gb7M1MALo*RQS-O=(9!ZK;Scu1^lsHo^3vY z-~$rM0{)jhnhKa+-}!@t6W}^OX_tjZKO`9jYAat2{lqTE(nS!=19hmw+rgjevIoG^ z*MHi6NsZ+*J@!!u=u19%Ghv@sI5@5SI?o=txRi$~t*$7d@+zOy3NC|W1Gwp+g6qK?K;sWRi(SD+aDz|)^aYxN2f(ZcSWV0hFiz^*pn?~` zlmql3hMxEl0L{dF0ESMyVPfbxpPvBEfC_&E)8$X>wxdwGF2l zBS5UH1MFFVPRL7v2h0eF>B}w!31H%>og8FQ{7u zm~BY%Ff4W-3dXW-bEwAzfSxn3qwjDHK~Ts`sm+AMiejgKLgpl*3S|Sz_ykI&Xi90& zL9^55A#|J>$}-O&z6-(leTF_T(7%W9x319~mzG%P)ma!LQC*t;Qyqx-0EcZS)zo?f zB_geO5BhPz7I2-xbpmCKK#Vr%OU-(kyf@330?{a>bDtFHe}SW)4bmMG`gO;plv*W> zES9O!ek7$aSAP5(gZUUk zIR92>is`pLHaVabT}m;&v&r8e6^*8T{k_4+eir({CcA0B>nRzJo%f>;6W51Mf8_So@y}f<3xoYC%B5BR`e=`w6?ox@EB0^33?k}W{M zE1+WPD@Ui7ZG&m}A5ioeN}s=G^K^pV0NwF@wn*ZNk)bziF;@Z>;WJAZe-7vY5M(tX zGJjf65IidY@r^?p=P`>}gvLdGI3y-+>0o96xRAOPS!KS=JDo z>-l5njV4N?cj`vbG!T|ZR$HNP=<6`L)yHhPWR-qaHx8s*eau!Q%VIR^{V!@x4;p22 z6vp(jc~JLIFPjH-&-zM_9<=qLT4cTHm$&?OBW8&DnjZCbo2&>u>g~1;vRLz}W^cE3 zr>K3O$C(k#U}>ivCp*{MAcNl^zOf3n2FjLvy)BhmG9Q`#ARVr^Wm25WkrA4Uuo7Ia zX8Z~pw^G+Yw?^bmh@38K@d{fa)#7$&(!5gs%g6fYq?mR!%A^Y<}w8B~b52QDhq$YLh(!KX@Co2koED zM3f?mBBvacwgj4TTmtoJpiWe?uS3Ida)d4MU;;)lntI%e@Vh~B>hTP~Q^e5J<81)? z){UHcoCf$5#Bxq!Cr7bA0jN8DlYq%74eT_Cc~A(Wpyw314S_h@9E@F^#oz`^;--k% z4S}wq1#pr^GvqO&2Ps2itsI2Z@bmA)AiOV5a zK|)y&YxH#JpIKW$9Z(=^b*JdRS9?fL7R*0%=Wy$YY4jAE-YT!wW8)u>gC?V7?go8? zXGZi!xn6g=6QZ;Q$woPY3XtVe<=teBr^kI{qnv^8T99m%D*%=eLydAhz>UPveE3m- z`#>zznOgX@KwR$8Rv5q88lQ~BrNLjI^)p4I33e2QQZGmvq;J}^C58+Z0rUW2f(>pv zfWF7cjPYBoi5HVSnsm>H(rk)FlkPix!|d!|k>L1G?JBWbE z9dKKqMb>LO`jG59#}P(-=YDaZ(daw-#TSi%v>bH`kWmIT>J9Yzhu)K@H*{ecV-Y|f zq)HV%n{W^2O7tSu&O;-70Kc*a(~HV^BTabpwi2+)A@W0bdl=MKeq=7eDi{0#KW3C5 zy#Xca4T#=;xD!OHc+}C&?@wf z8>T<7$bL_QFlq6PO+hn@A6QbUJG_k)=`M$!n`0K)8L_Hn=O8ST-Qh!v91o0s@R3Eo zqym*#5cPxO7CA7;KYKwW`$34Gu*eaj9uoS5jouGF)?;hyiU-YtQ+N`9CBP-UAAD(% zop(L7uK~$^&;$*fqd@!{OMH*kXiGFWzlrcSK(g6>0zluGku2!K{Q(%^Lf*APSf;68vYAiW>#0YKje$$s#I zC2=3wqka&2A6oBFH0lWS`&K7N_JcHlRB|ALJfVJY9I>b$(9nMzGHUB*6xpwk3DkOI zko3lA&H?nh+Ynla6}3uzfMtxvj#@#U)EOBqXC$p}Ws9$N~NeeQ4NbaV$#9dIK52@%avAfw4XAW8bvlBt7Fs!%4L3&I4 z7qmYB$(D%X#)b>^jF(yBpG`w;QcG-w`bz=HhEoWTPt0#4upa^{CyrXqOwh$3mT?bu zRO@fSgjws`A){LVszpZs1f_YyD+r;$^%b7_sa=(e; zS^)XqO7vTbE6y@c>k&$x7bEraqj^5d*o**bBBPA}6h$UY4vjf1l^QD3ALF3$|q^Tw~%xJmkr8T3T?XXuolTt zi$X)mpi?Y0oK1=>MDryYWgb<8TOgwW?4|QE+3L)}idr4Ek_mL)eT4I3F!EFN8{f?| zbGJ>uhk6N|sROkk_n&Ub;1hZVS0*6;mm;_`RT!NiHMuXKT<+nnI+)A80YNuGrx{eR z3Cx24_k#x06n}?|G=(CRYqsp65Iu*mU7&oD7EFNT9dK`fddvV*(1hJ7aG!xf1*^bW zv8MPPTmijF&<{)>Q1@HF;OyP=UK|f0nY%!(;ZebT5X^u^6-bVk#}R^SM&!gkYkX#V zcunKwoe19ylH=u009w1q6YZM-Zx9or@$xI6k3ssG+eu~^?O}rPH?8rDO@oC$;2TP#}R%7E43sJQWU8AAKLOHM#E!UA~vQ{z>iNNd&clS81SvyW41jAlbk$EEr|P+~Uc^t% zR(=HyVHFrb=+b82@gb*V z5p>=Z#sY#T=TZyo^es^Ja*>4fG?7(pj2jO&G=pvJ4uMJ=mfD%9s8No(DsVK6;m<=bK#QeeDa;no z&zQR+gx=yPI0oi&fDpY}QSdpqw*X!N$$m`}F^v^t&)=~n_9U;UU(*HJb|Bdedjs?& zhPvTMfJ$Ph8_or&1+hw6NLB#odzt@3cp8&P zN5`50t|rEpg!B&p?E`ghg&-RCI^syxaR_uI8)}^(_z4={faDru9zt-@8$@N#HCy~d zl$b1{yw>moB#USeKnXEaL>B{0B8G}+8NfVHNH6c3$qW{a*xPLJ_nF3CfW{t*LJN0# zaQ;1F$QV5>{|zx@%o{`@fpq8glNCmL1TpTk#s6&D8y!SVfuy}z05gNck-=2}A!5kj ztpMvmbgM1z3S437iDHno_6DRcgJh-s0q`3!G*^sG!wqK;%b?8AxH$%qsPD*Ch$W&} zV>!hb|D)1InmlC3g71dR6i5PdF~B%t zI)k|h;3{HzfH?zj8q~cMjJ9rEHr>*QL(hu=4JW4ODC|B#0(GD-&|nKjLy(uwvRO8C zdRBv@hhJ#iID+8rQz1Y@%%M}4yqQAl`lt=71A$Po(HBC{&AA^t3eVYXf`bOgJPy!a z>W+d>s1KT;4E$e|-3gdZrluxCRsAc9z`KVp(0vwP*JiZ z)sbYYL@Omz-!{^w)VETi5N))fs8r;ByLxzGBXbDlHL z{oDvHMpdz8ynAhS5TQX_NW5AfN8&bMCSL9N+p4Y8@n;EA4=}qH68LAk?>)&>L!^!Z zKjYP|H4=Q=6k&Wb=D_}iwqRXacSRrz+cq7q@T_tha`_cJECD(RJHQRivr0eYUx-(D zRE`1oStL9trvp=&;6cfIdw&uBM3t>$HQt^4J3E%$4CmCavTsn}04L#FhI{r;CU}Hb z!B$PjE3B*;P#>?Tu6<(iu!0FL*=xW?yrTCX z591iV3TE%Wd9mzmuEIoI1>*4vE35_7V1o4(0xg+feZ7J6@QQ9@_&5lg8GqSDy%$>$ ztC5P$8@?TZ%41iM~H>*L#{dBhn*yo z&l|!_t^+eKF3a@2hJz5~yYz;#VDv7vTJeKq^r7~2tDw$ZXhab{z36uuvwa|*C*=P3CF1Ob zSH?$A{MI2~mDXVL z^HXrUjaS9|SkeIgULarTvoZ$M#{%8OOS0n<|PTp6$QJ2D0& zV)lGh>sMjG2bhGf>gQJ&zz(GNs$NoI0RN%RSNe?^1K2AGU+K4G4CsS=zS5^<4A_W@ z`AVOWG2pdi9Cmo6-`px=z%*3OS5{ud0i7`+U)keO5w;Xx+2bQ?0r55Z+!y0-}Ow-r-U8m;#;q+G8Yvizhf|CS=DM|I$5Xp ziS1MP6DysOOg|^3gC)DP`JZGFlF8+{T`QI4;=3OyG0x&#o;12?EpeFHdBKJb)oNYY zU8`ffM@p<}EF*~%_SC%E*ipTj$K0Ycs*#(*GUwNcwaV-td$BliQ1+0Np^5xwfA8ke zLZq}$VKLmF1hI#!*UG%0Im)u~qMV?(2B+>5{JJ2kdh&&d;fCoOm| z=QFA2LiXo~-;~0H0Y=|MJcLoSQ-()7CD`z4)yxj8iF2xqSIisAIq}Ot;8IM$?ui^KCe=U}VE#VIex znz<2>8Ep&A#4P@2h(j%$6+T(|$(%!OSnbe;7)5gkmo%zxX!)eb#tb;P1&w(Zar*Gl zw09XtHSt1}RYjZPqSa;F?xOPbzbLE*>+j*J5WY$H)tor5W!cGx4h!K=B?I3Z;esQN z^NkjE$eWnMws2z)Dc=r5+{Cf6ZH(g=Gm)W=tjK_mP{W?EmI2W&3-(M&&k5=_u9FtN z(@unIHh?3(dlJ1H@TGu!_eQF~_eBx{8OUoG9s~n8;v2_`+It93oUJI|M%|*K9PzDW zMcuo~iZ=H0`PO>WC?M3VQJ+X)-c;U<#8;mjE_c*z6$@rEAIby3x zZe%V+k(qPhn-4`eT3}(0?}@^k`4bU2+uLypV&rLyw~ z9zCoi-m7?e1-sj1O<{uIw={7cDjyRY9$#=60E8`?? zz#PMGs}{#Fe{6wb1fm&T(z&e8{%-PE_`jiW+E}<=(LDRR+M@5@@zN6uf2%l*Cxl*#u$GtQx91jyWqFBe6=uYR->lh;RenxBMmw->mKp%eR|5J-Tw- zE9($HhUx#tE8G~R`!;4Zis9BKX;ap?3U#`2!Lk;wx(K%)PgbuKwD)sH1tW&nX%WoW zomVONx>xeR;NjA&9l`V$v+80AAAT{bq)u8aetN}tJj$pNA6K#B;>(8B2`&thD+G0? z)=Ubj?956=d-bd!mK1E-nUz~H4h6HY|KftLc4iGsu7qSP{iAjtF^LJ&HHciGX`Lk>>&hQqLub32{j3tTL z{Hw7n3vm^$-ko(;Dhp!u!%=W*cUGNX^X{w+eAozQhshI|{r@mIDo>0bjg}(eO!8Pf zD)oQX*rK{smKc9Yxa_F3F=pSYcXIWh#`&?7x=C0$ZY-~20{+IaPB>gDwA={BeUVkC zkJW)`I!6F`n(Au&Qr+!OVrpnfctHXAa@wo|a>#q{dI{x7odnTiCjsgRx5|1~2c;y0?4n`0C*y zTOG^64HX`7(N;kU>o_6Y_ijZ{0gkK0_@wxsqeC5s8V>&8k$qVgpv7N!C`SuZDZVn6 zJnpNkp0UKB_g7f#iow{gvc|=dgHON8n!q;|mp>s`G`&irps06pBGxA%+(%QnBuT-{ z{aF_Vb?4_KRfu+0e6V+aR&giHJB~*X5Bg5FPg&sHFo?HF)$qtEdw<~n378MwW;`NF ziw|TqPLCx7>gJ^bOA@jRfi#aqH|THa-FU>UkD#tiX}g9GEk_<4Y9z}OX%LA#kvk~r<+ zoR$MCqFtQ#F&r4Dnasy4y0?kUyMS;yW-LL1TY~}K72ttjIKjK{G&3*699V|V#TeP% z6%wa;o12fK?^HN!j;mM zPlj_XUI4q5;YZhEi;t7?ynz^wI6vNnP4H`5A%67cz=fdQuHmJf1LHLJF=x(8H3!CN z*28!WyA5ERb_XxNCe9(b03Q$G6nFIUVZ~L64TFF4D>eu=C&#A-XLhgMGPwAo>Zzsw zR?praOLObA1d~@Q{V6-UR$Ne2IaW7Ff2LNI;Fh9<+|t1{vn$1LTQag%cB3Sp&2hMR z4e-jqziQsGbbgpV$NPc{YC{!_zd;(0pu#WyWOyCDBS_;xl{XTv46n17fQ`@mGq5BX zUXfQBX%0MEGO(G?K)Magd+`jf+bFLC0^A^vgax{LB{l()9%p#b|B)VrbP?kGPkshE z%bA2Uo-%oB@XA0BBr}la3gJm8(k0&F(wp^_6R|c#JEIp&DMX z(ILGmL5;JrJNV(YLpGmt@UD&jUP!>W0_I3(aBOajF@F<*aqe=i7R|ePep!p=JL(oQ zclDjHoBcd7zgU6z`6z-%qLQ&hyiB}O{HS=XbMWd}+1L6zk>qmlP0QyYH1Fhp6Z7Mm zi`N$Ovzdzz6^}CCgz>c!pDMm9vLDWjPZd}ZKNE1~G>;p87^V~8TF9fh+l$T2=Pqab zI*j>p>wJkKO9{(alTu>HFKZk!m-Qn z2g6~!SSHt;V)4H$ej4MGW=`9XA4T0-HpM|g^InCmD(OxbpJV0({LIRD3C4ZQJlhX3 zUyAW1W}Xs8n0ecBxtX^lSDHWafytKO`Qt`2C+0m3XLbnV9cJF1umZ-v!g!CF3&(Pd zAIA76iJuUkHuKhotv`KEkOox3i)KZs8^fUV*Hqy3&-c4 z)f!;`^KA8+WzbvAyyrn3Xp)0J7{0PNV|0qef3^6Z7#}xt2267y&O@E2B#sMy*} zp;K^*<_2f=teQ80ZOv@kS!`z2?NE;GYdG|_IAgtor%`p<#TM#_(8a;WoZBc16(K~Y z;L^o8b1s}4Yn>v#Roo5b+%BDKamMBbojT)W{icO_B1EU;M_(Z*;bdd*2g7zN!x)`n z@gFSC>)>f~B33NUE&zPbR50^KwUU{On-;luc&A#$GWfxP9ap<`$}{si*ucyW9lX0` znOPY7=HFw%($3j!Yup+xGVb9}q+z*JZVj$!mYrQ1>ykY-p$6Wg93H`|+L_TEHl5;^ z&N?^y&sdFF%*ELTuWCI0G0-Wqf_u-)UXGuaY}Gxxb(5tCF`GAowA(GKE&dF~I4(T= z{NsY|+1VJa>7LyJz5ea&p8Zg#8OXtK176jdMU~JgGw=sPIN{95{AW4KFh-}$EPbX& z_E)jk^k6|RR6IRc(<{3^Dt@n5_UEo*u4A?4(aO=T;#4?h6^EBwlwpicnHlUmKl?^k z1^-b{jkn+!XjcW(u^Idu#jEk1VNRJ5Yfw=6=yTv|G=e!8^X2AL zo92eakjpYKZ_3UP^Pdik*F)Uz$OI}X!k8~tQ8yZI2o6121}=gx5VI#P#=9dv+X7dI21Lr;q82|L=cc@1VOEjQzfQHV3xeL*t9zHe+T z!@g|He@U4{Jc8qcW)2nMOmj8Ht$Z$Rd#i!Cu`9#%KT9&&i#xkQDAPxLG0nFl1~%`? zG+!lUrqDLyo5jMeu@yfV>_xVpm0i9q z8i!|sChr<4ghn6XML z;N0#iO{Hz&*yhN^Ym4(-86I7QOxVoMhB>pR5bxp&!C`+iHnR&EHxHCDqiL&WEX;bg zVA_dNW*TkN&V+rJn9B^CIP9E;9~m&Lk_jFYhkesnMPc7G=9i@mn-{tI-xY`b*F@$0 zu(gq!aoA~%EyNK{V6IrB+%3dK;!)xo#O&(O)w5h&8ag_=d0UvUeYQiqU;K+W?C{0P zXVfg8ww}0|xT84i8 z*w>0pe4b?V68E94%%!xg@hF&U%zu)MlQK8bHnUsBx6?N5T$+b@@bFuSwfwbG>?!dJ z;+Mp4h~E}}MB6NOiobxlsPi$$pQQYe$k9$XAsHvdiMX|O>r+vjA#Dl~`#h1}Gv+KnR#p}fX74LWE`v2t;a9#Yr%~e`J+umNGl zqgc2nrA#Sp3-@xleQygBHt~Dn9bz_na%GN+E7mQKH>GWBwWF(WTj8tNa3D;w!~hi?0{oD4rn>dvdWYv4C+~i2KUy;{zrVTnOGYtYd~v z@U(c7_&?&U;&;R!&^EIJ;@`!Ub5X{(LN%B$7m6$EN04)HJIwEXfibtC)XR%s*|UBwrReeqqi?T-6tZhs69!tR;T zqf%x)Z5v{v_@#Wz-&ORMWNZ_ENZZW5koZ3FH?%FppJIoAx`=zy_TaG(Z4+N2WiAts zmNFA0K2dxFjXJ~ipKA#&(Q@%~;0dd`*dJ;Z&>jP)N_mcU02+A6)AwoQGV zl$k8PS<1|k_-yfg;w9o$bee6J$HI(Y&D89={#M!+;vJZ4vlDCcX;=opuuFVE${(a{ zp-)Jelj202rrj>6D9(r+y(O|Fqn^0FxEXB=+FINe=0YdO@bq2Emxu?6hl)ov!u;LR zT`3vYimw+>qirE>6VHLU5Y4asg?*?{{$= zJ`cLLWo2>%+5W-qOV&NcPid?newC1LBpN6G5lWQKZ=jh zR?lB_M=m4&&x_}J?x;)`XNzlz8;A?Uts+N9!C8{gg|-==C+-Dv6-%%XgQfh%;>*Qj z#Mg-@i*G%1O!>?fF{5s{lHUDrCfp9mM`ePw;tk>##9PJhI0w6DWw-W!W71~v2h3Su z3A}jRJGzZpL0pBl@>$}VFsGe}Y0s4MEyV4_9V15@`#j0$CGIaCEFMAILR?APk#M7w zxmA3-_)hVnrkKB5%ljo`xp=ksDcWZIoOlz=wf_)n|BjS@U;L?fmowM@fJ?yNi4Ti^ z6Q87QA>wd$bxwl05Wl0IY{uiA1$FN;+w^D zXv~ts-7shW9lS)!EE7K_<=0txw&(qi#J5JqsSCpwlJS%HxcF4?!R+kp;kEETr5Mkc z80x{9a5uO)CK%QilH(blatpI9;4AuGLab0}UjjKwL=M zjN8#R<6ctc0`Xw+#p27wW1PAE*SQ2dSv;M#8Q(6x6XtH>cfTK$@(+vGh@TKYFD`}4 zP6L}I<4y60v@OJ^;$1Koq8%3E2PyxH_z&^l;&?PowcX@<70MGHerBa?W_jW!;?Ck8 z;!DIgiWiADh~Eeu9e>`JlHnDWFGMA}GxiIHba8cY4ROA>p}2*(wYY;Xi7w(E;@;wc z;vwRZ;w!}0h$o3}F^B6vT{32i=ZY7K7mJsOmx&)0uNAKsZ!ARXCbxNCk&Mm3$9HGf z_dk`;F7bZxx8k40N5v<^C&dY^%lB@wxJu-+!`)s@GHQ!+#RcM~rFrwSA4%}9i$~>l zAJ6Y@IZqeQ65lU=P`pyiuV}e?{v&=({8r@Xz~*<9-309S$2t7b3tPA!CCzyVo2E zEfg;nuMOmqIq}Ql*Tru~j+Xa5$=D(OT)Z!6 zbw9T6PZByJ{zLq?I6kR-Jt~OP#TjD$ik4gNdg6wWqqjyA$!INRUu|yU&f;QmZ!v$E z%atE2zF2&@cuW%J?_~_~k#LLC2ol9^;KIszhvtstE2RYET#OsUM;hvjwb8!!G zZ*hMyds=nV4i}FUkBxkB_|_aR8P|(%6thn;S1CL2b6zEWO#FNhTauj}oSYKhGH7>0 ze5(JIWPUGZzlN?d_EqMbDy}BZ5!Vyf7dH{J^J&x>e6=LI&Y*#kF+?2p2W97}%O!rb z_!{vP@y$V<8{@NMw+9zs)afC~c|`oU_;vAC@%zDs2XQFvl+YLA1Hl1ivvW4Lk^UA} z3A!%Dm7rF|^6YxzhTUte<2I3Szr(jEo3Ael;W8A1^uAi*FQ97ta#U6)zC8Q$085u)9QCiY*d|ZIRe5o_USz>k?>eehz+(g`5e3rPqm_I%k z*2DF`#3kU-;<4h1;wj>(;u+$*=}F-k)mtR-`^C#(->uC`$#{~si8o061@VXCPsF>$ zd&S?150%^Zj+7_7V`BEA=oT(n%-#-NypEXt9=dp;nEe&HcrP)#E{w4)CWlKUgS{BK z38sjri)V=+rtv1{uu8mE{FL|w@k_oW-VnbnX1BO*20O%i#QVj+i~kaPY321Km>YAc z*kBhQi0x#AvT_O$1!8zCMe9w%mJcJ5p0bAr7E`Pu%x5?U%= zE@rQG?u+LyieDFR6|)aJ_nq>+;%~)=BKP1{!7~O-aAw2=af-OInB8!@@-;&TJDX+H z_1SBki}w=u6%Q1T6JIO7QGBa-mUy;!LFDKVzgIHWh{Ik5Z6(?Dom;*(;p^0@Ls6)TrJO`IjJDXuSWBxcWU?rWq);vT_<)%ZlyUqXY$?EB44c8!?b zzq$Av@dEL^;s?bKi`iow>WMb^bCSV+CmcJJN;7j5c@p179 zF}vAw71b0s6}J=@i@S@5n8WoSCK=a=Cy8$t-zk1nyjJ{@_*F4`)^p!({XBzTX~F@+ zVV`7tE&f6LiXNhZy`6Jz~{8?qj`gbZz;OhzEp5hYmAn{N!yYzE2m?XYg zJWU+7$#h@(T_PDP#gB@g6hA926~8QIZ-8!rc8J4vo3_>cu;Hd9*h!$9fbH;|* z9q}3B#^OTp+2StZb0bIZzY@vlD;_DnLd>2B-2&YzW~YQMey^DQ6T0}5;^+7)$1a1N zt~XKP|Pk2U3|QFviK(POz|DQ zB*ONsjd(7^kAh45A@K?^JFRfvmwr+Fx_GPjJ@JR;aQ(lRj333nihmcM6nlJf(llCV zc5CRIEv_rh7o)2|oc|j}6Nl|;&BZKa?k>JS+)vET2iBM3I3gLx#D9zb6(^#Zl&h$s znEm{@cwI4j`*ZR3V!ucd-Na#gTU)rWy{&n$l(|^U-uvA5Ca)FG5Z^9lH+?7{z5gDR z40hS)Dhk`!Hj6f6*p}A3Rm!l#K39I1nBDfd_%C91;OFAW{OuZ-s3IBF#I?lr#0BD} zVs;AX>O4*>%}*Ur;BHa!-l@Lg%(JheG9t!*NEB8VA=O)Uy%%U zIp`(`8v|RV>>JF*kBU!-Pl^+3mY2uR3ztnBHW-fT^t~*}2wM-^%<4;=of*0rw-d8p zLl+NQ72CAz;?Tv%h_4l2A38ez!fp`V1nk(+d9gSUuM|Hjep&pwnC+5Xo$rfx`jYrU z%nlaa1V_Z|YthA%#OdM;F?&IDN*DzW6qA z*ygx)^p;*wi|2n!ER{mb#m|bL7yn26nwVYxxjH`=?-PGrW~~1YWeLywMa)WEMPch> zTTu2F=;HOn>?zR2&k=VOpC|55`}o6Quw;x9UnyqqgKh?M#Oxd1#qSj_7q1qt7yBC} z!43^wMLWe`i@z8DBK}o;N*rSwU8FgriK|AA-hb>R(G@yV%nlP>yhzNx6J30;nB6G4 z`1Rsj#9_;2TcA1YP0>wow-mZhyhOZ8{Fs)LTLqirMRQW|ZSlHH-%z zo>w``cXhDqN$0b~J;c4m?2yuxA0=krlrHXz=ZNnvccB-yI<^I4qhmMmD)D3DXM(4@ zSI+jgN+@h&Y*nzMOIO8SG5fr9@#EsO-12x;agMmQ_>9QD$DwhQ2wf;XTiiu_u6Uq$ zi1=#pHR74#J9069w>C>9W4ZV-@jCHy;!WZY#2<@yi}yMwc=#F2U_uYYV&n5n)m>rS2 z6*w;bM|@h$E=gVanxQX=W{@u#4aLpGt;Frcoy7gbgM#_5;_EQuB*acl-TY^X9}=$+ zKQ4YU`1t2)+5U?X+9G~S{Gs?0@i*dw;=jbF#OyZJEiQjp6%LPAubE`D61Nj~6rU&V zCGIaCEWS*9xp*@Fb?=twCdrs9ULam2eoXwD_zm$k@dx6a&b-z6!X@Ca**K0c4hMr@ zf59F)F4>8AyyBL(qPUj0p14qawwT?*x_T}Y4;Eh>Iod;)OU4*6dyRD!%@T)=!EHSj zNc=(Z!{TSeVS{m-_N_By?YBvxkHw#zQM&Zi>`lr38F5&e#Axfyr}0%h4prk}`*sDp zg^Z;{arUnoOOM=+-#oMD{TK2J4|pogp-~!)$0Qtj@E=b2(8(eEj}~_yhTHl7fx31u zFXq#zTtqRP#ZRcVD(UrLtPO{kn!s2C4*l?tbN5W|W!gRI#HUdA;CTifGP!@NEiHsG zJ%slxaEq|K_Z!_Zav`=>hHW`^tKi&Ce1REX z2K5GuFEdx

l;wz}J|$wQn?YYy0Bc%-q^bY1?J|^>gPZ#m|dhHe=+yi9bFk;7WX8 z8Q7)X4)K>}e0wYGD}?2-d%d45j{k;-ze3A6c6Ipc=QI~C9>CV-}HO0ARpA$Ef3^r466Bmlxi93sXh%XcmGIOg8 zH{*`WyTV)_#;>IN;mr89zTPqlVE#-x7lLa))693>JTu>v#w(k750hiQ6z1=vv&=}iiMX}-D#Sa` zJ_<3>%`zsz7npB=2a7K?--7rU@pa-G%u`W@Kfum~m=E76USwX(GHemSLQJql1pNT~ zq0T zIU620FB3m%=4tyWGf&kU%{Aax%y=5>y=lfnGVi_6*#GsA_{1{u;4jP#;BU;0;GfOB zk2o$qY36N29F~>~$`ecgJhonF=Hm!;(;Cwe=9V}jJ|XsSMdY+BlWZOjr<<>ZbId%$=9wq+{NK1N zfnN_6cMx|o--?OP7xy(!LwtxCReB@Mv*4@Ecfr@2=fSto{LaooByO_|`fl-kW}coO zHuLnnM*OUK8R9RBH;cE4KN0(1TH+B*d_eqz`7y+QGp~jJF+U3@REjn`ooe0yS2u5h z>zH4H8;j45?1x=V7E4B7^DCHOn0X64Ry;*KQ#{|i73Ci^zXh)`zYA|LzYo7w2|J4i z4ioQ7#^>e_5&u?vSp28?Ba~s|2G+9!PR5zgxr%u|;yL16^WQvJ3S0tiVNSpqu${O_ z+)La~Jk-p7?M9h-p&Dnd4o?=)vmF8_M#B5YJRGi&8pXq2_sruE&oy5IHxsuNcQsE!8MZ@U z{WrkF=xV3~Tl$L7*#1mRkPNmxV4*V*pJpzAXPbHJy};ZS4#X?OkC{86%#-FKc%!)( zewFPII5VC~+4jKs12a#nYxkRX_)O0&!Nv&AMdI$_67eAMCF0A|c>YJF+@#l7Mr-&c^V#q$@j~%3 z@ftI)e(S~mG4sOqj(A6zvHJVV66mNy{HGa@0z5WD;DUCAtB7lu&qX}X%w5(*Tqy2f z=C15U`>3=8i4x182bnK~FEtN=$B3^p^Ml7t;u+=tLq zJS+Mxqn2fSibD0pXPQ4pyp4G;+{yeE++EC;39R#5#D|D4HUEG(8!52NQOw`Ft~}x0 zY(9oUv&3`Fe<8lu?8R^-i&vYI5MO8J)$ciT75GIne=}xFXl(y1B-ng`OGJNU&VhG| z_lUm{{~-R&oQrAyF*k-2sz&wGmCWpBHk04k=Ztx|tSxR}=B1OZ8d!#IZSDoPH}lHb z$$Tk1kj7IgobJ70;w!`x%)I`1Q!IgF#+zp5Q?c1*%-dUNt`9E}uQc;&$yN=VG5xH$ zC0r_g*<6VDCsld=uZ_)v#Fxx49}xdw=ED7E=I6bC%v`t_mX_1fmCRTUFVmb0*B0lS z!+)j}lqK*9R@_e9RoqM5-`of@xY*nj9wif{4d}V%=J35{ZpNkN zLU^^g4g92;HzOO(=fJOs-!OMX{5^9Q*k>CG&X|cW%)B%CM*Oq*ck#dG9w=WSGpdKK zY%YPb#kt~!k^S)M*TORTV1l#F{osz`V)FpRdz**C{l!DXBhAB5=4$bE;u|vY{^#0{ zLZMqMV>G;ou8X%Nyi~ke%qA2p!~44p<|3F)C>W>NCzdn&#BzS$8T0qpp2B6YPb}we z#Xp<5YmS?{!E9#1^1SI_KUj26IK|8@TFpEVW|Iq+p&PD74!$?uEY=|72c*_;K+`aU#w}oB_+Ei8IYh5wB%l2G=() zhtKpau@Z?k=11U8<~1r zxL^FRc#Zg3@r&lqFzsvNx6Qn7_^*zXwqE&QALAk4NHjQvs>xlcB|HK4C%)9{^X+8RJ{SA6ZL%mz5s zyb-Q$E`{rg8<}52yd~^&2Ah#+YZ+VNA~CzKV;RQ#nR#Zs*!(Vhxp=&JAL3KQ)5NpO z?R)Ikjx*o{OUyhQvc(DG^cpko2cI$j0B%#raXTTSWN16Gr znQ`VbVYX1=%$mbf#dnC=w;s#z-}DcdeI`~~qBXqM%m-5I#V?83w;n5EnQi8C;E&C` z7JOmmwcvoc82(XwtPaorsE8T=SjKrUo2f8PR}xn>_dvX+`FuE6TwvyXWlQrQm`zz& z=Ou7g^QAohv-dt`@X=Xc^JsXec%*qM;_SSS<#}Vt4*Q&M5zi8{^FEfDgYx&8=fe-v zJpVJX#xm}O+1!N_(3{Nn!>^eig5NPe0<-B0%Ws5tiT9gdLYy7;vCLcWujY4QpG{ww z!34hw;hbRp1o2vQ18f}>X&`PYZe!*Jtdn^t+}(T$+($e(vhQ7r47P>g3`W9Z%)Eh| zVCI7bcFe~z^vzQ#UBu_HeZ8!o~-9bh4_SGqh;I(zaoB9yj}c>c$ave z_@MX~F+1$z!cFxtvwtly3$BnGW!w%|7H6C1BVNzE7%nhB0JkzPgWHR{nwKNq%e)fq z2m4%#)kq9Qf_@af()>7ly?H(Co1cegn>WD=%`d_Ciyt<>g7_NqUiew_K~(9LmM6Sd z#aqSO#Qzn4CjL@aGSYr{fpkK-J}3CX#V zxh=|szxR*wbZv`wf*XjNnu`!;(;U{r>q}=duPNQijQxLsC3+%bu$fOQE)|b4^8?8Q z^I&+gc$)bm#Mw-TGu{o)6W?n-fcQhSk3!!dvC1+I!HHDrRSjth7QL4(s~mPBNzxvtgYa-s% zTpKa&kV zPTm<_Y%YQy6tfKw%P{_!_(}0|Vm1nL3>x>5ri+f3YoM5bj-g=?7Eq=5ZCvJ72do&&cu-vzTp z5zEYjyP6lk=ZgoJ??HU1Gb?2?B2IiSe1-Xbc%1n`c(VB+c$)cP_zv-W^Gd`YFtfeG z3iDc+t&2D>`WcMFYugh@lv>8q@MbZa8gYX4i2ql-%lsVT`^_8SL*ie>f16)InfNoJ zI=95(+?HCN@Yq8oXZAh{)e$!|e}{Mr^Pg}#acA@2h<6j8FYash;&B=ajs4HWFv+;W zTmfiYmCX}TzHzf5qyVuzPT~t_nVu-Y?H)#*mz@&`7HP;-xBSRctQM{_)T+X zl=(osQ@qz)gfico&x4PMPl#g;qXqJNqEJOk&>7|taE|#3xURT?c^u+R#I400#l>cJ zbkWOv3*4VwY;v>QiNqzAL0>K&Z@wGxDdq+6H1QqgMTjpj-vLw+9(7SO)#7c^|yh%$7de&ELSEnGeD2-I7~~{?2?9J}mx2eA;{r zWs(c*{Lj{VRSTku=$hseaDDNa=6?`xBkm|Z&&+RZTwsoe2br9H+O_zHlGKxi_P%-&%}1g_*A?{{I!_f zaB{}|Fzv7A5%8bpu`rt!vJBcVd6mRj<@UXLmbeau*jFbfxCw44ZYM4h_Y|`aPdDvQ z@hJ0j)OnSe?WHD$#{OsG7R$H|o?)I1&lb-Y-)FuDWtN)ngI9{zh@TQaXAV&QMPCxH ziQf{xFaE^*AST{rUIFhjuZF)D9~QGCQEnlY`Pb~ffka}HD1)wSehzFfPc2LR%%7UAjYr|)WJDKYuey%wW?qRME`E;OgZOUzZ^<>n0dadQs*bY$PdBTbK;l5!!qbnntQM>mB(6n`q-BmP$WqxhKk zFEN`kv;GdKKb4((GSLZ%EXyc@bH&ZX?Zw6B?kL~W+zakw9t>Y(9tn>SUuB+z`FoRG z0=~(NfBSkf#dnDpnfVYdFy8{NGEak_Fth&W#4n5Agnh0(3w>Z2v*8`$-R3(HKVY5< z|7hmJwqxe|VD>!9Is-VqS>&Z~s<>LYvHvZx422q+SHR81XPX~Gyo>osxQF=}_(JhT z=8cFC7mqf-i}-}lSoM#Pm|_|9bn)%xorvFQ-UF|oaivRz*NWGRUo!Kp`-Zt1{I2*T z-x7RF>^9>+hThj^zB_&tvny22I2ZAg=9X|`^C(WIn9qVU%{;(snY+Rb%svy%B%`&t z2jU&gec|)OeawRpzeqgXd@&=C4Vx(0s(%S*vq~xR#jxv$`_P%se->7I!c|fOt39=L8QT!46vK zRWLhfb-vX6DB|ptmGQ^nYt2u(t=JVlu%zPgIIF0*C4(vbG`9<+&a~#TSH}gj( zyj_;4fQ$p?O7KB*8qCg8St)%&?6r>KRS;(fsVu{5SGu_ooMpyk%d07FMf1Lrr}A@{ zFc*t^n|bOTVCF^b67l8Y@#0D1Tg*H?-)24^_UBpR0wnGgKV^vr-lsAQ{8OW5g51w~Fr&FBCs0enkAVGtd8}mf!_ri}-!yCAL@oo=2F*D~J&7r;IX-HSvU%b<(Q_rbl*ykHD5uYyO5Cz#hEe!ZFJ{F}wI z#CMn5_wKU<&(#l$A2Dx1{3-E9@hfJYp5HL@^t|1?4gSphKD<}_eQ0cdW*nA`{idH%;H9g4(J%b@=-^Lsa^&7#OJo-9>X$UgpA&n zaWOo=JRBY-zCt{~JPKu|n0c0;W}Xbs7B3J7=Bd15ue8K;Ot4P;ocT7yUlwmM--Y;l zW}e%2i1(P6ApV{Buz5A&f6_kIo{4`ggEz*B*lpY@Yv6SAQ*f5Jw)q*vbImWpZE4&a z6v17@J;Z&*{t!!?iwQ=Uxi80>OW=v-{_rj4LGW$jdFCOAFA+a#=9Tbb>#DAN2p$s1nvi>i@O6GlVrg=XSJ`Ut#_m9v>Rp{}d8aEQ6jVo^3vj_(F3WE(J@( ztIWxWKOufj{Id8>@dv&os$$|D;xEnou=K4t3;xB-uU7pb{?}X&@d|jF!p)u!S2mvk zXNz;qJ~Ij=qtIM{_&MfgaIv_zc!2m4GryK~xtX8d#+%u^<9ai{Sv9pI&;M9bChm}o z`DT9C_W|)T@grt_2ly#7ZxuF*Uol^R_*-T+$}HB9`3c?}4~h8g!JUcQ<4r)P@WnDJTL>m=@O z=Iv>pa{JyzmcZrO8)3$~%DYND$=nU`TgA7Vdmuhfe4m*&G7p=1^YWOPH!n|z_M=9L zFG$9#;KR5g!BMon>jaTD_-lxc0g z1@2&;26q+rGT(uCfAc-?C1#(A(Uw>YPY_QwKZy9P=2h@4GjCQGnxBFn6t6ZvgZNtW z2KXuSOYqhrp8s1!|2N&v4D+YrFU^%O!MElr@FDSOx@A;Pa@TTK5$Bj$Pi=D*ue48Y z&QBGaHb4-=p=3PsG#?l9Xa8J0HMn3Yx)y1`&>7KWEyW$hJ;eiQzPT`r5RVt%B)(mI z56y>v7?wq@A12mH#zrxJkT2FKsC#Bk51(&h4ArpS?iZ_b#ZATS#NEXFr96HOg#&*n z&zZlJ=R8?FLwxo;Ni3n8L=`L5Vi=l(8W~c(!2M!HVQPkX0+)><9JTP?dT(g|pT!(qz zGK7;Xhoj#goM|XgsgyFpuUb9K({* zb%*g618WJ{C;pc7bMh1S;|*T0ICeZU zSk^hGO5C>JuTExAyDQ?yD+kTHB0fF`pK-(D;~7rP45l;Ov<9xJ zVfYn>msATrWVk27*$H8+8(q&H>ZB${%SFAeK3-2QwNW>g1g9jYR9~d z!3J_{U;H{oFmh^z%;0BCn=}g7&u`BN;=1MJCv`*Xgc)suCU9K$TZ2B`avH|HIXAe0 zSO%4EW)_-{;@+>T`2oxcS8&O@CW5q>nN*quv^_6m;%t-!P)U*oA6PT=Ek z{0tOG&;kn0B&4R_U`_Y7Z$ZUYfqGcKb_Q z$&snC?9$N<>csydk(@bqRIQ6wz0y0X<}S@Bn^CkH4RW7Y;|gPGvP%=*&;7DtS)piY ze$5>>#f3_*8I$*M+5Cg_*2!Z^pT0Kl>atL2-5c{hD@#QMM*9C#plaIuxYEn+%IlWs zY7Gv@Cyy#kU6^-m`IHFND1GRGy!HPR8Wqf2lXtju^@_ZiN&h=F;@4Ji>k@8?oM-Y9 zYR6K7I`8F;kNYdF^zQfa4y`Ghh>IR>(x6_opQM^CTIT-G(CX}# z(GEK+_;+;G?1Zxm+qDZeB*YpuSi(oe@zMX=aJIs4RSXMHmvONq9DDcxJZr$^LEfQQ zgP?EqSfc+yT;8vzD^4tkYg{$&=;_9(`76ErVF`JMPsfg&-i&_%bSr8#BY#+8{`M-d zpQAu({QFH~KRV}cuNFHLB?>X=_MF&vOqC?0#^-Nu8vBNc;*~SPyz#O9Oy;lrId}Vv z;#KWZ<2To6nj720VBU_?onnn+sok2T#&$Ch?E5D(E4XfLLR#5^o;ba`U+UIfam`{C zC&vC_p-!>XjM$%4YDRtuo-8D!o||71mmf7nY>;j2l&wzPUlwqWsPKi>u}io|4=Acz#L6qJpmZC6zjk$}dUH+k3iy zNpf*X%11-|$sZL>$&d3s+BKzrN#){_DxZ{8t?)IrOUCSEudpPuFqWL!wy>mHVXPuH zLSaeu!dRtAB^iY!S%tBb!jkON%L|LW)N>1qW39HGzA1kD!BNF={fpy^ixWO6PE5kC znH29$Dvp~JADdJhKPf)0Fg|`#aYA8nV(qPk#Yw5>`h~?6rXDLSPO1G!VR33|{len3 z!s7Ij_`>4KwGpn8nps#}H8p-zadQ9Sip9m13X3z6C%!v!SHJu>GBdX1rXBS-%)6~1 zeqM2_Q>XJU_ZaFKx4l7k94tfP$0iI(9Gf)eg^XUA?cQCG^Ui9rKzc^sLr& z@SFd(&j_pO8Mo}s)Wo*;CAX{AK5l5Wx8uEnYHjaLEXZtJZD?lCYJ-pe8;o3=(4=g) z9Y6g;*S}gF%0H2j_Z#+L#fiJ(W>@kG(o#ovO6{E=9cSD7r^e0B#u7HG935x1@?$@7 zzwWAYDsFI{Q-5~eSNk^X>w}E_630pZio?X;GL7AoTDu@F^|r>HxAob5>1G^LUorke z-0t*@PH}mkosN#NW~o75%~+$wD;rmc-5GS9pVT2(SuZ`&|M<}9zb2lF%WpQL;)ZRj zewaD0I9i5i2@ZUHIyEyj;pn-yHBK+;J9&GX+_M(XyB_n5j`V``etS+A?v3S7m{Ghk zr*La--!p9Xh0Xd5kDK~i%lww@5_?u|nV-95$LYq2c^{wd6_=mtW&M`gETMR0TDQ13aN28#*-R)E!%bNJGSeX#fNkG z_fX&b&4nvRH){PAYCU;xQeCgsxv5*5rK0ZsBV(~Gtc7(HosnDo=H-36<@RctKRyfLi>6p0Kf0$_8wAIt63(`y4#7dbgNN@GT>C}YS3ruvXjE(<1^~v72{ItfY1F$~% z7c@@Z@b0Qziw?~^F)?FH%e14-5@JuXQ1P=~Zp+C<{i_sjU3TNBxY=Kx?*7GTo^_h| zd4HVF*s{MMZrjL;6F(W5`1Qzy*l|v><=4~sO=rwo9s7+bo`%NHNbQyy-z*k8%*e+- zo_;s2dnK<^YO}OMwWAYIL29QM4ubIfQ;-@R95{b`&+;Fn4{mxYdJ7!tTK*0Q7F-`! zDQI~pmK`0R6({cQ_e0m*H*%w;*pwgJK0Y-rDc8dgJIab0W*p}3Donygjm3UpC_L?i zhi5@7T9UokeX$>y_e)%U)3|6+4t9$B{J9Mu?drO}UDwYSug&e*we5YY_uJlj@Z--< zr*5s)EG@Q|lNHo%T&JLE<7RoEoGwiDc&^9@rd}Ucqf5q?qucU6h^yFYch%TGEIDuc zru<4D|9Lt;&D%bzdxD3hP4WurG_GCHtZ~!SjJM;wXcG>;_uuX(P6u0ZVwu7EY1OOv z`24wL{|{XcoH)I083Q(Ct#EGRrtd(Ru#%IVQN z6WcZ1{@AYJx_8IrrPkh$KAQYN<-x;FZkm5~&-7i@h9`9Tzi4|C@HmQVZMb_jjb=vD zXf#?aStEIqyh~p2iY0FtER2yC3>akDlCi*+WJw0&7?0WafHBYn9AvX)!4Q@}xP&AI zvH&4r30WYlNl1V|0)cRygxLT4o~jy^47vaP|L^(wQFXm_>eQ)Ir%o;1>gmo21)Qh+ zHT4^2je6Msn*X%G@&0KAH90GHADUJ%y)afVJ-XU`o%*xIUPYN(K3SUfa(;H*YyQ-M zzN^-)FVDeb0=vuHzVdg6Vm?exXlLEWhf}FQ^*p@qI@6xuOeyYb^|SNDGM`olP$KNO z2U!mX?SXk0V#u!SI~1)>ExT~#-~Wv@?rGmRzxP7@&_eH~uI$)2DTJQ`xc_9Kk%^D0 z{(iWA@7C$QSR!1Pcs#CWPN(Yd;Tj(&wqfbS;|CfV`d)tF-N#?^ec+EJV*Xlf(=;*6SUJ_t1(dg}d>|N`KRXw5oy=z| zp9oAlA(o6znmGKzRI2aU>YBzqFIK&Ncy>%Jm@vJ}XW*v=M>?0lNXNG5(eYdAJ==v@ zW!+@|JXOB(*@IqPb5VhJZC7^KJN#B+ocKIczpu8j>b=98{L>P?)`IEow8ke|6EC*r z|E@LukB^=$xTM3m>R0cC*5~>{XE;}VIW`p2{|BLkxMInzsjhqNaP5hhgyuO_uO5!Y z4*JfEy%xKq!nrJOTI1rHSX;;W=Wf2d)%`UU+Hn5X&6l-4+w)pp(ZgBPch4oWL$UPy zaba?~&yi>A<_+hk(ih^j-=D=`4_D_sZOXrT0fyI4n8IrCV?(WVDK1uiuySR~!C2z7 zyfw`irp8W8t%zTBXN^1U#8D6W7EW`17JPQoCDmXAXVIwO!K_~wPpWB2k4*R$);U%8 z9DaUw%6)($YjWKC8N+_}F`m{KYg;_Qy_fhB+_9|NcNlw%c}^_1YVYB9PrycLPRv)^ zvT(d}Fz2d;H6hx&Xlz!ETiu0=2$8#&Wvgxw?%6qtA2Z7Stb^&SnwIs6g{*_l;0fcE z!uWDa?VN?B4p+I3^WE#1v*G-I`>vW=6Z$a*{hk`PHm@d+&7J|Yk{IqCf46J9LtJq3V-H%_BwQd%n%E|=Tuh&7FE&e_QoVLw+DWB8S(^-wo-%RbCuh{ZeaVN1WAlGHtD$P=+ScsfJzMTRK{G9` z!?bsR=%WV@*V5vRJ>QCN>uKKmp>t0DDXY7?>o)A#wk6g)Yt?mo4==@UY z%$+s-nB8@7hP6RoDB_Hnf}N~;@`)Y0&TYMX^Hckov>&1-cI*=sVew^?|9#);7Qj_{V|>zPCM(HQ&s81 z*ut)C4u$5z;d5ij#dYo#WUk4t&ASBG2_x%|TR+!#$qZ-V$`g~c z8&cgfk4EfC22ZJn5zncAdr@Fz-@mIi9&S7nbK~sXrUmX+N`s?qI2@W!rMECmrPI*5 zIiqzq$wz3tk+fKF6SO`LS_kj~&C~ohCC6on3Ku|y=|ie75EU-aDqLz*SbVtgSgH_e zTF|k}Jyk2Q=&*Y-;f7t+p>%H11xruaV|{B}Knd#}#b{y+%PPS<<&;VOQw3-g=zR-dmRXDl%e z-j?0B`-O=`=`RPa3Gz-R3hgwvBITj>Gc&R$ifjm_B+b3ky~_9HKnesN6vzJqNVU)f zHx!}EPWNj601t0$?hY1_~h9S5z{VIpN?Va0_2J>p2+67YMdN`CtHo`}hep6nqf{Ll=WJ zD{vLgf#FE|3kw>F^Wj+js^qD}k3oZgzns+t?u1f-U^y!Y+yK1;S>?FT<^HUqYBnmh}1KY4%StSKosJW+}Youp+l3x zvyh0aMbXgY?4KYP)Wc|0XnJWCazf0`=7)unSu?|13~$z~Y+@(Uj#Jjr;cp>|J5iRu z81&c(Y?>Xv6L=8%XU!|+|La4{$VrA5`uYFs+>Y+4PWYHOiNKSc@S-@Ya_jS{N$dyN+kpd-DbOVLRQ7j~2*)?JcRI13N+J@u7eZstO9!Q6k!5IY z>=%;CiTAXxcVe#;&`)wBk5j^Hl9Pv~Q!m}7oXNTTC3phYL^%Hud~Tu<(3e;Uef$Yd z#(~6FKo2G^1tpYNg4SmxE}}AtPa!Bfkq>)D(ur&&qKQ^GV9Y6QKtq+)ayN(Ou!i%& z`59fH!JPtlix|wopWPu4qY^mr1RzGs8o3=ye~IbB_=01#&Q#GP7PR^l6?I^ zZlN2VhSYxkG!U;Ub!E)mm;63z&mE#t2a^1Sb#BT{u=3}Vzh=3SZb5n+k}oAchBxJo zaf`1(>Nm;rp?q$gTYNfFuO@S$ckWcT{2`>?O!Cp3+BNyc`%qvCrh6DFwPsfy>i_OYrlLD6xwr-eifF^7-Y*tiV1~ zg1szv*77=b*30>?OXeSNmbS2^O2jIDp0a{|?gXv|HTU&= ze#c_ir!i}IHF zsUap**hVKxB7Bn!64Z5KeOx6vdf$?TSQQUPn9EE84U$>NgJ zA|p|2-l^ifGa?^T^HU3{)vU-1@Z`KTxm=|hBFm`4Iw>4j1V7n@4gDXl%MHT%i8o;iC&AB6g6{&_WwQT0@MS-a z4k(FF4Yz=cTZH&g1+qnmZ)#oV#HY#DArRrK7vj^ixo3*W79>6+!TRH>17{YnlBAQp z2vImbCw?j7$ekSj@rE#c+=*1O(#AsO1mNAQFYqhU=K6@M!0W{4=dp??mz0M<6eGA! z)%&n%ex&eDkg7Yt=ng3?2Vc-%gF@9MAiL!y^y47S;Z(mvo{B`8BSn+?Ai^Cg+c{0y zhD^88ro4yJZpx-`U*lE};f6<-I+K+RFW{F06(uXc?jie5zs8 zXfk#LO8x-iMIdyOcs~W78HlH;WfX~jk$N(W>Yf#dleiT`?j%PY&+;1;@hK4a)Z?hf z=uVpg5o*rY<-LPY!(E))8HiC^|E~MeqqvcCyA*-%rz=4iMWJqYK%8SH#~-(zwf}|s zAF0MG?a>LN-DUn=4WZHQa(Ajz`>M{lRdSZQlbzawn)DsT?AweY%or1b>>onPm|P8N z*8tpIg(n?_wOQE}75MPP*q9A`4)%HQ*LH)Azz-vhcAJ@7yB)MwLE}z^v~*ywV%(oo zbc4ztB)XP<#lma;L*aiS{~dlFX{%yz>mb}+BPh39pnPdP2&>aL zjqgRB$0InXwdNCg*6D$2D(KtQP~ZLfflpKh-pJ zaqR=3eF8pyERRN|!z^@o3W1}o9|#`)_KeV14^~xM4zmLUd$2)5C%HtSPmp+ zOO}+{find<6R!246|>dA#UOCdD42ElDKMKmK2SnS!6BXTP!9APP{F8bj{J!MxxBg? zX89Vz7~X)0L9;O<0ZIUz;r!gKJ7hq{d=c>hdu%^N3<)%F06vG}d>5CJTcPA027#}i z8iVIuL~eS_n2g{@I9h{BFjfKiVwJn+xHtqO#jHloU8BIpw@QuRH$6dI!pXZAgbsv> z9rUFvH8HpYT92Det^edNF?UqlJsa`((x~(#&cpBerPbeqfQJy2o4n_jd5Evy`Gmwf z$@ynRoPt_LASf?;-!GHfJ`lcwP)Es|sIi=nBEs#dX`t3`!|6@%{05=^Qhpw-5@HJx z>aRoAdVn=d^doU2z_m>5N8%}f15ErE5R(XSn6i~F_=0~N=Y3~5zgz6?_h&rsI1t@Em1*2!9`QD1?DsFKM1mXM zY6Rsr_o|Lr3Bq!OjN6P^fa2ngSplwm!>cHMixNK^dHY5Dc-*{F(zht-T@ccNQ1ckK z8Rz(uX+A~n+qGuYRq#r8t6$cR+re=Q!YEl#&Q-*>KzNx%SyZ+uVgC!-6~=+GV%I1@p+ z{VA$r?*ZX!B%XmbyQiu?eHDb?AgD=lwO{U+zE2@hWF~ko;xj0%EHG4AVEir=Kt|fR6vml)ER5og@n`d+RspqCjlCHh zE1?MLGK<$yKSlm?pra<9XZnLvK$-S3PMlz7B5>d1)V~eN8l;vY)bndsF9Q6SiNiU{p+1(zlZ(rNmLQCI6D6gG-#6f(2DL|{Ms{@xN~^}J?jD2309Bc_2Hc|o1a3ib z_Qsem0jve6{Wd@+z?n);kn0~MF7uza*T>Gm4uE%?&IQj7;aTnr&vR;bfOauxHw$f9 z(9bR*|3qgje><}adC*I_EfI;O5IGFBRw9i0I-Tbh-w;;11cdn{KE^ig@yTW5bs&5hVOEFZe$|)9 z%hVqt`2a$Clssg8tD+tgg9#8uZD&3GzPy_u@@WvBBylPi@4brnZxB94IBG9AUWY)} zN%8zMU;IoganrsB@&fSBL74Uc5|;y9h%oyZBo=}7IItc4Q+}S(zw6uS`d&b@4FDHuGN%Wd@f}u zJQu>l^6eP+7rw;)QZ#!s$eqylOoZt-K}h`+P;Nx(DunvENW2B`8WYDO;bQx8n2A+L zlpv8rsBcGNKETv8Q$0xWE4E)psOw0<2~n>rXS57gRBm1|>%Ih8pMvKTglXH5NMM=f z*Jho%7b>x+NGYDNK;x3j&1+z(-y>@!n79*gYAJdL>RXO1G(9a_R+jk)Y#oZ|-~O?S ziyRPd9fryao%q5z?O9}@Eb zrZ90Y688gq4M9xE3kFv%8^naKx_PV0v1ZYcmuNNT-!lo5t{Iuil$7sA4Hn)S)0tEM3sAm{ z)D;NzZzAz9zyk$nfBm14`V~?yG3!$#J^*-^2|wD%y#v2BS|3M(Yvp+eN6|@Zq~7OQ z?;UR5gX~l~=ueUVG=ezjp8(!KaB9g-oBc#JMQk?PkNRn!cQx_z_QC(g#XK=I>x=eZ$^B!sT>2V-wSJxJJz2KVy(s^j*~N zG)(6Dx5Zb+3(mLXsdfVs-VlU5vRMe1{$%(P0)O7 zM7njLidMUdwRRQj2C8V&Rm^-0W6_=IR!)Y|?qa9x;T${?b+Kt3BLTFdoM=Kh&8XA?Vak~@t3<8nS# z4nN7AOo}tNi&lR^va#UHV<7IHjuem#j3}C4utu&*t5Am6vJ1a&7t&EiN4;e ztw(8WsMF3e6s9Wbmdq??>@4K)N({uzRhYBjx7_62uk_lDA`7Ly`(+$1lv|4TAItIM z9J2(wd^ar@x;04eLvZ)-VrSlF!t_l3@A@)me*r>zkz6yMFEQkWe$jdODl6Epu_}?-7&>pd75I)-*iP zxq~)bi^kvz2*KTRs0#JZyIIIH4nf34Xu(c|d3%M{#JdXjAblsoBDt^KCRX_~(tkq0 zq(zovzmBc2J3}PbiR5!pwGupI8U^QKd5s_(x6((><52patOunOqc0ba0BRI$Yi%O1@|AAw3i}uj&i}~MBcU2 ztK&Z;Ls;v42u{;X%!6s35+j05y_i243fi-pE<|e>lBZ-fZN`-VLt<1`(_GZYkUS~W z^f>Yv5+k#k<{+OTF*(%a2aO@})2!n^1C1eaxtnM@3N2xw z)4U9kYu(WC+aZGiewy3#JoI76yDZUEljEfDd@AnE<^_+x0Yruve$&#l3BANnu*Pd0 zku%mSFUT(PzWbwSJW%BL!`_#tC+B!qPj!cS_xz%~U`h^XGomx2)1${0Ohc{t0oR{< zbTo=2$ieAR7rPm}s@0#%U#J!oAU7KIx?W0^mj~PoABvN&Nchl>VsGC!L&>}nVGkNX z-h#VBji&{jW5GJK&>dCEGL;z~EhJS1h6xZ-H5s)U-R6{X)K=RhAAEM$Wak(vin2@& z_dZ&jRpE_m!xP*u+?ieAO_=5udaL$_ibvKJu(r`x;3*Ja$*#Fz9&gHw$tXtaN-?bQwiH~z*vZS>sLyL`ABz8cq1tJ|0l6^k3W%Q(WbdU>tM`6OJg0V+ zEnBNFJBlW(D5iv?MKiQ=j<<79ezLHE|0rsN46P#jV6NwWwQz_#&pUrxPJwU!WN%we z`7k%=-I`Ng?%lg5KhIs{op?`afw%Lk`4#!Ptau7-z1VYKDlZt-G~Qv~bmp4A!v6yX zke%M zF6$?{Q)PJPKN3oM4J#_bX$mIQ=S=MX8sbNUW7V-}^vwva)3OKAGYaxL?k@_;l7^b0 zkPlH%U<;#cMPp(&kBAEi67D$%^la3r*3gn<3w<1sv#&cCQjOGhGjSE9?dbu6gi-4YBbO!>-jPF7K z`2eCP6!gA-LbB+@B}kBm@lBGkn$hQru08a5bZ2ynT;n5Ajlu zgz~CWLOzX=VqV5*uA(wJ#(V4IKxvwSCnB(cjMpN#&S{L=5&X`1>HaeSWUnS4LPr90 z7l%BKOIa+;m_7ohVf3ITBa#C?&cR3r5hr22BYC~YvH)7O)f7XM_?+#5HHaA?k`eVG znd)ps0GZMGLhhCL>xzuC96=r1jifsrjR5l@N}I~0B3*+n#nvljH-XZHKwTMMjNm%U z8C@=L8KYYi6=yk6ShZRH>qYyqIAf*!X^hfJ)G{N=hyUDB*0l((vkYfB0%9|&@p(DR zDM!`4LUCh85nCV0e<8Bbx2%iK3n;B-p&*j%8Wy2Es>+z*3+$|lXQqT8cPlL zob$ZLZ;KXqr{3X<#!gVO7_Fqk7q}HSu8o%r84kixlGn`WCjwV9dfvnKUGwwq`S29xL_cS0m0y;jj^mfoGi81GRlxFmZz|(P-0|vn%WoH1Gs%bl7#$QE1 zVVpC^G$3jUG8H|}+qWS%3F(}5+7VckaVG-I%IG?Qr!)GBqT(!vPsSLFZa`pB#>z8R zGrCQa5y|0)Oq-oXLFF7{Z0z7;6_OlDP?gbM_CDrBM0X-^U2g6tdO~HG!mj+k=M5>y zy5ta7HwnbgA^Z-3I{%I;`~eA6#OTigm*qihm55%(Xe>eq&K;UIqMw*A*mj*2{NK&P z0-G5rT{2#tsTQuwDp`Aw!RWsQ zW)uk`srU~fCO_kVsL&i6g?OmKWHZNQ0JkGRB%{auyLTOz%qMl9P?s@!-0z+LfUl^W z+BkQ`Y^QN|AtD1&jDJlqWe%Mk_>OkvIdEb0o5{k z2?4*7cl!xmSM*O2(YRn?bO?bZ8D}XQGs;0g$#lBE5QuMg2R~Tk$R4O&>GC-ps0Ru# z`cFFiQ?amK2F%q)g)ru)El%|?w?B)IGf@?g(uy>oPR7|HR6;CA`?4|rvz?<_X=OUw z+OLWt%Ne~cqRvYPjJ+@w2WT*5i<5xlK-D29KyEUI(Nov^!XK9RlTH1%$56spy~iR9 z@F)pvyDbAAVG84R>S|NWauh!v|91nF&fs(E`b)HIpEI?ebud^RhOR`3C10o#iw>w{ z3LDCj@_wTw;*6N9APTd~H?%}Rs!36RMh2iM>zDuj?RUKs0>Q$x%YQ?_jiJ*DNLYgq zaHjO{_7RuL702#@J9-M|~8y^w0dK0-k z;FK=|zK#&UFa6wpqTeH+9~u22lR@;Z%3$<21R3N?jyit^qN=l5>Xa%^S9usyxR?fI zy-+iYkRi_y@~T;gHY=#g$^9BaJ$_8PXd8-C<(4sOlyWN=DY%T$aR?mAdUP|nRFl-; zUWL?|2-e1p33Uuq(M;7SkTn~@Fq09;iL0No)`_glyydz-hp?B^IQj5Il$Ptbet#ek z3`!;$VEzx?ej=UvXi(~JD#gxH9c9UJ**6T(#&px5zTrPEVSoO^?F(JtYG`~Nf|5++ zsWvdWDU(6;Rh7Z$E`&kVP^J4od{pr;`ny0nru08zQr{8kAQvF{F(IG)eMG9<$&|L_g9d59|11legFI+MQNo< zGgYAg)?@_1$VPy4Im^B+Wvwp100dgqhZ#oc4&l1Tna7}d+)AOxb&9_y+>S11l43sJ zh5R^zFG9mSeo6%G{YYxaw2&jRP5~T+-n?xeN zAgea7rjbHkBIH#|5nZgH$=3T8-H|C|QVh+@Se0A0gr9_6Aq7`3Qg9ig(-8(blBqUD z(F^rPq;?>D;aDE1qM52u9&0vo(NH6>Q+k%d&Jke)JsYC^7`W(}R_UJ2pUoT?JReu6fY2=x zBz*7>xU#>WAgmIBeu8|J2=)`;4Sr+`^%In;L{>imFMyB}?kAYff3zc&-4Em(qp~9X z1jngFw4XpHVs;|OPUPB&JUbD$6Zv)`A&I<|s-l8^f>T}3-JVl0qz3J-M}S2c-6(K1 zqo=*b@A(S2_TnJhLIe(a#@x$egDv+wt^`JLMvn^2%yby*$l<~A^AK2`aTfwE=Xh_2 zegw$q0fEhoz9Vp%+_(bdfzdew5zFAZosojgjDD!7ILo0}FLdM{YcAGrP@yBE;k;*9 z;azoeQ8dc5x*?zN-h0fqI9#Uq%DmR@c%k?1C3vj|$28SuTqxPg$u&}7Go#Up%4mY3 z;w*>Xk1eU7Bc=FoAIFFxHiz8DvP+a?D#o2MDZ)B{y=xkZ3gM6Hhpyg7_k>EluFXS3 z>18=!7-*T1e1{ZcDj=lEINyc9`Dz}NBo&sDqfW=e5wq*|A*@0;6MRf>Ltq|JdW%N&Y|oI-Wg(7+=jrecpiZk zU)hWk1wDumMmPq688kQJ83?Q(ijYEh34wY1*A=_saZ9le;M0C*&hC9Dm3n_25t!p$ zJ2G&A_k$;Vv!dhV6&~$9XSerwFO+6a^8OO`<#??-OUCAObe}!BrM0cCXZ!{y;O%r=xq^hW3r!?JR_*wfA<9+tkt9+tGOj2ymOW z_Vuc0Z(rNSj<@k`>wS zX2*ct>>N4gX0R_i@5bL(B`4tW-=7U~Fft&}70n|4w9(8J;D-FJH}UoC!U((2|AcEA zl^%XXqq6-WDKQ-F$TSWBdazj#v`x_!ALO!4&^UtJf{Y@hv-O}zK`6wAi8eSB@8CI~ zhEi!&L4o(LYvZM9MW%6#Oz6o{%JjxknOwz>8dY_{TBAt;^hCK}E%atw;Lj5MYyIa+ z8qfJlA52hMAm0HU|L7e|z!JV`*n9k!HT#tfmG-Qi^0hTTE>A@mF1~;5-G+xA^(>I z6tnwLy)Lm`<$A5x3@!C?YRe;Oa4L5IXT}A!Iu<3%--3&301n{ajq34e|V zDj+s(lZ=eB{=emjy+xFtULZ(}B}m4*rlC^&w*Ym15#vCSPBoUuX*%nR)ng<6V~(x} zR?@W#N~3l(d@xZo`aDgKJ*9{C1C_`Z`-xy`Xo||9feo;G3c7eQfHObdI2jBo9-b#a z<*>1HL^R`b1EwyzS>NN{~lPRoG9gF{Q%$6HYp-@_8CdMQ!9i_An&NQ4!Eu)atQpRwTBNWIu9W#a+ zdZo;wR8Ap`QB6dwm#@VRHHFzR;6O0;gZUi)?@-7X&?mkc^=_RIEK9=-YNS&|XM z^rh=iV?1L9qjIK^nP!_t4m3N{tT9HjYP-R#fDM+PIC3GA`6x3IIr)A`v_J=Dv!zyp zxQFl`W`n%@f0+aF%${hrWVr& ziFJh`e^h!nnLv z2B7O0m4g{y7a7n`6;x*jzh)+Z?U$~C3(%*MR<{KUr9ah9M>4QGV3oRW)s{h+j8e5y z0$VR|snW84F(t%U!s2GTj`vt|Rteq!rfbz5H&XJ|wn|m{UA2m-j323`N~@s8`yi!t zj+%%nMc4!B0hdG%qMcd?p!oxE00r^dsf_okK481efP>wlNM`yb>FxVjev5OUK=~$Xp^+%W%gnBr;GtX@ek(B@MLDFI7+k73?1XeP)w(TDeVe{ilDRM z5UQs#!w({}q>>_2t*A&xc4dT5F!aSB(5c30Syeh7rbnAJ8FhmVmws+=gef=-j5L{H z2xcZ9T(8mVa2B@?`Ny$CAb=bApx(xFn{2F&D+wPr@F+ntn)5w1cCuM3DB5^wT^lWJ zw!^q+P!oRv6sFCLKDsCjpk%~UJ~T6HjZDo?$q*KoQI5l{y_%YXY9|WqwyT!R1_27v z+H5(lanwM~LYy&$vN4mHjUyU_?WR{XF<9s=^}^var{t(9ja=o*8Oq=$mWQky9FqBr86IsR>(l{6o z1(o`Ah>V{|E-7iVV^OVDHlbTs15-PLnp86@00*YdQ95QE$yj}05StBuIkaJ!{7l)j zb`7Hju5U78r9!p`Mc6*-JH@n*qlOkSov3#1^l=V6=7>cJGVa6i#Om=rMv1}Ut-L5V zFHI|f6Xe0&#@i77{aKI&2FivWYJyCHz=`ei-6o!F96f}!pEYKh$89GFT7fuLUQFtf zDJDjw7r#2wO0)GuzH)$ZCa2W9=JJx#S!jNjtd5wd)EJ@xIcQvef-zET6K+iCjkR2_ z|A}p)D-QMczL6jB=3=QI&oPmy2rbeu(K&lC%4*)`B#|D#tuxTxmI!!fKV>&4iBDP?GCEOU#Oarjk&4zr(ev#HSg_o3{pU>NNQdI$bcUf8CllJh<{ zm2j$|%R&`(zbQxSnAw0*BXZy_p~NOFzCh@+$Ga>mI87KMI$QLhDz#gLuQr>W1wL%3}zvNwgHElrZUSlC~8p{yb<+I zT$3!BeJ}OV>JA#(96%`fKWgTkUmr}4k{W4^!8LLUwQKbDeXlg>`(D^D(Yedei= zNQ(XQgctm{jd9oJ7*6;@`@=7$CW*_>v4lNUAID~i|3 zU^NyLiqHG-q1?hW4MS;}Z8A4YTu?z!Ihk4OXykDFiyFA9!8?`FaKo1mz*O9 z@+`MRNx!&!#*3z)8rhR(M5&vTm=vfj)y6a^ukZ=ZGWrkocGVV?!VqQIe($4;N-86~ zBkcc^m=V+2a5bH^c;Qg(7|ac{f~#-T#q?akG_A=r+aJVqlq|})pX)zIvctFnjoz?1 zUf8CL2F_td4bHI?5jQT9S^E;YOTXqaNE4#oX;*~H(h>hA zp%-F06Z!s)jIri074#QMEc#IMOoxM_=9@vQKmsf>Ch1XXOhRF$IZ6a&rph=eIFD9q z%pixrRjgTiGmR9X)MzlLx28WgIW|~^Dw4=7!kor&REK>Eu9Uk)_gN~T#TI9a{byfc zIy1MTMrF5*AhbyNex|XY1Z7N`yXP5eD!yxX2%^iXM4ZhN$L6qX&O%=h4ba1p0gJG(!^as~Y%b8VK_c|&F(xTw!KsUL;&naS5 z)ytqLMn_a$M8(uL$Y>0yYX51wlkz6p*ou-dHcFeDWSqqRqdF{XNi``ogiJa zk%P-jpS~j3s*m~)mJL=K?TxL?wVEEoRAba29?rv`FZDUfbQWUi%sP>|+refa2l@Gf zZng2hYyRtl-W%hCLwxujMB}fEMtG+_8p}SqTlP@Gk4a5UW-|HEp2i^|k3J@~;>k2KQ@6k(Xv!#I9l{9mg7xgE_Zo~Yy!`Z#or$Pl|vC+W$prvta z77G1bl`@x0YQkkD3GdJkLKW%Bwie@=(3*}CtY&saSEGaXZqQEUHo{~yqXlSITB(Sb z8FWL*FkI04+ql0XK8k;GyTJw;jgw=x5^8Li@stXPVSb_iHdSkd|Mko&q2|XiA^%IN zp(XzP>gHLw;VvOJb;5m%oAtj5(Z%Ro)axDh>!Jv+)kA5u(=|JJ+{TmsKC-t}LB$K- z*db1mqnGYHY=GFyuzNsu2m@23vWvD3<{ZCVo@MTRmWFu2LAO*Fs}2lfr6wB*6LjF9YhUtHvn0|uC z{6d+u(toA?7q5&o7>b=b%>RsPJf~J=%*>e=4w8vlS-p%E7$#HU{c3QT8!OO~W)n8@ z5Az=<}(?ZL+O z|4b~63Rn{I?^ZWWGmA4wYV-|Iz|3I`J=O9urpr{w@j`Qs&~thPILM0sY^YnfBMhgx z&rwE#HiT%R*Wm%f!yDB9U$QZ)(h9jDFMn8h!ARK&tI}EqSYK4*qtgEm<2Vi5DoVX; z-;VMzAolMsb;kb>-?>W(|Ifbj%RzoQ&<1g@9NP`Q;kiF3EKL7@aTh(Bvc;kUz45>3 zA7k{-b~aI@b~kE-4-VX#lnG1wCM)rB(P`sxLv3UG+3g$EGeRvJ+gp3v zTlzXSwL4wiecgTdsZm>ZOIt_px~|U7_I2Lg$>o#0YY!G>6>RJ3Y2B?TJiGOaZ{Wdiuy}qkwUAxo07GDf&>FjE2cl!A9CiVTI?yjzlPD=~xoYvCkoUm}= zg65WG%Nv`QJLhz)?`Y}mTHn{&-O|z7(I=Jns@4q3RFbp?Te{m?`%qhF`_?|Ew|!l& z6YUsr=zb)D7GUgxwzpT3Uu&c=@3K2`PnMe~*}V@sDW zXgOg?)3HkyAhYu;$%Z9$L&W+BN&fbnQ zI@{Y)>o&CZIL1`nj*`9nOI3*I(Nmw zmZc}0(Bz1yt}T7tTlySjQuN%G^$y;?A_DyAUa#&@QDwe#8ala8+zIc5^!{BEsYtJD z-MF!9owI&pYwrfs)Hc!2e@8RcU}tDaTu?sf1sok11%wsiMkz^!lT-nhkk^E9_CVSB67 zv7Ytb_v6B1?+4c;3liNjXq5`hC#+b$pxLWCrl4-p+Mce~Hqk*^g$`|9i>@$30FGff zB0c@sd0taRWcVU`WV5emWpofm`T8!nOIK?j`$~0)@|pI&-j+@6o7Q!o>lk~ZC%rcz zZIbxzu}hsE^i$UsyfBR>RaS&VxK7LZPB9xlTiDm-ba(Z5Rc)!FQaIwa_MWcK_oY{{ zyR0NK@YzG}(9lRp#5igf`lK>a-b#0Z#Eeg{8Z~fWzNy-;>1!~=@e7V$+S0tBaoMu@ zjmsOgUG(5zxKKvFG@hn!+v=Pv&gnf~5iarOw7NOo-s_Sv@4th^i8QAM8FXhT2R_o4 zN=tETt-`u4nXmgc^$cn$)wh}d2SI9rlPSbIDO6ljX7di7482Q3#j`6nboKUiwqm`( zte`5v%Cm`6e@8d!^%_sfDvQYAmhSbQFZU%q|7SRr{4$g?=)u@=zYLXy;NM&N+P%}( zx|PA6_RjWmynPMjMQNozhcw@lrz%u5@mQHfmFejt+8oL>y~3?V5Wki}2U{!N(7U0l zr!NI7s{yKQ1}}xXNFULuWr@mJzF@vgDl(G2YyJ@(iMx3Dfi=>5Ps(ZBRCb8wzxbT1T22kB0`B&G=1F(;y7Ut$kj5 zyPJ%d!Mq6rDOy}uZF^Hs`@rNa)rs$UIbO2Eo$RG!#l=Tn_Fy%~zdvibZzA4Gq}tMd7Wc-=YvSm|C( zdjv5L{=b8=_Q$+u>LRfqS;6XXW{O2tN@RtufNGFbZ`#XZeMwnve`E_O!^Ko+)t3U{PU-kJX+_$KLiR)bc+!6msJ33IDy-|~%mbRs7FtsHB<}W!| z|AXGX5R|+x<}cxoID|Ka7#C=gUyC^CRpsHI5P0R8sBnz5Yg|$%Q{+IPv=InASR?Tm z1k#sEk=i^!Rx$*^6iET|V38C8eY4toGaSc1YU$K1UyBd--t_xpEBF%%mOc@Iy~`5K z2$K+4$;AjmHNG9O;kg5tHInBC7X1Kl(A#-QMWr{^=Z|~8@x@~4VIZ=SUIZSjgg768 z0xm+}K{~N%#^og9Af31zf&6zO@F1O-69nl`BNzpr0oMF!=Z{G6U;$#bngxo%Z3>hC z_%yu?IHfUPu4NSBFJ_Fl&ILC7{NdV6&Cg$j;ZN$?2~ftDiLo-i42%brAkIci`t88X zBK-~kP8g&=Ln02+iP=h4_!o;#T3#V!B#2!cP#W1nEy97{C7%m^cmhP^{2Q_1KLpHq zgL3#QB_7~UOJY6}thfakrob8i<0yRjJ`Ywv970S%=U8;&V?d*v?*lU?{{f4izgFTw zI&lMk8AZkrPNo1~Iba4?F)+)p0Dt~efS7z^EINM@#fgJ-{tSu-`H7jVMwkIWs}MJm zh=V+he2>C(0A`rqPcehI0Wl)^aXKO?@F)nRRU`0M6`)_X4x^#CY4x{WAk)?g+0g9Bc9#HU;s}ML1UC z9sW!CC~y2{LsQ-<-EN}PtakyFahn^YHxme+xlFS!<6~jCkOUM_EUHs0m zkqI0szfrzNRDv{ro9FXhcr`RH&2@?gd%$%XIOyb1Mds*~iu};NT~k#40{PV?Nh1(k zDDWkn&uU!!R_{v0mm%=ics}(V3(dhPVYqk8?a5tv{5>%b>f$=Hy}LKLmHE@<-B2|k zsk&x*XUz>%dWQ~IE%orp)s*+>+(6uWW?rD)TixmAdfPy|;oj=Fcidgr=sZJ?q0#sn zZ^t{iDK9q`Tk4JXCzg7z|8r>Ed#}@t?>_tdME*Bftv^%&hDeG+9OveUbK+P40^N?k^i051 ztw_^tZjtn8rw8dUFr6>~U%x@~&zJOg=V6^5FX@TS%Sf}sIHnW$1@b?UP62;g(vzK1 zxZqM??ky5&XX>C|h|*-og25b2pK?UH{fM;uqEN0z>dcNqANob$DPi0@n9C>v;f8e5LK)H>MzF9VKNu_U& zwX}Agt1qwAji9EJj$K;6`@@Q4y34+M(<@hAYdfsl5TCzb)$QrShc*Y@_#J#x^Yb@i zaMd{Ij)7PtjXS`DZo<-X`r_U;fT@)C&jv{ue7`{5DdU}+FT6=Ha4~3HB`vq|?3xC6 z1}+!})%eBNl!I7~P)gnKuq#o`!41(`-sVO{xc~Nr`OH@LpuM{5DvG?ZBYd$m&93i0 z@%C+dPfyFb4ehwsCx^=`7#!RhCbV0e*tUoE#2l%!!0!)@3FRZpO(^8gW$9 zd8OdWTX6x_A&`kg;^$U_=&RMWXhb~WCvc}OERJSkwqa|JNvkd|h` zFbxMbOk4=bL>jT-;k;~k?$SJ@5gVSd7SE%ahcsftGm$(?^*-UJnu$bW(|VfHWl0<~ zv0E!pEyK;bZ@s2?HOV+S5R$;`lwBG#>miMQi}-DgDfOVne6a;P#$ARJ4pv4vq>c4v zSH+6cQ#FZQLmXX>6OL~oko6J7?`ixQVjf262yl}7dK^@Zn4+ng!9vGU&ety#lMXxq z@i2wcautn*LNZv80?0HHF|X_l9<4F274wL3szxkjH4bSyH*{U;;3BH;}q~3TfEa_+wudAc}r@O7Q|ayDFm0jh@%UEWm6hQHJxT~ z*WiSMWx$gbgE0|ZgA#4Cmi=8kcTwl zsHVTD>1^;sI)QPuS9AugO>A6kGO*$Kqvj!v*zioVc>bn&NFz2pywIjXyvc{x!zj$n zctR(5SCBV7$V6Oa;ZYj1TV_F!nc(n=65%I}IJyh~M+1UUda33ijo2tOAL+DVTCJH# zBsNTokapMMgySsDLmF{Z)0>cX+sJ`iaGHlS;;5!CMcQpA2i}UNc|c1`BC0c%Bhx7K zHO)jCu~F#1G@Xw4n8v);46`ifOdJ6OGg6o~BZ&Tzq(|duKuDIL|H-^Y5=sblA=7n; zV+bzi9ULi*vxF?~Zz7$vde$G+8Pjxu*@$OqyZ~_+ z!QF@x4yIX{G~%eHFV=LHrDe%O1*H4*h*+iRq!Fu;g7!tFhtSDB1!^tWUkh@9kDDnpkEF= zS<~652HKqk)*vCR(L+ndH0Y!en;|EP>JhO7be1KJ*o+i$I?cmP0C`9wHat|2^ogin zITR9i0PoNl^a1uinYJPpC)Gl4)O6B_jZiwI8OFD29@2;n4`6274be_I3GW*ZFb08` zW~tK{5k8xv=qbeXX7bb`7He$;z>z{Aoit+8Wg|76<#?D~sQ4WE?HKxf12U5AL>waY zEQQ6PKqu{U4h8xM&~3kAnsP`ZHcCv<^c3RR76ybuv_B4%bCN^Ve_7Z%Vji|a38YCU zjo5g&SOxSHXtqL3lb%w(>we8c8nIbf z;is8Z^I^?H+Qak#vux7bY)vy_X+g7h`d@L$RD-lW%nZ5$>1356ia~(OeCop&q;nKs zqIrm~)|l4!G^Vj{)41Hlzd$s87V+;j=D)zwyuPJSCT3~Oe?=|Vn1Z%z%=@}KHD+Z@ zvn<==X}lbY?$!7ki1%wuIge;e{+}p}?{T2On^wl3HKrgR0xQ5{yK;|~m|yQ1r|A^L z@}#o@?q!I35i<~9g!mkd&qKUTV_Nh)nXSQeIf&vj+7BPpOr#N;E6*Qj`ZI{1)R_Mz zWSW)zkuid+<@`$1Nh3CLgb(~>+^vg`=>mV#1xO<{1wJ!$@Qc5l0s;@DSuttEX2nl2 zsd;#}pFE@y8y@;ani+Q@gI8a~GZ5En%7b<@Cd{y{AyWrVIM!+=(umE79E-H!IaBkHMr?Q{l4mJSIL_8Qq!F9T z@jXJv6mbUt16xB)Cxg*w`hcdBMr;&)M$`Gv+2=K8*=a1RD}F`ONh3BD&ms?JNgSWB z|5-7KpO8ss9MW_?m%>0E{@XWC<0`}rC}S*<)O6B_jV0!jM=LZ+^N>bNg=C6cL?&JF z9L+=;u~DdrJS%a+u|)HbMr`g(q>y%p;eFhh zQ)B*zxliN0h`*~b|1tEWh5fVy1o3s3QH{f_RO1xrH5Shl3m;9)Z{6^v@@sSk&9hEp zn8)eUm?k_&<0~QbI~w!N><2XFo5_EtG3C6iG36Z8nBBt9{2Hax__@6#IDstEcnRWW zjro@BK8-1queD}j3cXC@6!0wwq_b-fW&G)OO(%`m_|x5ro|daBcDuU;Cmi2GpdiwS zqniF}O@9jUs~Ufbcr1dMZr{;#(umFM`Jtw>n+kRJ9Rf|=tyv0$qef>;)Yyzyj(xX} z9C~Jia-?yVjB5HiU6xNQtk;+;pWNR7KYd8%20hJRs(Gey{4rrPr4zFCYY@xQ3CxM- zTbj-m$fN}N0ni@ObUxxB%PZ)7s)2cw!zUSJ!UFjm9sfH}r;b6#5alE4OlZfBoLm@2iDB{%=q_z7{(@7&X zTCX9`R-ADBOY^MJII8LRsfx(t+|Y(RGqUi00ilyd%#kJS-#{jwaNyVR!o(!8*}rZ? z+SN{kx9}hI7;)7MrEuGe%{ww?TXF1bn5xAULuOqfY#r^U2aGm%DYcrGH3-lTk8^N>ay z?byBYx}&|NtIA8Nj{=QrTLG*#9q}|`TnKaMF}QW!>*IZ83rm1`fmRS!ql`XCJOuGc z8uLoxbd9+dwh==Xdx-(E#=nzObX)=ceH1{N#$rAV!r<}(9ETVoSK*zA3N)tvk*iL6JiD@6-)Z6f8jnHDy)=1vujet1ry~9# zG2}mmm_f@w-FcRY0-SI>k5B--3h^&3{Hn&>!Tet1(-6O>@mj>65Tk;Fh#8~;uXQ3` z@m^4(bPi$`GdQL(?_+S|z@pqPGnlrgh)cnMV>o$$hXdDIc%sImK%YenISq&zw4B|Q zH-z|^Wgd&j0vrQA-oo5Wlg{2aRpWf%He!g}fSAFkwvm|rgQJ@~z-Xnj#lqV)CR_SK zouHpxr7_!bJuxb{2{D7IU=MLQ7;x+*4{#Wm{{k_X%NKDJbS_Pl^B7_VBj*5dg?^a& zhh%~VZ2i*~<_4SeyxkYyIAJ_<-z8|p~n2QU8(SH_k6&P?dkOz1v@B#}rX}pZ| z)l5Lp8pI4nP#ZBVj$;FPfG-2yWMS?FNxyP;=~otys6nnfjr?kwF?cr82G8An`Bz%h zbDx^?CM)+23*Tqq$1E&^QI~zmqQ7b3zgYP17Uu37ny4i{)vTuZsB(<{1*#P_On?iXN>XRYiPE&Lk`zi#0_Sol2) ze`w)PE&Q2MgL>k%J`U=TYek| zEqaiXA-9q^BG$xMOw6q?j&h4$OFUN5$6NH7#A6h_LDQxE$1^cnWvtQ}Otll&D*Blg z{T$*NMZcK1S>Y=zo*Rj)6#Zskv$eU?;<-PHdDWe)m>yz=#y_&~(-!`@RrnQ){ICUj#7(WVc}|vhg(Y{r{2OxSv-p@yqp-XVv=K( zRp2y>sl%dgvTzTvHt$sy?ziwG7Jl5q&saG9TPAeh|H;bu(8Bx)rKxPVg{KhfvW*tK z)xzgm_-YH^qp%u(Ke94jB-TRzOspr3kBL)aEa$(0&7RwbYf!_JORO!LuyD17M_PCc z-k6^$%%3}$!ZR)0K&+K$vgk`Kyu#vXwdm~@K9g8Cpc9x4=wa=*a z5o@#Wu<(V%y6jaJzL8idk#=rlf)|cB?gBQKaQ6=|Io~7J6+CX?A6q;xTJ&F8__xGb z{vRy-7vgE7RK@>fLSK*`0yY<+*>N&~XZPjbOr^EmMw6(u8E@f9h8g^g#9H8Di@uCl zUs|68Y%ZwONX+j4}&X5^Jq%EIi%9 z%PhRw!kdV77w@+4UW3{GdrSiOQ42q1;g^W@Et%f{n_Du!w|M?atQ+&Og%4Uhfy4k$ z7&vVT(h!qJ>vlJnIK=+Uc>F&bIKE2AG^n zE&7!fzSiQ|W6}3o_)d%GevAH)VC8?#qfF?QJ!#=*E&R5H4_P=1_y0`UxP?nCJb_qS z@hIXF^fiu|X(Y@YzJ(UkG7Gm5Ym=_C@CJ*g&!TU&@Oc)`*p8U{0i8T(`ggE3}g8T%3$CE2$u zGZ-QJOr=tnk|_1q9%tGt(c($ji_k++NQMjgaANt@oZb<`hbKl3q5rnH$z z+vReuw4ae5$M(;aiUl-3{l&C`ZsPkT@oH(aN#a|?Z;Rg*eG{f9vm*cvw7-PW0P6Bk}#T9q%*Z-^9$hLmU73 z7wH$go~nuyXj?#CIQR&%E#po61$Pwp7WWsA5|0&6tc2wUYkI#_gvB#y+nRY2UnG7? z+Pom~RpQsA&6`1-+y7QjfIko)5PwSBN_;KxGvXhl%|(g-EoPQs&`%jS|NLK`6}C$& z)3)1d(#`x`ohogbh}(!eh;OEC-b{&)EO6Kv&w?#1M`oB=(8!rBo-h8V_-Wb}wp!wA z#aqPNJ^PP8=Uu7TCq5+pOni*CmHti4Q+W_i5#J&nM%zhgVpuBfqHPOi(RMf<6aPcn z${7f6KvcZPoSHlY4 ztCy9EXmK^#I;|zH1GCdp=(M@CZzb*^?fZ(y<{R5TH^1OGOKCgnt&{j0;;k?j%q)QY zjN4)QSbS9crTC2aEFGNxf0K%fVh*AbETE`3QXD0&BCa8>OWR&-C=REgz^!=*Thmcy zxJi7QxVLx+ZJmw~-vP7FJoGtL+D{Wdqe~bNscb0iY{DJs5ZHMNp#Q&xf{1X%} z(}NW%C$31_Gpi15hpc{8EI%kTl1Ay$sI|DWxU0CAxSx2Kc!YRdU~d1Upa9=1en32n zwp~4!wyk+i+AJ6UOZ=L6BW?Zcfx|)JtW@w#X0WRxX`7*vI7!@5+)q47JX5@!PWKL3 z*!i}g;QS@#d-mX!Dqh@KJW%{k@mBFgadmuf5cE0Fv;X*W!cy@ljV}W@Jq|Njf{&MF zjN1cerFa$XZ;i7>yqC6qj*G8|tA=Y9G-@I4FTPv6Sp2&9AZ;sgO8l$%3XPB6Ifde} zVK85RoH8f`Gsn`ll~u*@(k5BlindPsh{sBs`^Arn7sd1ZZ)?4j6?o6iX+=EN4(8{< zufai^EwruNcJbTN<^zcz5PvFdPUgqM$VtpEAU{JI{Vwsp#8;)wb@;e6SfNO9G;JHx zK-^B8K?nCIXG%p_oF{&Pw$JWX)3)a}(B&L&dIJtJWZsrGAJDev4v52_N~4ofaaw#< z+Wao@zr@9A6|7Jh8Xp{TDh~%KJyoSm9lD8K|JU~m-VBYTQ5$iFwCN`9DQyNzJX4%4 zZ6--Pw-%0nuv_kvMl)!9Ak66zI7ni8MrK|rUL)Qh-a^}9+AiK57|VC|1_k(l_!IG$ z;*;X<#plJpi~kbyl`>eNVsQR@voqxPcY}c6*nk}9uUL<}-yj1+6`wO}YuanRw@iy@e z@q6O;#RtWoioX<}6o2R2y_j-cRPEBCg3T`{julsR(|)ZS+qaH{8j91z>EhPn8^vA3 z-Q5{qm5GfUD4`*4)*?KPW=d$b_#fhh;-|$+#7spCj_)e*TJc8l9^b{Wlkir<-H9!a zJRpbiUy{&OF>lfc7RTF_0#^|;y*Y^2rW<$*b6QE9_gn;Rx`=t36XLj>!PHAC zct2Dy!%+9Renn#kjgb%&$bxFV?FhwVeoV8(Pl)G>`IaISkH(mu_3S=4CxqJy;~Bxo z4N}i+=1@F>nD&Xiw5E73?3|JKS@AF8-^EwN7-!!J`TewY@B@}X!5{X{uW;&0yn(o} zxS2bDcU)|!qdWekP(pZ=)QlBR5#KF-Ks-Y{NBo4C8OR}9J1;@X{0ieW>=k*9UvN0R zE`C$|5sj;BPKU&wi@o$IYjaxS-;4hvE>e`Q$TmZ%q6IE1_EMwpR)JFk#?6hz&BSfQ z9mE;pZh`rV+&d`1{lz)rd&Ccly;Le&p*a$NLcB_)>v~J68(|PH|>M*@8=nqr?@(O~oz59mJj8^P%|Ia1RL$5DylQ5Z@u5 zD9#bzCw@>oOZ=E`|3Z4XRJML&ez2EhN-U+{0}# zs9ZvL3PW-JPP$wCp!gy29PtxkFMHAY$&>i2;&tLJzWt}&cB$AU-XlIHJ|X^2d`?`H ziH7#oUP-a{t6mn5xsES~R;VJ4YKW7>$>KKR4&qGlNbxwa_xp!jF1P<4skmSKka(8( z3GsaKbK>RVm&L2a8{lxT^>0Xpm(yu`T;t zPMj!C5~qrrh+B!B`*vn$IHeTkcxsJ5yBECi3TijnfR2&{Ig*(L) z#dnME6VDJoBKERdZAIrve2MsZ-~RJ&tyF9j?-hR_{zQCKd_sImd_~O99fLz~T_lzt z6e6X9191lNIB~q#ORKf5OqO`6xU;ycxPM@7|Ls8m9wQzvo+I{ha&5tjB%UW;DqbPp zEZzp^e?hfND)xv!79SRWFFr5+Tl^n!Br{!YrK1WQb{Z8FoEyX~#cjo%#a+c-Zm%t% zkHo!vUW<>B_~V}a$Di{Lsd!5KocKlYzr-8FZ-{q@cZoj~9}G+33-MRt@5JZCe~2%M zBk^TL{;n3+7pIuL?QbR(EyW$goyAN%4i?Zu++TdV*h@UNLoh|+_m<-qR95kTRCw9O z7JpjeE5$F1*N8WWy(DDo$4f#s@5yh2?cbkYaGaCk)8cdDpT+zVD%gNx;y7_Nae}xm z9i0C=NkxXZhq#aUcJVOrDDhbFWbs|%u$Poyi>ea{DJte zZ~yssL@G{-PmBK$UlK<%{nl36%P}^`OFU7WB5v#@DBBFJrJ}vKpLmcsOPnp9DxN0( zr}(MB-2N3o0e(sRns~in^yhxnq*?;^wUgol`wU@bU-X=5b z5bqItNzB&%ki2$P|wh z-y^sBev?8V3t3n>aw_Ug@T<| zU0hpSPn;@lB5vhojgE~Cduh?OSvO1d0P$e)Sn&k$qvFTKURJdAzgXf+eESd4=cQtm z_*L=i;y1pDefyCDjqJrQ#?^TRXk1nhWQ+ zxUHO*2yXTg!OdPGxY^4CH+y;DW-kxi?B#)*PjFdbE1Z%ApBMikz9haXE`d*`gS}W< z%+bh$c%1lpak#b=ysUFup~ez#C2l9q5O)*z6%P~-7mxDoKmR65MUHqjjmu$9bHxkA zu6T*~dGR*!4)LD2VFe5DGS+Qjho#XG@mJz+#FxbmQ?RX{l5W=c=-4oCb_+tW;u>Nv zKiy`lC-H{jj^dldw~Bj;2l!6#cHm&C7%!ge*^Q`Jv03<48gBtPc{%Ln%@W@xepkFt zd_eq(_y_S%VlQo-Z^fJCop$m;AC;CxQRI3v;VwuT1!QSxSP0#xR2O7CbmL@B|cg_PCQAR%jE}a zJykqSJY76f%-tHyJ6Bxz5CmnjaX%2_g$^}TBcJUHZ>2R{iHf?AmG56jN9XWqVoC%)di9`X9-9We6`*$>^){0@Ahc{kjx2o4|{y@x_Ct2hAnGk*e) zr}1#&BO*sUO*~UP*UW>>R7B2O3x3wj^V19FI(z^zFOiLs;Em#K=K6@gV@`(mnj6Ch z%{*&1gIvv3m%m#u=wxL8rYQ8&1>na8_=xVpHGxfj|r z5~rJQN4%}LlX)nX@7!vIEHvt89tjT=1@S>}oGljh0rVskFM z#54B)11P*`71QC@%n!q_n`gn>%yZyf=DF~G^L&^?#c@R!!C#nNm}!ZO(`UuMg{AP9 z`Drxb2y>i)E`|qa;4)(V5@ZmsW?qK&waqWWDdtr$N1WD|%$wm{^H!LNid@)R@O1MIc((Z+cs`&1Z1gS)Pg})ac$xS`^M1tFm_LFy znGeES#XH6O#D~Pk%%AWCemcK^AAvW2flisa$d#j=;=WIS*NLOerxC9rX67R2{SNVD z^EtSwxGl}M)<2=5i&fA)%)i0|#ly|NBYvki*L)dqW+igL^el4(UNiq8cFiRb4=$2sv|Vx}OXP1vc7MlpWDbG*3*;`PN% z%n67y?T`!LMM{R5cS-az^CD%ixhXu#+!CH-ZU;Y50>_^nbwJ@UtLOx~;+1CJO0iDN zBty=7Gvd3&ABm5OzY(7g%-^E87!=^5=rHJ%;~)m+IEXYyC{7Y5oBJW&k;bJVP908$ zxTkoCcnloo3^**#B&)zb&OK&aA31!0vJEdeA2#!v=_%SSs+Njh5WgbcDCT&IHgDM3 zZ3SEcIPaUe1qaOd$N5bBrTC2aNAVwKZopM@8MwrC{(`yQD@ zAm$*ATx(tdwiI_1bHGNn;l*Gd^Y!o$F~@FXn*_usgso5qg}cp3a1iHf|DzUf2+tGe ziJvt$LK|ikMwbIHZ4tjMe&3AkN6wWMcnH1}pE2`r{3yO?=HrH$gj^UxPDyc;8L3xJ z6*C`03F72ZJpW_nXjC+{3c9Ts*V4{S;@ix;AZPX<=dB87iN~6G4W1*OX0D0&baO49 z|6LaFkmhcGPP{_ATD(!b&D;p{?lL!q_nDi)hs^0PlLxu1mhjg!Z;xf+tW^AJZiDzG za|f8?`*P+RVP+4~H^I^3D&kt^4790l?gKYB_k+WotS|(H9^%2~@rWZ!&|BC<_%1Uq zrydf|5i>E6E62;MXT&Sb_aOeN@36zdMyuc@*ETVSv}8w*BEH`|2R>we96n~|<<}`O z69YLfFU2mH7sHp$d2q2ZIR0$J%Pb}U($B)N;&}5C#OsMUTqWBtL%fx^lX(^5w~G6j zUqO6WU_SpwS>aWf!&S1=^)QqEXkJ=9D4uD46Y<&RT`-5SjK&#k0Q`dZHSz1>x8N{m z;IV(#Dl*{@%_HGY&3C|GnfaLDu$P>dj|mQYN#6zkDdvj?da3yo{IdBRyw3b1%sf1{r@}6m~Y26^zY^}@Kte%a()}$R9j9QYmP>|rkTG*RM#9A!trlp z1^#$dQ!_6<+nTS3yO`F7sC^bDHA<8?-1j#Xs9 z^Ub%w%)R5nc-^m;or@(;Va@II8m|9V#FiO%ixM;-Wps(%-lP)4|_jfk!lsMqEWiIy?HI-UCkTd z+sv=S1H_r)k>)LEb3YyDzr@cFKUSXSf2&wv6%FuUeA=7>KW|QjSDE>ez24j&=D?rq zhknP*muBYPG0vCZgXZq=7lC>HKWPQNHh(KVFXq6X?1*jt5=TV&@l3=^iz}G35w9*z zFpoyOJ{)GJEHsviR_1YtcQ8+YyO?v~9^wJwVdlHhhB!}pc{V(`z+vY;E6hX1 z!{WK-1&A*&{}WzpehTKmq8v&q5#Au)BL25{xA;TP*#DfFqmKq19WysV{Ir?ZbWGM` zn{@bs_>wpx+HcbeZOWQ?8CS*J8BQ?Y0w**3jGgj9(Nx^Z%;U|`N7-g5e6yK{jCp&E z(}T@Z;Njvs%{*kx&tv;(@O|bm3l9ecc&_;on8|vafqu@+4pV15VjDdzWJj!?>P zh;fnRETH*~EDKLd#R_vQ;;YQn;q~Ip;+^K2XtU2;3qB}5Vy=z&33C!0{@w}=QTWN+ z7-nW4*OYcD6qv)FGTsE?Xmc}|L!dHFCz$z6NjA5Hn~K}|4m<5o!TdhXOm{c)snW;H zrwViZ*yc8v!=6Utjb9vmm-v1$hd>S5Fz+w$JaHaV>w=19R>58UvN;}JXXbf=Ielzj z2j&o{f%ll}BYwb~41aD;g})J>GdITa9VYv+Bkt;}X6{Dj_c2bFH@Al4#PQ~~h}Sc> zhne@sc{{>Q#jV60;4m9?L!&NM(FeX&+{Zi^@!Q2&=1j!LiYJMununv!40AR-$Bg$B zVP}CA#-f5_ta63u73T5qE8=zHH^ke;?}|SXA2ClvpC>(I|FiI|RZNDNmB^K#nUxs$ zsZHk(5Q=*t-|1|H6jXE<_Y*Vkk29p9%_wsdn7Mw8H;3;s^Gx@Ec$WA{@gh2mnOkE9 z4(`g1+QUoCeC}?daYo{6#9QKB;{9fvI-F0;_{TYJ<_YbL_$PBb;^9B7z!wI7-_M27 zrOXXrUc)g?S23r<31)6_vbjCnRNU6w8S$IMOvOW=VW$f!dRPU|^LNlS{4Jg&o+_SU zjz)V99?SOl$5|kL#*D|Ev(g+7uNH5LlpzJusH- z%g`vnD(GZ0&sI&vt;{bX-a*{OydLrH=526)^A0#uJYIYsum8A4Z=(@Mj14^7yc_W+ z&F{mD%pbsc=7aDW`g%MDU?$`R-YVWHe$O1{49v(2X82Uh5ov??8FOE>|Is`E{=+;7 zzG@x}m%#Im^A3X}&3qj2S1=f-t1*ElC?rZnvUvm=H8oFw+nRIWF5(_$z61{tXPNIo ze60BacuKx;{HI!hPsQoxnec2gUsC6pABXeIPr%E~e9&=3T5ik&c!PMG*+qPpct0J+ z3{RutuvI(@e{Nm^e{Eg{|6qO|zF>X_;B+X_)c-I`8&j?`3`$ukw0P;f1=_^^Hq4Uc!`;x<-KBN zQrl*86?nJ!pqa^TN5x;8Ya)KO8V)*-84JH!1&7|dWUdDn!7Crz@H4*BW`3?$L0nB- z+nkOzDQ150+)Uig+>zh^W>}#U+*3Tr%rBlth{u_`B7T?nL32069~D1gW)9v$b0+*0 z9OjmdMq#N{&@Y%L!LNunnx`YaUHq<@p9y{>K4N|h@e|_j%uj^y{Qt!Y9BYt68FPge z!W?!l@O5Io{4)MD+Ef)Mnx93yp}3iO3F7U<8J=i>7n~eQo9%hQ`HlEz^I^m)|`i@4`9a`@}QEkBXlZhx4ScT)axWM!ZS9RlHODp7;atr{)i_ z(#L&=z2D3^B^77Izlr}6N7VKY&0%zOo%tvnC9Wcl7uPc%NBgweIQ~4wr%-5N6?8}O zE#hA0@6l$Uc({19c#`>7w4ZAJ6P{td6h`4OEAVP(ftgo3d1hYWJZ~-uzari!-frdv z%Wm<9=CX(%HpjuoVDJ3T!Z%WJR{X2@PjLvJL~+k0V%}2XD04F6apD@{+64|f$pr)bwif4Gn@xKWbbF3l*USPf%e#U$&yh6O% z+yn7V<^k|F@oqEk7t~TZ=oJIkx$&;@;wc;^E@a;>mUG{68BVO|^j;4dCS&l^L}`;`6D=d zuM{3KA4J9D=Fi~;;%CfXBEC|*+WZybo6KLsTg5xgrxAb8H$MMC;RCBU2Y+h*13qr% zJz?L9e->XfUxzmQ-F2RnqTv$aNOLvBE1Bcr8uje_&qAV9)EB3Un~7VCJBn{HC!x>Y z;(_8}fx~E&9Tebk;#~3l;)lggh!=~OnmHo>Dsu|F)|>`!fxYuT3vWxs`{s6t9}<6I z?uhtF^G)zsb2s=mb9eZ%xEQ_~=b`C=cw~XYP9-bw_Pd(qzHnV}Bl94{o0|v2?af2s zuI4Pbr+AQgB;q5?B?@c+lwbu#>bwVdf+d(iIpGnhibUJF4t`49!@FIG_oXH_}^NFO1eV_ zMf7%S|GRoj?UxY@Zn@nk-XY%ah8D-fx|suO4RiNa|He!Csw{o*4uK3eB=%KdU*WNhWj5-M4=pt^z^`F><<*JKIt-p62W z-tQQ=hj_4fG;O;-cj3C%W5aVLk|$m%UMuGPi9rv0#NJOOSkEUI$A_$(&WZmN7cJ(s z!7~F>dB5P9_ZS8t`O^0I_Vy3Zk0BfeC@qHt$W{$kTTyFY$bq!F){Ips2B z=Dj?jx_*2vUEg;e-N5%sI@$MHx}k60z7tCEy@zh(`!LP(BBzv`d&lQy4adK^?y@h7 z)QD<0a`cEvIoVV0&YqGoBISm(rf%kth^oD>iKew^lF}q)+?d?#DOuy304ZLZVL92k z!$wZXaZ<)inK(W*B{zF&Zc28}q-*C8sG50_DNc5 zi&QsjQt_&VyW&onj;<ht~rqI$x}rt7Fx7-`2I)SJA8~6+PzrQ#X}?F%3rfOIC^foyNbvC&qEhArFf;n z71%>*-uf4+z`;Ysx-&&871|Sa@VG+%wY&X;_dl!rgU6~u{qf+XGdu-{JTZLj5%CY9{}l2LiIXxiD>uuYVdJv1a$=CiTs6c>8Ks|tPN|5M&w z{&}cwsEzlJ+pR@hlAC^i>7>vuKmLpNPef#K_ruJHy6(v@LUkh&inukhP)Iu#iV1zb zFmxfN4d1F1#i_16&v%&0<63SyK7kqpGrx{?W$?%Aa)kM!=}qNPxP4*Nl^A#SxpL(j z&Rc~P9#n9)IQ#{(c|YKVaxmLCT((7f3!YkN!K44>Uyrf}UaAE>@RC>;JRLoxc|Gtd zT30;}J@mnx?12|OK@Zyt^}u)IiCzzz3-xdgJ+!tSc*PR*z#%ns9gd)fywmA$9ulR8p@n+jMbF3XFXu~EXkDm>+3WEB#I}O3wW#(U1dkT#;TU@8$8~V` zd=)C+u+s*|*@329a1#E4*}O|tl+oIoct8IJZ`EHZwBVw6_rUKl*h78%1w9-swBYa1 zLl^c?otL<5)gFJGTI1`psrZ*YB)eHP;;R-*#YIgIZ*f-(HQtEE^Qo{k<`dfPdBdTDIu>;C9mTm~-{g4y~PnvFNRmv(2o8(pC_YIH64pa(up*h6FK zVMd`I_MnHu-gfc|S$jBv9`bBYHF0MgimqCWH-e9Gch;<4!QFHyx?IDln;qu_=HWt` z$wIsfWm_=*!L6`Jhjr6NMZ~xlelAkJZz{?=@%RiTE|$|*g;rqzzHPjWUBv!d;E(ON z_evthy@w}>H(e-)L&1%x7-Ka-=ket+mse9CHP}`ss7XXk$UShOWQ7Wa=J9G4M*SI6 zu|uJGlGvLYdN1CaM|)#U8E-j5{?|NS&4mBA=Ar+$hCldKcsX(G&CQ%%yeJ28$loAu z<-7&`8#8hD1QTm!^039Y>5t&i)n^wT&Dho4tvBH>*sTW&&9^!lx9q#?K8ud2z8_U= z)*gSH7VX8uE79*F!)=j(C&3&%0{(Kdrj>}P_;aC-9%_Y;T-^EpDH79$zaXX^tv-*_ zS(4w;E$BE{7l&^zyhZu{Th$NA6z=k$<16ruk@k>YDU^RIxm9}b-s(sXJ^Ld$z|D#X z#e~bDbM4|nY{=m|a_*4Zq>H+RR^sRYd|=MAhE2f=)+*HBethG)t)<^zPqYm->IT2R zvfgu=ee8P}d1&s8dn?97d%t#uP%7h?GUvM~qarF*?1FjlU;dOcA15&H(K*oXEx+a! z)J$hhn?9(~?VH^%=zWzK>%I{); un^vW4wKC7))P`2KW5(Ou>x+h}6%LkY!_aR28-H&mr;%>Mz?6P|AX diff --git a/tools/sdk/lwip2/builder b/tools/sdk/lwip2/builder index 8dfe4663f2..7d498d9d39 160000 --- a/tools/sdk/lwip2/builder +++ b/tools/sdk/lwip2/builder @@ -1 +1 @@ -Subproject commit 8dfe4663f290caea702aab97483b0d2b034930fe +Subproject commit 7d498d9d39998c9eafb575609a0803d78893c8c3 diff --git a/tools/sdk/lwip2/include/arch/cc.h b/tools/sdk/lwip2/include/arch/cc.h index 961c51aa32..1b879c84cd 100644 --- a/tools/sdk/lwip2/include/arch/cc.h +++ b/tools/sdk/lwip2/include/arch/cc.h @@ -63,6 +63,7 @@ typedef uint32_t sys_prot_t; #define SYS_ARCH_DECL_PROTECT(lev) sys_prot_t lev #define SYS_ARCH_PROTECT(lev) lev = lwip_xt_rsil(15) #define SYS_ARCH_UNPROTECT(lev) lwip_xt_wsr_ps(lev) +#define sys_jiffies() (0) // only used for increased randomness in PPP #define LWIP_NO_CTYPE_H 1 diff --git a/tools/sdk/lwip2/include/lwip-git-hash.h b/tools/sdk/lwip2/include/lwip-git-hash.h index d7bb7f742f..d2f2682f68 100644 --- a/tools/sdk/lwip2/include/lwip-git-hash.h +++ b/tools/sdk/lwip2/include/lwip-git-hash.h @@ -1,5 +1,5 @@ // generated by makefiles/make-lwip2-hash #ifndef LWIP_HASH_H #define LWIP_HASH_H -#define LWIP_HASH_STR "STABLE-2_1_2_RELEASE/glue:1.2-43-ge20f213" +#define LWIP_HASH_STR "STABLE-2_1_2_RELEASE/glue:1.2-46-g7d498d9" #endif // LWIP_HASH_H diff --git a/tools/sdk/lwip2/include/lwip/priv/tcp_priv.h b/tools/sdk/lwip2/include/lwip/priv/tcp_priv.h index 72f9126d46..394d9633af 100644 --- a/tools/sdk/lwip2/include/lwip/priv/tcp_priv.h +++ b/tools/sdk/lwip2/include/lwip/priv/tcp_priv.h @@ -357,7 +357,7 @@ extern struct tcp_pcb ** const tcp_pcb_lists[NUM_TCP_PCB_LISTS]; #if TCP_DEBUG_PCB_LISTS #define TCP_REG(pcbs, npcb) do {\ struct tcp_pcb *tcp_tmp_pcb; \ - LWIP_DEBUGF(TCP_DEBUG, ("TCP_REG %p local port %"U16_F"\n", (void *)(npcb), (npcb)->local_port)); \ + LWIP_DEBUGF(TCP_DEBUG, ("TCP_REG %p local port %" U16_F "\n", (void *)(npcb), (npcb)->local_port)); \ for (tcp_tmp_pcb = *(pcbs); \ tcp_tmp_pcb != NULL; \ tcp_tmp_pcb = tcp_tmp_pcb->next) { \ diff --git a/tools/sdk/lwip2/include/lwipopts.h b/tools/sdk/lwip2/include/lwipopts.h index d09d646b0e..91b41fdebf 100644 --- a/tools/sdk/lwip2/include/lwipopts.h +++ b/tools/sdk/lwip2/include/lwipopts.h @@ -3139,7 +3139,7 @@ * u8_t *ptr = (u8_t*)pbuf_get_contiguous(p, buf, sizeof(buf), LWIP_MIN(option_len, sizeof(buf)), offset); */ #ifdef __DOXYGEN__ -#define LWIP_HOOK_DHCP_PARSE_OPTION(netif, dhcp, state, msg, msg_type, option, len, pbuf, offset) +//#define LWIP_HOOK_DHCP_PARSE_OPTION(netif, dhcp, state, msg, msg_type, option, len, pbuf, offset) #endif /** @@ -3551,6 +3551,12 @@ #error LWIP_FEATURES must be defined #endif +#define PPPOS_SUPPORT IP_NAPT // because we don't have proxyarp yet +#define PPP_SUPPORT PPPOS_SUPPORT +#define PPP_SERVER 1 +#define PPP_DEBUG ULWIPDEBUG +#define PRINTPKT_SUPPORT ULWIPDEBUG + #ifdef __cplusplus extern "C" { #endif @@ -3560,6 +3566,24 @@ extern "C" { */ #define TCP_RANDOM_PORT 1 +/* + -------------------------------------------------- + ------------------ DHCP options ------------------ + -------------------------------------------------- +*/ + +#define LWIP_HOOK_DHCP_PARSE_OPTION(netif, dhcp, state, msg, msg_type, option, len, pbuf, option_value_offset) \ + lwip_hook_dhcp_parse_option(netif, dhcp, state, msg, msg_type, option, len, pbuf, option_value_offset) + +// search for LWIP_HOOK_DHCP_PARSE_OPTION above for an arguments explanation +struct netif; +struct dhcp; +struct dhcp_msg; +struct pbuf; +extern void lwip_hook_dhcp_parse_option(struct netif *netif, struct dhcp *dhcp, int state, struct dhcp_msg *msg, + int msg_type, int option, int option_len, struct pbuf *pbuf, + int option_value_offset); + /* -------------------------------------------------- ------------------ SNTP options ------------------ diff --git a/tools/sdk/lwip2/include/netif/ppp/fsm.h b/tools/sdk/lwip2/include/netif/ppp/fsm.h new file mode 100644 index 0000000000..8dec700e07 --- /dev/null +++ b/tools/sdk/lwip2/include/netif/ppp/fsm.h @@ -0,0 +1,182 @@ +/* + * fsm.h - {Link, IP} Control Protocol Finite State Machine definitions. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. 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 "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: fsm.h,v 1.10 2004/11/13 02:28:15 paulus Exp $ + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef FSM_H +#define FSM_H + +#include "ppp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Packet header = Code, id, length. + */ +#define HEADERLEN 4 + + +/* + * CP (LCP, IPCP, etc.) codes. + */ +#define CONFREQ 1 /* Configuration Request */ +#define CONFACK 2 /* Configuration Ack */ +#define CONFNAK 3 /* Configuration Nak */ +#define CONFREJ 4 /* Configuration Reject */ +#define TERMREQ 5 /* Termination Request */ +#define TERMACK 6 /* Termination Ack */ +#define CODEREJ 7 /* Code Reject */ + + +/* + * Each FSM is described by an fsm structure and fsm callbacks. + */ +typedef struct fsm { + ppp_pcb *pcb; /* PPP Interface */ + const struct fsm_callbacks *callbacks; /* Callback routines */ + const char *term_reason; /* Reason for closing protocol */ + u8_t seen_ack; /* Have received valid Ack/Nak/Rej to Req */ + /* -- This is our only flag, we might use u_int :1 if we have more flags */ + u16_t protocol; /* Data Link Layer Protocol field value */ + u8_t state; /* State */ + u8_t flags; /* Contains option bits */ + u8_t id; /* Current id */ + u8_t reqid; /* Current request id */ + u8_t retransmits; /* Number of retransmissions left */ + u8_t nakloops; /* Number of nak loops since last ack */ + u8_t rnakloops; /* Number of naks received */ + u8_t maxnakloops; /* Maximum number of nak loops tolerated + (necessary because IPCP require a custom large max nak loops value) */ + u8_t term_reason_len; /* Length of term_reason */ +} fsm; + + +typedef struct fsm_callbacks { + void (*resetci) /* Reset our Configuration Information */ + (fsm *); + int (*cilen) /* Length of our Configuration Information */ + (fsm *); + void (*addci) /* Add our Configuration Information */ + (fsm *, u_char *, int *); + int (*ackci) /* ACK our Configuration Information */ + (fsm *, u_char *, int); + int (*nakci) /* NAK our Configuration Information */ + (fsm *, u_char *, int, int); + int (*rejci) /* Reject our Configuration Information */ + (fsm *, u_char *, int); + int (*reqci) /* Request peer's Configuration Information */ + (fsm *, u_char *, int *, int); + void (*up) /* Called when fsm reaches PPP_FSM_OPENED state */ + (fsm *); + void (*down) /* Called when fsm leaves PPP_FSM_OPENED state */ + (fsm *); + void (*starting) /* Called when we want the lower layer */ + (fsm *); + void (*finished) /* Called when we don't want the lower layer */ + (fsm *); + void (*protreject) /* Called when Protocol-Reject received */ + (int); + void (*retransmit) /* Retransmission is necessary */ + (fsm *); + int (*extcode) /* Called when unknown code received */ + (fsm *, int, int, u_char *, int); + const char *proto_name; /* String name for protocol (for messages) */ +} fsm_callbacks; + + +/* + * Link states. + */ +#define PPP_FSM_INITIAL 0 /* Down, hasn't been opened */ +#define PPP_FSM_STARTING 1 /* Down, been opened */ +#define PPP_FSM_CLOSED 2 /* Up, hasn't been opened */ +#define PPP_FSM_STOPPED 3 /* Open, waiting for down event */ +#define PPP_FSM_CLOSING 4 /* Terminating the connection, not open */ +#define PPP_FSM_STOPPING 5 /* Terminating, but open */ +#define PPP_FSM_REQSENT 6 /* We've sent a Config Request */ +#define PPP_FSM_ACKRCVD 7 /* We've received a Config Ack */ +#define PPP_FSM_ACKSENT 8 /* We've sent a Config Ack */ +#define PPP_FSM_OPENED 9 /* Connection available */ + + +/* + * Flags - indicate options controlling FSM operation + */ +#define OPT_PASSIVE 1 /* Don't die if we don't get a response */ +#define OPT_RESTART 2 /* Treat 2nd OPEN as DOWN, UP */ +#define OPT_SILENT 4 /* Wait for peer to speak first */ + + +/* + * Timeouts. + */ +#if 0 /* moved to ppp_opts.h */ +#define DEFTIMEOUT 3 /* Timeout time in seconds */ +#define DEFMAXTERMREQS 2 /* Maximum Terminate-Request transmissions */ +#define DEFMAXCONFREQS 10 /* Maximum Configure-Request transmissions */ +#define DEFMAXNAKLOOPS 5 /* Maximum number of nak loops */ +#endif /* moved to ppp_opts.h */ + + +/* + * Prototypes + */ +void fsm_init(fsm *f); +void fsm_lowerup(fsm *f); +void fsm_lowerdown(fsm *f); +void fsm_open(fsm *f); +void fsm_close(fsm *f, const char *reason); +void fsm_input(fsm *f, u_char *inpacket, int l); +void fsm_protreject(fsm *f); +void fsm_sdata(fsm *f, u_char code, u_char id, const u_char *data, int datalen); + +#ifdef __cplusplus +} +#endif + +#endif /* FSM_H */ +#endif /* PPP_SUPPORT */ diff --git a/tools/sdk/lwip2/include/netif/ppp/ipcp.h b/tools/sdk/lwip2/include/netif/ppp/ipcp.h new file mode 100644 index 0000000000..32fdd1c641 --- /dev/null +++ b/tools/sdk/lwip2/include/netif/ppp/ipcp.h @@ -0,0 +1,134 @@ +/* + * ipcp.h - IP Control Protocol definitions. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. 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 "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: ipcp.h,v 1.14 2002/12/04 23:03:32 paulus Exp $ + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && PPP_IPV4_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef IPCP_H +#define IPCP_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Options. + */ +#define CI_ADDRS 1 /* IP Addresses */ +#if VJ_SUPPORT +#define CI_COMPRESSTYPE 2 /* Compression Type */ +#endif /* VJ_SUPPORT */ +#define CI_ADDR 3 + +#if LWIP_DNS +#define CI_MS_DNS1 129 /* Primary DNS value */ +#define CI_MS_DNS2 131 /* Secondary DNS value */ +#endif /* LWIP_DNS */ +#if 0 /* UNUSED - WINS */ +#define CI_MS_WINS1 130 /* Primary WINS value */ +#define CI_MS_WINS2 132 /* Secondary WINS value */ +#endif /* UNUSED - WINS */ + +#if VJ_SUPPORT +#define MAX_STATES 16 /* from slcompress.h */ + +#define IPCP_VJMODE_OLD 1 /* "old" mode (option # = 0x0037) */ +#define IPCP_VJMODE_RFC1172 2 /* "old-rfc"mode (option # = 0x002d) */ +#define IPCP_VJMODE_RFC1332 3 /* "new-rfc"mode (option # = 0x002d, */ + /* maxslot and slot number compression) */ + +#define IPCP_VJ_COMP 0x002d /* current value for VJ compression option*/ +#define IPCP_VJ_COMP_OLD 0x0037 /* "old" (i.e, broken) value for VJ */ + /* compression option*/ +#endif /* VJ_SUPPORT */ + +typedef struct ipcp_options { + unsigned int neg_addr :1; /* Negotiate IP Address? */ + unsigned int old_addrs :1; /* Use old (IP-Addresses) option? */ + unsigned int req_addr :1; /* Ask peer to send IP address? */ +#if 0 /* UNUSED */ + unsigned int default_route :1; /* Assign default route through interface? */ + unsigned int replace_default_route :1; /* Replace default route through interface? */ +#endif /* UNUSED */ +#if 0 /* UNUSED - PROXY ARP */ + unsigned int proxy_arp :1; /* Make proxy ARP entry for peer? */ +#endif /* UNUSED - PROXY ARP */ +#if VJ_SUPPORT + unsigned int neg_vj :1; /* Van Jacobson Compression? */ + unsigned int old_vj :1; /* use old (short) form of VJ option? */ + unsigned int cflag :1; +#endif /* VJ_SUPPORT */ + unsigned int accept_local :1; /* accept peer's value for ouraddr */ + unsigned int accept_remote :1; /* accept peer's value for hisaddr */ +#if LWIP_DNS + unsigned int req_dns1 :1; /* Ask peer to send primary DNS address? */ + unsigned int req_dns2 :1; /* Ask peer to send secondary DNS address? */ +#endif /* LWIP_DNS */ + + u32_t ouraddr, hisaddr; /* Addresses in NETWORK BYTE ORDER */ +#if LWIP_DNS + u32_t dnsaddr[2]; /* Primary and secondary MS DNS entries */ +#endif /* LWIP_DNS */ +#if 0 /* UNUSED - WINS */ + u32_t winsaddr[2]; /* Primary and secondary MS WINS entries */ +#endif /* UNUSED - WINS */ + +#if VJ_SUPPORT + u16_t vj_protocol; /* protocol value to use in VJ option */ + u8_t maxslotindex; /* values for RFC1332 VJ compression neg. */ +#endif /* VJ_SUPPORT */ +} ipcp_options; + +#if 0 /* UNUSED, already defined by lwIP */ +char *ip_ntoa (u32_t); +#endif /* UNUSED, already defined by lwIP */ + +extern const struct protent ipcp_protent; + +#ifdef __cplusplus +} +#endif + +#endif /* IPCP_H */ +#endif /* PPP_SUPPORT && PPP_IPV4_SUPPORT */ diff --git a/tools/sdk/lwip2/include/netif/ppp/lcp.h b/tools/sdk/lwip2/include/netif/ppp/lcp.h new file mode 100644 index 0000000000..18ad1cb23b --- /dev/null +++ b/tools/sdk/lwip2/include/netif/ppp/lcp.h @@ -0,0 +1,179 @@ +/* + * lcp.h - Link Control Protocol definitions. + * + * Copyright (c) 1984-2000 Carnegie Mellon University. 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 "Carnegie Mellon University" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For permission or any legal + * details, please contact + * Office of Technology Transfer + * Carnegie Mellon University + * 5000 Forbes Avenue + * Pittsburgh, PA 15213-3890 + * (412) 268-4387, fax: (412) 268-7395 + * tech-transfer@andrew.cmu.edu + * + * 4. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by Computing Services + * at Carnegie Mellon University (http://www.cmu.edu/computing/)." + * + * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO + * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE + * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $Id: lcp.h,v 1.20 2004/11/14 22:53:42 carlsonj Exp $ + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef LCP_H +#define LCP_H + +#include "ppp.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Options. + */ +#define CI_VENDOR 0 /* Vendor Specific */ +#define CI_MRU 1 /* Maximum Receive Unit */ +#define CI_ASYNCMAP 2 /* Async Control Character Map */ +#define CI_AUTHTYPE 3 /* Authentication Type */ +#define CI_QUALITY 4 /* Quality Protocol */ +#define CI_MAGICNUMBER 5 /* Magic Number */ +#define CI_PCOMPRESSION 7 /* Protocol Field Compression */ +#define CI_ACCOMPRESSION 8 /* Address/Control Field Compression */ +#define CI_FCSALTERN 9 /* FCS-Alternatives */ +#define CI_SDP 10 /* Self-Describing-Pad */ +#define CI_NUMBERED 11 /* Numbered-Mode */ +#define CI_CALLBACK 13 /* callback */ +#define CI_MRRU 17 /* max reconstructed receive unit; multilink */ +#define CI_SSNHF 18 /* short sequence numbers for multilink */ +#define CI_EPDISC 19 /* endpoint discriminator */ +#define CI_MPPLUS 22 /* Multi-Link-Plus-Procedure */ +#define CI_LDISC 23 /* Link-Discriminator */ +#define CI_LCPAUTH 24 /* LCP Authentication */ +#define CI_COBS 25 /* Consistent Overhead Byte Stuffing */ +#define CI_PREFELIS 26 /* Prefix Elision */ +#define CI_MPHDRFMT 27 /* MP Header Format */ +#define CI_I18N 28 /* Internationalization */ +#define CI_SDL 29 /* Simple Data Link */ + +/* + * LCP-specific packet types (code numbers). + */ +#define PROTREJ 8 /* Protocol Reject */ +#define ECHOREQ 9 /* Echo Request */ +#define ECHOREP 10 /* Echo Reply */ +#define DISCREQ 11 /* Discard Request */ +#define IDENTIF 12 /* Identification */ +#define TIMEREM 13 /* Time Remaining */ + +/* Value used as data for CI_CALLBACK option */ +#define CBCP_OPT 6 /* Use callback control protocol */ + +#if 0 /* moved to ppp_opts.h */ +#define DEFMRU 1500 /* Try for this */ +#define MINMRU 128 /* No MRUs below this */ +#define MAXMRU 16384 /* Normally limit MRU to this */ +#endif /* moved to ppp_opts.h */ + +/* An endpoint discriminator, used with multilink. */ +#define MAX_ENDP_LEN 20 /* maximum length of discriminator value */ +struct epdisc { + unsigned char class_; /* -- The word "class" is reserved in C++. */ + unsigned char length; + unsigned char value[MAX_ENDP_LEN]; +}; + +/* + * The state of options is described by an lcp_options structure. + */ +typedef struct lcp_options { + unsigned int passive :1; /* Don't die if we don't get a response */ + unsigned int silent :1; /* Wait for the other end to start first */ +#if 0 /* UNUSED */ + unsigned int restart :1; /* Restart vs. exit after close */ +#endif /* UNUSED */ + unsigned int neg_mru :1; /* Negotiate the MRU? */ + unsigned int neg_asyncmap :1; /* Negotiate the async map? */ +#if PAP_SUPPORT + unsigned int neg_upap :1; /* Ask for UPAP authentication? */ +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + unsigned int neg_chap :1; /* Ask for CHAP authentication? */ +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT + unsigned int neg_eap :1; /* Ask for EAP authentication? */ +#endif /* EAP_SUPPORT */ + unsigned int neg_magicnumber :1; /* Ask for magic number? */ + unsigned int neg_pcompression :1; /* HDLC Protocol Field Compression? */ + unsigned int neg_accompression :1; /* HDLC Address/Control Field Compression? */ +#if LQR_SUPPORT + unsigned int neg_lqr :1; /* Negotiate use of Link Quality Reports */ +#endif /* LQR_SUPPORT */ + unsigned int neg_cbcp :1; /* Negotiate use of CBCP */ +#ifdef HAVE_MULTILINK + unsigned int neg_mrru :1; /* negotiate multilink MRRU */ +#endif /* HAVE_MULTILINK */ + unsigned int neg_ssnhf :1; /* negotiate short sequence numbers */ + unsigned int neg_endpoint :1; /* negotiate endpoint discriminator */ + + u16_t mru; /* Value of MRU */ +#ifdef HAVE_MULTILINK + u16_t mrru; /* Value of MRRU, and multilink enable */ +#endif /* MULTILINK */ +#if CHAP_SUPPORT + u8_t chap_mdtype; /* which MD types (hashing algorithm) */ +#endif /* CHAP_SUPPORT */ + u32_t asyncmap; /* Value of async map */ + u32_t magicnumber; + u8_t numloops; /* Number of loops during magic number neg. */ +#if LQR_SUPPORT + u32_t lqr_period; /* Reporting period for LQR 1/100ths second */ +#endif /* LQR_SUPPORT */ + struct epdisc endpoint; /* endpoint discriminator */ +} lcp_options; + +void lcp_open(ppp_pcb *pcb); +void lcp_close(ppp_pcb *pcb, const char *reason); +void lcp_lowerup(ppp_pcb *pcb); +void lcp_lowerdown(ppp_pcb *pcb); +void lcp_sprotrej(ppp_pcb *pcb, u_char *p, int len); /* send protocol reject */ + +extern const struct protent lcp_protent; + +#if 0 /* moved to ppp_opts.h */ +/* Default number of times we receive our magic number from the peer + before deciding the link is looped-back. */ +#define DEFLOOPBACKFAIL 10 +#endif /* moved to ppp_opts.h */ + +#ifdef __cplusplus +} +#endif + +#endif /* LCP_H */ +#endif /* PPP_SUPPORT */ diff --git a/tools/sdk/lwip2/include/netif/ppp/ppp.h b/tools/sdk/lwip2/include/netif/ppp/ppp.h new file mode 100644 index 0000000000..3d73c36570 --- /dev/null +++ b/tools/sdk/lwip2/include/netif/ppp/ppp.h @@ -0,0 +1,698 @@ +/***************************************************************************** +* ppp.h - Network Point to Point Protocol header file. +* +* Copyright (c) 2003 by Marc Boucher, Services Informatiques (MBSI) inc. +* portions Copyright (c) 1997 Global Election Systems 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 +* +* 03-01-01 Marc Boucher +* Ported to lwIP. +* 97-11-05 Guy Lancaster , Global Election Systems Inc. +* Original derived from BSD codes. +*****************************************************************************/ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef PPP_H +#define PPP_H + +#include "lwip/def.h" +#include "lwip/stats.h" +#include "lwip/mem.h" +#include "lwip/netif.h" +#include "lwip/sys.h" +#include "lwip/timeouts.h" +#if PPP_IPV6_SUPPORT +#include "lwip/ip6_addr.h" +#endif /* PPP_IPV6_SUPPORT */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Disable non-working or rarely used PPP feature, so rarely that we don't want to bloat ppp_opts.h with them */ +#ifndef PPP_OPTIONS +#define PPP_OPTIONS 0 +#endif + +#ifndef PPP_NOTIFY +#define PPP_NOTIFY 0 +#endif + +#ifndef PPP_REMOTENAME +#define PPP_REMOTENAME 0 +#endif + +#ifndef PPP_IDLETIMELIMIT +#define PPP_IDLETIMELIMIT 0 +#endif + +#ifndef PPP_LCP_ADAPTIVE +#define PPP_LCP_ADAPTIVE 0 +#endif + +#ifndef PPP_MAXCONNECT +#define PPP_MAXCONNECT 0 +#endif + +#ifndef PPP_ALLOWED_ADDRS +#define PPP_ALLOWED_ADDRS 0 +#endif + +#ifndef PPP_PROTOCOLNAME +#define PPP_PROTOCOLNAME 0 +#endif + +#ifndef PPP_STATS_SUPPORT +#define PPP_STATS_SUPPORT 0 +#endif + +#ifndef DEFLATE_SUPPORT +#define DEFLATE_SUPPORT 0 +#endif + +#ifndef BSDCOMPRESS_SUPPORT +#define BSDCOMPRESS_SUPPORT 0 +#endif + +#ifndef PREDICTOR_SUPPORT +#define PREDICTOR_SUPPORT 0 +#endif + +/************************* +*** PUBLIC DEFINITIONS *** +*************************/ + +/* + * The basic PPP frame. + */ +#define PPP_HDRLEN 4 /* octets for standard ppp header */ +#define PPP_FCSLEN 2 /* octets for FCS */ + +/* + * Values for phase. + */ +#define PPP_PHASE_DEAD 0 +#define PPP_PHASE_MASTER 1 +#define PPP_PHASE_HOLDOFF 2 +#define PPP_PHASE_INITIALIZE 3 +#define PPP_PHASE_SERIALCONN 4 +#define PPP_PHASE_DORMANT 5 +#define PPP_PHASE_ESTABLISH 6 +#define PPP_PHASE_AUTHENTICATE 7 +#define PPP_PHASE_CALLBACK 8 +#define PPP_PHASE_NETWORK 9 +#define PPP_PHASE_RUNNING 10 +#define PPP_PHASE_TERMINATE 11 +#define PPP_PHASE_DISCONNECT 12 + +/* Error codes. */ +#define PPPERR_NONE 0 /* No error. */ +#define PPPERR_PARAM 1 /* Invalid parameter. */ +#define PPPERR_OPEN 2 /* Unable to open PPP session. */ +#define PPPERR_DEVICE 3 /* Invalid I/O device for PPP. */ +#define PPPERR_ALLOC 4 /* Unable to allocate resources. */ +#define PPPERR_USER 5 /* User interrupt. */ +#define PPPERR_CONNECT 6 /* Connection lost. */ +#define PPPERR_AUTHFAIL 7 /* Failed authentication challenge. */ +#define PPPERR_PROTOCOL 8 /* Failed to meet protocol. */ +#define PPPERR_PEERDEAD 9 /* Connection timeout */ +#define PPPERR_IDLETIMEOUT 10 /* Idle Timeout */ +#define PPPERR_CONNECTTIME 11 /* Max connect time reached */ +#define PPPERR_LOOPBACK 12 /* Loopback detected */ + +/* Whether auth support is enabled at all */ +#define PPP_AUTH_SUPPORT (PAP_SUPPORT || CHAP_SUPPORT || EAP_SUPPORT) + +/************************ +*** PUBLIC DATA TYPES *** +************************/ + +/* + * Other headers require ppp_pcb definition for prototypes, but ppp_pcb + * require some structure definition from other headers as well, we are + * fixing the dependency loop here by declaring the ppp_pcb type then + * by including headers containing necessary struct definition for ppp_pcb + */ +typedef struct ppp_pcb_s ppp_pcb; + +/* Type definitions for BSD code. */ +#ifndef __u_char_defined +typedef unsigned long u_long; +typedef unsigned int u_int; +typedef unsigned short u_short; +typedef unsigned char u_char; +#endif + +#include "fsm.h" +#include "lcp.h" +#if CCP_SUPPORT +#include "ccp.h" +#endif /* CCP_SUPPORT */ +#if MPPE_SUPPORT +#include "mppe.h" +#endif /* MPPE_SUPPORT */ +#if PPP_IPV4_SUPPORT +#include "ipcp.h" +#endif /* PPP_IPV4_SUPPORT */ +#if PPP_IPV6_SUPPORT +#include "ipv6cp.h" +#endif /* PPP_IPV6_SUPPORT */ +#if PAP_SUPPORT +#include "upap.h" +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT +#include "chap-new.h" +#endif /* CHAP_SUPPORT */ +#if EAP_SUPPORT +#include "eap.h" +#endif /* EAP_SUPPORT */ +#if VJ_SUPPORT +#include "vj.h" +#endif /* VJ_SUPPORT */ + +/* Link status callback function prototype */ +typedef void (*ppp_link_status_cb_fn)(ppp_pcb *pcb, int err_code, void *ctx); + +/* + * PPP configuration. + */ +typedef struct ppp_settings_s { + +#if PPP_SERVER && PPP_AUTH_SUPPORT + unsigned int auth_required :1; /* Peer is required to authenticate */ + unsigned int null_login :1; /* Username of "" and a password of "" are acceptable */ +#endif /* PPP_SERVER && PPP_AUTH_SUPPORT */ +#if PPP_REMOTENAME + unsigned int explicit_remote :1; /* remote_name specified with remotename opt */ +#endif /* PPP_REMOTENAME */ +#if PAP_SUPPORT + unsigned int refuse_pap :1; /* Don't proceed auth. with PAP */ +#endif /* PAP_SUPPORT */ +#if CHAP_SUPPORT + unsigned int refuse_chap :1; /* Don't proceed auth. with CHAP */ +#endif /* CHAP_SUPPORT */ +#if MSCHAP_SUPPORT + unsigned int refuse_mschap :1; /* Don't proceed auth. with MS-CHAP */ + unsigned int refuse_mschap_v2 :1; /* Don't proceed auth. with MS-CHAPv2 */ +#endif /* MSCHAP_SUPPORT */ +#if EAP_SUPPORT + unsigned int refuse_eap :1; /* Don't proceed auth. with EAP */ +#endif /* EAP_SUPPORT */ +#if LWIP_DNS + unsigned int usepeerdns :1; /* Ask peer for DNS adds */ +#endif /* LWIP_DNS */ + unsigned int persist :1; /* Persist mode, always try to open the connection */ +#if PRINTPKT_SUPPORT + unsigned int hide_password :1; /* Hide password in dumped packets */ +#endif /* PRINTPKT_SUPPORT */ + unsigned int noremoteip :1; /* Let him have no IP address */ + unsigned int lax_recv :1; /* accept control chars in asyncmap */ + unsigned int noendpoint :1; /* don't send/accept endpoint discriminator */ +#if PPP_LCP_ADAPTIVE + unsigned int lcp_echo_adaptive :1; /* request echo only if the link was idle */ +#endif /* PPP_LCP_ADAPTIVE */ +#if MPPE_SUPPORT + unsigned int require_mppe :1; /* Require MPPE (Microsoft Point to Point Encryption) */ + unsigned int refuse_mppe_40 :1; /* Allow MPPE 40-bit mode? */ + unsigned int refuse_mppe_128 :1; /* Allow MPPE 128-bit mode? */ + unsigned int refuse_mppe_stateful :1; /* Allow MPPE stateful mode? */ +#endif /* MPPE_SUPPORT */ + + u16_t listen_time; /* time to listen first (ms), waiting for peer to send LCP packet */ + +#if PPP_IDLETIMELIMIT + u16_t idle_time_limit; /* Disconnect if idle for this many seconds */ +#endif /* PPP_IDLETIMELIMIT */ +#if PPP_MAXCONNECT + u32_t maxconnect; /* Maximum connect time (seconds) */ +#endif /* PPP_MAXCONNECT */ + +#if PPP_AUTH_SUPPORT + /* auth data */ + const char *user; /* Username for PAP */ + const char *passwd; /* Password for PAP, secret for CHAP */ +#if PPP_REMOTENAME + char remote_name[MAXNAMELEN + 1]; /* Peer's name for authentication */ +#endif /* PPP_REMOTENAME */ + +#if PAP_SUPPORT + u8_t pap_timeout_time; /* Timeout (seconds) for auth-req retrans. */ + u8_t pap_max_transmits; /* Number of auth-reqs sent */ +#if PPP_SERVER + u8_t pap_req_timeout; /* Time to wait for auth-req from peer */ +#endif /* PPP_SERVER */ +#endif /* PAP_SUPPPORT */ + +#if CHAP_SUPPORT + u8_t chap_timeout_time; /* Timeout (seconds) for retransmitting req */ + u8_t chap_max_transmits; /* max # times to send challenge */ +#if PPP_SERVER + u8_t chap_rechallenge_time; /* Time to wait for auth-req from peer */ +#endif /* PPP_SERVER */ +#endif /* CHAP_SUPPPORT */ + +#if EAP_SUPPORT + u8_t eap_req_time; /* Time to wait (for retransmit/fail) */ + u8_t eap_allow_req; /* Max Requests allowed */ +#if PPP_SERVER + u8_t eap_timeout_time; /* Time to wait (for retransmit/fail) */ + u8_t eap_max_transmits; /* Max Requests allowed */ +#endif /* PPP_SERVER */ +#endif /* EAP_SUPPORT */ + +#endif /* PPP_AUTH_SUPPORT */ + + u8_t fsm_timeout_time; /* Timeout time in seconds */ + u8_t fsm_max_conf_req_transmits; /* Maximum Configure-Request transmissions */ + u8_t fsm_max_term_transmits; /* Maximum Terminate-Request transmissions */ + u8_t fsm_max_nak_loops; /* Maximum number of nak loops tolerated */ + + u8_t lcp_loopbackfail; /* Number of times we receive our magic number from the peer + before deciding the link is looped-back. */ + u8_t lcp_echo_interval; /* Interval between LCP echo-requests */ + u8_t lcp_echo_fails; /* Tolerance to unanswered echo-requests */ + +} ppp_settings; + +#if PPP_SERVER +struct ppp_addrs { +#if PPP_IPV4_SUPPORT + ip4_addr_t our_ipaddr, his_ipaddr, netmask; +#if LWIP_DNS + ip4_addr_t dns1, dns2; +#endif /* LWIP_DNS */ +#endif /* PPP_IPV4_SUPPORT */ +#if PPP_IPV6_SUPPORT + ip6_addr_t our6_ipaddr, his6_ipaddr; +#endif /* PPP_IPV6_SUPPORT */ +}; +#endif /* PPP_SERVER */ + +/* + * PPP interface control block. + */ +struct ppp_pcb_s { + ppp_settings settings; + const struct link_callbacks *link_cb; + void *link_ctx_cb; + void (*link_status_cb)(ppp_pcb *pcb, int err_code, void *ctx); /* Status change callback */ +#if PPP_NOTIFY_PHASE + void (*notify_phase_cb)(ppp_pcb *pcb, u8_t phase, void *ctx); /* Notify phase callback */ +#endif /* PPP_NOTIFY_PHASE */ + void *ctx_cb; /* Callbacks optional pointer */ + struct netif *netif; /* PPP interface */ + u8_t phase; /* where the link is at */ + u8_t err_code; /* Code indicating why interface is down. */ + + /* flags */ +#if PPP_IPV4_SUPPORT + unsigned int ask_for_local :1; /* request our address from peer */ + unsigned int ipcp_is_open :1; /* haven't called np_finished() */ + unsigned int ipcp_is_up :1; /* have called ipcp_up() */ + unsigned int if4_up :1; /* True when the IPv4 interface is up. */ +#if 0 /* UNUSED - PROXY ARP */ + unsigned int proxy_arp_set :1; /* Have created proxy arp entry */ +#endif /* UNUSED - PROXY ARP */ +#endif /* PPP_IPV4_SUPPORT */ +#if PPP_IPV6_SUPPORT + unsigned int ipv6cp_is_up :1; /* have called ip6cp_up() */ + unsigned int if6_up :1; /* True when the IPv6 interface is up. */ +#endif /* PPP_IPV6_SUPPORT */ + unsigned int lcp_echo_timer_running :1; /* set if a timer is running */ +#if VJ_SUPPORT + unsigned int vj_enabled :1; /* Flag indicating VJ compression enabled. */ +#endif /* VJ_SUPPORT */ +#if CCP_SUPPORT + unsigned int ccp_all_rejected :1; /* we rejected all peer's options */ +#endif /* CCP_SUPPORT */ +#if MPPE_SUPPORT + unsigned int mppe_keys_set :1; /* Have the MPPE keys been set? */ +#endif /* MPPE_SUPPORT */ + +#if PPP_AUTH_SUPPORT + /* auth data */ +#if PPP_SERVER && defined(HAVE_MULTILINK) + char peer_authname[MAXNAMELEN + 1]; /* The name by which the peer authenticated itself to us. */ +#endif /* PPP_SERVER && defined(HAVE_MULTILINK) */ + u16_t auth_pending; /* Records which authentication operations haven't completed yet. */ + u16_t auth_done; /* Records which authentication operations have been completed. */ + +#if PAP_SUPPORT + upap_state upap; /* PAP data */ +#endif /* PAP_SUPPORT */ + +#if CHAP_SUPPORT + chap_client_state chap_client; /* CHAP client data */ +#if PPP_SERVER + chap_server_state chap_server; /* CHAP server data */ +#endif /* PPP_SERVER */ +#endif /* CHAP_SUPPORT */ + +#if EAP_SUPPORT + eap_state eap; /* EAP data */ +#endif /* EAP_SUPPORT */ +#endif /* PPP_AUTH_SUPPORT */ + + fsm lcp_fsm; /* LCP fsm structure */ + lcp_options lcp_wantoptions; /* Options that we want to request */ + lcp_options lcp_gotoptions; /* Options that peer ack'd */ + lcp_options lcp_allowoptions; /* Options we allow peer to request */ + lcp_options lcp_hisoptions; /* Options that we ack'd */ + u16_t peer_mru; /* currently negotiated peer MRU */ + u8_t lcp_echos_pending; /* Number of outstanding echo msgs */ + u8_t lcp_echo_number; /* ID number of next echo frame */ + + u8_t num_np_open; /* Number of network protocols which we have opened. */ + u8_t num_np_up; /* Number of network protocols which have come up. */ + +#if VJ_SUPPORT + struct vjcompress vj_comp; /* Van Jacobson compression header. */ +#endif /* VJ_SUPPORT */ + +#if CCP_SUPPORT + fsm ccp_fsm; /* CCP fsm structure */ + ccp_options ccp_wantoptions; /* what to request the peer to use */ + ccp_options ccp_gotoptions; /* what the peer agreed to do */ + ccp_options ccp_allowoptions; /* what we'll agree to do */ + ccp_options ccp_hisoptions; /* what we agreed to do */ + u8_t ccp_localstate; /* Local state (mainly for handling reset-reqs and reset-acks). */ + u8_t ccp_receive_method; /* Method chosen on receive path */ + u8_t ccp_transmit_method; /* Method chosen on transmit path */ +#if MPPE_SUPPORT + ppp_mppe_state mppe_comp; /* MPPE "compressor" structure */ + ppp_mppe_state mppe_decomp; /* MPPE "decompressor" structure */ +#endif /* MPPE_SUPPORT */ +#endif /* CCP_SUPPORT */ + +#if PPP_IPV4_SUPPORT + fsm ipcp_fsm; /* IPCP fsm structure */ + ipcp_options ipcp_wantoptions; /* Options that we want to request */ + ipcp_options ipcp_gotoptions; /* Options that peer ack'd */ + ipcp_options ipcp_allowoptions; /* Options we allow peer to request */ + ipcp_options ipcp_hisoptions; /* Options that we ack'd */ +#endif /* PPP_IPV4_SUPPORT */ + +#if PPP_IPV6_SUPPORT + fsm ipv6cp_fsm; /* IPV6CP fsm structure */ + ipv6cp_options ipv6cp_wantoptions; /* Options that we want to request */ + ipv6cp_options ipv6cp_gotoptions; /* Options that peer ack'd */ + ipv6cp_options ipv6cp_allowoptions; /* Options we allow peer to request */ + ipv6cp_options ipv6cp_hisoptions; /* Options that we ack'd */ +#endif /* PPP_IPV6_SUPPORT */ +}; + +/************************ + *** PUBLIC FUNCTIONS *** + ************************/ + +/* + * WARNING: For multi-threads environment, all ppp_set_* functions most + * only be called while the PPP is in the dead phase (i.e. disconnected). + */ + +#if PPP_AUTH_SUPPORT +/* + * Set PPP authentication. + * + * Warning: Using PPPAUTHTYPE_ANY might have security consequences. + * RFC 1994 says: + * + * In practice, within or associated with each PPP server, there is a + * database which associates "user" names with authentication + * information ("secrets"). It is not anticipated that a particular + * named user would be authenticated by multiple methods. This would + * make the user vulnerable to attacks which negotiate the least secure + * method from among a set (such as PAP rather than CHAP). If the same + * secret was used, PAP would reveal the secret to be used later with + * CHAP. + * + * Instead, for each user name there should be an indication of exactly + * one method used to authenticate that user name. If a user needs to + * make use of different authentication methods under different + * circumstances, then distinct user names SHOULD be employed, each of + * which identifies exactly one authentication method. + * + * Default is none auth type, unset (NULL) user and passwd. + */ +#define PPPAUTHTYPE_NONE 0x00 +#define PPPAUTHTYPE_PAP 0x01 +#define PPPAUTHTYPE_CHAP 0x02 +#define PPPAUTHTYPE_MSCHAP 0x04 +#define PPPAUTHTYPE_MSCHAP_V2 0x08 +#define PPPAUTHTYPE_EAP 0x10 +#define PPPAUTHTYPE_ANY 0xff +void ppp_set_auth(ppp_pcb *pcb, u8_t authtype, const char *user, const char *passwd); + +/* + * If set, peer is required to authenticate. This is mostly necessary for PPP server support. + * + * Default is false. + */ +#define ppp_set_auth_required(ppp, boolval) (ppp->settings.auth_required = boolval) +#endif /* PPP_AUTH_SUPPORT */ + +#if PPP_IPV4_SUPPORT +/* + * Set PPP interface "our" and "his" IPv4 addresses. This is mostly necessary for PPP server + * support but it can also be used on a PPP link where each side choose its own IP address. + * + * Default is unset (0.0.0.0). + */ +#define ppp_set_ipcp_ouraddr(ppp, addr) do { ppp->ipcp_wantoptions.ouraddr = ip4_addr_get_u32(addr); \ + ppp->ask_for_local = ppp->ipcp_wantoptions.ouraddr != 0; } while(0) +#define ppp_set_ipcp_hisaddr(ppp, addr) (ppp->ipcp_wantoptions.hisaddr = ip4_addr_get_u32(addr)) +#if LWIP_DNS +/* + * Set DNS server addresses that are sent if the peer asks for them. This is mostly necessary + * for PPP server support. + * + * Default is unset (0.0.0.0). + */ +#define ppp_set_ipcp_dnsaddr(ppp, index, addr) (ppp->ipcp_allowoptions.dnsaddr[index] = ip4_addr_get_u32(addr)) + +/* + * If set, we ask the peer for up to 2 DNS server addresses. Received DNS server addresses are + * registered using the dns_setserver() function. + * + * Default is false. + */ +#define ppp_set_usepeerdns(ppp, boolval) (ppp->settings.usepeerdns = boolval) +#endif /* LWIP_DNS */ +#endif /* PPP_IPV4_SUPPORT */ + +#if MPPE_SUPPORT +/* Disable MPPE (Microsoft Point to Point Encryption). This parameter is exclusive. */ +#define PPP_MPPE_DISABLE 0x00 +/* Require the use of MPPE (Microsoft Point to Point Encryption). */ +#define PPP_MPPE_ENABLE 0x01 +/* Allow MPPE to use stateful mode. Stateless mode is still attempted first. */ +#define PPP_MPPE_ALLOW_STATEFUL 0x02 +/* Refuse the use of MPPE with 40-bit encryption. Conflict with PPP_MPPE_REFUSE_128. */ +#define PPP_MPPE_REFUSE_40 0x04 +/* Refuse the use of MPPE with 128-bit encryption. Conflict with PPP_MPPE_REFUSE_40. */ +#define PPP_MPPE_REFUSE_128 0x08 +/* + * Set MPPE configuration + * + * Default is disabled. + */ +void ppp_set_mppe(ppp_pcb *pcb, u8_t flags); +#endif /* MPPE_SUPPORT */ + +/* + * Wait for up to intval milliseconds for a valid PPP packet from the peer. + * At the end of this time, or when a valid PPP packet is received from the + * peer, we commence negotiation by sending our first LCP packet. + * + * Default is 0. + */ +#define ppp_set_listen_time(ppp, intval) (ppp->settings.listen_time = intval) + +/* + * If set, we will attempt to initiate a connection but if no reply is received from + * the peer, we will then just wait passively for a valid LCP packet from the peer. + * + * Default is false. + */ +#define ppp_set_passive(ppp, boolval) (ppp->lcp_wantoptions.passive = boolval) + +/* + * If set, we will not transmit LCP packets to initiate a connection until a valid + * LCP packet is received from the peer. This is what we usually call the server mode. + * + * Default is false. + */ +#define ppp_set_silent(ppp, boolval) (ppp->lcp_wantoptions.silent = boolval) + +/* + * If set, enable protocol field compression negotiation in both the receive and + * the transmit direction. + * + * Default is true. + */ +#define ppp_set_neg_pcomp(ppp, boolval) (ppp->lcp_wantoptions.neg_pcompression = \ + ppp->lcp_allowoptions.neg_pcompression = boolval) + +/* + * If set, enable Address/Control compression in both the receive and the transmit + * direction. + * + * Default is true. + */ +#define ppp_set_neg_accomp(ppp, boolval) (ppp->lcp_wantoptions.neg_accompression = \ + ppp->lcp_allowoptions.neg_accompression = boolval) + +/* + * If set, enable asyncmap negotiation. Otherwise forcing all control characters to + * be escaped for both the transmit and the receive direction. + * + * Default is true. + */ +#define ppp_set_neg_asyncmap(ppp, boolval) (ppp->lcp_wantoptions.neg_asyncmap = \ + ppp->lcp_allowoptions.neg_asyncmap = boolval) + +/* + * This option sets the Async-Control-Character-Map (ACCM) for this end of the link. + * The ACCM is a set of 32 bits, one for each of the ASCII control characters with + * values from 0 to 31, where a 1 bit indicates that the corresponding control + * character should not be used in PPP packets sent to this system. The map is + * an unsigned 32 bits integer where the least significant bit (00000001) represents + * character 0 and the most significant bit (80000000) represents character 31. + * We will then ask the peer to send these characters as a 2-byte escape sequence. + * + * Default is 0. + */ +#define ppp_set_asyncmap(ppp, intval) (ppp->lcp_wantoptions.asyncmap = intval) + +/* + * Set a PPP interface as the default network interface + * (used to output all packets for which no specific route is found). + */ +#define ppp_set_default(ppp) netif_set_default(ppp->netif) + +#if PPP_NOTIFY_PHASE +/* + * Set a PPP notify phase callback. + * + * This can be used for example to set a LED pattern depending on the + * current phase of the PPP session. + */ +typedef void (*ppp_notify_phase_cb_fn)(ppp_pcb *pcb, u8_t phase, void *ctx); +void ppp_set_notify_phase_callback(ppp_pcb *pcb, ppp_notify_phase_cb_fn notify_phase_cb); +#endif /* PPP_NOTIFY_PHASE */ + +/* + * Initiate a PPP connection. + * + * This can only be called if PPP is in the dead phase. + * + * Holdoff is the time to wait (in seconds) before initiating + * the connection. + * + * If this port connects to a modem, the modem connection must be + * established before calling this. + */ +err_t ppp_connect(ppp_pcb *pcb, u16_t holdoff); + +#if PPP_SERVER +/* + * Listen for an incoming PPP connection. + * + * This can only be called if PPP is in the dead phase. + * + * If this port connects to a modem, the modem connection must be + * established before calling this. + */ +err_t ppp_listen(ppp_pcb *pcb); +#endif /* PPP_SERVER */ + +/* + * Initiate the end of a PPP connection. + * Any outstanding packets in the queues are dropped. + * + * Setting nocarrier to 1 close the PPP connection without initiating the + * shutdown procedure. Always using nocarrier = 0 is still recommended, + * this is going to take a little longer time if your link is down, but + * is a safer choice for the PPP state machine. + * + * Return 0 on success, an error code on failure. + */ +err_t ppp_close(ppp_pcb *pcb, u8_t nocarrier); + +/* + * Release the control block. + * + * This can only be called if PPP is in the dead phase. + * + * You must use ppp_close() before if you wish to terminate + * an established PPP session. + * + * Return 0 on success, an error code on failure. + */ +err_t ppp_free(ppp_pcb *pcb); + +/* + * PPP IOCTL commands. + * + * Get the up status - 0 for down, non-zero for up. The argument must + * point to an int. + */ +#define PPPCTLG_UPSTATUS 0 + +/* + * Get the PPP error code. The argument must point to an int. + * Returns a PPPERR_* value. + */ +#define PPPCTLG_ERRCODE 1 + +/* + * Get the fd associated with a PPP over serial + */ +#define PPPCTLG_FD 2 + +/* + * Get and set parameters for the given connection. + * Return 0 on success, an error code on failure. + */ +err_t ppp_ioctl(ppp_pcb *pcb, u8_t cmd, void *arg); + +/* Get the PPP netif interface */ +#define ppp_netif(ppp) (ppp->netif) + +/* Set an lwIP-style status-callback for the selected PPP device */ +#define ppp_set_netif_statuscallback(ppp, status_cb) \ + netif_set_status_callback(ppp->netif, status_cb); + +/* Set an lwIP-style link-callback for the selected PPP device */ +#define ppp_set_netif_linkcallback(ppp, link_cb) \ + netif_set_link_callback(ppp->netif, link_cb); + +#ifdef __cplusplus +} +#endif + +#endif /* PPP_H */ + +#endif /* PPP_SUPPORT */ diff --git a/tools/sdk/lwip2/include/netif/ppp/ppp_opts.h b/tools/sdk/lwip2/include/netif/ppp/ppp_opts.h new file mode 100644 index 0000000000..6702bec618 --- /dev/null +++ b/tools/sdk/lwip2/include/netif/ppp/ppp_opts.h @@ -0,0 +1,610 @@ +/* + * 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_PPP_OPTS_H +#define LWIP_PPP_OPTS_H + +#include "lwip/opt.h" + +/** + * 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 + +/** + * PPPOL2TP_SUPPORT==1: Enable PPP Over L2TP + */ +#ifndef PPPOL2TP_SUPPORT +#define PPPOL2TP_SUPPORT 0 +#endif + +/** + * PPPOL2TP_AUTH_SUPPORT==1: Enable PPP Over L2TP Auth (enable MD5 support) + */ +#ifndef PPPOL2TP_AUTH_SUPPORT +#define PPPOL2TP_AUTH_SUPPORT PPPOL2TP_SUPPORT +#endif + +/** + * PPPOS_SUPPORT==1: Enable PPP Over Serial + */ +#ifndef PPPOS_SUPPORT +#define PPPOS_SUPPORT PPP_SUPPORT +#endif + +/** + * LWIP_PPP_API==1: Enable PPP API (in pppapi.c) + */ +#ifndef LWIP_PPP_API +#define LWIP_PPP_API (PPP_SUPPORT && (NO_SYS == 0)) +#endif + +#if PPP_SUPPORT + +/** + * MEMP_NUM_PPP_PCB: the number of simultaneously active PPP + * connections (requires the PPP_SUPPORT option) + */ +#ifndef MEMP_NUM_PPP_PCB +#define MEMP_NUM_PPP_PCB 1 +#endif + +/** + * PPP_NUM_TIMEOUTS_PER_PCB: the number of sys_timeouts running in parallel per + * ppp_pcb. See the detailed explanation at the end of ppp_impl.h about simultaneous + * timers analysis. + */ +#ifndef PPP_NUM_TIMEOUTS_PER_PCB +#define PPP_NUM_TIMEOUTS_PER_PCB (1 + PPP_IPV4_SUPPORT + PPP_IPV6_SUPPORT + CCP_SUPPORT) +#endif + +/* The number of sys_timeouts required for the PPP module */ +#define PPP_NUM_TIMEOUTS (PPP_SUPPORT * PPP_NUM_TIMEOUTS_PER_PCB * MEMP_NUM_PPP_PCB) + +/** + * MEMP_NUM_PPPOS_INTERFACES: the number of concurrently active PPPoS + * interfaces (only used with PPPOS_SUPPORT==1) + */ +#ifndef MEMP_NUM_PPPOS_INTERFACES +#define MEMP_NUM_PPPOS_INTERFACES MEMP_NUM_PPP_PCB +#endif + +/** + * MEMP_NUM_PPPOE_INTERFACES: the number of concurrently active PPPoE + * interfaces (only used with PPPOE_SUPPORT==1) + */ +#ifndef MEMP_NUM_PPPOE_INTERFACES +#define MEMP_NUM_PPPOE_INTERFACES 1 +#endif + +/** + * MEMP_NUM_PPPOL2TP_INTERFACES: the number of concurrently active PPPoL2TP + * interfaces (only used with PPPOL2TP_SUPPORT==1) + */ +#ifndef MEMP_NUM_PPPOL2TP_INTERFACES +#define MEMP_NUM_PPPOL2TP_INTERFACES 1 +#endif + +/** + * MEMP_NUM_PPP_API_MSG: Number of concurrent PPP API messages (in pppapi.c) + */ +#ifndef MEMP_NUM_PPP_API_MSG +#define MEMP_NUM_PPP_API_MSG 5 +#endif + +/** + * PPP_DEBUG: Enable debugging for PPP. + */ +#ifndef PPP_DEBUG +#define PPP_DEBUG LWIP_DBG_OFF +#endif + +/** + * PPP_INPROC_IRQ_SAFE==1 call pppos_input() using tcpip_callback(). + * + * Please read the "PPPoS input path" chapter in the PPP documentation about this option. + */ +#ifndef PPP_INPROC_IRQ_SAFE +#define PPP_INPROC_IRQ_SAFE 0 +#endif + +/** + * PRINTPKT_SUPPORT==1: Enable PPP print packet support + * + * Mandatory for debugging, it displays exchanged packet content in debug trace. + */ +#ifndef PRINTPKT_SUPPORT +#define PRINTPKT_SUPPORT 0 +#endif + +/** + * PPP_IPV4_SUPPORT==1: Enable PPP IPv4 support + */ +#ifndef PPP_IPV4_SUPPORT +#define PPP_IPV4_SUPPORT (LWIP_IPV4) +#endif + +/** + * PPP_IPV6_SUPPORT==1: Enable PPP IPv6 support + */ +#ifndef PPP_IPV6_SUPPORT +#define PPP_IPV6_SUPPORT (LWIP_IPV6) +#endif + +/** + * PPP_NOTIFY_PHASE==1: Support PPP notify phase support + * + * PPP notify phase support allows you to set a callback which is + * called on change of the internal PPP state machine. + * + * This can be used for example to set a LED pattern depending on the + * current phase of the PPP session. + */ +#ifndef PPP_NOTIFY_PHASE +#define PPP_NOTIFY_PHASE 0 +#endif + +/** + * pbuf_type PPP is using for LCP, PAP, CHAP, EAP, CCP, IPCP and IP6CP packets. + * + * Memory allocated must be single buffered for PPP to works, it requires pbuf + * that are not going to be chained when allocated. This requires setting + * PBUF_POOL_BUFSIZE to at least 512 bytes, which is quite huge for small systems. + * + * Setting PPP_USE_PBUF_RAM to 1 makes PPP use memory from heap where continuous + * buffers are required, allowing you to use a smaller PBUF_POOL_BUFSIZE. + */ +#ifndef PPP_USE_PBUF_RAM +#define PPP_USE_PBUF_RAM 0 +#endif + +/** + * PPP_FCS_TABLE: Keep a 256*2 byte table to speed up FCS calculation for PPPoS + */ +#ifndef PPP_FCS_TABLE +#define PPP_FCS_TABLE 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. + */ +#ifndef MSCHAP_SUPPORT +#define MSCHAP_SUPPORT 0 +#endif +#if MSCHAP_SUPPORT +/* MSCHAP requires CHAP support */ +#undef CHAP_SUPPORT +#define CHAP_SUPPORT 1 +#endif /* MSCHAP_SUPPORT */ + +/** + * EAP_SUPPORT==1: Support EAP. + */ +#ifndef EAP_SUPPORT +#define EAP_SUPPORT 0 +#endif + +/** + * CCP_SUPPORT==1: Support CCP. + */ +#ifndef CCP_SUPPORT +#define CCP_SUPPORT 0 +#endif + +/** + * MPPE_SUPPORT==1: Support MPPE. + */ +#ifndef MPPE_SUPPORT +#define MPPE_SUPPORT 0 +#endif +#if MPPE_SUPPORT +/* MPPE requires CCP support */ +#undef CCP_SUPPORT +#define CCP_SUPPORT 1 +/* MPPE requires MSCHAP support */ +#undef MSCHAP_SUPPORT +#define MSCHAP_SUPPORT 1 +/* MSCHAP requires CHAP support */ +#undef CHAP_SUPPORT +#define CHAP_SUPPORT 1 +#endif /* MPPE_SUPPORT */ + +/** + * CBCP_SUPPORT==1: Support CBCP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef CBCP_SUPPORT +#define CBCP_SUPPORT 0 +#endif + +/** + * ECP_SUPPORT==1: Support ECP. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef ECP_SUPPORT +#define ECP_SUPPORT 0 +#endif + +/** + * DEMAND_SUPPORT==1: Support dial on demand. CURRENTLY NOT SUPPORTED! DO NOT SET! + */ +#ifndef DEMAND_SUPPORT +#define DEMAND_SUPPORT 0 +#endif + +/** + * LQR_SUPPORT==1: Support Link Quality Report. Do nothing except exchanging some LCP packets. + */ +#ifndef LQR_SUPPORT +#define LQR_SUPPORT 0 +#endif + +/** + * PPP_SERVER==1: Enable PPP server support (waiting for incoming PPP session). + * + * Currently only supported for PPPoS. + */ +#ifndef PPP_SERVER +#define PPP_SERVER 0 +#endif + +#if PPP_SERVER +/* + * PPP_OUR_NAME: Our name for authentication purposes + */ +#ifndef PPP_OUR_NAME +#define PPP_OUR_NAME "lwIP" +#endif +#endif /* PPP_SERVER */ + +/** + * VJ_SUPPORT==1: Support VJ header compression. + */ +#ifndef VJ_SUPPORT +#define VJ_SUPPORT 1 +#endif +/* VJ compression is only supported for TCP over IPv4 over PPPoS. */ +#if !PPPOS_SUPPORT || !PPP_IPV4_SUPPORT || !LWIP_TCP +#undef VJ_SUPPORT +#define VJ_SUPPORT 0 +#endif /* !PPPOS_SUPPORT */ + +/** + * PPP_MD5_RANDM==1: Use MD5 for better randomness. + * Enabled by default if CHAP, EAP, or L2TP AUTH support is enabled. + */ +#ifndef PPP_MD5_RANDM +#define PPP_MD5_RANDM (CHAP_SUPPORT || EAP_SUPPORT || PPPOL2TP_AUTH_SUPPORT) +#endif + +/** + * PolarSSL embedded library + * + * + * lwIP contains some files fetched from the latest BSD release of + * the PolarSSL project (PolarSSL 0.10.1-bsd) for ciphers and encryption + * methods we need for lwIP PPP support. + * + * The PolarSSL files were cleaned to contain only the necessary struct + * fields and functions needed for lwIP. + * + * The PolarSSL API was not changed at all, so if you are already using + * PolarSSL you can choose to skip the compilation of the included PolarSSL + * library into lwIP. + * + * If you are not using the embedded copy you must include external + * libraries into your arch/cc.h port file. + * + * Beware of the stack requirements which can be a lot larger if you are not + * using our cleaned PolarSSL library. + */ + +/** + * LWIP_USE_EXTERNAL_POLARSSL: Use external PolarSSL library + */ +#ifndef LWIP_USE_EXTERNAL_POLARSSL +#define LWIP_USE_EXTERNAL_POLARSSL 0 +#endif + +/** + * LWIP_USE_EXTERNAL_MBEDTLS: Use external mbed TLS library + */ +#ifndef LWIP_USE_EXTERNAL_MBEDTLS +#define LWIP_USE_EXTERNAL_MBEDTLS 0 +#endif + +/* + * PPP Timeouts + */ + +/** + * FSM_DEFTIMEOUT: Timeout time in seconds + */ +#ifndef FSM_DEFTIMEOUT +#define FSM_DEFTIMEOUT 6 +#endif + +/** + * FSM_DEFMAXTERMREQS: Maximum Terminate-Request transmissions + */ +#ifndef FSM_DEFMAXTERMREQS +#define FSM_DEFMAXTERMREQS 2 +#endif + +/** + * FSM_DEFMAXCONFREQS: Maximum Configure-Request transmissions + */ +#ifndef FSM_DEFMAXCONFREQS +#define FSM_DEFMAXCONFREQS 10 +#endif + +/** + * FSM_DEFMAXNAKLOOPS: Maximum number of nak loops + */ +#ifndef FSM_DEFMAXNAKLOOPS +#define FSM_DEFMAXNAKLOOPS 5 +#endif + +/** + * UPAP_DEFTIMEOUT: Timeout (seconds) for retransmitting req + */ +#ifndef UPAP_DEFTIMEOUT +#define UPAP_DEFTIMEOUT 6 +#endif + +/** + * UPAP_DEFTRANSMITS: Maximum number of auth-reqs to send + */ +#ifndef UPAP_DEFTRANSMITS +#define UPAP_DEFTRANSMITS 10 +#endif + +#if PPP_SERVER +/** + * UPAP_DEFREQTIME: Time to wait for auth-req from peer + */ +#ifndef UPAP_DEFREQTIME +#define UPAP_DEFREQTIME 30 +#endif +#endif /* PPP_SERVER */ + +/** + * CHAP_DEFTIMEOUT: Timeout (seconds) for retransmitting req + */ +#ifndef CHAP_DEFTIMEOUT +#define CHAP_DEFTIMEOUT 6 +#endif + +/** + * CHAP_DEFTRANSMITS: max # times to send challenge + */ +#ifndef CHAP_DEFTRANSMITS +#define CHAP_DEFTRANSMITS 10 +#endif + +#if PPP_SERVER +/** + * CHAP_DEFRECHALLENGETIME: If this option is > 0, rechallenge the peer every n seconds + */ +#ifndef CHAP_DEFRECHALLENGETIME +#define CHAP_DEFRECHALLENGETIME 0 +#endif +#endif /* PPP_SERVER */ + +/** + * EAP_DEFREQTIME: Time to wait for peer request + */ +#ifndef EAP_DEFREQTIME +#define EAP_DEFREQTIME 6 +#endif + +/** + * EAP_DEFALLOWREQ: max # times to accept requests + */ +#ifndef EAP_DEFALLOWREQ +#define EAP_DEFALLOWREQ 10 +#endif + +#if PPP_SERVER +/** + * EAP_DEFTIMEOUT: Timeout (seconds) for rexmit + */ +#ifndef EAP_DEFTIMEOUT +#define EAP_DEFTIMEOUT 6 +#endif + +/** + * EAP_DEFTRANSMITS: max # times to transmit + */ +#ifndef EAP_DEFTRANSMITS +#define EAP_DEFTRANSMITS 10 +#endif +#endif /* PPP_SERVER */ + +/** + * LCP_DEFLOOPBACKFAIL: Default number of times we receive our magic number from the peer + * before deciding the link is looped-back. + */ +#ifndef LCP_DEFLOOPBACKFAIL +#define LCP_DEFLOOPBACKFAIL 10 +#endif + +/** + * LCP_ECHOINTERVAL: Interval in seconds between keepalive echo requests, 0 to disable. + */ +#ifndef LCP_ECHOINTERVAL +#define LCP_ECHOINTERVAL 0 +#endif + +/** + * LCP_MAXECHOFAILS: Number of unanswered echo requests before failure. + */ +#ifndef LCP_MAXECHOFAILS +#define LCP_MAXECHOFAILS 3 +#endif + +/** + * PPP_MAXIDLEFLAG: Max Xmit idle time (in ms) before resend flag char. + */ +#ifndef PPP_MAXIDLEFLAG +#define PPP_MAXIDLEFLAG 100 +#endif + +/** + * PPP Packet sizes + */ + +/** + * PPP_MRU: Default MRU + */ +#ifndef PPP_MRU +#define PPP_MRU 1500 +#endif + +/** + * PPP_DEFMRU: Default MRU to try + */ +#ifndef PPP_DEFMRU +#define PPP_DEFMRU 1500 +#endif + +/** + * PPP_MAXMRU: Normally limit MRU to this (pppd default = 16384) + */ +#ifndef PPP_MAXMRU +#define PPP_MAXMRU 1500 +#endif + +/** + * PPP_MINMRU: No MRUs below this + */ +#ifndef PPP_MINMRU +#define PPP_MINMRU 128 +#endif + +/** + * PPPOL2TP_DEFMRU: Default MTU and MRU for L2TP + * Default = 1500 - PPPoE(6) - PPP Protocol(2) - IPv4 header(20) - UDP Header(8) + * - L2TP Header(6) - HDLC Header(2) - PPP Protocol(2) - MPPE Header(2) - PPP Protocol(2) + */ +#if PPPOL2TP_SUPPORT +#ifndef PPPOL2TP_DEFMRU +#define PPPOL2TP_DEFMRU 1450 +#endif +#endif /* PPPOL2TP_SUPPORT */ + +/** + * MAXNAMELEN: max length of hostname or name for auth + */ +#ifndef MAXNAMELEN +#define MAXNAMELEN 256 +#endif + +/** + * MAXSECRETLEN: max length of password or secret + */ +#ifndef MAXSECRETLEN +#define MAXSECRETLEN 256 +#endif + +/* ------------------------------------------------------------------------- */ + +/* + * Build triggers for embedded PolarSSL + */ +#if !LWIP_USE_EXTERNAL_POLARSSL && !LWIP_USE_EXTERNAL_MBEDTLS + +/* CHAP, EAP, L2TP AUTH and MD5 Random require MD5 support */ +#if CHAP_SUPPORT || EAP_SUPPORT || PPPOL2TP_AUTH_SUPPORT || PPP_MD5_RANDM +#define LWIP_INCLUDED_POLARSSL_MD5 1 +#endif /* CHAP_SUPPORT || EAP_SUPPORT || PPPOL2TP_AUTH_SUPPORT || PPP_MD5_RANDM */ + +#if MSCHAP_SUPPORT + +/* MSCHAP require MD4 support */ +#define LWIP_INCLUDED_POLARSSL_MD4 1 +/* MSCHAP require SHA1 support */ +#define LWIP_INCLUDED_POLARSSL_SHA1 1 +/* MSCHAP require DES support */ +#define LWIP_INCLUDED_POLARSSL_DES 1 + +/* MS-CHAP support is required for MPPE */ +#if MPPE_SUPPORT +/* MPPE require ARC4 support */ +#define LWIP_INCLUDED_POLARSSL_ARC4 1 +#endif /* MPPE_SUPPORT */ + +#endif /* MSCHAP_SUPPORT */ + +#endif /* !LWIP_USE_EXTERNAL_POLARSSL && !LWIP_USE_EXTERNAL_MBEDTLS */ + +/* Default value if unset */ +#ifndef LWIP_INCLUDED_POLARSSL_MD4 +#define LWIP_INCLUDED_POLARSSL_MD4 0 +#endif /* LWIP_INCLUDED_POLARSSL_MD4 */ +#ifndef LWIP_INCLUDED_POLARSSL_MD5 +#define LWIP_INCLUDED_POLARSSL_MD5 0 +#endif /* LWIP_INCLUDED_POLARSSL_MD5 */ +#ifndef LWIP_INCLUDED_POLARSSL_SHA1 +#define LWIP_INCLUDED_POLARSSL_SHA1 0 +#endif /* LWIP_INCLUDED_POLARSSL_SHA1 */ +#ifndef LWIP_INCLUDED_POLARSSL_DES +#define LWIP_INCLUDED_POLARSSL_DES 0 +#endif /* LWIP_INCLUDED_POLARSSL_DES */ +#ifndef LWIP_INCLUDED_POLARSSL_ARC4 +#define LWIP_INCLUDED_POLARSSL_ARC4 0 +#endif /* LWIP_INCLUDED_POLARSSL_ARC4 */ + +#endif /* PPP_SUPPORT */ + +/* Default value if unset */ +#ifndef PPP_NUM_TIMEOUTS +#define PPP_NUM_TIMEOUTS 0 +#endif /* PPP_NUM_TIMEOUTS */ + +#endif /* LWIP_PPP_OPTS_H */ diff --git a/tools/sdk/lwip2/include/netif/ppp/pppos.h b/tools/sdk/lwip2/include/netif/ppp/pppos.h new file mode 100644 index 0000000000..380a965ce6 --- /dev/null +++ b/tools/sdk/lwip2/include/netif/ppp/pppos.h @@ -0,0 +1,126 @@ +/** + * @file + * Network Point to Point Protocol over Serial header file. + * + */ + +/* + * 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 "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && PPPOS_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef PPPOS_H +#define PPPOS_H + +#include "lwip/sys.h" + +#include "ppp.h" +#include "vj.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* PPP packet parser states. Current state indicates operation yet to be + * completed. */ +enum { + PDIDLE = 0, /* Idle state - waiting. */ + PDSTART, /* Process start flag. */ + PDADDRESS, /* Process address field. */ + PDCONTROL, /* Process control field. */ + PDPROTOCOL1, /* Process protocol field 1. */ + PDPROTOCOL2, /* Process protocol field 2. */ + PDDATA /* Process data byte. */ +}; + +/* PPPoS serial output callback function prototype */ +typedef u32_t (*pppos_output_cb_fn)(ppp_pcb *pcb, u8_t *data, u32_t len, void *ctx); + +/* + * Extended asyncmap - allows any character to be escaped. + */ +typedef u8_t ext_accm[32]; + +/* + * PPPoS interface control block. + */ +typedef struct pppos_pcb_s pppos_pcb; +struct pppos_pcb_s { + /* -- below are data that will NOT be cleared between two sessions */ + ppp_pcb *ppp; /* PPP PCB */ + pppos_output_cb_fn output_cb; /* PPP serial output callback */ + + /* -- below are data that will be cleared between two sessions + * + * last_xmit must be the first member of cleared members, because it is + * used to know which part must not be cleared. + */ + u32_t last_xmit; /* Time of last transmission. */ + ext_accm out_accm; /* Async-Ctl-Char-Map for output. */ + + /* flags */ + unsigned int open :1; /* Set if PPPoS is open */ + unsigned int pcomp :1; /* Does peer accept protocol compression? */ + unsigned int accomp :1; /* Does peer accept addr/ctl compression? */ + + /* PPPoS rx */ + ext_accm in_accm; /* Async-Ctl-Char-Map for input. */ + struct pbuf *in_head, *in_tail; /* The input packet. */ + u16_t in_protocol; /* The input protocol code. */ + u16_t in_fcs; /* Input Frame Check Sequence value. */ + u8_t in_state; /* The input process state. */ + u8_t in_escaped; /* Escape next character. */ +}; + +/* Create a new PPPoS session. */ +ppp_pcb *pppos_create(struct netif *pppif, pppos_output_cb_fn output_cb, + ppp_link_status_cb_fn link_status_cb, void *ctx_cb); + +#if !NO_SYS && !PPP_INPROC_IRQ_SAFE +/* Pass received raw characters to PPPoS to be decoded through lwIP TCPIP thread. */ +err_t pppos_input_tcpip(ppp_pcb *ppp, u8_t *s, int l); +#endif /* !NO_SYS && !PPP_INPROC_IRQ_SAFE */ + +/* PPP over Serial: this is the input function to be called for received data. */ +void pppos_input(ppp_pcb *ppp, u8_t* data, int len); + + +/* + * Functions called from lwIP + * DO NOT CALL FROM lwIP USER APPLICATION. + */ +#if !NO_SYS && !PPP_INPROC_IRQ_SAFE +err_t pppos_input_sys(struct pbuf *p, struct netif *inp); +#endif /* !NO_SYS && !PPP_INPROC_IRQ_SAFE */ + +#ifdef __cplusplus +} +#endif + +#endif /* PPPOS_H */ +#endif /* PPP_SUPPORT && PPPOL2TP_SUPPORT */ diff --git a/tools/sdk/lwip2/include/netif/ppp/vj.h b/tools/sdk/lwip2/include/netif/ppp/vj.h new file mode 100644 index 0000000000..77d9976c52 --- /dev/null +++ b/tools/sdk/lwip2/include/netif/ppp/vj.h @@ -0,0 +1,169 @@ +/* + * Definitions for tcp compression routines. + * + * $Id: vj.h,v 1.7 2010/02/22 17:52:09 goldsimon Exp $ + * + * Copyright (c) 1989 Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * Van Jacobson (van@helios.ee.lbl.gov), Dec 31, 1989: + * - Initial distribution. + */ + +#include "netif/ppp/ppp_opts.h" +#if PPP_SUPPORT && VJ_SUPPORT /* don't build if not configured for use in lwipopts.h */ + +#ifndef VJ_H +#define VJ_H + +#include "lwip/ip.h" +#include "lwip/priv/tcp_priv.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define MAX_SLOTS 16 /* must be > 2 and < 256 */ +#define MAX_HDR 128 + +/* + * Compressed packet format: + * + * The first octet contains the packet type (top 3 bits), TCP + * 'push' bit, and flags that indicate which of the 4 TCP sequence + * numbers have changed (bottom 5 bits). The next octet is a + * conversation number that associates a saved IP/TCP header with + * the compressed packet. The next two octets are the TCP checksum + * from the original datagram. The next 0 to 15 octets are + * sequence number changes, one change per bit set in the header + * (there may be no changes and there are two special cases where + * the receiver implicitly knows what changed -- see below). + * + * There are 5 numbers which can change (they are always inserted + * in the following order): TCP urgent pointer, window, + * acknowlegement, sequence number and IP ID. (The urgent pointer + * is different from the others in that its value is sent, not the + * change in value.) Since typical use of SLIP links is biased + * toward small packets (see comments on MTU/MSS below), changes + * use a variable length coding with one octet for numbers in the + * range 1 - 255 and 3 octets (0, MSB, LSB) for numbers in the + * range 256 - 65535 or 0. (If the change in sequence number or + * ack is more than 65535, an uncompressed packet is sent.) + */ + +/* + * Packet types (must not conflict with IP protocol version) + * + * The top nibble of the first octet is the packet type. There are + * three possible types: IP (not proto TCP or tcp with one of the + * control flags set); uncompressed TCP (a normal IP/TCP packet but + * with the 8-bit protocol field replaced by an 8-bit connection id -- + * this type of packet syncs the sender & receiver); and compressed + * TCP (described above). + * + * LSB of 4-bit field is TCP "PUSH" bit (a worthless anachronism) and + * is logically part of the 4-bit "changes" field that follows. Top + * three bits are actual packet type. For backward compatibility + * and in the interest of conserving bits, numbers are chosen so the + * IP protocol version number (4) which normally appears in this nibble + * means "IP packet". + */ + +/* packet types */ +#define TYPE_IP 0x40 +#define TYPE_UNCOMPRESSED_TCP 0x70 +#define TYPE_COMPRESSED_TCP 0x80 +#define TYPE_ERROR 0x00 + +/* Bits in first octet of compressed packet */ +#define NEW_C 0x40 /* flag bits for what changed in a packet */ +#define NEW_I 0x20 +#define NEW_S 0x08 +#define NEW_A 0x04 +#define NEW_W 0x02 +#define NEW_U 0x01 + +/* reserved, special-case values of above */ +#define SPECIAL_I (NEW_S|NEW_W|NEW_U) /* echoed interactive traffic */ +#define SPECIAL_D (NEW_S|NEW_A|NEW_W|NEW_U) /* unidirectional data */ +#define SPECIALS_MASK (NEW_S|NEW_A|NEW_W|NEW_U) + +#define TCP_PUSH_BIT 0x10 + + +/* + * "state" data for each active tcp conversation on the wire. This is + * basically a copy of the entire IP/TCP header from the last packet + * we saw from the conversation together with a small identifier + * the transmit & receive ends of the line use to locate saved header. + */ +struct cstate { + struct cstate *cs_next; /* next most recently used state (xmit only) */ + u16_t cs_hlen; /* size of hdr (receive only) */ + u8_t cs_id; /* connection # associated with this state */ + u8_t cs_filler; + union { + char csu_hdr[MAX_HDR]; + struct ip_hdr csu_ip; /* ip/tcp hdr from most recent packet */ + } vjcs_u; +}; +#define cs_ip vjcs_u.csu_ip +#define cs_hdr vjcs_u.csu_hdr + + +struct vjstat { + u32_t vjs_packets; /* outbound packets */ + u32_t vjs_compressed; /* outbound compressed packets */ + u32_t vjs_searches; /* searches for connection state */ + u32_t vjs_misses; /* times couldn't find conn. state */ + u32_t vjs_uncompressedin; /* inbound uncompressed packets */ + u32_t vjs_compressedin; /* inbound compressed packets */ + u32_t vjs_errorin; /* inbound unknown type packets */ + u32_t vjs_tossed; /* inbound packets tossed because of error */ +}; + +/* + * all the state data for one serial line (we need one of these per line). + */ +struct vjcompress { + struct cstate *last_cs; /* most recently used tstate */ + u8_t last_recv; /* last rcvd conn. id */ + u8_t last_xmit; /* last sent conn. id */ + u16_t flags; + u8_t maxSlotIndex; + u8_t compressSlot; /* Flag indicating OK to compress slot ID. */ +#if LINK_STATS + struct vjstat stats; +#endif + struct cstate tstate[MAX_SLOTS]; /* xmit connection states */ + struct cstate rstate[MAX_SLOTS]; /* receive connection states */ +}; + +/* flag values */ +#define VJF_TOSS 1U /* tossing rcvd frames because of input err */ + +extern void vj_compress_init (struct vjcompress *comp); +extern u8_t vj_compress_tcp (struct vjcompress *comp, struct pbuf **pb); +extern void vj_uncompress_err (struct vjcompress *comp); +extern int vj_uncompress_uncomp(struct pbuf *nb, struct vjcompress *comp); +extern int vj_uncompress_tcp (struct pbuf **nb, struct vjcompress *comp); + +#ifdef __cplusplus +} +#endif + +#endif /* VJ_H */ + +#endif /* PPP_SUPPORT && VJ_SUPPORT */