lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-users] DHCP usage


From: Sandra Gilge
Subject: [lwip-users] DHCP usage
Date: Fri, 5 Jun 2015 15:05:41 +0200

Hallo,

 

thanks, I’m doing the dhcp_release and can see it in wireshark now.

Since I work with lwipv1.4.1 I use the netifapi functions. For dhcp release I call netifapi_netif_common(netif, NULL, dhcp_release);

 

That leads to another questions:

Wouldn’t it make sense to have a define in netifapi.h for dhcp_release as follows:

#define netifapi_dhcp_release(n)        netifapi_netif_common(n, NULL, dhcp_release)

 

Best regards,

Sandra

 

 

 


Gesendet: Freitag, 5. Juni 2015 11:07
An: Sandra Gilge
Betreff: Fwd: [lwip-users] DHCP usage

 

Hi,

I had issues with this too.
This is what I did and it has worked with out change from lwIP V1.3.2 to current:

typedef struct _NVDHCP
{
    uint8_t         pbyIpAddress[4];
    uint8_t         pbyAddressMask[4];
    uint8_t         pbyGatewayAddress[4];
    uint8_t         byEnableDHCP;
} NVDHCP,
*PNVDHCP;

/******************************************************************************
* Function Name: ipReconfigure
* Description  : Function to re-configure the interface
* Arguments    : IN  pszInterface - The symbolic link name of the interface
*                IN  pIpConfig - Pointer to the new configuration
* Return Value : 0 for success or -1 on error
******************************************************************************/
int32_t ipReconfigure(int8_t *pszInterface, PNVDHCP pIpConfig)
{
    PRTEIP pEtherC = ipFindNetIf(&gpEtherC, pszInterface);
    if (pEtherC)
    {
        if (pIpConfig->byEnableDHCP == 0U)
        {
            _Bool    bfLinkUp = false;
            pEtherC->ipConfig = *pIpConfig;
            /* If DHCP was previously on */
            if (pEtherC->ipConfig.byEnableDHCP)
            {
                /* Stop it */
                tcpip_callback((void(*)(void*))dhcp_release,
                               &pEtherC->ipNetIf);
                tcpip_callback((void(*)(void*))dhcp_stop,
                &pEtherC->ipNetIf);
            }
            /* Set the fixed address */
            memcpy(&pEtherC->ipNetIf.ip_addr.addr,
                   pEtherC->ipConfig.pbyIpAddress,
                   sizeof(struct ip_addr));
            memcpy(&pEtherC->ipNetIf.netmask.addr,
                   pEtherC->ipConfig.pbyAddressMask,
                   sizeof(struct ip_addr));
            memcpy(&pEtherC->ipNetIf.gw.addr,
                   pEtherC->ipConfig.pbyGatewayAddress,
                   sizeof(struct ip_addr));
            /* Check the state of the link */
            if ((control(pEtherC->iEtherC, CTL_GET_LINK_STATE, &bfLinkUp) == 0U)
            &&  (bfLinkUp))
            {
                /* Tell lwIP that the data link is up */
                tcpip_callback((void(*)(void*))netif_set_up,
                               &pEtherC->ipNetIf);
            }
        }
        else
        {
            if (pEtherC->ipConfig.byEnableDHCP == 0U)
            {
                pEtherC->ipConfig = *pIpConfig;
                /* Protect against concurrent access,
                   specifically in the ARP modules */
                tcpip_callback((void(*)(void*))netif_set_link_down,
                               &pEtherC->ipNetIf);
                /* Also have to do this one as well. Is it not obvious
                   that if the physical link has been set down that
                   the data link is down too? */
                tcpip_callback((void(*)(void*))netif_set_down,
                               &pEtherC->ipNetIf);
                /* Tell lwIP to start DHCP */
                tcpip_callback((void(*)(void*))dhcp_start,
                               &pEtherC->ipNetIf);
            }
            else
            {
                pEtherC->ipConfig = *pIpConfig;
            }
        }
        return 0;
    }
    return -1;
}
/******************************************************************************
End of function  ipReconfigure
******************************************************************************/

The code comes from a system using an RTOS so the calls are made by call-backs to the TCPIP task.

Good luck!

Adam.



-------- Forwarded Message --------

Subject:

[lwip-users] DHCP usage

Date:

Fri, 5 Jun 2015 10:37:00 +0200

From:

Sandra Gilge <address@hidden>

Reply-To:

Mailing list for lwIP users <address@hidden>

To:

address@hidden




Hallo,

 

The IP configuration in our embedded system is reconfigurable by the user during runtime.

The user can also switch on DHCP or switch it off and use a static IP address.

 

What is the correct way to switch DHCP off. Do I have to call netifapi_dhcp_stop(), when switching off DHCP?

I tried this, but I could not see a DHCP message on wireshark.

 

This is how it works right now:

Any configuration change:

netifapi_netif_set_down()

 

DHCP switched off:

netifapi_netif_set_addr()

netifapi_netif_set_up()

 

DHCP switched on:

netifapi_dhcp_start()

wait up to 7 secs for DHCP_BOUND

 

Best regards,

Sandra

 

 

 

 

 

 

 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]