mirror of
https://github.com/espressif/esp-lwip.git
synced 2026-09-15 13:40:05 +00:00
Add feature for dhcp MTU judgement
This commit is contained in:
+23
-1
@@ -141,6 +141,9 @@ enum dhcp_option_idx {
|
||||
DHCP_OPTION_IDX_T2,
|
||||
DHCP_OPTION_IDX_SUBNET_MASK,
|
||||
DHCP_OPTION_IDX_ROUTER,
|
||||
#if ESP_DHCP
|
||||
DHCP_OPTION_IDX_MTU,
|
||||
#endif /* ESP_DHCP */
|
||||
#if LWIP_DHCP_PROVIDE_DNS_SERVERS
|
||||
DHCP_OPTION_IDX_DNS_SERVER,
|
||||
DHCP_OPTION_IDX_DNS_SERVER_LAST = DHCP_OPTION_IDX_DNS_SERVER + LWIP_DHCP_PROVIDE_DNS_SERVERS - 1,
|
||||
@@ -649,7 +652,15 @@ dhcp_handle_ack(struct netif *netif, struct dhcp_msg *msg_in)
|
||||
/* calculate safe periods for renewal */
|
||||
dhcp->offered_t1_renew = dhcp->offered_t0_lease / 2;
|
||||
}
|
||||
|
||||
/* MTU judgement */
|
||||
#if ESP_DHCP
|
||||
if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_MTU)) {
|
||||
if (dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MTU) < netif->mtu) {
|
||||
netif->mtu = dhcp_get_option_value(dhcp, DHCP_OPTION_IDX_MTU);
|
||||
LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE, ("dhcp_handle_ack(): Negotiated netif MTU is %d\n", netif->mtu));
|
||||
}
|
||||
}
|
||||
#endif /* ESP_DHCP */
|
||||
/* renewal period given? */
|
||||
if (dhcp_option_given(dhcp, DHCP_OPTION_IDX_T2)) {
|
||||
/* remember given rebind period */
|
||||
@@ -1736,6 +1747,13 @@ again:
|
||||
decode_idx = DHCP_OPTION_IDX_DNS_SERVER;
|
||||
break;
|
||||
#endif /* LWIP_DHCP_PROVIDE_DNS_SERVERS */
|
||||
#if ESP_DHCP
|
||||
case (DHCP_OPTION_MTU):
|
||||
LWIP_ERROR("len == 2", len == 2, return ERR_VAL;);
|
||||
decode_len = len;
|
||||
decode_idx = DHCP_OPTION_IDX_MTU;
|
||||
break;
|
||||
#endif /* ESP_DHCP */
|
||||
case (DHCP_OPTION_LEASE_TIME):
|
||||
LWIP_ERROR("len == 4", len == 4, return ERR_VAL;);
|
||||
decode_idx = DHCP_OPTION_IDX_LEASE_TIME;
|
||||
@@ -1815,6 +1833,10 @@ decode_next:
|
||||
goto decode_next;
|
||||
} else if (decode_len == 4) {
|
||||
value = lwip_ntohl(value);
|
||||
#if ESP_DHCP
|
||||
} else if (decode_len == 2) {
|
||||
value = (u32_t)lwip_htons((u16_t)value);
|
||||
#endif /* ESP_DHCP */
|
||||
} else {
|
||||
LWIP_ERROR("invalid decode_len", decode_len == 1, return ERR_VAL;);
|
||||
value = ((u8_t *)&value)[0];
|
||||
|
||||
Reference in New Issue
Block a user