// Debug Level from 0 to 4
#define _DDNS_GENERIC_LOGLEVEL_ 1
#define _UPNP_LOGLEVEL_ 3
// Select DDNS_USING_WIFI for boards using built-in WiFi, such as Nano-33-IoT
#define DDNS_USING_WIFI false
#define DDNS_USING_ETHERNET true
#include <WiFi.h>
#include <ETH.h>
#include <UPnP_Generic.h>
void ETHEvent(WiFiEvent_t event){
if( event == SYSTEM_EVENT_ETH_START ){
ETH.setHostname(hostName);
}else if( event == SYSTEM_EVENT_ETH_GOT_IP ){
ETH_Got_IP = true;
CurrentIP = ETH.localIP();
displayETH();
canScrollNoties = true;
if(!ETH_Timeout_Task_Deleted){ vTaskDelete(ETH_Timeout_Task_Handle); }
gotIpMillis = millis();
canSendRestartEmail = true;
WiFi.softAPdisconnect(true);
Ota_Begin();
canSetupUPNP = true;
}else if( event == SYSTEM_EVENT_ETH_DISCONNECTED ){
ETH_Got_IP = false;
displayNoIp("eth");
ETH_Ip_Timeout_Start();
}
}
static const inline void ethernetBegin(){
// this is working perfectly well.
ETH.begin(
ETH_PHY_ADDR,
PIN_PHY_POWER,
PIN_SMI_MDC,
PIN_SMI_MDIO,
ETH_PHY_LAN8720,
ETH_CLK_MODE
);
delay(10);
if(!DHCP_Status){ // flag from a config file...
ETH.config(ip, sub, gw);
}
WiFi.onEvent(ETHEvent);
}
void setup(){
Serial.begin(115200);
ethernetBegin();
}
void loop(){
startUPNP_Task();
}
/*********** UPNP THINGS FROM HERE IN DIFFERENT TASK ***********/
void onUpdateCallback(const char* oldIP, const char* newIP){
(void) oldIP;
Serial.print(F("DDNSGeneric - IP Change Detected: "));
Serial.println(newIP);
}
static const inline void setupUPNP(){
uPnP = new UPnP(30000);
if (uPnP){
uPnP->addPortMappingConfig(CurrentIP, 80, RULE_PROTOCOL_TCP, LEASE_DURATION, FRIENDLY_NAME);
bool portMappingAdded = false;
#define RETRY_TIMES 4
int retries = 0;
while (!portMappingAdded && (retries < RETRY_TIMES)){
Serial.println("Add Port Forwarding, Try # " + String(++retries));
int result = uPnP->commitPortMappings();
portMappingAdded = ( (result == PORT_MAP_SUCCESS) || (result == ALREADY_MAPPED) );
if (!portMappingAdded){
if (retries < RETRY_TIMES)
vTaskDelay(10000);
}
}
uPnP->printAllPortMappings();
Serial.println(F("\nUPnP done"));
}
}
static const inline void upnp_loop(){
uPnP->updatePortMappings(600000);
}
void UPNP_Task( void * parameter ){
setupUPNP();
for ever{
upnp_loop();
vTaskDelay(1000);
}
}
static const inline void startUPNP_Task(){
if(canSetupUPNP){
canSetupUPNP = false;
xTaskCreatePinnedToCore(UPNP_Task,"UPNP_Task",5000,NULL,3,&UPNP_Task_Handle,0);
}
}
Time configured from NTP server was successful.
[UPnP] UDP_TX_PACKET_MAX_SIZE= 1000
[UPnP] UDP_TX_RESPONSE_MAX_SIZE= 8192
[UPnP] newUpnpRule= 192.168.10.110
Add Port Forwarding, Try # 1
[UPnP] Testing WiFi connection for IP : 0.0.0.0
.Generated admin Code: 95100816
....................[W][AsyncTCP.cpp:969] _poll(): rx timeout 4
...............................................................................................................................[UPnP] ==> Timeout verify WiFi connection
[UPnP] ERROR: not connected to WiFi, can't continue
Add Port Forwarding, Try # 2
[UPnP] Testing WiFi connection for IP : 0.0.0.0
....................................................................................................................................................[UPnP] ==> Timeout verify WiFi connection
[UPnP] ERROR: not connected to WiFi, can't continue
Add Port Forwarding, Try # 3
[UPnP] Testing WiFi connection for IP : 0.0.0.0
....................................................................................................................................................[UPnP] ==> Timeout verify WiFi connection
[UPnP] ERROR: not connected to WiFi, can't continue
Add Port Forwarding, Try # 4
[UPnP] Testing WiFi connection for IP : 0.0.0.0
....................................................................................................................................................[UPnP] ==> Timeout verify WiFi connection
[UPnP] ERROR: not connected to WiFi, can't continue
[UPnP] isGatewayInfoValid : 0.0.0.0 , port : 0
[UPnP] Path : , actionPort : 0
[UPnP] actionPath : , serviceTypeName :
[UPnP] Gateway info not valid
[UPnP] Invalid router info, can't continue
UPnP done
[UPnP] Updating port mapping
[UPnP] Testing WiFi connection for IP : 0.0.0.0
....................................................................................................................................................[UPnP] ==> Timeout verify WiFi connection
[UPnP] ERROR: not connected to WiFi, can't continue
[UPnP] ERROR: While updating UPnP port mapping
UPNP can't see my gateway IP for some reason.