Microchip® Advanced Software Framework

dev/src/api/tcpip.c File Reference

Sequential API Main thread module.

#include "lwip/opt.h"
#include "lwip/sys.h"
#include "lwip/memp.h"
#include "lwip/mem.h"
#include "lwip/pbuf.h"
#include "lwip/tcpip.h"
#include "lwip/init.h"
#include "lwip/ip.h"
#include "netif/etharp.h"
#include "netif/ppp/pppoe.h"

Macros

#define TCPIP_MSG_VAR_ALLOC(name)   API_VAR_ALLOC(struct tcpip_msg, MEMP_TCPIP_MSG_API, name)
 
#define TCPIP_MSG_VAR_DECLARE(name)   API_VAR_DECLARE(struct tcpip_msg, name)
 
#define TCPIP_MSG_VAR_FREE(name)   API_VAR_FREE(MEMP_TCPIP_MSG_API, name)
 
#define TCPIP_MSG_VAR_REF(name)   API_VAR_REF(name)
 

Functions

err_t mem_free_callback (void *m)
 A simple wrapper function that allows you to free heap memory from interrupt context. More...
 
err_t pbuf_free_callback (struct pbuf *p)
 A simple wrapper function that allows you to free a pbuf from interrupt context. More...
 
static void pbuf_free_int (void *p)
 Simple callback function used with tcpip_callback to free a pbuf (pbuf_free has a wrong signature for tcpip_callback) More...
 
err_t tcpip_callback_with_block (tcpip_callback_fn function, void *ctx, u8_t block)
 Call a specific function in the thread context of tcpip_thread for easy access synchronization. More...
 
void tcpip_callbackmsg_delete (struct tcpip_callback_msg *msg)
 Free a callback message allocated by tcpip_callbackmsg_new(). More...
 
struct tcpip_callback_msg * tcpip_callbackmsg_new (tcpip_callback_fn function, void *ctx)
 Allocate a structure for a static callback message and initialize it. More...
 
void tcpip_init (tcpip_init_done_fn initfunc, void *arg)
 Initialize this module: More...
 
err_t tcpip_input (struct pbuf *p, struct netif *inp)
 Pass a received packet to tcpip_thread for input processing. More...
 
static void tcpip_thread (void *arg)
 The main lwIP thread. More...
 
err_t tcpip_trycallback (struct tcpip_callback_msg *msg)
 Try to post a callback-message to the tcpip_thread mbox This is intended to be used to send "static" messages from interrupt context. More...
 

Variables

static sys_mbox_t mbox
 
static tcpip_init_done_fn tcpip_init_done
 
static void * tcpip_init_done_arg
 

#define TCPIP_MSG_VAR_ALLOC (   name)    API_VAR_ALLOC(struct tcpip_msg, MEMP_TCPIP_MSG_API, name)
#define TCPIP_MSG_VAR_DECLARE (   name)    API_VAR_DECLARE(struct tcpip_msg, name)
#define TCPIP_MSG_VAR_FREE (   name)    API_VAR_FREE(MEMP_TCPIP_MSG_API, name)
#define TCPIP_MSG_VAR_REF (   name)    API_VAR_REF(name)

err_t mem_free_callback ( void *  m)

A simple wrapper function that allows you to free heap memory from interrupt context.

Parameters
mthe heap memory to free
Returns
ERR_OK if callback could be enqueued, an err_t if not

References mem_free(), and tcpip_callback_with_block().

err_t pbuf_free_callback ( struct pbuf p)

A simple wrapper function that allows you to free a pbuf from interrupt context.

Parameters
pThe pbuf (chain) to be dereferenced.
Returns
ERR_OK if callback could be enqueued, an err_t if not

References pbuf_free_int(), and tcpip_callback_with_block().

static void pbuf_free_int ( void *  p)
static

Simple callback function used with tcpip_callback to free a pbuf (pbuf_free has a wrong signature for tcpip_callback)

Parameters
pThe pbuf (chain) to be dereferenced.

References pbuf_free().

Referenced by pbuf_free_callback().

err_t tcpip_callback_with_block ( tcpip_callback_fn  function,
void *  ctx,
u8_t  block 
)

Call a specific function in the thread context of tcpip_thread for easy access synchronization.

A function called in that way may access lwIP core code without fearing concurrent access.

Parameters
fthe function to call
ctxparameter passed to f
block1 to block until the request is posted, 0 to non-blocking mode
Returns
ERR_OK if the function was called, another err_t if not

