summaryrefslogtreecommitdiffstats
path: root/stacks/lwip_stack/lwip_src/socket/stackx_prot_com.h
diff options
context:
space:
mode:
Diffstat (limited to 'stacks/lwip_stack/lwip_src/socket/stackx_prot_com.h')
-rw-r--r--stacks/lwip_stack/lwip_src/socket/stackx_prot_com.h159
1 files changed, 159 insertions, 0 deletions
diff --git a/stacks/lwip_stack/lwip_src/socket/stackx_prot_com.h b/stacks/lwip_stack/lwip_src/socket/stackx_prot_com.h
new file mode 100644
index 0000000..4d542fd
--- /dev/null
+++ b/stacks/lwip_stack/lwip_src/socket/stackx_prot_com.h
@@ -0,0 +1,159 @@
+/*
+*
+* Copyright (c) 2018 Huawei Technologies Co.,Ltd.
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at:
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef STACKX_PROT_COM_H
+#define STACKX_PROT_COM_H
+#include "stackx_socket.h"
+#include "stackx_ip_addr.h"
+#include "stackx_res_mgr.h"
+#include "stackx_pbuf.h"
+#include "stackx_macro.h"
+
+#ifdef __cplusplus
+/* *INDENT-OFF* */
+extern "C" {
+/* *INDENT-ON* */
+#endif
+
+#define MAX_RECV_FREE_BUF 32
+#define MAX_RECV_FREE_LEN (SPL_FRAME_MTU - SPL_IP_HLEN)
+#define USEC_TO_SEC 1000000
+
+#ifndef NSTACK_SOCKOPT_CHECK
+#define NSTACK_SOCKOPT_CHECK
+/* setsockopt level type*/
+enum
+{
+ NSTACK_SOCKOPT = 0xff02
+};
+/*setsockopt optname type*/
+enum
+{
+ NSTACK_SEM_SLEEP = 0X001
+};
+#endif
+
+#define sbr_malloc_tx_pbuf(len, offset) sbr_malloc_pbuf(sbr_get_tx_pool(), len, TX_MBUF_MAX_LEN, offset)
+
+static inline int sbr_spl_err_to_errno(i32 err)
+{
+ static int table[] = {
+ 0, /* ERR_OK 0 No error, everything OK. */
+ ENOMEM, /* ERR_MEM -1 Out of memory error. */
+ ENOBUFS, /* ERR_BUF -2 Buffer error. */
+ ETIMEDOUT, /* ERR_TIMEOUT -3 Timeout */
+ EHOSTUNREACH, /* ERR_RTE -4 Routing problem. */
+ EINPROGRESS, /* ERR_INPROGRESS -5 Operation in progress */
+ EINVAL, /* ERR_VAL -6 Illegal value. */
+ EWOULDBLOCK, /* ERR_WOULDBLOCK -7 Operation would block. */
+ EADDRINUSE, /* ERR_USE -8 Address in use. */
+ EISCONN, /* ERR_ISCONN -9 Already connected. */
+ ECONNABORTED, /* ERR_ABRT -10 Connection aborted. */
+ ECONNRESET, /* ERR_RST -11 Connection reset. */
+ ENOTCONN, /* ERR_CLSD -12 Connection closed. */
+ ENOTCONN, /* ERR_CONN -13 Not connected. */
+ EIO, /* ERR_ARG -14 Illegal argument. */
+ -1, /* ERR_IF -15 Low-level netif error */
+ EALREADY, /*ERR_ALREADY -16 previous connect attemt has not yet completed */
+ EPROTOTYPE, /*ERR_PROTOTYPE -17 prototype error or some other generic error.
+ the operation is not allowed on current socket */
+ EINVAL, /* ERR_CALLBACK -18 callback error */
+ EADDRNOTAVAIL, /* ERR_CANTASSIGNADDR -19 Cannot assign requested address */
+ EIO, /* ERR_CONTAINER_ID -20 Illegal container id */
+ ENOTSOCK, /*ERR_NOTSOCK -21 not a socket */
+ -1, /* ERR_CLOSE_WAIT -22 closed in established state */
+ EPROTONOSUPPORT, /* ERR_EPROTONOSUPPORT -23 Protocol not supported */
+ ECONNABORTED /* ERR_FAULTRECOVERY -24 SPL just recovered from a fatal fault */
+ };
+
+ if (((-(err)) >= 0)
+ && (-(err)) < (i32) (sizeof(table) / sizeof(table[0])))
+ {
+ return table[-(err)];
+ }
+ else
+ {
+ return EIO;
+ }
+}
+
+int sbr_getsockopt_sol_socket(sbr_socket_t * sk, int optname, void *optval,
+ socklen_t optlen);
+int sbr_getsockopt_ipproto_ip(int optname, void *optval, socklen_t optlen);
+int sbr_setsockopt_sol_socket(sbr_socket_t * sk, int optname,
+ const void *optval, socklen_t optlen,
+ spl_netconn_type_t type);
+int sbr_setsockopt_ipproto_ip(int optname, const void *optval,
+ socklen_t optlen, spl_netconn_type_t type);
+int sbr_dequeue_buf(sbr_socket_t * sk, void **buf, i32 timeout);
+int sbr_com_peak(sbr_socket_t * sk);
+int sbr_com_try_lock_recv(sbr_socket_t * sk);
+/*****************************************************************************
+* Prototype : sbr_com_lock_recv
+* Description : lock recv
+* Input : sbr_socket_t * sk
+* Output : None
+* Return Value : void
+* Calls :
+* Called By :
+*
+*****************************************************************************/
+static inline void sbr_com_lock_recv(sbr_socket_t * sk)
+{
+#ifdef SBR_USE_LOCK
+ while (!common_spinlock_try_lock_with_pid
+ (&sbr_get_fd_share(sk)->recv_lock, get_sys_pid()))
+ {
+ sys_sleep_ns(0, 0);
+ }
+#endif
+
+}
+
+/*****************************************************************************
+* Prototype : sbr_com_unlock_recv
+* Description : unlock recv
+* Input : sbr_socket_t * sk
+* Output : None
+* Return Value : void
+* Calls :
+* Called By :
+*
+*****************************************************************************/
+static inline void sbr_com_unlock_recv(sbr_socket_t * sk)
+{
+#ifdef SBR_USE_LOCK
+ common_spinlock_unlock(&sbr_get_fd_share(sk)->recv_lock);
+#endif
+}
+
+void sbr_com_lock_common(sbr_socket_t * sk);
+void sbr_com_unlock_common(sbr_socket_t * sk);
+void sbr_com_free_recv_buf(sbr_socket_t * sk, struct spl_pbuf *p);
+int sbr_get_sockaddr_and_len(u16 port, spl_ip_addr_t * ip_addr,
+ struct sockaddr *addr, socklen_t * addrlen);
+void sbr_com_set_app_info(sbr_socket_t * sk, void *appinfo);
+
+void sbr_com_fork_parent(sbr_socket_t * sk, pid_t p);
+void sbr_com_fork_child(sbr_socket_t * sk, pid_t p, pid_t c);
+
+#ifdef __cplusplus
+/* *INDENT-OFF* */
+}
+/* *INDENT-ON* */
+#endif
+
+#endif