Mistake on this page?
Report an issue in GitHub or email us
tcpip_priv.h
Go to the documentation of this file.
1 /**
2  * @file
3  * TCPIP API internal implementations (do not use in application code)
4  */
5 
6 /*
7  * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without modification,
11  * are permitted provided that the following conditions are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright notice,
14  * this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright notice,
16  * this list of conditions and the following disclaimer in the documentation
17  * and/or other materials provided with the distribution.
18  * 3. The name of the author may not be used to endorse or promote products
19  * derived from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
22  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
23  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
24  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
29  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
30  * OF SUCH DAMAGE.
31  *
32  * This file is part of the lwIP TCP/IP stack.
33  *
34  * Author: Adam Dunkels <adam@sics.se>
35  *
36  */
37 #ifndef LWIP_HDR_TCPIP_PRIV_H
38 #define LWIP_HDR_TCPIP_PRIV_H
39 
40 #include "lwip/opt.h"
41 
42 #if !NO_SYS /* don't build if not configured for use in lwipopts.h */
43 
44 #include "lwip/tcpip.h"
45 #include "lwip/sys.h"
46 #include "lwip/timeouts.h"
47 
48 #ifdef __cplusplus
49 extern "C" {
50 #endif
51 
52 struct pbuf;
53 struct netif;
54 
55 #if LWIP_MPU_COMPATIBLE
56 #define API_VAR_REF(name) (*(name))
57 #define API_VAR_DECLARE(type, name) type * name
58 #define API_VAR_ALLOC_EXT(type, pool, name, errorblock) do { \
59  name = (type *)memp_malloc(pool); \
60  if (name == NULL) { \
61  errorblock; \
62  } \
63  } while(0)
64 #define API_VAR_ALLOC(type, pool, name, errorval) API_VAR_ALLOC_EXT(type, pool, name, return errorval)
65 #define API_VAR_ALLOC_POOL(type, pool, name, errorval) do { \
66  name = (type *)LWIP_MEMPOOL_ALLOC(pool); \
67  if (name == NULL) { \
68  return errorval; \
69  } \
70  } while(0)
71 #define API_VAR_FREE(pool, name) memp_free(pool, name)
72 #define API_VAR_FREE_POOL(pool, name) LWIP_MEMPOOL_FREE(pool, name)
73 #define API_EXPR_REF(expr) (&(expr))
74 #if LWIP_NETCONN_SEM_PER_THREAD
75 #define API_EXPR_REF_SEM(expr) (expr)
76 #else
77 #define API_EXPR_REF_SEM(expr) API_EXPR_REF(expr)
78 #endif
79 #define API_EXPR_DEREF(expr) expr
80 #define API_MSG_M_DEF(m) m
81 #define API_MSG_M_DEF_C(t, m) t m
82 #else /* LWIP_MPU_COMPATIBLE */
83 #define API_VAR_REF(name) name
84 #define API_VAR_DECLARE(type, name) type name
85 #define API_VAR_ALLOC_EXT(type, pool, name, errorblock)
86 #define API_VAR_ALLOC(type, pool, name, errorval)
87 #define API_VAR_ALLOC_POOL(type, pool, name, errorval)
88 #define API_VAR_FREE(pool, name)
89 #define API_VAR_FREE_POOL(pool, name)
90 #define API_EXPR_REF(expr) expr
91 #define API_EXPR_REF_SEM(expr) API_EXPR_REF(expr)
92 #define API_EXPR_DEREF(expr) (*(expr))
93 #define API_MSG_M_DEF(m) *m
94 #define API_MSG_M_DEF_C(t, m) const t * m
95 #endif /* LWIP_MPU_COMPATIBLE */
96 
97 err_t tcpip_send_msg_wait_sem(tcpip_callback_fn fn, void *apimsg, sys_sem_t* sem);
98 
100 {
101 #if !LWIP_TCPIP_CORE_LOCKING
102  err_t err;
103 #if !LWIP_NETCONN_SEM_PER_THREAD
104  sys_sem_t sem;
105 #endif /* LWIP_NETCONN_SEM_PER_THREAD */
106 #else /* !LWIP_TCPIP_CORE_LOCKING */
107  u8_t dummy; /* avoid empty struct :-( */
108 #endif /* !LWIP_TCPIP_CORE_LOCKING */
109 };
110 typedef err_t (*tcpip_api_call_fn)(struct tcpip_api_call_data* call);
111 err_t tcpip_api_call(tcpip_api_call_fn fn, struct tcpip_api_call_data *call);
112 
113 enum tcpip_msg_type {
114 #if !LWIP_TCPIP_CORE_LOCKING
115  TCPIP_MSG_API,
116  TCPIP_MSG_API_CALL,
117 #endif /* !LWIP_TCPIP_CORE_LOCKING */
118 #if !LWIP_TCPIP_CORE_LOCKING_INPUT
119  TCPIP_MSG_INPKT,
120 #endif /* !LWIP_TCPIP_CORE_LOCKING_INPUT */
121 #if LWIP_TCPIP_TIMEOUT && LWIP_TIMERS
122  TCPIP_MSG_TIMEOUT,
123  TCPIP_MSG_UNTIMEOUT,
124 #endif /* LWIP_TCPIP_TIMEOUT && LWIP_TIMERS */
125  TCPIP_MSG_CALLBACK,
126  TCPIP_MSG_CALLBACK_STATIC
127 };
128 
129 struct tcpip_msg {
130  enum tcpip_msg_type type;
131  union {
132 #if !LWIP_TCPIP_CORE_LOCKING
133  struct {
134  tcpip_callback_fn function;
135  void* msg;
136  } api_msg;
137  struct {
138  tcpip_api_call_fn function;
139  struct tcpip_api_call_data *arg;
140  sys_sem_t *sem;
141  } api_call;
142 #endif /* LWIP_TCPIP_CORE_LOCKING */
143 #if !LWIP_TCPIP_CORE_LOCKING_INPUT
144  struct {
145  struct pbuf *p;
146  struct netif *netif;
147  netif_input_fn input_fn;
148  } inp;
149 #endif /* !LWIP_TCPIP_CORE_LOCKING_INPUT */
150  struct {
151  tcpip_callback_fn function;
152  void *ctx;
153  } cb;
154 #if LWIP_TCPIP_TIMEOUT && LWIP_TIMERS
155  struct {
156  u32_t msecs;
157  sys_timeout_handler h;
158  void *arg;
159  } tmo;
160 #endif /* LWIP_TCPIP_TIMEOUT && LWIP_TIMERS */
161  } msg;
162 };
163 
164 #ifdef __cplusplus
165 }
166 #endif
167 
168 #endif /* !NO_SYS */
169 
170 #endif /* LWIP_HDR_TCPIP_PRIV_H */
err_t(* netif_input_fn)(struct pbuf *p, struct netif *inp)
Function prototype for netif->input functions.
Definition: netif.h:179
Functions to sync with TCPIP thread.
void(* tcpip_callback_fn)(void *ctx)
Function prototype for functions passed to tcpip_callback()
Definition: tcpip.h:72
OS abstraction layer.
lwIP Options Configuration
Timer implementations.
Main packet buffer struct.
Generic data structure used for all lwIP network interfaces.
s8_t err_t
Define LWIP_ERR_T in cc.h if you want to use a different type for your platform (must be signed)...
Definition: err.h:96
Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.