From 852993029de80f8598b54b73767cd73156d58f05 Mon Sep 17 00:00:00 2001 From: Joel Cunningham Date: Thu, 9 Feb 2017 22:04:30 -0600 Subject: [PATCH] Add sockets_priv.h header This commit introduces a sockets_priv.h header for socket API internal implementations intended to be used by sockets API C files, but not applications This commit moves struct lwip_setgetsockopt_data to the private header because this is not part of the public sockets API, but needs to be shared between sockets.c and memp.c This header lays ground work for sharing other internal sockets types /macros between API files (sockets.c and if_api.c) --- src/api/sockets.c | 1 + src/core/memp.c | 1 + src/include/lwip/priv/sockets_priv.h | 89 ++++++++++++++++++++++++++++ src/include/lwip/sockets.h | 32 ---------- 4 files changed, 91 insertions(+), 32 deletions(-) create mode 100644 src/include/lwip/priv/sockets_priv.h diff --git a/src/api/sockets.c b/src/api/sockets.c index a25e810d..25da2280 100644 --- a/src/api/sockets.c +++ b/src/api/sockets.c @@ -49,6 +49,7 @@ #if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ #include "lwip/sockets.h" +#include "lwip/priv/sockets_priv.h" #include "lwip/api.h" #include "lwip/sys.h" #include "lwip/igmp.h" diff --git a/src/core/memp.c b/src/core/memp.c index 31624492..b589d27f 100644 --- a/src/core/memp.c +++ b/src/core/memp.c @@ -63,6 +63,7 @@ #include "lwip/priv/tcpip_priv.h" #include "lwip/priv/api_msg.h" #include "lwip/sockets.h" +#include "lwip/priv/sockets_priv.h" #include "lwip/netifapi.h" #include "lwip/etharp.h" #include "lwip/igmp.h" diff --git a/src/include/lwip/priv/sockets_priv.h b/src/include/lwip/priv/sockets_priv.h new file mode 100644 index 00000000..d45030a5 --- /dev/null +++ b/src/include/lwip/priv/sockets_priv.h @@ -0,0 +1,89 @@ +/** + * @file + * Sockets API internal implementations (do not use in application code) + */ + +/* + * Copyright (c) 2017 Joel Cunningham, Garmin International, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Joel Cunningham + * + */ +#ifndef LWIP_HDR_SOCKETS_PRIV_H +#define LWIP_HDR_SOCKETS_PRIV_H + +#include "lwip/opt.h" + +#if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */ + +#include "lwip/err.h" +#include "lwip/sockets.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if !LWIP_TCPIP_CORE_LOCKING +/** Maximum optlen used by setsockopt/getsockopt */ +#define LWIP_SETGETSOCKOPT_MAXOPTLEN 16 + +/** This struct is used to pass data to the set/getsockopt_internal + * functions running in tcpip_thread context (only a void* is allowed) */ +struct lwip_setgetsockopt_data { + /** socket index for which to change options */ + int s; + /** level of the option to process */ + int level; + /** name of the option to process */ + int optname; + /** set: value to set the option to + * get: value of the option is stored here */ +#if LWIP_MPU_COMPATIBLE + u8_t optval[LWIP_SETGETSOCKOPT_MAXOPTLEN]; +#else + union { + void *p; + const void *pc; + } optval; +#endif + /** size of *optval */ + socklen_t optlen; + /** if an error occurs, it is temporarily stored here */ + err_t err; + /** semaphore to wake up the calling task */ + void* completed_sem; +}; +#endif /* !LWIP_TCPIP_CORE_LOCKING */ + +#ifdef __cplusplus +} +#endif + +#endif /* LWIP_SOCKET */ + +#endif /* LWIP_HDR_SOCKETS_PRIV_H */ \ No newline at end of file diff --git a/src/include/lwip/sockets.h b/src/include/lwip/sockets.h index 2522056d..e829d989 100644 --- a/src/include/lwip/sockets.h +++ b/src/include/lwip/sockets.h @@ -110,38 +110,6 @@ typedef u32_t socklen_t; struct lwip_sock; -#if !LWIP_TCPIP_CORE_LOCKING -/** Maximum optlen used by setsockopt/getsockopt */ -#define LWIP_SETGETSOCKOPT_MAXOPTLEN 16 - -/** This struct is used to pass data to the set/getsockopt_internal - * functions running in tcpip_thread context (only a void* is allowed) */ -struct lwip_setgetsockopt_data { - /** socket index for which to change options */ - int s; - /** level of the option to process */ - int level; - /** name of the option to process */ - int optname; - /** set: value to set the option to - * get: value of the option is stored here */ -#if LWIP_MPU_COMPATIBLE - u8_t optval[LWIP_SETGETSOCKOPT_MAXOPTLEN]; -#else - union { - void *p; - const void *pc; - } optval; -#endif - /** size of *optval */ - socklen_t optlen; - /** if an error occurs, it is temporarily stored here */ - err_t err; - /** semaphore to wake up the calling task */ - void* completed_sem; -}; -#endif /* !LWIP_TCPIP_CORE_LOCKING */ - #if !defined(iovec) struct iovec { void *iov_base;