Add feature for dhcp MTU judgement

This commit is contained in:
xueyunfei
2020-12-22 10:33:27 +08:00
parent 01d0ecff2d
commit 595aef0d20
+23 -1
View File
@@ -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];