mirror of
https://github.com/dimoniche/changer.git
synced 2026-01-30 17:23:31 +03:00
493 lines
21 KiB
C
493 lines
21 KiB
C
/*
|
||
*********************************************************************************************************
|
||
* uC/TCP-IP
|
||
* The Embedded TCP/IP Suite
|
||
*
|
||
* (c) Copyright 2003-2007; Micrium, Inc.; Weston, FL
|
||
*
|
||
* All rights reserved. Protected by international copyright laws.
|
||
*
|
||
* uC/TCP-IP is provided in source form for FREE evaluation, for educational
|
||
* use or peaceful research. If you plan on using uC/TCP-IP in a commercial
|
||
* product you need to contact Micrium to properly license its use in your
|
||
* product. We provide ALL the source code for your convenience and to help
|
||
* you experience uC/TCP-IP. The fact that the source code is provided does
|
||
* NOT mean that you can use it without paying a licensing fee.
|
||
*
|
||
* Knowledge of the source code may NOT be used to develop a similar product.
|
||
*
|
||
* Please help us continue to provide the Embedded community with the finest
|
||
* software available. Your honesty is greatly appreciated.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
*
|
||
* BSD 4.x LAYER
|
||
*
|
||
* Filename : net_bsd.h
|
||
* Version : V1.89
|
||
* Programmer(s) : ITJ
|
||
*********************************************************************************************************
|
||
* Notice(s) : (1) The Institute of Electrical and Electronics Engineers and The Open Group, have given
|
||
* us permission to reprint portions of their documentation. Portions of this text are
|
||
* reprinted and reproduced in electronic form from the IEEE Std 1003.1, 2004 Edition,
|
||
* Standard for Information Technology -- Portable Operating System Interface (POSIX),
|
||
* The Open Group Base Specifications Issue 6, Copyright (C) 2001-2004 by the Institute
|
||
* of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any
|
||
* discrepancy between these versions and the original IEEE and The Open Group Standard,
|
||
* the original IEEE and The Open Group Standard is the referee document. The original
|
||
* Standard can be obtained online at http://www.opengroup.org/unix/online.html.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* MODULE
|
||
*
|
||
* Note(s) : (1) BSD 4.x module is required for :
|
||
*
|
||
* (a) Network sockets
|
||
* (b) Applications that require BSD 4.x application interface (API) :
|
||
* (1) Macro's
|
||
* (2) Data Types
|
||
* (3) Functions
|
||
*
|
||
* See also 'net_sock.h Note #1'
|
||
* & 'net_cfg.h BSD 4.x LAYER CONFIGURATION'.
|
||
*
|
||
* (2) The following BSD-module-present configuration value MUST be pre-#define'd in 'net_cfg_net.h'
|
||
* PRIOR to all other network modules that require BSD 4.x Layer Configuration (see 'net_cfg_net.h
|
||
* BSD 4.x LAYER CONFIGURATION Note #2b') :
|
||
*
|
||
* NET_BSD_MODULE_PRESENT
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#ifdef NET_BSD_MODULE_PRESENT /* See Note #2. */
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* EXTERNS
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#ifdef NET_BSD_MODULE
|
||
#define NET_BSD_EXT
|
||
#else
|
||
#define NET_BSD_EXT extern
|
||
#endif
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* DEFINES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#define NET_BSD_ADDR_LEN_MAX 14 /* Sizeof(sockaddr.addr). */
|
||
#define NET_BSD_ADDR_IP_NBR_OCTETS_UNUSED 8
|
||
|
||
|
||
#define NET_BSD_ASCII_LEN_MAX_ADDR_IP NET_ASCII_LEN_MAX_ADDR_IP
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* BSD 4.x SOCKET FAMILY & PROTOCOL DEFINES
|
||
*
|
||
* Note(s) : (1) The following socket values MUST be pre-#define'd in 'net_def.h' PRIOR to 'net_cfg.h'
|
||
* so that the developer can configure sockets for the correct socket family values (see
|
||
* 'net_def.h BSD 4.x & NETWORK SOCKET LAYER DEFINES Note #1' & 'net_cfg_net.h NETWORK
|
||
* SOCKET LAYER CONFIGURATION') :
|
||
*
|
||
* AF_INET 2
|
||
* PF_INET AF_INET
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/* -------------------- SOCK TYPES -------------------- */
|
||
#ifdef SOCK_STREAM
|
||
#undef SOCK_STREAM
|
||
#endif
|
||
#define SOCK_STREAM 1
|
||
|
||
#ifdef SOCK_DGRAM
|
||
#undef SOCK_DGRAM
|
||
#endif
|
||
#define SOCK_DGRAM 2
|
||
|
||
|
||
/* -------------- TCP/IP SOCK PROTOCOLS --------------- */
|
||
#ifdef IPPROTO_TCP
|
||
#undef IPPROTO_TCP
|
||
#endif
|
||
#define IPPROTO_TCP 6 /* = NET_IP_HDR_PROTOCOL_TCP */
|
||
|
||
#ifdef IPPROTO_UDP
|
||
#undef IPPROTO_UDP
|
||
#endif
|
||
#define IPPROTO_UDP 17 /* = NET_IP_HDR_PROTOCOL_UDP */
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* BSD 4.x SOCKET ADDRESS DEFINES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#ifdef INADDR_ANY
|
||
#undef INADDR_ANY
|
||
#endif
|
||
#define INADDR_ANY NET_IP_ADDR_NONE
|
||
|
||
#ifdef INADDR_BROADCAST
|
||
#undef INADDR_BROADCAST
|
||
#endif
|
||
#define INADDR_BROADCAST NET_IP_ADDR_BROADCAST
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* BSD 4.x SOCKET FLAG DEFINES
|
||
*
|
||
* Note(s) : (1) #### Some socket flags NOT currently supported.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#ifdef MSG_OOB
|
||
#undef MSG_OOB
|
||
#endif
|
||
#define MSG_OOB DEF_BIT_00 /* See Note #1. */
|
||
|
||
#ifdef MSG_PEEK
|
||
#undef MSG_PEEK
|
||
#endif
|
||
#define MSG_PEEK DEF_BIT_01
|
||
|
||
#ifdef MSG_DONTROUTE
|
||
#undef MSG_DONTROUTE
|
||
#endif
|
||
#define MSG_DONTROUTE DEF_BIT_02 /* See Note #1. */
|
||
|
||
#ifdef MSG_EOR
|
||
#undef MSG_EOR
|
||
#endif
|
||
#define MSG_EOR DEF_BIT_03 /* See Note #1. */
|
||
|
||
#ifdef MSG_TRUNC
|
||
#undef MSG_TRUNC
|
||
#endif
|
||
#define MSG_TRUNC DEF_BIT_04 /* See Note #1. */
|
||
|
||
#ifdef MSG_CTRUNC
|
||
#undef MSG_CTRUNC
|
||
#endif
|
||
#define MSG_CTRUNC DEF_BIT_05 /* See Note #1. */
|
||
|
||
#ifdef MSG_WAITALL
|
||
#undef MSG_WAITALL
|
||
#endif
|
||
#define MSG_WAITALL DEF_BIT_06 /* See Note #1. */
|
||
|
||
#ifdef MSG_DONTWAIT
|
||
#undef MSG_DONTWAIT
|
||
#endif
|
||
#define MSG_DONTWAIT DEF_BIT_07
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* BSD 4.x RETURN CODE / ERROR DEFINES
|
||
*
|
||
* Note(s) : (1) (a) (1) (A) IEEE Std 1003.1, 2004 Edition states to "return 0 ... upon successful
|
||
* completion" ...
|
||
*
|
||
* (B) ... of the following BSD socket functions :
|
||
*
|
||
* (1) close()
|
||
* (2) shutdown()
|
||
* (3) bind()
|
||
* (4) connect()
|
||
* (5) listen()
|
||
*
|
||
* (2) (A) (1) "Otherwise, -1 shall be returned" ...
|
||
* (2) "and 'errno' set to indicate the error" ...
|
||
*
|
||
* (B) ... for the following BSD socket functions :
|
||
*
|
||
* (1) socket()
|
||
* (2) close()
|
||
* (3) shutdown()
|
||
* (4) bind()
|
||
* (5) listen()
|
||
* (6) accept()
|
||
* (7) connect()
|
||
* (8) recvfrom()
|
||
* (9) recv()
|
||
* (10) sendto()
|
||
* (11) send()
|
||
* (12) inet_addr()
|
||
* (13) inet_ntoa()
|
||
*
|
||
* (b) (1) IEEE Std 1003.1, 2004 Edition states to "return 0 ... if no messages are
|
||
* available ... and the peer has performed an orderly shutdown" ...
|
||
*
|
||
* (2) ... for the following BSD socket functions :
|
||
*
|
||
* (A) recvfrom()
|
||
* (B) recv()
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#define NET_BSD_ERR_NONE 0 /* See Note #1a1. */
|
||
#define NET_BSD_ERR_DFLT -1 /* See Note #1ab. */
|
||
|
||
#define NET_BSD_RTN_CODE_CONN_CLOSED 0 /* See Note #1b. */
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* MACRO'S
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* BSD NETWORK WORD ORDER - TO - CPU WORD ORDER MACRO'S
|
||
*
|
||
* Description : Convert data values to & from network word order to host CPU word order.
|
||
*
|
||
* Argument(s) : val Data value to convert (see Note #2).
|
||
*
|
||
* Return(s) : Converted data value (see Note #2).
|
||
*
|
||
* Caller(s) : Application.
|
||
*
|
||
* These macro's are network protocol suite application interface (API) macro's & MAY be
|
||
* called by application function(s).
|
||
*
|
||
* Note(s) : (1) BSD 4.x macro's are required only for applications that call BSD 4.x macro's.
|
||
*
|
||
* See also 'MODULE Note #1b1'.
|
||
*
|
||
* (2) 'val' data value to convert & any variable to receive the returned conversion MUST
|
||
* start on appropriate CPU word-aligned addresses. This is required because most word-
|
||
* aligned processors are more efficient & may even REQUIRE that multi-octet words start
|
||
* on CPU word-aligned addresses.
|
||
*
|
||
* (a) For 16-bit word-aligned processors, this means that
|
||
*
|
||
* all 16- & 32-bit words MUST start on addresses that are multiples of 2 octets
|
||
*
|
||
* (b) For 32-bit word-aligned processors, this means that
|
||
*
|
||
* all 16-bit words MUST start on addresses that are multiples of 2 octets
|
||
* all 32-bit words MUST start on addresses that are multiples of 4 octets
|
||
*
|
||
* See also 'net_util.h NETWORK WORD ORDER - TO - CPU WORD ORDER MACRO'S Note #1'.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#if (NET_BSD_CFG_API_EN == DEF_ENABLED) /* See Note #1. */
|
||
|
||
#define ntohs(val) (NET_UTIL_NET_TO_HOST_16(val))
|
||
#define ntohl(val) (NET_UTIL_NET_TO_HOST_32(val))
|
||
|
||
#define htons(val) (NET_UTIL_HOST_TO_NET_16(val))
|
||
#define htonl(val) (NET_UTIL_HOST_TO_NET_32(val))
|
||
|
||
#endif
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* DATA TYPES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* BSD 4.x SOCKET ADDRESS DATA TYPES
|
||
*
|
||
* Note(s) : (1) BSD 4.x data types are required only for applications that reference BSD 4.x data types.
|
||
*
|
||
* See also 'MODULE Note #1b2'.
|
||
*
|
||
* (2) (a) Socket address structure 'Family' member MUST be configured in host-order & MUST NOT
|
||
* be converted to/from network-order.
|
||
*
|
||
* (b) Socket address structure addresses MUST be configured/converted from host-order to
|
||
* network-order.
|
||
*
|
||
* See also 'net_sock.h NETWORK SOCKET ADDRESS DATA TYPES Note #2'.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#if (NET_BSD_CFG_API_EN == DEF_ENABLED) /* See Note #1. */
|
||
|
||
/* ----------------- SOCKADDR ----------------- */
|
||
struct sockaddr {
|
||
CPU_INT16U sa_family; /* Sock family (see Note #2a). */
|
||
CPU_CHAR sa_data[NET_BSD_ADDR_LEN_MAX]; /* Sock addr (see Note #2b). */
|
||
};
|
||
|
||
|
||
|
||
/* ----------- SOCK IPv4 PORT/ADDR ------------ */
|
||
typedef CPU_INT16U in_port_t;
|
||
typedef CPU_INT32U in_addr_t;
|
||
|
||
|
||
struct in_addr {
|
||
in_addr_t s_addr;
|
||
};
|
||
|
||
/* --------------- SOCKADDR_IN ---------------- */
|
||
struct sockaddr_in {
|
||
CPU_INT16U sin_family; /* AF_INET family (see Note #2a). */
|
||
CPU_INT16U sin_port; /* Port nbr (see Note #2b). */
|
||
struct in_addr sin_addr; /* IP addr (see Note #2b). */
|
||
CPU_CHAR sin_zero[NET_BSD_ADDR_IP_NBR_OCTETS_UNUSED]; /* Unused (MUST be zero). */
|
||
};
|
||
|
||
|
||
#endif
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* GLOBAL VARIABLES
|
||
*
|
||
* Note(s) : (1) BSD 4.x global variables are required only for applications that call BSD 4.x functions.
|
||
*
|
||
* See also 'MODULE Note #1b'
|
||
* & 'STANDARD BSD 4.x FUNCTION PROTOTYPES Note #1'.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#if (NET_BSD_CFG_API_EN == DEF_ENABLED) /* See Note #1. */
|
||
|
||
#ifdef NET_SOCK_MODULE_PRESENT
|
||
#if (NET_SOCK_CFG_FAMILY == NET_SOCK_FAMILY_IP_V4)
|
||
NET_BSD_EXT CPU_CHAR NetBSD_IP_to_Str_Array[NET_BSD_ASCII_LEN_MAX_ADDR_IP];
|
||
#endif
|
||
#endif
|
||
|
||
#endif
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* FUNCTION PROTOTYPES
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* STANDARD BSD 4.x FUNCTION PROTOTYPES
|
||
*
|
||
* Note(s) : (1) BSD 4.x function prototypes are required only for applications that call BSD 4.x functions.
|
||
*
|
||
* See also 'MODULE Note #1b3'.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#if (NET_BSD_CFG_API_EN == DEF_ENABLED) /* See Note #1. */
|
||
|
||
/* ------------- SOCK ALLOC FNCTS ------------- */
|
||
int socket ( int protocol_family,
|
||
int sock_type,
|
||
int protocol);
|
||
|
||
int close ( int sock_id);
|
||
|
||
int shutdown ( int sock_id,
|
||
int type);
|
||
|
||
|
||
/* ------------- LOCAL CONN FCNTS ------------- */
|
||
int bind ( int sock_id,
|
||
struct sockaddr *paddr_local,
|
||
int addr_len);
|
||
|
||
|
||
/* ------------ CLIENT CONN FCNTS ------------- */
|
||
int connect ( int sock_id,
|
||
struct sockaddr *paddr_remote,
|
||
int addr_len);
|
||
|
||
|
||
/* ------------ SERVER CONN FCNTS ------------- */
|
||
int listen ( int sock_id,
|
||
int sock_q_size);
|
||
|
||
int accept ( int sock_id,
|
||
struct sockaddr *paddr_remote,
|
||
int *paddr_len);
|
||
|
||
|
||
/* ----------------- RX FNCTS ----------------- */
|
||
int recvfrom ( int sock_id,
|
||
void *pdata_buf,
|
||
int data_buf_len,
|
||
int flags,
|
||
struct sockaddr *paddr_remote,
|
||
int *paddr_len);
|
||
|
||
int recv ( int sock_id,
|
||
void *pdata_buf,
|
||
int data_buf_len,
|
||
int flags);
|
||
|
||
|
||
/* ----------------- TX FNCTS ----------------- */
|
||
int sendto ( int sock_id,
|
||
void *p_data,
|
||
int data_len,
|
||
int flags,
|
||
struct sockaddr *paddr_remote,
|
||
int addr_len);
|
||
|
||
int send ( int sock_id,
|
||
void *p_data,
|
||
int data_len,
|
||
int flags);
|
||
|
||
|
||
/* ---------------- CONV FCNTS ---------------- */
|
||
in_addr_t inet_addr( char *paddr);
|
||
|
||
char *inet_ntoa(struct in_addr addr);
|
||
|
||
|
||
#endif
|
||
|
||
|
||
/*$PAGE*/
|
||
/*
|
||
*********************************************************************************************************
|
||
* CONFIGURATION ERRORS
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* MODULE END
|
||
*
|
||
* Note(s) : (1) See 'MODULE Note #1'.
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
#endif /* End of BSD module include (see Note #1). */
|
||
|