mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-09-13 02:05:43 +00:00
Port DHCP to new netif client data API
This commit is contained in:
parent
c8c804140d
commit
1db9631e7d
@ -50,6 +50,7 @@
|
|||||||
#include "lwip/udp.h"
|
#include "lwip/udp.h"
|
||||||
#include "lwip/priv/tcp_priv.h"
|
#include "lwip/priv/tcp_priv.h"
|
||||||
#include "lwip/autoip.h"
|
#include "lwip/autoip.h"
|
||||||
|
#include "lwip/dhcp.h"
|
||||||
#include "lwip/igmp.h"
|
#include "lwip/igmp.h"
|
||||||
#include "lwip/dns.h"
|
#include "lwip/dns.h"
|
||||||
#include "lwip/timeouts.h"
|
#include "lwip/timeouts.h"
|
||||||
@ -351,6 +352,9 @@ lwip_init(void)
|
|||||||
#if LWIP_AUTOIP
|
#if LWIP_AUTOIP
|
||||||
autoip_init();
|
autoip_init();
|
||||||
#endif /* LWIP_AUTOIP */
|
#endif /* LWIP_AUTOIP */
|
||||||
|
#if LWIP_DHCP
|
||||||
|
dhcp_init();
|
||||||
|
#endif /* LWIP_DHCP */
|
||||||
#if LWIP_IGMP
|
#if LWIP_IGMP
|
||||||
igmp_init();
|
igmp_init();
|
||||||
#endif /* LWIP_IGMP */
|
#endif /* LWIP_IGMP */
|
||||||
|
@ -156,6 +156,7 @@ static u8_t xid_initialised;
|
|||||||
|
|
||||||
static struct udp_pcb *dhcp_pcb;
|
static struct udp_pcb *dhcp_pcb;
|
||||||
static u8_t dhcp_pcb_refcount;
|
static u8_t dhcp_pcb_refcount;
|
||||||
|
static u8_t dhcp_netif_client_id;
|
||||||
|
|
||||||
/* DHCP client state machine functions */
|
/* DHCP client state machine functions */
|
||||||
static err_t dhcp_discover(struct netif *netif);
|
static err_t dhcp_discover(struct netif *netif);
|
||||||
@ -248,7 +249,8 @@ dhcp_dec_pcb_refcount(void)
|
|||||||
static void
|
static void
|
||||||
dhcp_handle_nak(struct netif *netif)
|
dhcp_handle_nak(struct netif *netif)
|
||||||
{
|
{
|
||||||
struct dhcp *dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
|
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_nak(netif=%p) %c%c%"U16_F"\n",
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_nak(netif=%p) %c%c%"U16_F"\n",
|
||||||
(void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
|
(void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
|
||||||
/* Change to a defined state - set this before assigning the address
|
/* Change to a defined state - set this before assigning the address
|
||||||
@ -273,7 +275,7 @@ dhcp_handle_nak(struct netif *netif)
|
|||||||
static void
|
static void
|
||||||
dhcp_check(struct netif *netif)
|
dhcp_check(struct netif *netif)
|
||||||
{
|
{
|
||||||
struct dhcp *dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
err_t result;
|
err_t result;
|
||||||
u16_t msecs;
|
u16_t msecs;
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_check(netif=%p) %c%c\n", (void *)netif, (s16_t)netif->name[0],
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_check(netif=%p) %c%c\n", (void *)netif, (s16_t)netif->name[0],
|
||||||
@ -302,7 +304,8 @@ dhcp_check(struct netif *netif)
|
|||||||
static void
|
static void
|
||||||
dhcp_handle_offer(struct netif *netif)
|
dhcp_handle_offer(struct netif *netif)
|
||||||
{
|
{
|
||||||
struct dhcp *dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
|
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_offer(netif=%p) %c%c%"U16_F"\n",
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_offer(netif=%p) %c%c%"U16_F"\n",
|
||||||
(void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
|
(void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
|
||||||
/* obtain the server address */
|
/* obtain the server address */
|
||||||
@ -333,7 +336,7 @@ dhcp_handle_offer(struct netif *netif)
|
|||||||
static err_t
|
static err_t
|
||||||
dhcp_select(struct netif *netif)
|
dhcp_select(struct netif *netif)
|
||||||
{
|
{
|
||||||
struct dhcp *dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
err_t result;
|
err_t result;
|
||||||
u16_t msecs;
|
u16_t msecs;
|
||||||
u8_t i;
|
u8_t i;
|
||||||
@ -395,7 +398,7 @@ dhcp_coarse_tmr(void)
|
|||||||
/* iterate through all network interfaces */
|
/* iterate through all network interfaces */
|
||||||
while (netif != NULL) {
|
while (netif != NULL) {
|
||||||
/* only act on DHCP configured interfaces */
|
/* only act on DHCP configured interfaces */
|
||||||
struct dhcp* dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
if ((dhcp != NULL) && (dhcp->state != DHCP_STATE_OFF)) {
|
if ((dhcp != NULL) && (dhcp->state != DHCP_STATE_OFF)) {
|
||||||
/* compare lease time to expire timeout */
|
/* compare lease time to expire timeout */
|
||||||
if (dhcp->t0_timeout && (++dhcp->lease_used == dhcp->t0_timeout)) {
|
if (dhcp->t0_timeout && (++dhcp->lease_used == dhcp->t0_timeout)) {
|
||||||
@ -433,14 +436,15 @@ dhcp_fine_tmr(void)
|
|||||||
struct netif *netif = netif_list;
|
struct netif *netif = netif_list;
|
||||||
/* loop through netif's */
|
/* loop through netif's */
|
||||||
while (netif != NULL) {
|
while (netif != NULL) {
|
||||||
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
/* only act on DHCP configured interfaces */
|
/* only act on DHCP configured interfaces */
|
||||||
if (netif->dhcp != NULL) {
|
if (dhcp != NULL) {
|
||||||
/* timer is active (non zero), and is about to trigger now */
|
/* timer is active (non zero), and is about to trigger now */
|
||||||
if (netif->dhcp->request_timeout > 1) {
|
if (dhcp->request_timeout > 1) {
|
||||||
netif->dhcp->request_timeout--;
|
dhcp->request_timeout--;
|
||||||
}
|
}
|
||||||
else if (netif->dhcp->request_timeout == 1) {
|
else if (dhcp->request_timeout == 1) {
|
||||||
netif->dhcp->request_timeout--;
|
dhcp->request_timeout--;
|
||||||
/* { netif->dhcp->request_timeout == 0 } */
|
/* { netif->dhcp->request_timeout == 0 } */
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_fine_tmr(): request timeout\n"));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_fine_tmr(): request timeout\n"));
|
||||||
/* this client's request timeout triggered */
|
/* this client's request timeout triggered */
|
||||||
@ -463,7 +467,8 @@ dhcp_fine_tmr(void)
|
|||||||
static void
|
static void
|
||||||
dhcp_timeout(struct netif *netif)
|
dhcp_timeout(struct netif *netif)
|
||||||
{
|
{
|
||||||
struct dhcp *dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
|
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout()\n"));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_timeout()\n"));
|
||||||
/* back-off period has passed, or server selection timed out */
|
/* back-off period has passed, or server selection timed out */
|
||||||
if ((dhcp->state == DHCP_STATE_BACKING_OFF) || (dhcp->state == DHCP_STATE_SELECTING)) {
|
if ((dhcp->state == DHCP_STATE_BACKING_OFF) || (dhcp->state == DHCP_STATE_SELECTING)) {
|
||||||
@ -509,7 +514,8 @@ dhcp_timeout(struct netif *netif)
|
|||||||
static void
|
static void
|
||||||
dhcp_t1_timeout(struct netif *netif)
|
dhcp_t1_timeout(struct netif *netif)
|
||||||
{
|
{
|
||||||
struct dhcp *dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
|
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_t1_timeout()\n"));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_STATE, ("dhcp_t1_timeout()\n"));
|
||||||
if ((dhcp->state == DHCP_STATE_REQUESTING) || (dhcp->state == DHCP_STATE_BOUND) ||
|
if ((dhcp->state == DHCP_STATE_REQUESTING) || (dhcp->state == DHCP_STATE_BOUND) ||
|
||||||
(dhcp->state == DHCP_STATE_RENEWING)) {
|
(dhcp->state == DHCP_STATE_RENEWING)) {
|
||||||
@ -521,9 +527,9 @@ dhcp_t1_timeout(struct netif *netif)
|
|||||||
DHCP_STATE_RENEWING, not DHCP_STATE_BOUND */
|
DHCP_STATE_RENEWING, not DHCP_STATE_BOUND */
|
||||||
dhcp_renew(netif);
|
dhcp_renew(netif);
|
||||||
/* Calculate next timeout */
|
/* Calculate next timeout */
|
||||||
if (((netif->dhcp->t2_timeout - dhcp->lease_used) / 2) >= ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS))
|
if (((dhcp->t2_timeout - dhcp->lease_used) / 2) >= ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS))
|
||||||
{
|
{
|
||||||
netif->dhcp->t1_renew_time = ((netif->dhcp->t2_timeout - dhcp->lease_used) / 2);
|
dhcp->t1_renew_time = ((dhcp->t2_timeout - dhcp->lease_used) / 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -536,7 +542,8 @@ dhcp_t1_timeout(struct netif *netif)
|
|||||||
static void
|
static void
|
||||||
dhcp_t2_timeout(struct netif *netif)
|
dhcp_t2_timeout(struct netif *netif)
|
||||||
{
|
{
|
||||||
struct dhcp *dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
|
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t2_timeout()\n"));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_t2_timeout()\n"));
|
||||||
if ((dhcp->state == DHCP_STATE_REQUESTING) || (dhcp->state == DHCP_STATE_BOUND) ||
|
if ((dhcp->state == DHCP_STATE_REQUESTING) || (dhcp->state == DHCP_STATE_BOUND) ||
|
||||||
(dhcp->state == DHCP_STATE_RENEWING) || (dhcp->state == DHCP_STATE_REBINDING)) {
|
(dhcp->state == DHCP_STATE_RENEWING) || (dhcp->state == DHCP_STATE_REBINDING)) {
|
||||||
@ -547,9 +554,9 @@ dhcp_t2_timeout(struct netif *netif)
|
|||||||
DHCP_STATE_REBINDING, not DHCP_STATE_BOUND */
|
DHCP_STATE_REBINDING, not DHCP_STATE_BOUND */
|
||||||
dhcp_rebind(netif);
|
dhcp_rebind(netif);
|
||||||
/* Calculate next timeout */
|
/* Calculate next timeout */
|
||||||
if (((netif->dhcp->t0_timeout - dhcp->lease_used) / 2) >= ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS))
|
if (((dhcp->t0_timeout - dhcp->lease_used) / 2) >= ((60 + DHCP_COARSE_TIMER_SECS / 2) / DHCP_COARSE_TIMER_SECS))
|
||||||
{
|
{
|
||||||
netif->dhcp->t2_rebind_time = ((netif->dhcp->t0_timeout - dhcp->lease_used) / 2);
|
dhcp->t2_rebind_time = ((dhcp->t0_timeout - dhcp->lease_used) / 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -562,7 +569,8 @@ dhcp_t2_timeout(struct netif *netif)
|
|||||||
static void
|
static void
|
||||||
dhcp_handle_ack(struct netif *netif)
|
dhcp_handle_ack(struct netif *netif)
|
||||||
{
|
{
|
||||||
struct dhcp *dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
|
|
||||||
#if LWIP_DNS || LWIP_DHCP_GET_NTP_SRV
|
#if LWIP_DNS || LWIP_DHCP_GET_NTP_SRV
|
||||||
u8_t n;
|
u8_t n;
|
||||||
#endif /* LWIP_DNS || LWIP_DHCP_GET_NTP_SRV */
|
#endif /* LWIP_DNS || LWIP_DHCP_GET_NTP_SRV */
|
||||||
@ -654,12 +662,12 @@ dhcp_set_struct(struct netif *netif, struct dhcp *dhcp)
|
|||||||
{
|
{
|
||||||
LWIP_ASSERT("netif != NULL", netif != NULL);
|
LWIP_ASSERT("netif != NULL", netif != NULL);
|
||||||
LWIP_ASSERT("dhcp != NULL", dhcp != NULL);
|
LWIP_ASSERT("dhcp != NULL", dhcp != NULL);
|
||||||
LWIP_ASSERT("netif already has a struct dhcp set", netif->dhcp == NULL);
|
LWIP_ASSERT("netif already has a struct dhcp set", netif->client_data[dhcp_netif_client_id] == NULL);
|
||||||
|
|
||||||
/* clear data structure */
|
/* clear data structure */
|
||||||
memset(dhcp, 0, sizeof(struct dhcp));
|
memset(dhcp, 0, sizeof(struct dhcp));
|
||||||
/* dhcp_set_state(&dhcp, DHCP_STATE_OFF); */
|
/* dhcp_set_state(&dhcp, DHCP_STATE_OFF); */
|
||||||
netif->dhcp = dhcp;
|
netif->client_data[dhcp_netif_client_id] = dhcp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -675,9 +683,9 @@ void dhcp_cleanup(struct netif *netif)
|
|||||||
{
|
{
|
||||||
LWIP_ASSERT("netif != NULL", netif != NULL);
|
LWIP_ASSERT("netif != NULL", netif != NULL);
|
||||||
|
|
||||||
if (netif->dhcp != NULL) {
|
if (netif->client_data[dhcp_netif_client_id] != NULL) {
|
||||||
mem_free(netif->dhcp);
|
mem_free(netif->client_data[dhcp_netif_client_id]);
|
||||||
netif->dhcp = NULL;
|
netif->client_data[dhcp_netif_client_id] = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -702,7 +710,7 @@ dhcp_start(struct netif *netif)
|
|||||||
|
|
||||||
LWIP_ERROR("netif != NULL", (netif != NULL), return ERR_ARG;);
|
LWIP_ERROR("netif != NULL", (netif != NULL), return ERR_ARG;);
|
||||||
LWIP_ERROR("netif is not up, old style port?", netif_is_up(netif), return ERR_ARG;);
|
LWIP_ERROR("netif is not up, old style port?", netif_is_up(netif), return ERR_ARG;);
|
||||||
dhcp = netif->dhcp;
|
dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
|
||||||
|
|
||||||
/* check MTU of the netif */
|
/* check MTU of the netif */
|
||||||
@ -721,7 +729,7 @@ dhcp_start(struct netif *netif)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* store this dhcp client in the netif */
|
/* store this dhcp client in the netif */
|
||||||
netif->dhcp = dhcp;
|
netif->client_data[dhcp_netif_client_id] = dhcp;
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): allocated dhcp"));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_start(): allocated dhcp"));
|
||||||
/* already has DHCP client attached */
|
/* already has DHCP client attached */
|
||||||
} else {
|
} else {
|
||||||
@ -820,7 +828,8 @@ dhcp_inform(struct netif *netif)
|
|||||||
void
|
void
|
||||||
dhcp_network_changed(struct netif *netif)
|
dhcp_network_changed(struct netif *netif)
|
||||||
{
|
{
|
||||||
struct dhcp *dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
|
|
||||||
if (!dhcp)
|
if (!dhcp)
|
||||||
return;
|
return;
|
||||||
switch (dhcp->state) {
|
switch (dhcp->state) {
|
||||||
@ -862,15 +871,18 @@ dhcp_network_changed(struct netif *netif)
|
|||||||
void
|
void
|
||||||
dhcp_arp_reply(struct netif *netif, const ip4_addr_t *addr)
|
dhcp_arp_reply(struct netif *netif, const ip4_addr_t *addr)
|
||||||
{
|
{
|
||||||
|
struct dhcp *dhcp;
|
||||||
|
|
||||||
LWIP_ERROR("netif != NULL", (netif != NULL), return;);
|
LWIP_ERROR("netif != NULL", (netif != NULL), return;);
|
||||||
|
dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_arp_reply()\n"));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_arp_reply()\n"));
|
||||||
/* is a DHCP client doing an ARP check? */
|
/* is a DHCP client doing an ARP check? */
|
||||||
if ((netif->dhcp != NULL) && (netif->dhcp->state == DHCP_STATE_CHECKING)) {
|
if ((dhcp != NULL) && (dhcp->state == DHCP_STATE_CHECKING)) {
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_arp_reply(): CHECKING, arp reply for 0x%08"X32_F"\n",
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_arp_reply(): CHECKING, arp reply for 0x%08"X32_F"\n",
|
||||||
ip4_addr_get_u32(addr)));
|
ip4_addr_get_u32(addr)));
|
||||||
/* did a host respond with the address we
|
/* did a host respond with the address we
|
||||||
were offered by the DHCP server? */
|
were offered by the DHCP server? */
|
||||||
if (ip4_addr_cmp(addr, &netif->dhcp->offered_ip_addr)) {
|
if (ip4_addr_cmp(addr, &dhcp->offered_ip_addr)) {
|
||||||
/* we will not accept the offered address */
|
/* we will not accept the offered address */
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING,
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE | LWIP_DBG_LEVEL_WARNING,
|
||||||
("dhcp_arp_reply(): arp reply matched with offered address, declining\n"));
|
("dhcp_arp_reply(): arp reply matched with offered address, declining\n"));
|
||||||
@ -891,7 +903,7 @@ dhcp_arp_reply(struct netif *netif, const ip4_addr_t *addr)
|
|||||||
static err_t
|
static err_t
|
||||||
dhcp_decline(struct netif *netif)
|
dhcp_decline(struct netif *netif)
|
||||||
{
|
{
|
||||||
struct dhcp *dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
err_t result = ERR_OK;
|
err_t result = ERR_OK;
|
||||||
u16_t msecs;
|
u16_t msecs;
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline()\n"));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_decline()\n"));
|
||||||
@ -933,7 +945,7 @@ dhcp_decline(struct netif *netif)
|
|||||||
static err_t
|
static err_t
|
||||||
dhcp_discover(struct netif *netif)
|
dhcp_discover(struct netif *netif)
|
||||||
{
|
{
|
||||||
struct dhcp *dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
err_t result = ERR_OK;
|
err_t result = ERR_OK;
|
||||||
u16_t msecs;
|
u16_t msecs;
|
||||||
u8_t i;
|
u8_t i;
|
||||||
@ -993,7 +1005,7 @@ dhcp_bind(struct netif *netif)
|
|||||||
struct dhcp *dhcp;
|
struct dhcp *dhcp;
|
||||||
ip4_addr_t sn_mask, gw_addr;
|
ip4_addr_t sn_mask, gw_addr;
|
||||||
LWIP_ERROR("dhcp_bind: netif != NULL", (netif != NULL), return;);
|
LWIP_ERROR("dhcp_bind: netif != NULL", (netif != NULL), return;);
|
||||||
dhcp = netif->dhcp;
|
dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
LWIP_ERROR("dhcp_bind: dhcp != NULL", (dhcp != NULL), return;);
|
LWIP_ERROR("dhcp_bind: dhcp != NULL", (dhcp != NULL), return;);
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_bind(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num));
|
||||||
|
|
||||||
@ -1099,7 +1111,7 @@ dhcp_bind(struct netif *netif)
|
|||||||
err_t
|
err_t
|
||||||
dhcp_renew(struct netif *netif)
|
dhcp_renew(struct netif *netif)
|
||||||
{
|
{
|
||||||
struct dhcp *dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
err_t result;
|
err_t result;
|
||||||
u16_t msecs;
|
u16_t msecs;
|
||||||
u8_t i;
|
u8_t i;
|
||||||
@ -1151,7 +1163,7 @@ dhcp_renew(struct netif *netif)
|
|||||||
static err_t
|
static err_t
|
||||||
dhcp_rebind(struct netif *netif)
|
dhcp_rebind(struct netif *netif)
|
||||||
{
|
{
|
||||||
struct dhcp *dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
err_t result;
|
err_t result;
|
||||||
u16_t msecs;
|
u16_t msecs;
|
||||||
u8_t i;
|
u8_t i;
|
||||||
@ -1201,7 +1213,7 @@ dhcp_rebind(struct netif *netif)
|
|||||||
static err_t
|
static err_t
|
||||||
dhcp_reboot(struct netif *netif)
|
dhcp_reboot(struct netif *netif)
|
||||||
{
|
{
|
||||||
struct dhcp *dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
err_t result;
|
err_t result;
|
||||||
u16_t msecs;
|
u16_t msecs;
|
||||||
u8_t i;
|
u8_t i;
|
||||||
@ -1252,7 +1264,7 @@ dhcp_reboot(struct netif *netif)
|
|||||||
err_t
|
err_t
|
||||||
dhcp_release(struct netif *netif)
|
dhcp_release(struct netif *netif)
|
||||||
{
|
{
|
||||||
struct dhcp *dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
err_t result;
|
err_t result;
|
||||||
ip_addr_t server_ip_addr;
|
ip_addr_t server_ip_addr;
|
||||||
u8_t is_dhcp_supplied_address;
|
u8_t is_dhcp_supplied_address;
|
||||||
@ -1317,7 +1329,7 @@ dhcp_stop(struct netif *netif)
|
|||||||
{
|
{
|
||||||
struct dhcp *dhcp;
|
struct dhcp *dhcp;
|
||||||
LWIP_ERROR("dhcp_stop: netif != NULL", (netif != NULL), return;);
|
LWIP_ERROR("dhcp_stop: netif != NULL", (netif != NULL), return;);
|
||||||
dhcp = netif->dhcp;
|
dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
|
|
||||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_stop()\n"));
|
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_stop()\n"));
|
||||||
/* netif is DHCP configured? */
|
/* netif is DHCP configured? */
|
||||||
@ -1642,7 +1654,7 @@ static void
|
|||||||
dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
|
dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr, u16_t port)
|
||||||
{
|
{
|
||||||
struct netif *netif = ip_current_input_netif();
|
struct netif *netif = ip_current_input_netif();
|
||||||
struct dhcp *dhcp = netif->dhcp;
|
struct dhcp *dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
struct dhcp_msg *reply_msg = (struct dhcp_msg *)p->payload;
|
struct dhcp_msg *reply_msg = (struct dhcp_msg *)p->payload;
|
||||||
u8_t msg_type;
|
u8_t msg_type;
|
||||||
u8_t i;
|
u8_t i;
|
||||||
@ -1904,13 +1916,17 @@ dhcp_option_trailer(struct dhcp *dhcp)
|
|||||||
u8_t
|
u8_t
|
||||||
dhcp_supplied_address(const struct netif *netif)
|
dhcp_supplied_address(const struct netif *netif)
|
||||||
{
|
{
|
||||||
if ((netif != NULL) && (netif->dhcp != NULL)) {
|
if ((netif != NULL) && (netif->client_data[dhcp_netif_client_id] != NULL)) {
|
||||||
if ((netif->dhcp->state == DHCP_STATE_BOUND) ||
|
struct dhcp* dhcp = (struct dhcp*)netif->client_data[dhcp_netif_client_id];
|
||||||
(netif->dhcp->state == DHCP_STATE_RENEWING)) {
|
return (dhcp->state == DHCP_STATE_BOUND) || (dhcp->state == DHCP_STATE_RENEWING);
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
dhcp_init(void)
|
||||||
|
{
|
||||||
|
dhcp_netif_client_id = netif_alloc_client_data_id();
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* LWIP_IPV4 && LWIP_DHCP */
|
#endif /* LWIP_IPV4 && LWIP_DHCP */
|
||||||
|
@ -241,10 +241,6 @@ netif_add(struct netif *netif,
|
|||||||
#endif /* LWIP_IPV6 */
|
#endif /* LWIP_IPV6 */
|
||||||
NETIF_SET_CHECKSUM_CTRL(netif, NETIF_CHECKSUM_ENABLE_ALL);
|
NETIF_SET_CHECKSUM_CTRL(netif, NETIF_CHECKSUM_ENABLE_ALL);
|
||||||
netif->flags = 0;
|
netif->flags = 0;
|
||||||
#if LWIP_DHCP
|
|
||||||
/* netif not under DHCP control by default */
|
|
||||||
netif->dhcp = NULL;
|
|
||||||
#endif /* LWIP_DHCP */
|
|
||||||
#if LWIP_AUTOIP
|
#if LWIP_AUTOIP
|
||||||
/* netif not under AutoIP control by default */
|
/* netif not under AutoIP control by default */
|
||||||
netif->autoip = NULL;
|
netif->autoip = NULL;
|
||||||
@ -259,10 +255,6 @@ netif_add(struct netif *netif,
|
|||||||
#if LWIP_IPV6_SEND_ROUTER_SOLICIT
|
#if LWIP_IPV6_SEND_ROUTER_SOLICIT
|
||||||
netif->rs_count = LWIP_ND6_MAX_MULTICAST_SOLICIT;
|
netif->rs_count = LWIP_ND6_MAX_MULTICAST_SOLICIT;
|
||||||
#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */
|
#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */
|
||||||
#if LWIP_IPV6_DHCP6
|
|
||||||
/* netif not under DHCPv6 control by default */
|
|
||||||
netif->dhcp6 = NULL;
|
|
||||||
#endif /* LWIP_IPV6_DHCP6 */
|
|
||||||
#if LWIP_NETIF_STATUS_CALLBACK
|
#if LWIP_NETIF_STATUS_CALLBACK
|
||||||
netif->status_callback = NULL;
|
netif->status_callback = NULL;
|
||||||
#endif /* LWIP_NETIF_STATUS_CALLBACK */
|
#endif /* LWIP_NETIF_STATUS_CALLBACK */
|
||||||
@ -696,9 +688,7 @@ netif_set_link_up(struct netif *netif)
|
|||||||
netif->flags |= NETIF_FLAG_LINK_UP;
|
netif->flags |= NETIF_FLAG_LINK_UP;
|
||||||
|
|
||||||
#if LWIP_DHCP
|
#if LWIP_DHCP
|
||||||
if (netif->dhcp) {
|
dhcp_network_changed(netif);
|
||||||
dhcp_network_changed(netif);
|
|
||||||
}
|
|
||||||
#endif /* LWIP_DHCP */
|
#endif /* LWIP_DHCP */
|
||||||
|
|
||||||
#if LWIP_AUTOIP
|
#if LWIP_AUTOIP
|
||||||
@ -961,7 +951,7 @@ u8_t netif_alloc_client_data_id(void)
|
|||||||
{
|
{
|
||||||
u8_t result = netif_client_id;
|
u8_t result = netif_client_id;
|
||||||
netif_client_id++;
|
netif_client_id++;
|
||||||
LWIP_ASSERT("Increase LWIP_NUM_NETIF_CLIENT_DATA in lwipopts.h", netif_client_id<LWIP_NUM_NETIF_CLIENT_DATA);
|
LWIP_ASSERT("Increase LWIP_NUM_NETIF_CLIENT_DATA in lwipopts.h", netif_client_id<=LWIP_NUM_NETIF_CLIENT_DATA);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -118,6 +118,7 @@ u8_t dhcp_supplied_address(const struct netif *netif);
|
|||||||
void dhcp_coarse_tmr(void);
|
void dhcp_coarse_tmr(void);
|
||||||
/* to be called every half second */
|
/* to be called every half second */
|
||||||
void dhcp_fine_tmr(void);
|
void dhcp_fine_tmr(void);
|
||||||
|
void dhcp_init(void);
|
||||||
|
|
||||||
|
|
||||||
#if LWIP_DHCP_GET_NTP_SRV
|
#if LWIP_DHCP_GET_NTP_SRV
|
||||||
|
@ -49,15 +49,9 @@
|
|||||||
#include "lwip/pbuf.h"
|
#include "lwip/pbuf.h"
|
||||||
#include "lwip/stats.h"
|
#include "lwip/stats.h"
|
||||||
|
|
||||||
#if LWIP_DHCP
|
|
||||||
struct dhcp;
|
|
||||||
#endif
|
|
||||||
#if LWIP_AUTOIP
|
#if LWIP_AUTOIP
|
||||||
struct autoip;
|
struct autoip;
|
||||||
#endif
|
#endif
|
||||||
#if LWIP_IPV6_DHCP6
|
|
||||||
struct dhcp6;
|
|
||||||
#endif /* LWIP_IPV6_DHCP6 */
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -247,10 +241,6 @@ struct netif {
|
|||||||
/** This field can be set by the device driver and could point
|
/** This field can be set by the device driver and could point
|
||||||
* to state information for the device. */
|
* to state information for the device. */
|
||||||
void *state;
|
void *state;
|
||||||
#if LWIP_DHCP
|
|
||||||
/** the DHCP client state information for this netif */
|
|
||||||
struct dhcp *dhcp;
|
|
||||||
#endif /* LWIP_DHCP */
|
|
||||||
#if LWIP_AUTOIP
|
#if LWIP_AUTOIP
|
||||||
/** the AutoIP client state information for this netif */
|
/** the AutoIP client state information for this netif */
|
||||||
struct autoip *autoip;
|
struct autoip *autoip;
|
||||||
@ -266,10 +256,6 @@ struct netif {
|
|||||||
/** Number of Router Solicitation messages that remain to be sent. */
|
/** Number of Router Solicitation messages that remain to be sent. */
|
||||||
u8_t rs_count;
|
u8_t rs_count;
|
||||||
#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */
|
#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */
|
||||||
#if LWIP_IPV6_DHCP6
|
|
||||||
/** the DHCPv6 client state information for this netif */
|
|
||||||
struct dhcp6 *dhcp6;
|
|
||||||
#endif /* LWIP_IPV6_DHCP6 */
|
|
||||||
#if LWIP_NETIF_HOSTNAME
|
#if LWIP_NETIF_HOSTNAME
|
||||||
/* the hostname for this netif, NULL is a valid value */
|
/* the hostname for this netif, NULL is a valid value */
|
||||||
const char* hostname;
|
const char* hostname;
|
||||||
|
Loading…
Reference in New Issue
Block a user