* netif.c, netif.h: Apply patch#4197 with some changes (originator: rireland@hmgsl.com).

Provides callback on netif up/down state change.
This commit is contained in:
kieranm 2007-03-21 13:24:20 +00:00
parent d7ff85850c
commit e5147d5562
3 changed files with 50 additions and 4 deletions

View File

@ -23,6 +23,10 @@ HISTORY
++ New features:
2007-03-21 Kieran Mansley
* netif.c, netif.h: Apply patch#4197 with some changes (originator: rireland@hmgsl.com).
Provides callback on netif up/down state change.
2007-03-11 Frédéric Bernon, Mace Gael, Steve Reynolds
* sockets.h, sockets.c, api.h, api_lib.c, api_msg.h, api_msg.c, igmp.h, igmp.c,
ip.c, netif.h, tcpip.c, opt.h:

View File

@ -79,6 +79,10 @@ netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask,
/* netif not under DHCP control by default */
netif->dhcp = NULL;
#endif
#if LWIP_NETIF_CALLBACK
netif->status_callback = NULL;
#endif /* LWIP_NETIF_CALLBACK */
/* remember netif specific state information data */
netif->state = state;
netif->num = netifnum++;
@ -287,10 +291,17 @@ netif_set_default(struct netif *netif)
*/
void netif_set_up(struct netif *netif)
{
netif->flags |= NETIF_FLAG_UP;
if ( !(netif->flags & NETIF_FLAG_UP )) {
netif->flags |= NETIF_FLAG_UP;
#if LWIP_SNMP
snmp_get_sysuptime(&netif->ts);
snmp_get_sysuptime(&netif->ts);
#endif
#if LWIP_NETIF_CALLBACK
if ( netif->status_callback )
(netif->status_callback)( netif );
#endif /* LWIP_NETIF_CALLBACK */
}
}
/**
@ -311,10 +322,18 @@ u8_t netif_is_up(struct netif *netif)
*/
void netif_set_down(struct netif *netif)
{
netif->flags &= ~NETIF_FLAG_UP;
if ( netif->flags & NETIF_FLAG_UP )
{
netif->flags &= ~NETIF_FLAG_UP;
#if LWIP_SNMP
snmp_get_sysuptime(&netif->ts);
snmp_get_sysuptime(&netif->ts);
#endif
#if LWIP_NETIF_CALLBACK
if ( netif->status_callback )
(netif->status_callback)( netif );
#endif /* LWIP_NETIF_CALLBACK */
}
}
void
@ -323,3 +342,15 @@ netif_init(void)
netif_list = netif_default = NULL;
}
#if LWIP_NETIF_CALLBACK
/**
* Set callback to be called when interface is brought up/down
*/
void netif_set_status_callback( struct netif *netif, void (* status_callback)(struct netif *netif ))
{
if ( netif )
netif->status_callback = status_callback;
}
#endif /* LWIP_NETIF_CALLBACK */

View File

@ -90,6 +90,11 @@ struct netif {
* to send a packet on the interface. This function outputs
* the pbuf as-is on the link medium. */
err_t (* linkoutput)(struct netif *netif, struct pbuf *p);
#if LWIP_NETIF_CALLBACK
/** This function is called when the netif state is set to up or down
*/
void (* status_callback)(struct netif *netif);
#endif /* end, LWIP_NETIF_CALLBACK */
/** This field can be set by the device driver and could point
* to state information for the device. */
void *state;
@ -165,5 +170,11 @@ void netif_set_gw(struct netif *netif, struct ip_addr *gw);
void netif_set_up(struct netif *netif);
void netif_set_down(struct netif *netif);
u8_t netif_is_up(struct netif *netif);
#if LWIP_NETIF_CALLBACK
/*
* Set callback to be called when interface is brought up/down
*/
void netif_set_status_callback( struct netif *netif, void (* status_callback)(struct netif *netif ));
#endif /* LWIP_NETIF_CALLBACK */
#endif /* __LWIP_NETIF_H__ */