mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-25 06:22:11 +03:00
update AddrList and examples (#5422)
This commit is contained in:
@ -24,7 +24,7 @@
|
|||||||
for (auto a: addrList)
|
for (auto a: addrList)
|
||||||
out.printf("IF='%s' index=%d legacy=%d IPv4=%d local=%d hostname='%s' addr= %s\n",
|
out.printf("IF='%s' index=%d legacy=%d IPv4=%d local=%d hostname='%s' addr= %s\n",
|
||||||
a.iface().c_str(),
|
a.iface().c_str(),
|
||||||
a.number(),
|
a.ifnumber(),
|
||||||
a.addr().isLegacy(),
|
a.addr().isLegacy(),
|
||||||
a.addr().isV4(),
|
a.addr().isV4(),
|
||||||
a.addr().isLocal(),
|
a.addr().isLocal(),
|
||||||
@ -65,7 +65,7 @@
|
|||||||
for (auto iface: addrList)
|
for (auto iface: addrList)
|
||||||
if ((configured = ( !iface.addr().isV4()
|
if ((configured = ( !iface.addr().isV4()
|
||||||
&& !iface.addr().isLocal()
|
&& !iface.addr().isLocal()
|
||||||
&& iface.number() == STATION_IF)))
|
&& iface.ifnumber() == STATION_IF)))
|
||||||
break;
|
break;
|
||||||
Serial.print('.');
|
Serial.print('.');
|
||||||
delay(500);
|
delay(500);
|
||||||
@ -94,28 +94,40 @@ namespace AddressListImplementation
|
|||||||
|
|
||||||
struct netifWrapper
|
struct netifWrapper
|
||||||
{
|
{
|
||||||
netifWrapper(netif * netif) : _netif(netif), _num(-1) {}
|
netifWrapper (netif* netif) : _netif(netif), _num(-1) {}
|
||||||
netifWrapper(const netifWrapper & o) : _netif(o._netif), _num(o._num) {}
|
netifWrapper (const netifWrapper& o) : _netif(o._netif), _num(o._num) {}
|
||||||
|
|
||||||
netifWrapper& operator=(const netifWrapper & o) {_netif = o._netif; _num = o._num; return *this;}
|
netifWrapper& operator= (const netifWrapper& o)
|
||||||
|
{
|
||||||
|
_netif = o._netif;
|
||||||
|
_num = o._num;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
bool equal (const netifWrapper & o)
|
bool equal(const netifWrapper& o)
|
||||||
{
|
{
|
||||||
return _netif == o._netif && (!_netif || _num == o._num);
|
return _netif == o._netif && (!_netif || _num == o._num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// address properties
|
||||||
|
IPAddress addr () const { return ipFromNetifNum(); }
|
||||||
|
bool isLegacy () const { return _num == 0; }
|
||||||
|
bool isLocal () const { return addr().isLocal(); }
|
||||||
|
bool isV4 () const { return addr().isV4(); }
|
||||||
|
bool isV6 () const { return !addr().isV4(); }
|
||||||
|
String toString() const { return addr().toString(); }
|
||||||
|
|
||||||
bool isLegacy() const { return _num == 0; }
|
// related to legacy address (_num=0, ipv4)
|
||||||
bool isLocal() const { return addr().isLocal(); }
|
IPAddress netmask () const { return _netif->netmask; }
|
||||||
IPAddress addr () const { return ipFromNetifNum(); }
|
IPAddress gw () const { return _netif->gw; }
|
||||||
IPAddress netmask () const { return _netif->netmask; }
|
|
||||||
IPAddress gw () const { return _netif->gw; }
|
|
||||||
String iface () const { return String(_netif->name[0]) + _netif->name[1]; }
|
|
||||||
const char* hostname () const { return _netif->hostname?: emptyString.c_str(); }
|
|
||||||
const char* mac () const { return (const char*)_netif->hwaddr; }
|
|
||||||
int number () const { return _netif->num; }
|
|
||||||
|
|
||||||
const ip_addr_t* ipFromNetifNum () const
|
// common to all addresses of this interface
|
||||||
|
String ifname () const { return String(_netif->name[0]) + _netif->name[1]; }
|
||||||
|
const char* ifhostname () const { return _netif->hostname?: emptyString.c_str(); }
|
||||||
|
const char* ifmac () const { return (const char*)_netif->hwaddr; }
|
||||||
|
int ifnumber () const { return _netif->num; }
|
||||||
|
|
||||||
|
const ip_addr_t* ipFromNetifNum () const
|
||||||
{
|
{
|
||||||
#if LWIP_IPV6
|
#if LWIP_IPV6
|
||||||
return _num ? &_netif->ip6_addr[_num - 1] : &_netif->ip_addr;
|
return _num ? &_netif->ip6_addr[_num - 1] : &_netif->ip_addr;
|
||||||
@ -124,44 +136,57 @@ struct netifWrapper
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// lwIP interface
|
||||||
|
netif* _netif;
|
||||||
|
|
||||||
netif * _netif;
|
// address index within interface
|
||||||
|
// 0: legacy address (IPv4)
|
||||||
|
// n>0: (_num-1) is IPv6 index for netif->ip6_addr[]
|
||||||
int _num;
|
int _num;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class AddressListIterator
|
class AddressListIterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AddressListIterator(const netifWrapper &o) : netIf(o) {}
|
AddressListIterator (const netifWrapper& o) : netIf(o) {}
|
||||||
AddressListIterator(netif * netif) : netIf(netif) {}
|
AddressListIterator (netif* netif) : netIf(netif)
|
||||||
|
{
|
||||||
|
// This constructor is called with lwIP's global netif_list, or
|
||||||
|
// nullptr. operator++() is designed to loop through _configured_
|
||||||
|
// addresses. That's why netIf's _num is initialized to -1 to allow
|
||||||
|
// returning the first usable address to AddressList::begin().
|
||||||
|
(void)operator++();
|
||||||
|
}
|
||||||
|
|
||||||
const netifWrapper& operator* () const {return netIf;}
|
const netifWrapper& operator* () const { return netIf; }
|
||||||
const netifWrapper* operator->() const {return &netIf;}
|
const netifWrapper* operator-> () const { return &netIf; }
|
||||||
|
|
||||||
bool operator==(AddressListIterator & o) {return netIf.equal(*o);}
|
bool operator== (AddressListIterator& o) { return netIf.equal(*o); }
|
||||||
bool operator!=(AddressListIterator & o) {return !netIf.equal(*o);}
|
bool operator!= (AddressListIterator& o) { return !netIf.equal(*o); }
|
||||||
|
|
||||||
AddressListIterator & operator= (const AddressListIterator& o) {netIf = o.netIf; return *this; }
|
AddressListIterator& operator= (const AddressListIterator& o) { netIf = o.netIf; return *this; }
|
||||||
|
|
||||||
AddressListIterator operator++(int)
|
AddressListIterator operator++ (int)
|
||||||
{
|
{
|
||||||
AddressListIterator ret = *this;
|
AddressListIterator ret = *this;
|
||||||
++(*this);
|
(void)operator++();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
AddressListIterator & operator++()
|
AddressListIterator& operator++ ()
|
||||||
{
|
{
|
||||||
while (netIf._netif)
|
while (netIf._netif)
|
||||||
{
|
{
|
||||||
if (++netIf._num == IF_NUM_ADDRESSES)
|
if (++netIf._num == IF_NUM_ADDRESSES)
|
||||||
{
|
{
|
||||||
netIf = netifWrapper(netIf._netif->next); //num is inited to -1
|
// all addresses from current interface were iterated,
|
||||||
|
// switching to next interface
|
||||||
|
netIf = netifWrapper(netIf._netif->next);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!ip_addr_isany(netIf.ipFromNetifNum()))
|
if (!ip_addr_isany(netIf.ipFromNetifNum()))
|
||||||
|
// found an initialized address
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
@ -171,24 +196,23 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class AddressList
|
class AddressList
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using const_iterator = const AddressListIterator;
|
using const_iterator = const AddressListIterator;
|
||||||
|
|
||||||
const_iterator begin() const {return const_iterator(netif_list);}
|
const_iterator begin () const { return const_iterator(netif_list); }
|
||||||
const_iterator end() const {return const_iterator(nullptr);}
|
const_iterator end () const { return const_iterator(nullptr); }
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline AddressList::const_iterator begin (const AddressList& a) { return a.begin(); }
|
||||||
|
inline AddressList::const_iterator end (const AddressList& a) { return a.end(); }
|
||||||
|
|
||||||
inline AddressList::const_iterator begin(const AddressList &a) {return a.begin();}
|
|
||||||
inline AddressList::const_iterator end(const AddressList &a) {return a.end();}
|
|
||||||
|
|
||||||
} //AddressListImplementation
|
} // AddressListImplementation
|
||||||
|
|
||||||
} //esp8266
|
} // esp8266
|
||||||
|
|
||||||
extern esp8266::AddressListImplementation::AddressList addrList;
|
extern esp8266::AddressListImplementation::AddressList addrList;
|
||||||
|
|
||||||
|
@ -66,11 +66,11 @@ void status(Print& out) {
|
|||||||
out.println(F("(with 'telnet <addr> or 'nc -u <addr> 23')"));
|
out.println(F("(with 'telnet <addr> or 'nc -u <addr> 23')"));
|
||||||
for (auto a : addrList) {
|
for (auto a : addrList) {
|
||||||
out.printf("IF='%s' IPv6=%d local=%d hostname='%s' addr= %s",
|
out.printf("IF='%s' IPv6=%d local=%d hostname='%s' addr= %s",
|
||||||
a.iface().c_str(),
|
a.ifname().c_str(),
|
||||||
!a.addr().isV4(),
|
a.isV6(),
|
||||||
a.addr().isLocal(),
|
a.isLocal(),
|
||||||
a.hostname(),
|
a.ifhostname(),
|
||||||
a.addr().toString().c_str());
|
a.toString().c_str());
|
||||||
|
|
||||||
if (a.isLegacy()) {
|
if (a.isLegacy()) {
|
||||||
out.printf(" / mask:%s / gw:%s",
|
out.printf(" / mask:%s / gw:%s",
|
||||||
@ -79,6 +79,7 @@ void status(Print& out) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
out.println();
|
out.println();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// lwIP's dns client will ask for IPv4 first (by default)
|
// lwIP's dns client will ask for IPv4 first (by default)
|
||||||
@ -96,12 +97,14 @@ void setup() {
|
|||||||
Serial.println();
|
Serial.println();
|
||||||
Serial.println(ESP.getFullVersion());
|
Serial.println(ESP.getFullVersion());
|
||||||
|
|
||||||
|
Serial.printf("IPV6 is%s enabled\n", LWIP_IPV6 ? emptyString.c_str() : " NOT");
|
||||||
|
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
WiFi.begin(STASSID, STAPSK);
|
WiFi.begin(STASSID, STAPSK);
|
||||||
|
|
||||||
status(Serial);
|
status(Serial);
|
||||||
|
|
||||||
#if 0
|
#if 0 // 0: legacy connecting loop - 1: wait for IPv6
|
||||||
|
|
||||||
// legacy loop (still valid with IPv4 only)
|
// legacy loop (still valid with IPv4 only)
|
||||||
|
|
@ -21,6 +21,11 @@
|
|||||||
#include <ESP8266HTTPClient.h>
|
#include <ESP8266HTTPClient.h>
|
||||||
#include <ESP8266httpUpdate.h>
|
#include <ESP8266httpUpdate.h>
|
||||||
|
|
||||||
|
#ifndef STASSID
|
||||||
|
#define STASSID "your-ssid"
|
||||||
|
#define STAPSK "your-password"
|
||||||
|
#endif
|
||||||
|
|
||||||
ESP8266WiFiMulti WiFiMulti;
|
ESP8266WiFiMulti WiFiMulti;
|
||||||
|
|
||||||
#define MANUAL_SIGNING 0
|
#define MANUAL_SIGNING 0
|
||||||
@ -66,7 +71,7 @@ void setup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
WiFi.mode(WIFI_STA);
|
WiFi.mode(WIFI_STA);
|
||||||
WiFiMulti.addAP("SSID", "PASS");
|
WiFiMulti.addAP(STASSID, STAPSK);
|
||||||
|
|
||||||
#if MANUAL_SIGNING
|
#if MANUAL_SIGNING
|
||||||
signPubKey = new BearSSL::PublicKey(pubkey);
|
signPubKey = new BearSSL::PublicKey(pubkey);
|
||||||
|
@ -116,8 +116,8 @@ function install_ide()
|
|||||||
debug_flags="-DDEBUG_ESP_PORT=Serial -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER -DDEBUG_ESP_CORE -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_UPDATER -DDEBUG_ESP_OTA -DDEBUG_ESP_OOM"
|
debug_flags="-DDEBUG_ESP_PORT=Serial -DDEBUG_ESP_SSL -DDEBUG_ESP_TLS_MEM -DDEBUG_ESP_HTTP_CLIENT -DDEBUG_ESP_HTTP_SERVER -DDEBUG_ESP_CORE -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_UPDATE -DDEBUG_ESP_UPDATER -DDEBUG_ESP_OTA -DDEBUG_ESP_OOM"
|
||||||
fi
|
fi
|
||||||
# Set custom warnings for all builds (i.e. could add -Wextra at some point)
|
# Set custom warnings for all builds (i.e. could add -Wextra at some point)
|
||||||
echo "compiler.c.extra_flags=-Wall -Wextra -Werror $debug_flags" > esp8266/platform.local.txt
|
echo "compiler.c.extra_flags=-Wall -Wextra -Werror -DLWIP_IPV6=0 $debug_flags" > esp8266/platform.local.txt
|
||||||
echo "compiler.cpp.extra_flags=-Wall -Wextra -Werror $debug_flags" >> esp8266/platform.local.txt
|
echo "compiler.cpp.extra_flags=-Wall -Wextra -Werror -DLWIP_IPV6=0 $debug_flags" >> esp8266/platform.local.txt
|
||||||
echo -e "\n----platform.local.txt----"
|
echo -e "\n----platform.local.txt----"
|
||||||
cat esp8266/platform.local.txt
|
cat esp8266/platform.local.txt
|
||||||
echo -e "\n----\n"
|
echo -e "\n----\n"
|
||||||
|
@ -33,7 +33,7 @@ if [ -d ${TMPCI} ]; then
|
|||||||
echo ""
|
echo ""
|
||||||
echo " -- updating CI directory in ${TMPCI} --"
|
echo " -- updating CI directory in ${TMPCI} --"
|
||||||
echo ""
|
echo ""
|
||||||
(cd ${TMPCI}; git checkout ${branch}; git pull)
|
(cd ${TMPCI}; git checkout master; git branch -D ${branch} || true; git checkout -b ${branch}; git pull origin ${branch})
|
||||||
else
|
else
|
||||||
echo ""
|
echo ""
|
||||||
echo " -- installing CI directory in ${TMPCI} --"
|
echo " -- installing CI directory in ${TMPCI} --"
|
||||||
|
Reference in New Issue
Block a user