1*5d5fbe79SDavid van Moolenbroek /** 2*5d5fbe79SDavid van Moolenbroek * @file 3*5d5fbe79SDavid van Moolenbroek * netif API (to be used from non-TCPIP threads) 4*5d5fbe79SDavid van Moolenbroek */ 5*5d5fbe79SDavid van Moolenbroek 6*5d5fbe79SDavid van Moolenbroek /* 7*5d5fbe79SDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without modification, 8*5d5fbe79SDavid van Moolenbroek * are permitted provided that the following conditions are met: 9*5d5fbe79SDavid van Moolenbroek * 10*5d5fbe79SDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright notice, 11*5d5fbe79SDavid van Moolenbroek * this list of conditions and the following disclaimer. 12*5d5fbe79SDavid van Moolenbroek * 2. Redistributions in binary form must reproduce the above copyright notice, 13*5d5fbe79SDavid van Moolenbroek * this list of conditions and the following disclaimer in the documentation 14*5d5fbe79SDavid van Moolenbroek * and/or other materials provided with the distribution. 15*5d5fbe79SDavid van Moolenbroek * 3. The name of the author may not be used to endorse or promote products 16*5d5fbe79SDavid van Moolenbroek * derived from this software without specific prior written permission. 17*5d5fbe79SDavid van Moolenbroek * 18*5d5fbe79SDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 19*5d5fbe79SDavid van Moolenbroek * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 20*5d5fbe79SDavid van Moolenbroek * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 21*5d5fbe79SDavid van Moolenbroek * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 22*5d5fbe79SDavid van Moolenbroek * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 23*5d5fbe79SDavid van Moolenbroek * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24*5d5fbe79SDavid van Moolenbroek * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25*5d5fbe79SDavid van Moolenbroek * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 26*5d5fbe79SDavid van Moolenbroek * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 27*5d5fbe79SDavid van Moolenbroek * OF SUCH DAMAGE. 28*5d5fbe79SDavid van Moolenbroek * 29*5d5fbe79SDavid van Moolenbroek * This file is part of the lwIP TCP/IP stack. 30*5d5fbe79SDavid van Moolenbroek * 31*5d5fbe79SDavid van Moolenbroek */ 32*5d5fbe79SDavid van Moolenbroek #ifndef LWIP_HDR_NETIFAPI_H 33*5d5fbe79SDavid van Moolenbroek #define LWIP_HDR_NETIFAPI_H 34*5d5fbe79SDavid van Moolenbroek 35*5d5fbe79SDavid van Moolenbroek #include "lwip/opt.h" 36*5d5fbe79SDavid van Moolenbroek 37*5d5fbe79SDavid van Moolenbroek #if LWIP_NETIF_API /* don't build if not configured for use in lwipopts.h */ 38*5d5fbe79SDavid van Moolenbroek 39*5d5fbe79SDavid van Moolenbroek #include "lwip/sys.h" 40*5d5fbe79SDavid van Moolenbroek #include "lwip/netif.h" 41*5d5fbe79SDavid van Moolenbroek #include "lwip/dhcp.h" 42*5d5fbe79SDavid van Moolenbroek #include "lwip/autoip.h" 43*5d5fbe79SDavid van Moolenbroek #include "lwip/priv/tcpip_priv.h" 44*5d5fbe79SDavid van Moolenbroek 45*5d5fbe79SDavid van Moolenbroek #ifdef __cplusplus 46*5d5fbe79SDavid van Moolenbroek extern "C" { 47*5d5fbe79SDavid van Moolenbroek #endif 48*5d5fbe79SDavid van Moolenbroek 49*5d5fbe79SDavid van Moolenbroek #if LWIP_MPU_COMPATIBLE 50*5d5fbe79SDavid van Moolenbroek #define NETIFAPI_IPADDR_DEF(type, m) type m 51*5d5fbe79SDavid van Moolenbroek #else /* LWIP_MPU_COMPATIBLE */ 52*5d5fbe79SDavid van Moolenbroek #define NETIFAPI_IPADDR_DEF(type, m) const type * m 53*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_MPU_COMPATIBLE */ 54*5d5fbe79SDavid van Moolenbroek 55*5d5fbe79SDavid van Moolenbroek typedef void (*netifapi_void_fn)(struct netif *netif); 56*5d5fbe79SDavid van Moolenbroek typedef err_t (*netifapi_errt_fn)(struct netif *netif); 57*5d5fbe79SDavid van Moolenbroek 58*5d5fbe79SDavid van Moolenbroek struct netifapi_msg { 59*5d5fbe79SDavid van Moolenbroek struct tcpip_api_call_data call; 60*5d5fbe79SDavid van Moolenbroek struct netif *netif; 61*5d5fbe79SDavid van Moolenbroek union { 62*5d5fbe79SDavid van Moolenbroek struct { 63*5d5fbe79SDavid van Moolenbroek #if LWIP_IPV4 64*5d5fbe79SDavid van Moolenbroek NETIFAPI_IPADDR_DEF(ip4_addr_t, ipaddr); 65*5d5fbe79SDavid van Moolenbroek NETIFAPI_IPADDR_DEF(ip4_addr_t, netmask); 66*5d5fbe79SDavid van Moolenbroek NETIFAPI_IPADDR_DEF(ip4_addr_t, gw); 67*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_IPV4 */ 68*5d5fbe79SDavid van Moolenbroek void *state; 69*5d5fbe79SDavid van Moolenbroek netif_init_fn init; 70*5d5fbe79SDavid van Moolenbroek netif_input_fn input; 71*5d5fbe79SDavid van Moolenbroek } add; 72*5d5fbe79SDavid van Moolenbroek struct { 73*5d5fbe79SDavid van Moolenbroek netifapi_void_fn voidfunc; 74*5d5fbe79SDavid van Moolenbroek netifapi_errt_fn errtfunc; 75*5d5fbe79SDavid van Moolenbroek } common; 76*5d5fbe79SDavid van Moolenbroek struct { 77*5d5fbe79SDavid van Moolenbroek #if LWIP_MPU_COMPATIBLE 78*5d5fbe79SDavid van Moolenbroek char name[NETIF_NAMESIZE]; 79*5d5fbe79SDavid van Moolenbroek #else /* LWIP_MPU_COMPATIBLE */ 80*5d5fbe79SDavid van Moolenbroek char *name; 81*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_MPU_COMPATIBLE */ 82*5d5fbe79SDavid van Moolenbroek u8_t index; 83*5d5fbe79SDavid van Moolenbroek } ifs; 84*5d5fbe79SDavid van Moolenbroek } msg; 85*5d5fbe79SDavid van Moolenbroek }; 86*5d5fbe79SDavid van Moolenbroek 87*5d5fbe79SDavid van Moolenbroek 88*5d5fbe79SDavid van Moolenbroek /* API for application */ 89*5d5fbe79SDavid van Moolenbroek err_t netifapi_netif_add(struct netif *netif, 90*5d5fbe79SDavid van Moolenbroek #if LWIP_IPV4 91*5d5fbe79SDavid van Moolenbroek const ip4_addr_t *ipaddr, const ip4_addr_t *netmask, const ip4_addr_t *gw, 92*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_IPV4 */ 93*5d5fbe79SDavid van Moolenbroek void *state, netif_init_fn init, netif_input_fn input); 94*5d5fbe79SDavid van Moolenbroek 95*5d5fbe79SDavid van Moolenbroek #if LWIP_IPV4 96*5d5fbe79SDavid van Moolenbroek err_t netifapi_netif_set_addr(struct netif *netif, const ip4_addr_t *ipaddr, 97*5d5fbe79SDavid van Moolenbroek const ip4_addr_t *netmask, const ip4_addr_t *gw); 98*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_IPV4*/ 99*5d5fbe79SDavid van Moolenbroek 100*5d5fbe79SDavid van Moolenbroek err_t netifapi_netif_common(struct netif *netif, netifapi_void_fn voidfunc, 101*5d5fbe79SDavid van Moolenbroek netifapi_errt_fn errtfunc); 102*5d5fbe79SDavid van Moolenbroek 103*5d5fbe79SDavid van Moolenbroek /** @ingroup netifapi_netif */ 104*5d5fbe79SDavid van Moolenbroek err_t netifapi_netif_name_to_index(const char *name, u8_t *index); 105*5d5fbe79SDavid van Moolenbroek /** @ingroup netifapi_netif */ 106*5d5fbe79SDavid van Moolenbroek err_t netifapi_netif_index_to_name(u8_t index, char *name); 107*5d5fbe79SDavid van Moolenbroek 108*5d5fbe79SDavid van Moolenbroek /** @ingroup netifapi_netif */ 109*5d5fbe79SDavid van Moolenbroek #define netifapi_netif_remove(n) netifapi_netif_common(n, netif_remove, NULL) 110*5d5fbe79SDavid van Moolenbroek /** @ingroup netifapi_netif */ 111*5d5fbe79SDavid van Moolenbroek #define netifapi_netif_set_up(n) netifapi_netif_common(n, netif_set_up, NULL) 112*5d5fbe79SDavid van Moolenbroek /** @ingroup netifapi_netif */ 113*5d5fbe79SDavid van Moolenbroek #define netifapi_netif_set_down(n) netifapi_netif_common(n, netif_set_down, NULL) 114*5d5fbe79SDavid van Moolenbroek /** @ingroup netifapi_netif */ 115*5d5fbe79SDavid van Moolenbroek #define netifapi_netif_set_default(n) netifapi_netif_common(n, netif_set_default, NULL) 116*5d5fbe79SDavid van Moolenbroek /** @ingroup netifapi_netif */ 117*5d5fbe79SDavid van Moolenbroek #define netifapi_netif_set_link_up(n) netifapi_netif_common(n, netif_set_link_up, NULL) 118*5d5fbe79SDavid van Moolenbroek /** @ingroup netifapi_netif */ 119*5d5fbe79SDavid van Moolenbroek #define netifapi_netif_set_link_down(n) netifapi_netif_common(n, netif_set_link_down, NULL) 120*5d5fbe79SDavid van Moolenbroek 121*5d5fbe79SDavid van Moolenbroek /** 122*5d5fbe79SDavid van Moolenbroek * @defgroup netifapi_dhcp4 DHCPv4 123*5d5fbe79SDavid van Moolenbroek * @ingroup netifapi 124*5d5fbe79SDavid van Moolenbroek * To be called from non-TCPIP threads 125*5d5fbe79SDavid van Moolenbroek */ 126*5d5fbe79SDavid van Moolenbroek /** @ingroup netifapi_dhcp4 */ 127*5d5fbe79SDavid van Moolenbroek #define netifapi_dhcp_start(n) netifapi_netif_common(n, NULL, dhcp_start) 128*5d5fbe79SDavid van Moolenbroek /** @ingroup netifapi_dhcp4 */ 129*5d5fbe79SDavid van Moolenbroek #define netifapi_dhcp_stop(n) netifapi_netif_common(n, dhcp_stop, NULL) 130*5d5fbe79SDavid van Moolenbroek /** @ingroup netifapi_dhcp4 */ 131*5d5fbe79SDavid van Moolenbroek #define netifapi_dhcp_inform(n) netifapi_netif_common(n, dhcp_inform, NULL) 132*5d5fbe79SDavid van Moolenbroek /** @ingroup netifapi_dhcp4 */ 133*5d5fbe79SDavid van Moolenbroek #define netifapi_dhcp_renew(n) netifapi_netif_common(n, NULL, dhcp_renew) 134*5d5fbe79SDavid van Moolenbroek /** @ingroup netifapi_dhcp4 */ 135*5d5fbe79SDavid van Moolenbroek #define netifapi_dhcp_release(n) netifapi_netif_common(n, NULL, dhcp_release) 136*5d5fbe79SDavid van Moolenbroek 137*5d5fbe79SDavid van Moolenbroek /** 138*5d5fbe79SDavid van Moolenbroek * @defgroup netifapi_autoip AUTOIP 139*5d5fbe79SDavid van Moolenbroek * @ingroup netifapi 140*5d5fbe79SDavid van Moolenbroek * To be called from non-TCPIP threads 141*5d5fbe79SDavid van Moolenbroek */ 142*5d5fbe79SDavid van Moolenbroek /** @ingroup netifapi_autoip */ 143*5d5fbe79SDavid van Moolenbroek #define netifapi_autoip_start(n) netifapi_netif_common(n, NULL, autoip_start) 144*5d5fbe79SDavid van Moolenbroek /** @ingroup netifapi_autoip */ 145*5d5fbe79SDavid van Moolenbroek #define netifapi_autoip_stop(n) netifapi_netif_common(n, NULL, autoip_stop) 146*5d5fbe79SDavid van Moolenbroek 147*5d5fbe79SDavid van Moolenbroek #ifdef __cplusplus 148*5d5fbe79SDavid van Moolenbroek } 149*5d5fbe79SDavid van Moolenbroek #endif 150*5d5fbe79SDavid van Moolenbroek 151*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_NETIF_API */ 152*5d5fbe79SDavid van Moolenbroek 153*5d5fbe79SDavid van Moolenbroek #endif /* LWIP_HDR_NETIFAPI_H */ 154