Skip to content

Commit 8dbb7c0

Browse files
authored
feat(net): Add support for esp_netif flags (#9460)
* feat(net): Add support for esp_netif flags Provides better automation for setting IP/DNS * feat(net): Show DHCPC status as OFF when static IP is used
1 parent 0a47f34 commit 8dbb7c0

File tree

2 files changed

+32
-10
lines changed

2 files changed

+32
-10
lines changed

Diff for: libraries/Network/src/NetworkInterface.cpp

+31-8
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,6 @@ NetworkInterface::NetworkInterface()
145145
, _got_ip_event_id(-1)
146146
, _lost_ip_event_id(-1)
147147
, _interface_id(ESP_NETIF_ID_MAX)
148-
, _is_server_if(false)
149148
{}
150149

151150
NetworkInterface::~NetworkInterface(){
@@ -247,11 +246,10 @@ void NetworkInterface::destroyNetif() {
247246
}
248247
}
249248

250-
bool NetworkInterface::initNetif(Network_Interface_ID interface_id, bool server_interface) {
249+
bool NetworkInterface::initNetif(Network_Interface_ID interface_id) {
251250
if(_esp_netif == NULL || interface_id >= ESP_NETIF_ID_MAX){
252251
return false;
253252
}
254-
_is_server_if = server_interface;
255253
_interface_id = interface_id;
256254
_got_ip_event_id = esp_netif_get_event_id(_esp_netif, ESP_NETIF_IP_EVENT_GOT_IP);
257255
_lost_ip_event_id = esp_netif_get_event_id(_esp_netif, ESP_NETIF_IP_EVENT_LOST_IP);
@@ -308,7 +306,8 @@ bool NetworkInterface::dnsIP(uint8_t dns_no, IPAddress ip)
308306
if(_esp_netif == NULL || dns_no > 2){
309307
return false;
310308
}
311-
if(_is_server_if && dns_no > 0){
309+
esp_netif_flags_t flags = esp_netif_get_flags(_esp_netif);
310+
if(flags & ESP_NETIF_DHCP_SERVER && dns_no > 0){
312311
log_e("Server interfaces can have only one DNS server.");
313312
return false;
314313
}
@@ -356,7 +355,8 @@ bool NetworkInterface::config(IPAddress local_ip, IPAddress gateway, IPAddress s
356355
d3.ip.u_addr.ip4.addr = 0;
357356
}
358357

359-
if(_is_server_if){
358+
esp_netif_flags_t flags = esp_netif_get_flags(_esp_netif);
359+
if(flags & ESP_NETIF_DHCP_SERVER){
360360
// Stop DHCPS
361361
err = esp_netif_dhcps_stop(_esp_netif);
362362
if(err && err != ESP_ERR_ESP_NETIF_DHCP_ALREADY_STOPPED){
@@ -646,7 +646,7 @@ IPAddress NetworkInterface::dnsIP(uint8_t dns_no) const
646646
}
647647
if (d.ip.type == ESP_IPADDR_TYPE_V6){
648648
// IPv6 from 4x uint32_t; byte order based on IPV62STR() in esp_netif_ip_addr.h
649-
log_d("DNS got IPv6: " IPV6STR, IPV62STR(d.ip.u_addr.ip6));
649+
// log_v("DNS got IPv6: " IPV6STR, IPV62STR(d.ip.u_addr.ip6));
650650
uint32_t addr0 esp_netif_htonl(d.ip.u_addr.ip6.addr[0]);
651651
uint32_t addr1 esp_netif_htonl(d.ip.u_addr.ip6.addr[1]);
652652
uint32_t addr2 esp_netif_htonl(d.ip.u_addr.ip6.addr[2]);
@@ -672,7 +672,7 @@ IPAddress NetworkInterface::dnsIP(uint8_t dns_no) const
672672
);
673673
}
674674
// IPv4 from single uint32_t
675-
log_d("DNS IPv4: " IPSTR, IP2STR(&d.ip.u_addr.ip4));
675+
// log_v("DNS IPv4: " IPSTR, IP2STR(&d.ip.u_addr.ip4));
676676
return IPAddress(d.ip.u_addr.ip4.addr);
677677
}
678678

@@ -738,6 +738,12 @@ IPAddress NetworkInterface::globalIPv6() const
738738

739739
size_t NetworkInterface::printTo(Print & out) const {
740740
size_t bytes = 0;
741+
if(_esp_netif == NULL){
742+
return bytes;
743+
}
744+
if(isDefault()){
745+
bytes += out.print("*");
746+
}
741747
const char * dscr = esp_netif_get_desc(_esp_netif);
742748
if(dscr != NULL){
743749
bytes += out.print(dscr);
@@ -749,7 +755,24 @@ size_t NetworkInterface::printTo(Print & out) const {
749755
bytes += out.print(" <DOWN");
750756
}
751757
bytes += printDriverInfo(out);
752-
bytes += out.println(">");
758+
bytes += out.print(">");
759+
760+
bytes += out.print(" (");
761+
esp_netif_flags_t flags = esp_netif_get_flags(_esp_netif);
762+
if(flags & ESP_NETIF_DHCP_CLIENT){
763+
bytes += out.print("DHCPC");
764+
if(getStatusBits() & ESP_NETIF_HAS_STATIC_IP_BIT){
765+
bytes += out.print("_OFF");
766+
}
767+
}
768+
if(flags & ESP_NETIF_DHCP_SERVER) bytes += out.print("DHCPS");
769+
if(flags & ESP_NETIF_FLAG_AUTOUP) bytes += out.print(",AUTOUP");
770+
if(flags & ESP_NETIF_FLAG_GARP) bytes += out.print(",GARP");
771+
if(flags & ESP_NETIF_FLAG_EVENT_IP_MODIFIED) bytes += out.print(",IP_MOD");
772+
if(flags & ESP_NETIF_FLAG_IS_PPP) bytes += out.print(",PPP");
773+
if(flags & ESP_NETIF_FLAG_IS_BRIDGE) bytes += out.print(",BRIDGE");
774+
if(flags & ESP_NETIF_FLAG_MLDV6_REPORT) bytes += out.print(",V6_REP");
775+
bytes += out.println(")");
753776

754777
bytes += out.print(" ");
755778
bytes += out.print("ether ");

Diff for: libraries/Network/src/NetworkInterface.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,8 @@ class NetworkInterface: public Printable {
8383
int32_t _got_ip_event_id;
8484
int32_t _lost_ip_event_id;
8585
Network_Interface_ID _interface_id;
86-
bool _is_server_if;
8786

88-
bool initNetif(Network_Interface_ID interface_id, bool server_interface=false);
87+
bool initNetif(Network_Interface_ID interface_id);
8988
void destroyNetif();
9089
int setStatusBits(int bits);
9190
int clearStatusBits(int bits);

0 commit comments

Comments
 (0)