lslp-nucleus.h
来自「Pegasus is an open-source implementation」· C头文件 代码 · 共 393 行
H
393 行
//%2006//////////////////////////////////////////////////////////////////////////// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation, The Open Group.// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; Symantec Corporation; The Open Group.//// Permission is hereby granted, free of charge, to any person obtaining a copy// of this software and associated documentation files (the "Software"), to// deal in the Software without restriction, including without limitation the// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or// sell copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions:// // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.////==============================================================================/***************************************************************************** * Description: portability routines for nucleus RTOS * * Originated: December 17, 2001 * Original Author: Mike Day md@soft-hackle.net * mdday@us.ibm.com * $Header: /cvs/MSB/pegasus/src/slp/slp_client/src/cmd-utils/slp_client/lslp-nucleus.h,v 1.4 2006/01/31 14:50:42 karl Exp $ * * Copyright (c) 2001 - 2003 IBM * Copyright (c) 2000 - 2003 Michael Day * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * *****************************************************************************/#ifndef _LSLP_NUCLEUS_INCL_#define LSLP_NUCLEUS_INCL_#ifdef __cplusplusextern "C" {#endif#include "time.h"#include <ctype.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include "sp_cmn.hc"#include "tcpsprt.h" //define for net version#include "net\target.h"#include "net\inc\nu_net.h"#include "net\inc\arp.h"#include "net\inc\socketd.h"#include "net\inc\sockdefs.h"//#include "tcpst.hc"UINT32 tcpst_inet_addr(char *); /* DELETE these lines after you are ready to proceed ! *///jeb#error "Remember to define the correct BYTE ORDER in the file endian.h"//jeb#error "Check to ensure there is a nucleus implementation of inet_addr(char *) - I can write one if you need it"//jeb#error "Check to ensure there is a nucleus implementation of htons(short int) - I can write one if you need it"//jeb#error "Check to ensure there is a nucleus implementation of inet_ntoa(unsigned int) - I can write one if you need it"//jeb#error "Need a gethostname function (returns a string holding the hostname of the management module)"//jeb#error "prototype is int gethostname(char *buffer, int buffer_size) ; return zero upon success "//jeb#error "need to define _LSLP_STRTOK( char *string, char *delimitors, char **state), which is a thread-safe version of strtok"/* #error "errno is a global variable holding the code for the most recent failure" *//*** nucleus include files ***//** below are posix include files that may or may not be appropriate to Nucleus ***//*** modify to include the correct files for the nucleus runtimes ***///jeb#include <signal.h>//jeb#include <stdio.h>//jeb#include <stdlib.h>//jeb#include <stdarg.h>//jeb#include <unistd.h> //jeb#include <time.h>//jeb#include <sys/types.h>//jeb#include <sys/time.h>//jeb#include <netinet/in.h>//jeb#include <arpa/inet.h>//jeb#include <sys/ioctl.h>//jeb#include <sys/socket.h>//jeb#include <sys/select.h>//jeb#include <netdb.h>//jeb#include <assert.h>//jeb#include <memory.h>//jeb#include <string.h>//jeb#include <ctype.h> /*** typedefs ***/ typedef char int8; typedef CHAR int8; typedef INT8 int8; typedef unsigned char uint8; typedef unsigned char byte; typedef UINT8 uint8; typedef short int16; typedef INT16 int16; typedef unsigned short uint16; typedef UINT16 uint16; typedef int int32; typedef unsigned long uint32;//jeb chg typedef int INT; typedef int SOCKETD; typedef int SOCKET; /* ATTN << Thu Dec 20 11:35:36 2001 mdd >> */#ifdef BOOL //jeb #undef BOOL typedef uint32 BOOL;#endif /* ATTN << Tue Dec 18 09:40:43 2001 mdd >> */ /* this is a variable structure that probably has an option id and then a variable sized buffer to hold the results *//* typedef unsigned int SCK_IOCTL_OPTION ; */ /* probably don't need long longs */ /** typedef __int64 int64; **/ /** typedef unsigned __int64 uint64; **/ //jeb fix typedef int STATUS; struct in_addr { uint32 s_addr; }; typedef struct sockaddr { uint8 sa_len; uint8 sa_family; char sa_data[14]; } SOCKADDR ; typedef struct sockaddr_in {//jeb uint8 sin_len; int16 sin_family; uint16 sin_port; struct in_addr sin_addr; char *sin_zero;// char sin_zero[8]; } SOCKADDR_IN ; struct hostent { char *h_name; char **h_alias; INT16 h_addrtype; INT16 h_length;// char *h_addr; //jeb char **h_addr_list; }; //jeb extern NU_Host_Ent * nucleus_gethostbyname(const char *name);//jeb extern NU_Host_Ent * nucleus_gethostbyaddr( const void *addr, int len, int type); extern NU_HOSTENT * nucleus_gethostbyname(const char *name); extern NU_HOSTENT * nucleus_gethostbyaddr( const void *addr, int len, int type);#ifndef FALSE#define FALSE 0#endif#ifndef TRUE#define TRUE 1#endif#define SOCK_DGRAM NU_TYPE_DGRAM#define SOCK_STREAM NU_TYPE_STREAM#define UNUSED_NU_PARM 0#define INVALID_SOCKET NU_INVALID_SOCKET #define SOCKET_ERROR NU_INVALID_SOCKET //jeb strt add#define AF_INET SK_FAM_IP #define INADDR_NONE 0 #define INADDR_ANY INADDR_NONE //jeb end add/* ATTN need to define these error constants for nucleus << Tue Dec 18 16:22:28 2001 mdd >> */#define EINTR /* call was interrupted */#define ENOTSOCK INVALID_SOCKET#define EADDRNOTAVAIL #define EAFNOSUPPORT #define EISCONN #define ETIMEDOUT #define ECONNREFUSED #define ENETUNREACH #define EADDRINUSE #define EINPROGRESS #define EALREADY #define EWOULDBLOCK /*** function macros ***/ /*** << Mon Dec 17 17:28:24 2001 mdd >> NOTE: Many of these calls require unused or null values for parameters. I've substituted (hardcoded) these parameters where I could find them. This is not very portable nor maintainable; perhaps you will find a better solution ! ***/#define _LSLP_CLOSESOCKET(a) NU_Close_Socket((int)(a)) #define _LSLP_SOCKET(a, b, c) NU_Socket( NU_FAMILY_IP, ((INT16)(b)), NU_NONE )//jeb#define _LSLP_BIND(a, b, c) \ NU_Bind ((INT)(a),((struct addr_struct *)(b)),UNUSED_NU_PARM )#define _LSLP_CONNECT(a, b, c ) \ NU_Connect ((INT)(a), \ ((struct addr_struct *)(b)), \ UNUSED_NU_PARM)#define _LSLP_LISTEN(a, b) NU_Listen ((INT)(a), (UINT16)(b))#define _LSLP_ACCEPT(a, b, c) \ NU_Accept ((INT)(a), \ ((struct addr_struct *)(b)), \ UNUSED_NU_PARM )#define _LSLP_SEND(a, b, c, d) NU_Send ((INT)(a), (CHAR *)(b), (UINT16)(c), UNUSED_NU_PARM)#define _LSLP_SENDTO(a, b, c, d, e, f) \ NU_Send_To ((INT)(a), (char *)(b), (UINT16)(c), (UNUSED_NU_PARM), \ ((struct addr_struct *)(e)), \ UNUSED_NU_PARM )#define _LSLP_RECV(a, b, c, d) NU_Recv ((INT)(a), (char *)(b), (UINT16)(c), UNUSED_NU_PARM )#define _LSLP_RECV_FROM(a, b, c, d, e, f) \ NU_Recv_From ((INT)(a), (char *)(b), (INT16)(c), (UNUSED_NU_PARM), \ ((struct addr_struct *)(e)), \ UNUSED_NU_PARM)/* << Tue Dec 18 07:53:12 2001 mdd >> ATTN need to redefine these gethost functions *//* for all platforms */#define _LSLP_GETHOSTBYNAME(a) \ (struct hostent *) nucleus_gethostbyname((const char *)(a))#define _LSLP_GETHOSTBYADDR(a, b, c ) \ (struct hostent *) nucleus_gethostbyaddr( (const void *)(a), (int)(b), (int)(c))#define _LSLP_SETSOCKOPT(a, b, c, d, e) \ NU_Setsockopt(((INT)(a)), ((INT)(b)), ((INT)(c)), ((void *)(d)), ((INT)(e))) #define _LSLP_GETSOCKOPT(a, b, c, d, e) \ NU_Getsockopt(((INT)(a)), ((INT)(b)), ((INT)(c)), ((void *)(d)), ((INT *)(e)))#define _LSLP_SET_TTL(s, t) NU_Setsockopt((s), IPPROTO_IP, IP_MULTICAST_TTL, (void *)&(t), sizeof((t))) //jeb/* << Tue Dec 18 08:16:59 2001 mdd >> ATTN need to redefine abort to be shutdown & close */#define _LSLP_ABORT(a) NU_Abort(((INT)(a))) #define _LSLP_SLEEP(a) _sleep((int)(a))//jeb strtok#define _LSLP_STRTOK(s, d, x) strtok(((char*)(s)),((const char *)(d))) //jeb assert#define SLPDBG//#ifdef SLPDBG//void assert(int);#define assert(a) _system_info((!(a)),"ASSERT:%s/%d", __FILE__, __LINE__)//#else//#define assert(a) ((void)0)//#endif#define htons(x) INTSWAP((unsigned short)(x))#define ntohs(x) INTSWAP((unsigned short)(x))#define ntohl(x) LONGSWAP((unsigned long)(x))#define inet_addr(x) tcpst_inet_addr((char *)(x))#define _itoa(a,b,c) itoa(((int)(a)),((char*)(b)),((int)(c)))//end jeb/* << Tue Dec 18 09:54:25 2001 mdd >> ATTN the final parameter is a pointer on windows *//* and unix, but is an integer on Nucleus that specifies timer ticks */ struct _lslp_timeval { uint32 tv_sec; uint32 tv_usec; } ;//jeb struct timeval { uint32 tv_sec; uint32 tv_usec; } ;//jeb //jeb typedef TIMEVAL timeval; #ifdef PLUS#define _LSLP_SELECT(a, b, c, d, e ) \ NU_Select(((INT)(a)), ((FD_SET *)(b)), ((FD_SET *)(c)), ((FD_SET *)(d)), \ ((UNSIGNED)(((struct _lslp_timeval *)(e))->tv_usec)))#else #define _LSLP_SELECT(a, b, c, d, e ) \ NU_Select(((INT)(a)), ((FD_SET *)(b)), ((FD_SET *)(c)), ((FD_SET *)(d)), \ (sint)((((struct _lslp_timeval *)(e))->tv_usec) & 0x7fffffff ) )#endif #define LSLP_FD_SET FD_SET#define _LSLP_FD_ISSET(a, b) NU_FD_Check(((INT)(a)), ((FD_SET *)(b)))#define _LSLP_FD_SET(a, b) NU_FD_Set(((INT)(a)), ((FD_SET *)(b)))#define _LSLP_FD_ZERO(a) NU_FD_Init(((FD_SET *)(a)))#define _LSLP_FD_CLR(a, b) NU_FD_Reset(((INT)(a)), ((FD_SET *)(b))) /* ATTN << Tue Dec 18 10:42:19 2001 mdd >> *///jeb #define _LSLP_IOCTLSOCKET(a, b, c) #error "See Nucleus NET Reference Manual for limitations on usage of ioctl\n"/* ATTN << Tue Dec 18 12:54:40 2001 mdd >> */#define _LSLP_GETLASTERROR() /***** We probably don't need these to be defined << Tue Dec 18 16:21:23 2001 mdd >> STATUS NU_Send_To_Raw(INT socketd, char *buff, UINT16 nbytes, INT16 flags, struct addr_struct *to, INT16 addrlen); INT16 NU_Get_IPRaw_PCB(INT socketd, struct sock_struct *); jeb start add STATUS NU_Recv_From_No_Suspend (INT16, char *, INT16, INT16, struct addr_struct *, INT16 *); STATUS NU_Find_Open_Sckts_For_Dev (UINT8 sck_type, INT skt, DV_DEVICE_ENTRY *dev_ptr); jeb end add STATUS NU_Recv_From_Raw (INT, char *, INT16, INT16, struct addr_struct *, INT16 *); STATUS NU_Push (INT); STATUS NU_Is_Connected (INT); INT16 NU_GetPnum (struct sock_struct *); INT16 NU_Get_UDP_Pnum (struct sock_struct *); STATUS NU_Fcntl (INT socketd, INT16 command, INT16 arguement); STATUS NU_Get_Peer_Name(INT, struct sockaddr_struct *, INT16 *); *****///prototypes //jebchar *inet_ntoa(struct in_addr in);#ifdef __cplusplus}#endif#endif /* nucleus include */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?