home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / nwnet / root / usr / include / sys / sap_app.h / sap_app
Text File  |  1998-08-19  |  16KB  |  399 lines

  1. /*
  2.  * Copyright (c) 1998 The Santa Cruz Operation, Inc.. All Rights Reserved. 
  3.  *                                                                         
  4.  *        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE               
  5.  *                   SANTA CRUZ OPERATION INC.                             
  6.  *                                                                         
  7.  *   The copyright notice above does not evidence any actual or intended   
  8.  *   publication of such source code.                                      
  9.  */
  10.  
  11. /* $Novell-NWU: $Header: /proj6/ncps/nwu_top/nwnet/include/sys/sap_app.h,v 1.2 1996/04/05 21:56:16 vtag Exp $ */
  12. /*    Copyright (c) 1990, 1991, 1992, 1993 Novell, Inc. All Rights Reserved.    */
  13. /*    Copyright (c) 1984, 1985, 1986, 1987, 1988, 1989, 1990 Novell, Inc. All Rights Reserved.    */
  14. /*      All Rights Reserved      */
  15.  
  16. /*    THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF Novell Inc.    */
  17. /*    The copyright notice above does not evidence any       */
  18. /*    actual or intended publication of such source code.    */
  19.  
  20. #ifndef _NET_NW_SAP_APP_H  /* wrapper symbol for kernel use */
  21. #define _NET_NW_SAP_APP_H  /* subject to change without notice */
  22.  
  23. #ident "@(#)sap_app.h    1.3"
  24.  
  25.  
  26. /*
  27.  * Copyright 1991, 1992 Novell, Inc.
  28.  * All Rights Reserved.
  29.  *
  30.  * This work is subject to U.S. and International copyright laws and
  31.  * treaties.  No part of this work may be used, practiced, performed,
  32.  * copied, distributed, revised, modified, translated, abridged,
  33.  * condensed, expanded, collected, compiled, linked, recast,
  34.  * transformed or adapted without the prior written consent
  35.  * of Novell.  Any use or exploitation of this work without
  36.  * authorization could subject the perpetrator to criminal and
  37.  * civil liability.
  38.  */
  39.  
  40. #ifdef _KERNEL_HEADERS
  41. #include <util/types.h>
  42. #include <nwu/nwnet/include/ipx_app.h>
  43. #include <nwu/nwnet/include/ripx_app.h>
  44. #else
  45. #include <sys/types.h>
  46. #include <sys/ipx_app.h>
  47. #include <sys/ripx_app.h>
  48. #endif /* _KERNEL_HEADERS */
  49.  
  50. /*
  51. **    The following structure is used by processes accessing the
  52. **    Sap Server on the local machine.  This data does not access
  53. **    the network but instead uses information available locally on
  54. **    the machine.
  55. **
  56. **    Note: All values are returned in machine order,
  57. **    including all values in the netInfo_t structure.
  58. **        The only fields that will be in network order are:
  59. **            serverName        (Strings are always the same order anyway)
  60. **            serverAddress    (12 byte IPX address)
  61. */    
  62. typedef struct sap_info {
  63.         uint16        serverType;        /* Assigned type of server */
  64.         uint8        serverName[NWMAX_SERVER_NAME_LENGTH]; /* Server Name */
  65.         ipxAddr_t    serverAddress;    /* Server address, net order */
  66.         uint16        serverHops;        /* Number of intermediate nets mach order */
  67.         netInfo_t    netInfo;        /* Info about the net to access server */
  68.                                     /* All values returned in machine order */
  69. } SAPI, *SAPIP;
  70.  
  71. /*
  72. **    The sap statistics data structure, all data in machine order
  73. **    Returned as response to the SAP API SAPGetStatistics.
  74. */
  75. typedef struct sap_data {
  76.  
  77.     /* Control Information */
  78.     time_t        StartTime;        /* Time started in seconds since epoch */
  79.     pid_t        SapPid;            /* Pid of Sap Process */
  80.     uint16        Lans;            /* Number of Connected Lans, including lan 0 */
  81.     uint8        MyNetworkAddress[IPX_ADDR_SIZE];/* My network address */
  82.     int32        ConfigServers;    /* Total configured server entries */
  83.     clock_t        RevisionStamp;    /* Revision of last update */
  84.     int32         ServerPoolIdx;     /* Count of servers that are up */
  85.     uint32        ProcessesToNotify;/* Num of processes to notify of change */
  86.  
  87.     /* Misc Information */
  88.     uint32        NotificationsSent;/* Notifications sent to processes */
  89.  
  90.     /* Packets Received */
  91.     uint32        TotalInSaps;    /* Total sap pkts received */
  92.     uint32        GSQReceived;    /* General Server Queries received */
  93.     uint32        GSRReceived;    /* General Server Replies received */
  94.     uint32        NSQReceived;    /* Nearest Server Queries received */
  95.     uint32        SASReceived;    /* Local Sap Advertise a Server received */
  96.     uint32        SNCReceived;    /* Local Sap Notify of Change received */
  97.     uint32        GSIReceived;    /* Local Sap Get Shared Memory Id */
  98.     uint32        NotNeighbor;    /* Packet Receieved, Source Not on LAN */
  99.     uint32        EchoMyOutput;    /* Packet Receieved, Echo of packet we sent */
  100.     uint32        BadSizeInSaps;    /* Sap pkts received, bak pkt size */
  101.     uint32        BadSapSource;    /* Sap pkts received, sap source bad */
  102.  
  103.     /* Rip-Sap Interaction */
  104.     uint32        TotalInRipSaps;    /* Total (rip network down) pkts received */
  105.     uint32        BadRipSaps;        /* Bad (rip network down) pkts received */
  106.     uint32        RipServerDown;    /* Server set to down from rip interaction */
  107.  
  108.     /* Packets Sent */
  109.     uint32        TotalOutSaps;    /* Total sap pkts sent */
  110.     uint32        NSRSent;        /* Nearest Server Responses sent */
  111.     uint32        GSRSent;        /* General Server Replies sent */
  112.     uint32        GSQSent;        /* General Server Queries sent */
  113.     uint32        SASAckSent;        /* Local Sap Advertise Server Request Acks */
  114.     uint32        SASNackSent;    /* Local Sap Advertise Server Request Nacks */
  115.     uint32        SNCAckSent;        /* Local Sap Notify of Change Acks */
  116.     uint32        SNCNackSent;    /* Local Sap Notify of Change Nacks */
  117.     uint32        GSIAckSent;        /* Local Sap Get Shared Memory Id Acks */
  118.     uint32        BadDestOutSaps;    /* Sap pkts sent bad destination net */
  119.  
  120.     /* Memory Allocation Errors */
  121.     uint32        SrvAllocFailed;    /* Number server alloc request failures */
  122.     uint32        MallocFailed;    /* Number Malloc request failures */
  123.  
  124. } SAPD, *SAPDP;
  125.  
  126. /*
  127. **    Sap Lan data structure.  Returned in response to the
  128. **    SAP API SapGetLanData.
  129. */
  130. typedef struct SapLanData {
  131.     uint16        LanNumber;        /* Lan Number */
  132.     uint16        UpdateInterval;    /* Periodic Update Interval in seconds */
  133.     uint16        AgeFactor;        /* Num Periodic Intervals missed to down srvr */
  134.     uint16        PacketGap;        /* Time in Milliseconds between packets */
  135.                                 /* Time is zero for a WAN, nonzero for a LAN */
  136.     int32        Network;        /* NetWork number for htis lan */
  137.     int32        LineSpeed;        /* Linespeed in MBS.  If sign bit set KBS */
  138.                                 /* Currently always zero */
  139.     uint32        PacketSize;        /* Packet size that will be sent on this lan */
  140.     uint32        PacketsSent;    /* Packets sent */
  141.     uint32        PacketsReceived;/* Packets received */
  142.     uint32        BadPktsReceived;/* Bad Packets received */
  143. } SAPL, *SAPLP;
  144.  
  145. /*
  146. **    Structure used by APIs to retrieve records stored in sapouts file.
  147. **    which identifies services advertised with the PERMANENT option
  148. **    Type and Socket values are in machine order.
  149. */
  150. typedef struct PersistList {
  151.     uint8    ServerName[NWMAX_SERVER_NAME_LENGTH];
  152.     uint16    ServerType;
  153.     uint16    ServerSocket;
  154. } PersistList_t;
  155.  
  156. /*
  157. **    The following are SAP API functions are used by processes accessing
  158. **    the Sap Server on the local machine.
  159. */
  160.  
  161. #if defined( __STDC__) || defined(__cplusplus)
  162.  
  163. #ifdef __cplusplus
  164. extern "C" {
  165. #endif
  166. extern int SAPMapMemory( void);
  167. extern void SAPUnmapMemory( void);
  168. extern int SAPStatistics( SAPDP );
  169. extern int SAPGetAllServers( uint16, int *, SAPIP, int);
  170. extern int SAPGetChangedServers( uint16, int *, SAPIP, int, uint32, uint32 *);
  171. extern int SAPGetNearestServer( uint16, SAPIP);
  172. extern int SAPAdvertiseMyServer( uint16, uint8 *, uint16, int);
  173. extern int SAPGetServerByName( uint8 *, uint16, int *, SAPIP, int);
  174. extern int SAPGetServerByAddr(ipxAddr_t *, uint16, int *, SAPIP, int);
  175. extern int SAPListPermanentServers(int *, PersistList_t *, int);
  176. extern int SAPNotifyOfChange(int, void (*func)(int), uint16);
  177. extern int SAPGetLanData(int, SAPLP);
  178. extern int SAPPerror(int, char *, ...);
  179. extern int EnableIpxServerMode( void);
  180. extern int DisableIpxServerMode( void);
  181. #ifdef __cplusplus
  182. }
  183. #endif
  184.  
  185. #else
  186. extern int SAPMapMemory();
  187. extern void SAPUnmapMemory();
  188. extern int SAPStatistics();
  189. extern int SAPGetAllServers();
  190. extern int SAPGetChangedServers();
  191. extern int SAPGetNearestServer();
  192. extern int SAPAdvertiseMyServer();
  193. extern int SAPGetServerByName();
  194. extern int SAPGetServerByAddr();
  195. extern int SAPListPermanentServers();
  196. extern int SAPNotifyOfChange();
  197. extern int SAPGetLanData();
  198. extern int SAPPerror();
  199. extern int EnableIpxServerMode();
  200. extern int DisableIpxServerMode();
  201. #endif
  202.  
  203. /*
  204. **    Constants used for SAPNotifyOfChange() and SAPAdvertiseMyServer()
  205. */
  206. #define SAP_ADVERTISE                1    /* Advertise my service */
  207. #define SAP_STOP_ADVERTISING        2    /* End Advertising my service */
  208. #define SAP_ADVERTISE_FOREVER        3    /* Advertise beyond life of process */
  209. #define SAP_STOP_NOTIFICATION        -1    /* End notification of changes */
  210.  
  211. /*
  212. **    Common server types
  213. */
  214. #define FILE_SERVER_TYPE         0x0004        /* File server SAP type. */
  215. #define PRINT_SERVER_TYPE         0x0047        /* Print Server */
  216. #define BETRIEVE_SERVER_TYPE    0x004B        /* BTrieve Server */
  217. #define ACCESS_SERVER_TYPE         0x0098        /* NetWare Access Server */
  218. #define OLD_NVT_SERVER_TYPE        0x009E        /* NVT over NVT protocol SAP type */
  219. #define I386_SERVER_TYPE         0x0107        /* 386 NetWare */
  220. #define SPX_NVT_SERVER_TYPE        0x0247        /* NVT over SPX protocol SAP type */
  221. #define TIME_SYNC_SERVER_TYPE    0x026B        /* Time Syncronization */
  222. #define DIRECTORY_SERVER_TYPE    0x0278        /* Directory Server */
  223. #define UNIXWARE_REMOTE_APP_TYPE 0x03E1        /* UnixWare Remote App Server */
  224. #define UNIXWARE_INSTALL_TYPE    0x03EE        /* UnixWare 2.0 Install Server */
  225. #define UNIXWARE_TYPE             0x03E4        /* UnixWare Platform */
  226. #define ALL_SERVER_TYPE            0xFFFF        /* Return all server types. */
  227.  
  228. /*
  229. **    The following errors are returned by the SAP API functions
  230. **    All errors are returned as negative numbers.
  231. */
  232. #define SAPL_SERVTYPE    1    /* Server type cannot be zero */
  233. #define SAPL_SERVNAME    2    /* Server name too long or too short */
  234. #define SAPL_INVALFUNC    3    /* Invalid advertise function */ 
  235. #define SAPL_NORESP        4    /* Sap daemon not responding */
  236. #define SAPL_DUPCALLBACK 5    /* Callback function already identified */
  237. #define SAPL_SIGNAL     6    /* Error trying to setup signal, see errno */
  238. #define SAPL_NWCM        7    /* function NWCMGetConfigFIlePath failed */
  239. #define SAPL_INVALSOCK    8    /* Socket number may not be 0 */
  240. #define SAPL_ENOMEM        9    /* Count not do local NWALLOC */
  241. #define SAPL_NOT_SUPPORTED    10    /* Function not supported, SAPD not running */
  242. #define SAPL_TRYAGAIN    11    /* Sapouts file in use, try again */
  243. #define SAPL_UNUSED_12    12    /* Unused */
  244. #define SAPL_UNUSED_13    13    /* Unused */
  245. #define SAPL_UNUSED_14    14    /* Unused */
  246. #define SAPL_UNUSED_15    15    /* Unused */
  247. #define SAPL_UNUSED_16    16    /* Unused */
  248. #define SAPL_UNUSED_17    17    /* Unused */
  249. #define SAPL_UNUSED_18    18    /* Unused */
  250. #define SAPL_UNUSED_19    19    /* Unused */
  251. #define SAPL_UNUSED_20    20    /* Unused */
  252.  
  253. /*
  254. **    SAP API function errors
  255. **    The following require interpretation of errno for complete error message
  256. */
  257. #define SAPL_ERRNO_START 21    /* Start of errors that require errno */
  258. #define SAPL_SOCKET        21    /* ioctl IPX_SET_SOCKET failed */
  259. #define SAPL_FTOK        22    /* functions FTOK failed */
  260. #define SAPL_SHMGET        23    /* function shmget failed */
  261. #define SAPL_SHMAT        24    /* function shmat failed */
  262. #define SAPL_IPXOPEN    25    /* Open of /dev/ipx failed */
  263. #define SAPL_GETMSG         26    /* getmsg on /dev/ipx failed */
  264. #define SAPL_PUTMSG     27    /* Error trying send message to sap daemon */
  265. #define SAPL_OSAPOUTS    28    /* Error opening sapouts file */
  266. #define SAPL_RWSAPOUT    29    /* Sapouts file read/write error */
  267. #define SAPL_BADSAPOUT    30    /* Sapouts file read/write error, file truncated */
  268. #define SAPL_UNUSED_31    31    /* Unused */
  269. #define SAPL_UNUSED_32    32    /* Unused */
  270. #define SAPL_UNUSED_33    33    /* Unused */
  271. #define SAPL_UNUSED_34    34    /* Unused */
  272. #define SAPL_UNUSED_35    35    /* Unused */
  273. #define SAPL_UNUSED_36    36    /* Unused */
  274. #define SAPL_UNUSED_37    37    /* Unused */
  275. #define SAPL_UNUSED_38    38    /* Unused */
  276. #define SAPL_UNUSED_39    39    /* Unused */
  277.  
  278. /*
  279. **    Sap Agent Error Numbers, passed through by the Sap API functions
  280. */
  281. #define SAPD_START        40    /* Start of Sap Daemon Error numbers */
  282. #define SAPD_ENOMEM        40    /* Not enough space to allocate service */
  283. #define SAPD_BUSY        41    /* Server already advertised by another process */
  284. #define SAPD_NOFIND        42    /* Server to unadvertise not found */
  285. #define SAPD_NOPERM        43    /* can't unadvertise service you didn't advertise */
  286. #define SAPD_PID_INVAL    44    /* Pid is invalid, library internal error */
  287. #define SAPD_NAME_ZERO    45    /* Name specified has length zero */
  288. #define SAPD_INSUF_PERM    46    /* Insufficient permission to execute this function. */
  289. #define SAPD_UNUSED_47    47    /* Unused */
  290. #define SAPD_UNUSED_48    48    /* Unused */
  291. #define SAPD_UNUSED_49    49    /* Unused */
  292.  
  293. /*
  294. **    The following errors are returned by the SAP API ServerMode functions
  295. **    All errors are returned as negative numbers.
  296. */
  297. #define SER_INVRTYPE    50    /* Invalid ROUTER type */
  298. #define SER_ROPEN        51    /* open of RIPX failed */
  299. #define SER_RIOCTL        52    /* RIPX_SET_ROUTER_TYPE ioctl to RIPX failed */
  300. #define SER_NWCMGD        53    /* NWCMGetConfigDirPath call failed */
  301. #define SER_NWCMGP        54    /* NWCMGetConfigParam call failed */
  302. #define SER_FSAP        55    /* fork of sapd failed */
  303. #define SER_ESAP        56    /* execl of sapd failed */
  304. #define SER_NPSD        57    /* IPX Stack Daemon not active */
  305. #define SER_SERV        58    /* Wrong server_type for function requested */
  306. #define SER_INTADDR        59    /* IPX internal_network set cannot change modes */
  307. #define SER_FNUCSAP        60    /* fork of nucsapd failed */
  308. #define SER_UNUSED_61    61    /* Unused */
  309. #define SER_UNUSED_62    62    /* Unused */
  310. #define SAP_ERRNO_LAST    63  /* Last valid SAPPerror value */
  311.  
  312.  
  313. /**************************************************************************/
  314. /*
  315. **    The following are definitions of SAP data is it is seen on the wire.
  316. **
  317. **    Packets are seen as an IPX header (IPX_HDR_SIZE)
  318. **    Followed by SAP data as described by the structures below.
  319. **
  320. **    Sap Packet Operations
  321. */
  322. #define SAP_GSQ         1           /* General Server Query */
  323. #define SAP_GSR         2           /* General Server Response */
  324. #define SAP_PIB         2           /* Periodic Identification Broadcast */
  325. #define SAP_NSQ         3           /* Nearest Server Query */
  326. #define SAP_NSR         4           /* Nearest Server Response */
  327.  
  328. /*
  329. **    Magic "hops" value for shutdown advertising.
  330. */
  331. #define SAP_DOWN        16              
  332.  
  333. /*
  334. **    Packet type and socket for SAP
  335. */
  336. #define SAP_SAS         0x0452        /* SAP Server Advertising socket. */
  337. #define SAP_PACKET_TYPE 0x04
  338.  
  339. /* Some sockets numbers */
  340. #define NVT_SOCKET                ((uint16)0x08063)
  341.  
  342. /*
  343. **    BROADCAST interval determines how often to send our view of the
  344. **    world, as well as the interval to "age" servers.  When we have
  345. **    not received a GSR packet about a server in MAX_FAIL_COUNT
  346. **    age intervals, it is marked SAP_SHUTDOWN hops, and we inform the
  347. **    world it is down.
  348. **    
  349. */
  350. #define SAP_TIMER_MULTIPLIER      30    /* Multiplier for periodic brdcsts in sec */
  351. #define SAP_MAX_SAPS_PER_PACKET        7    /* Max SAPS struct per packet. */
  352. #define SAP_INFO_LENGTH                sizeof(struct saps_s)
  353.  
  354. /*
  355. **
  356. **    SAP server information structure gives server information
  357. **    and is found in GSR, and NSR packets
  358. */
  359. typedef struct saps_s {
  360.         uint16        serverType;        /* Assigned type of server. */
  361.         uint8        serverName[NWMAX_SERVER_NAME_LENGTH];         
  362.         ipxAddr_t    serverAddress;    /* Server address. */
  363.         uint16        serverHops;        /* Number of intermediate nets hi-lo. */
  364. } SAPS, *SAPSP;
  365.  
  366. /*
  367. **    SAP Periodic Broadcast Structure (PIB packet) used to inform sap that my
  368. **    service is still alive.  Must be sent every minute or so.
  369. **    You could actually use the GSR packet and advertise several services
  370. **    at once if you need to.  Actually, though, it is better to use the
  371. **    API SAPAdvertiseMyServer and dispense with building packets, and sending
  372. **    them periodically.  Just do the SAPAdvertiseMyServer once and be done
  373. **    with it.
  374. */
  375. typedef struct sapb_s {
  376.         uint16  sapOperation;           /* Type of SAP packet. */
  377.         SAPS    serverInfo;             /* SAP Server information array. */
  378. } SAPB, *SAPBP;
  379.  
  380. /*
  381. **    SAP query packet (GSQ or NSQ) - Don't use this, 
  382. **    use instead the API SAPGetKnownServers or SAPGetChangedServers for
  383. **    all or changed information, and use SAPGetNearestServer for a NSQ.
  384. */
  385. typedef struct sapq_q {
  386.         uint16 sapOperation;    /* query operation number */
  387.         uint16 serverType;        /* server type wanted hi-lo */
  388. } SAPQ, *SAPQP;
  389.  
  390. /*
  391. **    Query response max packet.  (NSR or GSR packet)
  392. **    with up to MAX_SAPS_PER_PACKET SAPS structures allowed in the packet.
  393. */
  394. typedef struct sapqr_q {
  395.         uint16 sapOperation;
  396.         SAPS    sap[SAP_MAX_SAPS_PER_PACKET];
  397. } SAPQR, *SAPQRP;
  398. #endif /* _NET_NW_SAP_APP_H */
  399.