/* M2M_SOCKET_BSD_SOCKET: Socket handle */
typedef INT32 M2M_SOCKET_BSD_SOCKET;
/* Invalid_Socket_handle */
#define M2M_SOCKET_BSD_INVALID_SOCKET (M2M_SOCKET_BSD_SOCKET)(~0)
/* M2M Socket_Types */
#define M2M_SOCKET_BSD_SOCK_STREAM 1 /* Stream socket type used for TCP */
#define M2M_SOCKET_BSD_SOCK_DGRAM 2 /* Datagram socket type used for UDP */
#define M2M_SOCKET_BSD_SOCK_RAW 3 /* Raw socket type */
#define M2M_SOCKET_BSD_SOCK_TUN 4 /* TUN (tunneling done at the ip layer) socket type, RAW
socket type */
/* M2M Socket_Address_Families */
#define M2M_SOCKET_BSD_AF_UNSPEC 0 /* Unspecified Address Family */
#define M2M_SOCKET_BSD_AF_INET 2 /* Internetwork: UDP, TCP, etc. */
#define M2M_SOCKET_BSD_AF_INET6 10
/* M2M Socket Protocol Families */
#define M2M_SOCKET_BSD_PF_UNSPEC 0 /* Unspecified Protocol Family */
#define M2M_SOCKET_BSD_PF_INET 2 /* Internetwork: UDP, TCP, etc. */
/* M2M Socket_Protocols */
#define M2M_SOCKET_BSD_IPPROTO_IP 0 /* Dummy for IP */
#define M2M_SOCKET_BSD_IPPROTO_TCP 6 /* Transmission Control Protocol */
#define M2M_SOCKET_BSD_IPPROTO_UDP 17 /* User Datagram Protocol */
#define M2M_SOCKET_BSD_IPPROTO_ICMP 1 /* Internet Control Message Protocol */
/* ======================================================================= */
/* Level_number for M2M_socket_bsd_get_sock_opt() and M2M_socket_bsd_set_sock_opt() to apply to socket itself. */
#define M2M_SOCKET_BSD_SOL_SOCKET 0xffff /* options for socket level */
/* M2M Socket_Option_Flags */
#define M2M_SOCKET_BSD_SO_DEBUG 0x0001 /* Turn on debugging info recording, Not supported */
#define M2M_SOCKET_BSD_SO_ACCEPTCONN 0x0002 /* Socket has had listen(), Not supported */
#define M2M_SOCKET_BSD_SO_REUSEADDR 0x0004 /* Allow local address reuse, always set */
#define M2M_SOCKET_BSD_SO_KEEPALIVE 0x0008 /* Keep connections alive, not enabled by default */
#define M2M_SOCKET_BSD_SO_DONTROUTE 0x0010 /* Just use interface addresses, Not supported */
#define M2M_SOCKET_BSD_SO_BROADCAST 0x0020 /* Permit sending of broadcast msgs, Not supported */
#define M2M_SOCKET_BSD_SO_USELOOPBACK 0x0040 /* Bypass hardware when possible, Not supported */
#define M2M_SOCKET_BSD_SO_LINGER 0x0080 /* Linger on close if data present, Not supported */
/* GE910, supported */
#define M2M_SOCKET_BSD_SO_OOBINLINE 0x0100 /* Leave received OOB data in line, Not supported */
#define M2M_SOCKET_BSD_SO_DONTLINGER (INT32) (~M2M_SOCKET_BSD_SO_LINGER)
/* Don’t Linger, Not supported */
#define M2M_SOCKET_BSD_SO_SNDBUF 0x1001 /* Send buffer size, supported */
/* GE910, not supported */
#define M2M_SOCKET_BSD_SO_RCVBUF 0x1002 /* Receive buffer size, supported */
/* GE910, supported only for M2M_socket_bsd_set_sock_opt(...) */
#define M2M_SOCKET_BSD_SO_SNDLOWAT 0x1003 /* Send low-water mark, Not supported */
#define M2M_SOCKET_BSD_SO_RCVLOWAT 0x1004 /* Receive low-water mark, Not supported */
#define M2M_SOCKET_BSD_SO_SNDTIMEO 0x1005 /* Send timeout, Not supported */
/* GE910, supported only for M2M_socket_bsd_set_sock_opt(...) */
#define M2M_SOCKET_BSD_SO_RCVTIMEO 0x1006 /* Receive timeout, supported. Only for
M2M_socket_bsd_set_sock_opt(...)*/
#define M2M_SOCKET_BSD_SO_ERROR 0x1007 /* Get error status and clear */
#define M2M_SOCKET_BSD_SO_TYPE 0x1008 /* Get socket type, supported */
/* GE910, not supported */
#define M2M_SOCKET_BSD_TCP_NODELAY 0x01 /* Do not delay, coalesce the sent packets, supported */
/* GE910, not supported */
#define M2M_SOCKET_BSD_TCP_CONNTIME 0x02 /* Connection timeout, supported. Only for
M2M_socket_bsd_set_sock_opt(...)*/
/* GE910, not supported */
#define M2M_SOCKET_BSD_TCP_KEEPALIVE 0x03 /* TCP keepalive timer */
/* ======================================================================= */
/* Structure used for manipulating linger option. */
typedef struct M2M_SOCKET_BSD_LINGER {
INT32 l_onoff; /* option on/off */
INT32 l_linger, /* linger time */
} M2M_SOCKET_BSD_LINGER;
/* M2M_SOCKET_BSD_SOCKADDR: Structure used by TCP/IP stack to store most addresses. */
typedef struct M2M_SOCKET_BSD_SOCKADDR {
UINT8 _internal_sa_len; /* INTERNAL USE ONLY */
UINT8 sa_family;
CHAR sa_data[14];
} M2M_SOCKET_BSD_SOCKADDR;
/* ======================================================================= */
/* M2M Internet address.*/
/* Any internet address. */
#define M2M_SOCKET_BSD_INADDR_ANY (UINT32) 0x00000000
/* Loopback internet address. */
#define M2M_SOCKET_BSD_INADDR_LOOPBACK (UINT32) 0x7f000001
/* Broadcast internet address. */
#define M2M_SOCKET_BSD_INADDR_BROADCAST (UINT32) 0xffffffff
/* ======================================================================= */
/* Structure for storing Internet address. */
typedef struct M2M_SOCKET_BSD_IN_ADDR {
UINT32 s_addr; /* 32 bits inet address */
} M2M_SOCKET_BSD_IN_ADDR;
/* M2M_SOCKET_BSD_SOCKADDR_IN: Socket address, internet style. */
typedef struct M2M_SOCKET_BSD_SOCKADDR_IN {
UINT8 _internal_sin_len; /* INTERNAL USE ONLY */
UINT8 sin_family; /* M2M Socket Protocol Families, e.g. M2M_SOCKET_BSD_PF_INET. */
UINT16 sin_port; /* 16 bits port number. */
M2M_SOCKET_BSD_IN_ADDR sin_addr; /* 32 bits inet address (IP). */
CHAR sin_zero[8]; /* INTERNAL USE ONLY */
} M2M_SOCKET_BSD_SOCKADDR_IN;
/* M2M_SOCKET_BSD_IN6_ADDR */
typedef struct M2M_SOCKET_BSD_IN6_ADDR {
UINT32 s_addr[4];
}M2M_SOCKET_BSD_IN6_ADDR;
/* M2M_SOCKET_BSD_IPV6_ADDR */
typedef struct M2M_SOCKET_BSD_IPV6_ADDR
{
union
{
UINT8 addr8[16];
UINT16 addr16[8];
UINT32 addr32[4];
}v6_v;
#define addr8_s v6_v.addr8
#define addr16_s v6_v.addr16
#define addr32_s v6_v.addr32
} M2M_SOCKET_BSD_IPV6_ADDR;
/* Socket address, internet style. */
typedef struct M2M_SOCKET_BSD_SOCKADDR_IN6 {
UINT8 _internal_sin6_len; /* INTERNAL USE ONLY */
UINT8 sin6_family; /* M2M Socket Protocol Families, e.g. M2M_SOCKET_BSD_PF_INET. */
UINT16 sin6_port; /* 16 bits port number. */
UINT32 sin6_flowinfo;
M2M_SOCKET_BSD_IPV6_ADDR sin6_addr; /* 32 bits inet address (IP). */
UINT32 sin6_scope_id;
} M2M_SOCKET_BSD_SOCKADDR_IN6;
/* Structure returned by network data base library. */
typedef struct M2M_SOCKET_BSD_HOSTENT {
CHAR* h_name; /* Official name of host */
CHAR** h_aliases; /* Pointer to struct of aliases */
INT32 h_addrtype; /* Host address type, equals M2M_SOCKET_BSD_AF_INET */
INT32 h_length; /* Length of address */
CHAR** h_addr_list; /* Pointer to array of pointers with inet v4 addresses */
} M2M_SOCKET_BSD_HOSTENT;
/* M2M_SOCKET_BSD_TIMEVAL: Structure used in m2m_socket_bsd_select() call. */
typedef struct M2M_SOCKET_BSD_TIMEVAL {
INT32 m_tv_sec; /* seconds */
INT32 m_tv_usec; /* microseconds */
} M2M_SOCKET_BSD_TIMEVAL;
/* FD set size used by m2m_socket_bsd_select(). */
#define M2M_SOCKET_BSD_FD_SETSIZE 32
/* M2M_SOCKET_BSD_FD_SET: FD set used by m2m_socket_bsd_select(). */
typedef struct M2M_SOCKET_BSD_FD_SET {
INT32 fd_count; /*How many are SET? */
UINT32 fd_array[(M2M_SOCKET_BSD_FD_SETSIZE + 31)/32]; /* Bit map of SOCKET Descriptors. */
} M2M_SOCKET_BSD_FD_SET;
typedef struct M2M_PDP_DATAVOLINFO
{
UINT32 dataRec;
UINT32 dataSent;
UINT32 total;
}M2M_PDP_DATAVOLINFO;
/* M2M_NETWORK_EVENT: M2M Socket Network Event codes */
typedef enum
{
M2M_SOCKET_EVENT_SOCKET_BREAK, /* Connection closed by the server */
M2M_SOCKET_EVENT_SOCKET_FAIL, /* Connection error */
M2M_SOCKET_EVENT_PDP_IPV6_ACTIVE, /* PDP IPV6 activated */
M2M_SOCKET_EVENT_PDP_ACTIVE, /* PDP activated */
M2M_SOCKET_EVENT_PDP_DEACTIVE, /* PDP deactivated */
M2M_SOCKET_EVENT_PDP_BREAK /* PDP broken */
} M2M_NETWORK_EVENT;
/* M2M firewall rule element definitions */
/* M2M_FIREWALL_ELEMENT Ip Address and Mask */
typedef struct M2M_FIREWALL_ELEMENT
{
UINT32 ipAddr;
UINT32 ipMask;
} M2M_FIREWALL_ELEMENT;
/* M2M_FIREWALL_ELEMENT_IP6 Ip Address IPv6 and Mask Ipv6*/
typedef struct M2M_FIREWALL_ELEMENT_IP6
{
M2M_SOCKET_BSD_IPV6_ADDR ipAddr;
M2M_SOCKET_BSD_IPV6_ADDR ipMask ;
} M2M_FIREWALL_ELEMENT_IP6;
/* FD_SETs used for m2m_socket_bsd_select(). */
void m2m_socket_bsd_fd_zero_func(M2M_SOCKET_BSD_FD_SET* set);
/* FD_SETs used for m2m_socket_bsd_select(). */
void m2m_socket_bsd_fd_set_func(INT32 fd, M2M_SOCKET_BSD_FD_SET* set);
/* FD_SETs used for m2m_socket_bsd_select(). */
void m2m_socket_bsd_fd_clr_func(INT32 fd, M2M_SOCKET_BSD_FD_SET* set);
/* FD_SETs used for m2m_socket_bsd_select(). */
UINT8 m2m_socket_bsd_fd_isset_func(INT32 fd, M2M_SOCKET_BSD_FD_SET* set);
/* Network byte order <-> Host byte order conversion functions. */
UINT16 m2m_socket_bsd_htons(UINT16 x); /* Host to network byte order (short) */
UINT16 m2m_socket_bsd_ntohs(UINT16 x); /* Network to host byte order (short) */
UINT32 m2m_socket_bsd_htonl(UINT32 x); /* Host to network byte order (long) */
UINT32 m2m_socket_bsd_ntohl(UINT32 x); /* Network to host byte order (long) */
/* ======================================================================= */
/* M2M Socket I/O control options for m2m_socket_bsd_ioctl() */
/* command to get the number of bytes to read */
#define M2M_SOCKET_BSD_FIONREAD 0
/* command to select the blocking or non-blocking mode */
#define M2M_SOCKET_BSD_FIONBIO 1
/* command to set a receive callback function. Not supported */
#define M2M_SOCKET_IO_READ_CB_FUNC 2
/* command to set an accept callback function, typicaly used for server. Not supported */
#define M2M_SOCKET_IO_ACCEPT_CB_FUNC 3
/* ======================================================================= */
/* M2M Socket_Error_Types */
/* Errors can be retrieved via the m2m_socket_errno() */
#define M2M_SOCKET_BSD_SOCKET_ERROR (-1)
#define M2M_SOCKET_BSD_SOCKNOERROR 0
#define M2M_SOCKET_BSD_EUNDEFINED 1
#define M2M_SOCKET_BSD_EACCES 2
#define M2M_SOCKET_BSD_EADDRINUSE 3
#define M2M_SOCKET_BSD_EADDRNOTAVAIL 4
#define M2M_SOCKET_BSD_EAFNOSUPPORT 5
#define M2M_SOCKET_BSD_EALREADY 6
#define M2M_SOCKET_BSD_EBADF 7
#define M2M_SOCKET_BSD_ECONNABORTED 8
#define M2M_SOCKET_BSD_ECONNREFUSED 9
#define M2M_SOCKET_BSD_ECONNRESET 10
#define M2M_SOCKET_BSD_EDESTADDRREQ 11
#define M2M_SOCKET_BSD_EFAULT 12
#define M2M_SOCKET_BSD_EHOSTDOWN 13
#define M2M_SOCKET_BSD_EHOSTUNREACH 14
#define M2M_SOCKET_BSD_EINPROGRESS 15
#define M2M_SOCKET_BSD_EINTR 16
#define M2M_SOCKET_BSD_EINVAL 17
#define M2M_SOCKET_BSD_EISCONN 18
#define M2M_SOCKET_BSD_EMFILE 19
#define M2M_SOCKET_BSD_EMSGSIZE 20
#define M2M_SOCKET_BSD_ENETDOWN 21
#define M2M_SOCKET_BSD_ENETRESET 22
#define M2M_SOCKET_BSD_ENETUNREACH 23
#define M2M_SOCKET_BSD_ENOBUFS 24
#define M2M_SOCKET_BSD_ENOPROTOOPT 25
#define M2M_SOCKET_BSD_ENOTCONN 26
#define M2M_SOCKET_BSD_ENOTSOCK 27
#define M2M_SOCKET_BSD_EOPNOTSUPP 28
#define M2M_SOCKET_BSD_EPFNOSUPPORT 29
#define M2M_SOCKET_BSD_EPROTONOSUPPORT 30
#define M2M_SOCKET_BSD_EPROTOTYPE 31
#define M2M_SOCKET_BSD_ESHUTDOWN 32
#define M2M_SOCKET_BSD_ESOCKTNOSUPPORT 33
#define M2M_SOCKET_BSD_ETIMEDOUT 34
#define M2M_SOCKET_BSD_EWOULDBLOCK 35
/* ======================================================================= */
/* M2M Socket_State */
/* socket is closed. */
#define M2M_SOCKET_STATE_CLOSED 0
/* socket is opened. */
#define M2M_SOCKET_STATE_OPEN 1
/* socket is connected. */
#define M2M_SOCKET_STATE_CONNECTED 2
/* ======================================================================= */
/* PDP_context_status */
/* PDP context is active. */
#define M2M_PDP_STATE_ACTIVE 0
/* PDP context is not yet active. */
#define M2M_PDP_STATE_NOT_ACTIVE 1
/* PDP context has errors. */
#define M2M_PDP_STATE_FAILURE 2
/* PDP operation is successful. Not used by m2m_pdp_activate(). */
#define M2M_PDP_STATE_SUCCESS 3
/* PDP operation (activate or deactivate) is in progress. Result will be notified through the m2m_cb_on_net_event() callback */
#define M2M_PDP_STATE_IN_PROGRESS 4
/* ======================================================================= */
/* network interface adapters */
/* maximum name length of a network interface (like eth0, ps5 etc). */
#define M2M_NET_MAX_IF_NAME 5
/* ======================================================================= */