510 lines
14 KiB
C
510 lines
14 KiB
C
/****************************************************************************
|
|
* drivers/modem/alt1250/altcom_cmd_sock.h
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership. The
|
|
* ASF licenses this file to you 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 __DRIVERS_MODEM_ALT1250_ALTCOM_CMD_SOCK_H
|
|
#define __DRIVERS_MODEM_ALT1250_ALTCOM_CMD_SOCK_H
|
|
|
|
/****************************************************************************
|
|
* Included Files
|
|
****************************************************************************/
|
|
|
|
#include <nuttx/config.h>
|
|
#include <nuttx/compiler.h>
|
|
#include <nuttx/modem/alt1250.h>
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
/****************************************************************************
|
|
* Pre-processor Definitions
|
|
****************************************************************************/
|
|
|
|
#define APICMD_NAME_LENGTH (256)
|
|
#define APICMD_SERVNAME_LENGTH (32)
|
|
#define APICMD_H_ADDR_LENGTH (16)
|
|
#define APICMD_OPTVAL_LENGTH (16)
|
|
#define APICMD_DATA_LENGTH (1500)
|
|
#define APICMD_AI_COUNT (2)
|
|
|
|
#define APICMD_SELECT_NONBLOCK (0)
|
|
#define APICMD_SELECT_BLOCK (1)
|
|
#define APICMD_SELECT_BLOCKCANCEL (2)
|
|
#define APICMD_SELECT_READ_BIT (1 << 0)
|
|
#define APICMD_SELECT_WRITE_BIT (1 << 1)
|
|
#define APICMD_SELECT_EXCEPT_BIT (1 << 2)
|
|
|
|
/* Using for socket: Address family
|
|
* Referenced from socket.h of lwIP-v2.02
|
|
*/
|
|
|
|
#define ALTCOM_AF_UNSPEC 0 /* Refer to AF_UNSPEC on lwIP */
|
|
#define ALTCOM_AF_INET 2 /* Refer to AF_INET on lwIP */
|
|
#define ALTCOM_AF_INET6 10 /* Refer to AF_INET6 on lwIP */
|
|
#define ALTCOM_PF_INET ALTCOM_AF_INET /* Refer to PF_INET on lwIP */
|
|
#define ALTCOM_PF_INET6 ALTCOM_AF_INET6 /* Refer to PF_INET6 on lwIP */
|
|
#define ALTCOM_PF_UNSPEC ALTCOM_AF_UNSPEC /* Refer to PF_UNSPEC on lwIP */
|
|
|
|
/* Using for socket: Socket protocol type
|
|
* Referenced from socket.h of lwIP-v2.02
|
|
*/
|
|
|
|
#define ALTCOM_SOCK_STREAM 1 /* Refer to SOCK_STREAM on lwIP */
|
|
#define ALTCOM_SOCK_DGRAM 2 /* Refer to SOCK_DGRAM on lwIP */
|
|
#define ALTCOM_SOCK_RAW 3 /* Refer to SOCK_RAW on lwIP */
|
|
#define ALTCOM_SOCK_DGRAM_DTLS 130 /* Refer to SOCK_DGRAM_DTLS on lwIP */
|
|
|
|
/* Using for socket: Protocol
|
|
* Referenced from socket.h of lwIP-v2.02
|
|
*/
|
|
|
|
#define ALTCOM_IPPROTO_IP 0 /* Refer to IPPROTO_IP on lwIP */
|
|
#define ALTCOM_IPPROTO_ICMP 1 /* Refer to IPPROTO_ICMP on lwIP */
|
|
#define ALTCOM_IPPROTO_TCP 6 /* Refer to IPPROTO_TCP on lwIP */
|
|
#define ALTCOM_IPPROTO_UDP 17 /* Refer to IPPROTO_UDP on lwIP */
|
|
#define ALTCOM_IPPROTO_IPV6 41 /* Refer to IPPROTO_IPV6 on lwIP */
|
|
#define ALTCOM_IPPROTO_ICMPV6 58 /* Refer to IPPROTO_ICMPV6 on lwIP */
|
|
#define ALTCOM_IPPROTO_UDPLITE 136 /* Refer to IPPROTO_UDPLITE on lwIP */
|
|
#define ALTCOM_IPPROTO_RAW 255 /* Refer to IPPROTO_RAW on lwIP */
|
|
|
|
/* Using for recvfrom/sendto: Flags
|
|
* Referenced from socket.h of lwIP-v2.02
|
|
*/
|
|
|
|
#define ALTCOM_MSG_PEEK 0x01 /* Refer to MSG_PEEK on lwIP */
|
|
#define ALTCOM_MSG_WAITALL 0x02 /* Refer to MSG_WAITALL on lwIP */
|
|
#define ALTCOM_MSG_OOB 0x04 /* Refer to MSG_OOB on lwIP */
|
|
#define ALTCOM_MSG_DONTWAIT 0x08 /* Refer to MSG_DONTWAIT on lwIP */
|
|
#define ALTCOM_MSG_MORE 0x10 /* Refer to MSG_MORE on lwIP */
|
|
|
|
/* Using for setsockopt/getsockopt: Level
|
|
* Referenced from socket.h of lwIP-v2.02
|
|
*/
|
|
|
|
#define ALTCOM_SOL_SOCKET 0xfff /* Refer to SOL_SOCKET on lwIP */
|
|
|
|
/* Using for setsockopt/getsockopt: Option flags per-socket
|
|
* Referenced from socket.h of lwIP-v2.02
|
|
*/
|
|
|
|
#define ALTCOM_SO_REUSEADDR 0x0004 /* Refer to SO_REUSEADDR on lwIP */
|
|
#define ALTCOM_SO_KEEPALIVE 0x0008 /* Refer to SO_KEEPALIVE on lwIP */
|
|
#define ALTCOM_SO_BROADCAST 0x0020 /* Refer to SO_BROADCAST on lwIP */
|
|
|
|
/* Using for setsockopt/getsockopt:
|
|
* Additional options, not kept in so_options
|
|
* Referenced from socket.h of lwIP-v2.02
|
|
*/
|
|
|
|
#define ALTCOM_SO_ACCEPTCONN 0x0002 /* Refer to SO_ACCEPTCONN on lwIP */
|
|
#define ALTCOM_SO_LINGER 0x0080 /* Refer to SO_LINGER on lwIP */
|
|
#define ALTCOM_SO_RCVBUF 0x1002 /* Refer to SO_RCVBUF on lwIP */
|
|
#define ALTCOM_SO_SNDTIMEO 0x1005 /* Refer to SO_SNDTIMEO on lwIP */
|
|
#define ALTCOM_SO_RCVTIMEO 0x1006 /* Refer to SO_RCVTIMEO on lwIP */
|
|
#define ALTCOM_SO_ERROR 0x1007 /* Refer to SO_ERROR on lwIP */
|
|
#define ALTCOM_SO_TYPE 0x1008 /* Refer to SO_TYPE on lwIP */
|
|
#define ALTCOM_SO_NO_CHECK 0x100a /* Refer to SO_NO_CHECK on lwIP ss*/
|
|
|
|
/* Options for level IPPROTO_IP
|
|
* Referenced from socket.h of lwIP-v2.02
|
|
*/
|
|
|
|
#define ALTCOM_IP_TOS 1 /* Refer to IP_TOS on lwIP */
|
|
#define ALTCOM_IP_TTL 2 /* Refer to IP_TTL on lwIP */
|
|
|
|
/* Options and types related to multicast membership
|
|
* Referenced from socket.h of lwIP-v2.02
|
|
*/
|
|
|
|
#define ALTCOM_IP_ADD_MEMBERSHIP 3 /* Refer to IP_ADD_MEMBERSHIP on lwIP */
|
|
#define ALTCOM_IP_DROP_MEMBERSHIP 4 /* Refer to IP_DROP_MEMBERSHIP on lwIP */
|
|
|
|
/* Options and types for UDP multicast traffic handling
|
|
* Referenced from socket.h of lwIP-v2.02
|
|
*/
|
|
|
|
#define ALTCOM_IP_MULTICAST_TTL 5 /* Refer to IP_MULTICAST_TTL on lwIP */
|
|
#define ALTCOM_IP_MULTICAST_IF 6 /* Refer to IP_MULTICAST_IF on lwIP */
|
|
#define ALTCOM_IP_MULTICAST_LOOP 7 /* Refer to IP_MULTICAST_LOOP on lwIP */
|
|
|
|
/* Options for level ALTCOM_IPPROTO_TCP
|
|
* Referenced from socket.h of lwIP-v2.02
|
|
*/
|
|
|
|
#define ALTCOM_TCP_NODELAY 0x01 /* Refer to TCP_NODELAY on lwIP */
|
|
#define ALTCOM_TCP_KEEPALIVE 0x02 /* Refer to TCP_KEEPALIVE on lwIP */
|
|
#define ALTCOM_TCP_KEEPIDLE 0x03 /* Refer to TCP_KEEPIDLE on lwIP */
|
|
#define ALTCOM_TCP_KEEPINTVL 0x04 /* Refer to TCP_KEEPINTVL on lwIP */
|
|
#define ALTCOM_TCP_KEEPCNT 0x05 /* Refer to TCP_KEEPCNT on lwIP */
|
|
|
|
/* Options for level ALTCOM_IPPROTO_IPV6
|
|
* Referenced from socket.h of lwIP-v2.02
|
|
*/
|
|
|
|
#define ALTCOM_IPV6_V6ONLY 27 /* Refer to IPV6_V6ONLY on lwIP */
|
|
|
|
/****************************************************************************
|
|
* Public Types
|
|
****************************************************************************/
|
|
|
|
typedef uint8_t altcom_sa_family_t;
|
|
typedef uint32_t altcom_socklen_t;
|
|
typedef uint16_t altcom_in_port_t;
|
|
|
|
typedef uint32_t altcom_in_addr_t;
|
|
|
|
struct altcom_in_addr
|
|
{
|
|
altcom_in_addr_t s_addr;
|
|
};
|
|
|
|
struct altcom_in6_addr
|
|
{
|
|
union
|
|
{
|
|
uint32_t u32_addr[4];
|
|
uint16_t u16_addr[8];
|
|
uint8_t u8_addr[16];
|
|
} un;
|
|
#define altcom_s6_addr un.u8_addr
|
|
};
|
|
|
|
struct altcom_sockaddr_storage
|
|
{
|
|
uint8_t s2_len;
|
|
altcom_sa_family_t ss_family;
|
|
char s2_data1[2];
|
|
uint32_t s2_data2[3];
|
|
uint32_t s2_data3[3];
|
|
};
|
|
|
|
struct altcom_sockaddr_in
|
|
{
|
|
uint8_t sin_len;
|
|
altcom_sa_family_t sin_family;
|
|
altcom_in_port_t sin_port;
|
|
struct altcom_in_addr sin_addr;
|
|
#define ALTCOM_SIN_ZERO_LEN 8
|
|
char sin_zero[ALTCOM_SIN_ZERO_LEN];
|
|
};
|
|
|
|
struct altcom_sockaddr_in6
|
|
{
|
|
uint8_t sin6_len;
|
|
altcom_sa_family_t sin6_family;
|
|
altcom_in_port_t sin6_port;
|
|
uint32_t sin6_flowinfo;
|
|
struct altcom_in6_addr sin6_addr;
|
|
uint32_t sin6_scope_id;
|
|
};
|
|
|
|
struct altcom_ip_mreq
|
|
{
|
|
struct altcom_in_addr imr_multiaddr;
|
|
struct altcom_in_addr imr_interface;
|
|
};
|
|
|
|
struct altcom_linger
|
|
{
|
|
int l_onoff;
|
|
int l_linger;
|
|
};
|
|
|
|
/* structure for APICMDID_SOCK_ACCEPT and APICMDID_SOCK_GETSOCKNAME */
|
|
|
|
begin_packed_struct struct altmdmpkt_sockaddrlen_s
|
|
{
|
|
int32_t sockfd;
|
|
uint32_t addrlen;
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_BIND and APICMDID_SOCK_CONNECT */
|
|
|
|
begin_packed_struct struct altmdmpkt_sockaddr_s
|
|
{
|
|
int32_t sockfd;
|
|
uint32_t namelen;
|
|
struct altcom_sockaddr_storage name;
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_CLOSE */
|
|
|
|
begin_packed_struct struct apicmd_close_s
|
|
{
|
|
int32_t sockfd;
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_FCNTL */
|
|
|
|
begin_packed_struct struct apicmd_fcntl_s
|
|
{
|
|
int32_t sockfd;
|
|
int32_t cmd;
|
|
int32_t val;
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_GETADDRINFO */
|
|
|
|
begin_packed_struct struct apicmd_getaddrinfo_s
|
|
{
|
|
uint32_t nodenamelen;
|
|
int8_t nodename[APICMD_NAME_LENGTH];
|
|
uint32_t servnamelen;
|
|
int8_t servname[APICMD_SERVNAME_LENGTH];
|
|
int32_t hints_flag;
|
|
int32_t ai_flags;
|
|
int32_t ai_family;
|
|
int32_t ai_socktype;
|
|
int32_t ai_protocol;
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_GETHOSTBYNAME */
|
|
|
|
begin_packed_struct struct apicmd_gethostbyname_s
|
|
{
|
|
uint32_t namelen;
|
|
int8_t name[APICMD_NAME_LENGTH];
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_GETHOSTBYNAMER */
|
|
|
|
begin_packed_struct struct apicmd_gethostbynamer_s
|
|
{
|
|
uint32_t namelen;
|
|
int8_t name[APICMD_NAME_LENGTH];
|
|
int32_t buflen;
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_GETSOCKOPT */
|
|
|
|
begin_packed_struct struct apicmd_getsockopt_s
|
|
{
|
|
int32_t sockfd;
|
|
int32_t level;
|
|
int32_t optname;
|
|
int32_t optlen;
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_LISTEN */
|
|
|
|
begin_packed_struct struct apicmd_listen_s
|
|
{
|
|
int32_t sockfd;
|
|
int32_t backlog;
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_RECV */
|
|
|
|
begin_packed_struct struct apicmd_recv_s
|
|
{
|
|
int32_t sockfd;
|
|
int32_t recvlen;
|
|
int32_t flags;
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_RECVFROM */
|
|
|
|
begin_packed_struct struct apicmd_recvfrom_s
|
|
{
|
|
int32_t sockfd;
|
|
int32_t recvlen;
|
|
int32_t flags;
|
|
uint32_t fromlen;
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_SELECT */
|
|
|
|
begin_packed_struct struct apicmd_select_s
|
|
{
|
|
int32_t request;
|
|
int32_t id;
|
|
int32_t maxfds;
|
|
uint16_t used_setbit;
|
|
altcom_fd_set readset;
|
|
altcom_fd_set writeset;
|
|
altcom_fd_set exceptset;
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_SEND */
|
|
|
|
begin_packed_struct struct apicmd_send_s
|
|
{
|
|
int32_t sockfd;
|
|
int32_t flags;
|
|
int32_t datalen;
|
|
int8_t senddata[APICMD_DATA_LENGTH];
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_SENDTO */
|
|
|
|
begin_packed_struct struct apicmd_sendto_s
|
|
{
|
|
int32_t sockfd;
|
|
int32_t flags;
|
|
int32_t datalen;
|
|
uint32_t tolen;
|
|
struct altcom_sockaddr_storage to;
|
|
int8_t senddata[APICMD_DATA_LENGTH];
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_SETSOCKOPT */
|
|
|
|
begin_packed_struct struct apicmd_setsockopt_s
|
|
{
|
|
int32_t sockfd;
|
|
int32_t level;
|
|
int32_t optname;
|
|
int32_t optlen;
|
|
int8_t optval[APICMD_OPTVAL_LENGTH];
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_SHUTDOWN */
|
|
|
|
begin_packed_struct struct apicmd_shutdown_s
|
|
{
|
|
int32_t sockfd;
|
|
int32_t how;
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_SOCKET */
|
|
|
|
begin_packed_struct struct apicmd_socket_s
|
|
{
|
|
int32_t domain;
|
|
int32_t type;
|
|
int32_t protocol;
|
|
} end_packed_struct;
|
|
|
|
/****************************************************************************/
|
|
|
|
/* structure for APICMDID_SOCK_BIND and APICMDID_SOCK_CLOSE,
|
|
* APICMDID_SOCK_CONNECT, APICMDID_SOCK_FCNTL, APICMDID_SOCK_LISTEN,
|
|
* APICMDID_SOCK_SEND, APICMDID_SOCK_SENDTO, APICMDID_SOCK_SETSOCKOPT,
|
|
* APICMDID_SOCK_SHUTDOWN, APICMDID_SOCK_SOCKET
|
|
*/
|
|
|
|
begin_packed_struct struct altmdmpktr_sockcomm_s
|
|
{
|
|
int32_t ret_code;
|
|
int32_t err_code;
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_ACCEPT and APICMDID_SOCK_GETSOCKNAME */
|
|
|
|
begin_packed_struct struct altmdmpktr_sockaddr_s
|
|
{
|
|
int32_t ret_code;
|
|
int32_t err_code;
|
|
uint32_t addrlen;
|
|
struct altcom_sockaddr_storage address;
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_GETADDRINFO */
|
|
|
|
begin_packed_struct struct apicmd_getaddrinfo_ai_s
|
|
{
|
|
int32_t ai_flags;
|
|
int32_t ai_family;
|
|
int32_t ai_socktype;
|
|
int32_t ai_protocol;
|
|
altcom_socklen_t ai_addrlen;
|
|
struct altcom_sockaddr_storage ai_addr;
|
|
uint32_t ai_cnamelen;
|
|
int8_t ai_canonname[APICMD_NAME_LENGTH];
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_GETADDRINFO */
|
|
|
|
begin_packed_struct struct apicmd_getaddrinfores_s
|
|
{
|
|
int32_t ret_code;
|
|
uint32_t ai_num;
|
|
struct apicmd_getaddrinfo_ai_s ai[APICMD_AI_COUNT];
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_GETHOSTBYNAME */
|
|
|
|
begin_packed_struct struct apicmd_gethostbynameres_s
|
|
{
|
|
int32_t ret_code;
|
|
int8_t h_name[APICMD_NAME_LENGTH];
|
|
int8_t h_aliases[APICMD_NAME_LENGTH];
|
|
int32_t h_addrtype;
|
|
int32_t h_length;
|
|
int8_t h_addr_list[APICMD_H_ADDR_LENGTH];
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_GETHOSTBYNAMER */
|
|
|
|
begin_packed_struct struct apicmd_gethostbynamer_res_s
|
|
{
|
|
int32_t ret_code;
|
|
int32_t err_code;
|
|
int8_t h_name[APICMD_NAME_LENGTH];
|
|
int8_t h_aliases[APICMD_NAME_LENGTH];
|
|
int32_t h_addrtype;
|
|
int32_t h_length;
|
|
int8_t h_addr_list[APICMD_H_ADDR_LENGTH];
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_GETSOCKOPT */
|
|
|
|
begin_packed_struct struct apicmd_getsockoptres_s
|
|
{
|
|
int32_t ret_code;
|
|
int32_t err_code;
|
|
int32_t optlen;
|
|
int8_t optval[APICMD_OPTVAL_LENGTH];
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_RECV */
|
|
|
|
begin_packed_struct struct apicmd_recvres_s
|
|
{
|
|
int32_t ret_code;
|
|
int32_t err_code;
|
|
int8_t recvdata[APICMD_DATA_LENGTH];
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_RECVFROM */
|
|
|
|
begin_packed_struct struct apicmd_recvfromres_s
|
|
{
|
|
int32_t ret_code;
|
|
int32_t err_code;
|
|
uint32_t fromlen;
|
|
struct altcom_sockaddr_storage from;
|
|
int8_t recvdata[APICMD_DATA_LENGTH];
|
|
} end_packed_struct;
|
|
|
|
/* structure for APICMDID_SOCK_SELECT */
|
|
|
|
begin_packed_struct struct apicmd_selectres_s
|
|
{
|
|
int32_t ret_code;
|
|
int32_t err_code;
|
|
int32_t id;
|
|
uint16_t used_setbit;
|
|
altcom_fd_set readset;
|
|
altcom_fd_set writeset;
|
|
altcom_fd_set exceptset;
|
|
} end_packed_struct;
|
|
|
|
#endif /* __DRIVERS_MODEM_ALT1250_ALTCOM_CMD_SOCK_H */
|