m2m_socket_api.h

/* 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

 

/* ======================================================================= */