References tcpip_msg::cb, tcpip_msg::ctx, ERR_MEM, ERR_OK, ERR_VAL, memp_free(), memp_malloc(), tcpip_msg::msg, NULL, sys_mbox_post(), sys_mbox_trypost(), sys_mbox_valid(), TCPIP_MSG_CALLBACK, and tcpip_msg::type.

void tcpip_callbackmsg_delete ( struct tcpip_callback_msg *  msg)

Free a callback message allocated by tcpip_callbackmsg_new().

Parameters
msgthe message to free

References memp_free().

struct tcpip_callback_msg* tcpip_callbackmsg_new ( tcpip_callback_fn  function,
void *  ctx 
)

Allocate a structure for a static callback message and initialize it.

This is intended to be used to send "static" messages from interrupt context.

Parameters
functionthe function to call
ctxparameter passed to function
Returns
a struct pointer to pass to tcpip_trycallback().

References tcpip_msg::cb, tcpip_msg::ctx, memp_malloc(), tcpip_msg::msg, NULL, TCPIP_MSG_CALLBACK_STATIC, and tcpip_msg::type.

void tcpip_init ( tcpip_init_done_fn  initfunc,
void *  arg 
)

Initialize this module:

  • initialize all sub modules
  • start the tcpip_thread
Parameters
initfunca function to call when tcpip_thread is running and finished initializing
argargument to pass to initfunc

References ERR_OK, LWIP_ASSERT, lwip_init(), NULL, sys_mbox_new(), sys_mutex_new(), sys_thread_new(), tcpip_init_done, tcpip_init_done_arg, TCPIP_MBOX_SIZE, tcpip_thread(), TCPIP_THREAD_NAME, TCPIP_THREAD_PRIO, and TCPIP_THREAD_STACKSIZE.

err_t tcpip_input ( struct pbuf p,
struct netif inp 
)

Pass a received packet to tcpip_thread for input processing.

Parameters
pthe received packet, p->payload pointing to the Ethernet header or to an IP header (if inp doesn't have NETIF_FLAG_ETHARP or NETIF_FLAG_ETHERNET flags)
inpthe network interface on which the packet was received

References ERR_MEM, ERR_OK, ERR_VAL, netif::flags, tcpip_msg::inp, ip_input(), LOCK_TCPIP_CORE, LWIP_DEBUGF, memp_free(), memp_malloc(), tcpip_msg::msg, NETIF_FLAG_ETHARP, NETIF_FLAG_ETHERNET, NULL, tcpip_msg::p, sys_mbox_trypost(), sys_mbox_valid(), TCPIP_DEBUG, TCPIP_MSG_INPKT, tcpip_msg::type, and UNLOCK_TCPIP_CORE.

static void tcpip_thread ( void *  arg)
static

The main lwIP thread.

This thread has exclusive access to lwIP core functions (unless access to them is not locked). Other threads communicate with this thread using message boxes.

It also starts all the timers to make sure they are running in the right thread context.

Parameters
argunused argument

References tcpip_msg::cb, tcpip_msg::function, tcpip_msg::inp, ip_input(), LOCK_TCPIP_CORE, LWIP_ASSERT, LWIP_DEBUGF, LWIP_TCPIP_THREAD_ALIVE, LWIP_UNUSED_ARG, memp_free(), tcpip_msg::msg, NETIF_FLAG_ETHARP, NETIF_FLAG_ETHERNET, NULL, sys_timeout(), sys_timeouts_mbox_fetch(), sys_untimeout(), TCPIP_DEBUG, tcpip_init_done, tcpip_init_done_arg, TCPIP_MSG_CALLBACK, TCPIP_MSG_CALLBACK_STATIC, TCPIP_MSG_INPKT, tcpip_msg::type, and UNLOCK_TCPIP_CORE.

Referenced by tcpip_init().

err_t tcpip_trycallback ( struct tcpip_callback_msg *  msg)

Try to post a callback-message to the tcpip_thread mbox This is intended to be used to send "static" messages from interrupt context.

Parameters
msgpointer to the message to post
Returns
sys_mbox_trypost() return code

References ERR_VAL, sys_mbox_trypost(), and sys_mbox_valid().

sys_mbox_t mbox
static
tcpip_init_done_fn tcpip_init_done
static

Referenced by tcpip_init(), and tcpip_thread().

void* tcpip_init_done_arg
static

Referenced by tcpip_init(), and tcpip_thread().