feat(lwip): AutoIP trigger callback so that application can know IP changes

This commit is contained in:
dongheng
2019-06-10 14:32:51 +08:00
parent fff950983e
commit 8227962033
4 changed files with 44 additions and 1 deletions

View File

@@ -67,6 +67,7 @@
#include "lwip/autoip.h" #include "lwip/autoip.h"
#include "lwip/etharp.h" #include "lwip/etharp.h"
#include "lwip/prot/autoip.h" #include "lwip/prot/autoip.h"
#include "lwip/dhcp.h"
#include <string.h> #include <string.h>
@@ -241,6 +242,13 @@ autoip_bind(struct netif *netif)
netif_set_addr(netif, &autoip->llipaddr, &sn_mask, &gw_addr); netif_set_addr(netif, &autoip->llipaddr, &sn_mask, &gw_addr);
/* interface is used by routing now that an address is set */ /* interface is used by routing now that an address is set */
#if ESP_LWIP
struct dhcp *dhcp = netif_dhcp_data(netif);
if (dhcp->cb != NULL) {
dhcp->cb(netif);
}
#endif
return ERR_OK; return ERR_OK;
} }

View File

@@ -1954,4 +1954,23 @@ dhcp_supplied_address(const struct netif *netif)
return 0; return 0;
} }
#if ESP_LWIP
/** Set callback for dhcp, reserved parameter for future use.
*
* @param netif the netif from which to remove the struct dhcp
* @param cb callback for dhcp
*/
void dhcp_set_cb(struct netif *netif, void (*cb)(struct netif*))
{
struct dhcp *dhcp;
dhcp = netif_dhcp_data(netif);
LWIP_ASSERT("netif != NULL", netif != NULL);
if (dhcp != NULL) {
dhcp->cb = cb;
}
}
#endif
#endif /* LWIP_IPV4 && LWIP_DHCP */ #endif /* LWIP_IPV4 && LWIP_DHCP */

View File

@@ -103,6 +103,10 @@ struct dhcp
ip4_addr_t offered_si_addr; ip4_addr_t offered_si_addr;
char boot_file_name[DHCP_BOOT_FILE_LEN]; char boot_file_name[DHCP_BOOT_FILE_LEN];
#endif /* LWIP_DHCP_BOOTPFILE */ #endif /* LWIP_DHCP_BOOTPFILE */
#if ESP_LWIP
void (*cb)(struct netif*); /* callback for dhcp, add a parameter to show dhcp status if needed */
#endif
}; };
@@ -134,6 +138,10 @@ extern void dhcp_set_ntp_servers(u8_t num_ntp_servers, const ip4_addr_t* ntp_ser
#define netif_dhcp_data(netif) ((struct dhcp*)netif_get_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP)) #define netif_dhcp_data(netif) ((struct dhcp*)netif_get_client_data(netif, LWIP_NETIF_CLIENT_DATA_INDEX_DHCP))
#ifdef ESP_LWIP
void dhcp_set_cb(struct netif *netif, void (*cb)(struct netif*));
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@@ -98,9 +98,17 @@ static void tcpip_adapter_dhcps_cb(u8_t client_ip[4])
static err_t _dhcp_start(struct tcpip_api_call_data *p) static err_t _dhcp_start(struct tcpip_api_call_data *p)
{ {
err_t ret;
struct tcpip_adapter_api_call_data *call = (struct tcpip_adapter_api_call_data *)p; struct tcpip_adapter_api_call_data *call = (struct tcpip_adapter_api_call_data *)p;
return dhcp_start(call->netif); ret = dhcp_start(call->netif);
#if ESP_LWIP
if (ret == ERR_OK)
dhcp_set_cb(call->netif, tcpip_adapter_dhcpc_cb);
#endif
return ret;
} }
static err_t _dhcp_stop(struct tcpip_api_call_data *p) static err_t _dhcp_stop(struct tcpip_api_call_data *p)