Imported Upstream version 5.1
[debian/gcpegg] / global.h
1 /* PROGRAM:     eggsh
2  * FILE:        $Header: /home/egg/src/RCS/global.h,v 1.5 1999/02/28 20:10:29 ghn Exp $
3  * PURPOSE:     Declare global types, constants, and variables
4  * AUTHOR:      Greg Nelson
5  * DATE:        98-04-12
6  *
7  * REVISED:
8  * $Log: global.h,v $
9  * Revision 1.5  1999/02/28 20:10:29  ghn
10  * Version 5.1: Added netmask field for egg.
11  *
12  * Revision 1.4  1998/12/31 22:11:05  ghn
13  *  Rev 5 code: includes multi-reg support, HTML, etc.
14  *
15  * Revision 1.3  1998/08/01 18:51:25  ghn
16  * Added John's byte-order-independence changes.
17  *
18  * Revision 1.2  1998/08/01 17:08:20  ghn
19  * Added upcmd and dncmd for DND.
20  *
21  * Revision 1.1  1998/07/21 11:37:56  ghn
22  * Initial revision
23  *
24  * Copyright 1998 - Greg Nelson
25  * Redistributable under the terms of the GNU Public Licence (GPL)
26  */
27
28 #ifndef _GLOBAL_H
29
30 #include <netinet/in.h>
31
32 #include "byteorder.h"          /* Build byte-order independent version */
33
34 /* Good for i386, but be careful... */
35 typedef unsigned char byte;
36 typedef unsigned char uint8;
37 typedef unsigned short uint16;
38 typedef unsigned long uint32;
39 typedef char int8;
40 typedef short int16;
41 typedef long int32;
42
43 /* Some fixed assumptions:
44    Trial type is always bitsum.
45    Bit spacing method does not need to be communicated, since we'll
46      choose something at compile time. 
47    Record size ranges from one to MAXSAMP_REC trials, which are assumed to
48      be evenly spaced starting at timestamp.
49    Records always begin on round seconds divisible by sec_rec, which
50      can range from one to MAXSEC_REC.
51 */
52
53 /* Some adjustable assumptions: */
54
55 #define MINBITS         32      /* Minimum bits per trial */
56 #define MAXBITS         253     /* Maximum bits per trial */
57 #define MAXSAMP_REC     10      /* Maximum samples/record */
58 #define MAXSEC_REC      3000    /* Maximum seconds/record */    
59
60 #define SEC_PKT         60      /* Desired number of seconds per packet */
61 #define MAXREC_PKT      60      /* Maximum number of records per packet
62                                    For 1-second records (typ) this is 1 min */
63
64 #define EGG_MISSING_DATA 254    /* Value used to represent missing data in trials array. */
65
66 #if MAXBITS < 256
67 typedef uint8 trial;
68 #else
69 #error "Can't represent MAXBITS in a byte value."
70 #endif
71
72 #if MAXBITS >= EGG_MISSING_DATA
73 #error "MAXBITS is >= EGG_MISSING_DATA: ambiguous trial data possible."
74 #endif
75
76 typedef struct eggrec {
77   uint32 timestamp;     /* Seconds since the epoch (19700101000000Z) */
78   trial trials[MAXSAMP_REC]; /* Trial values */
79 } EggRec;               /* Normally 16 bytes total */
80
81 /* Make sure type field of packet is non-zero so that CRC works. */
82
83 typedef struct genpacket {
84   uint16 type;
85   uint16 pktsize;
86 } GenPacket;
87
88 #define DATA_PACKET     0x0101
89 typedef struct eggheader {
90   uint16 type;          /* type */
91   uint16 pktsize;       /* Number of bytes in packet */
92   uint16 eggid;         /* Identifying number for device */
93   uint16 samp_rec;      /* Number of samples per record */
94   uint16 sec_rec;       /* Number of seconds per record */
95   uint16 rec_pkt;       /* Number of records per packet */
96   trial trialsz;        /* Number of bits per trial */
97   uint16 numrec;        /* Number of valid records */
98 } EggHeader;
99
100 #define REQ_PACKET      0x0202
101 typedef struct reqpacket {
102   uint16 type;          /* type */
103   uint16 pktsize;       /* Number of bytes in packet */
104   uint16 eggid;         /* Identifying number for device */
105   uint32 starttm;       /* Time for first record to send */
106   uint16 cksum;         /* No data, checksum goes inside */
107 } ReqPacket;
108
109 #define AWAKE_PACKET    0x0303
110 typedef struct awakepacket {
111   uint16 type;          /* type */
112   uint16 pktsize;       /* Number of bytes in packet */
113   uint16 eggid;         /* Identifying number for device */
114   uint32 nowtm;         /* Egg's identification of "now" (zulu) */
115   uint16 cksum;         /* No data, checksum goes inside */
116 } AwakePacket;
117
118 #define SETTINGS_PACKET 0x0404
119 typedef struct setpacket {
120   uint16 type;          /* type */
121   uint16 pktsize;       /* Number of bytes in packet */
122   uint16 eggid;         /* Identifying number for device */
123   uint32 nowtm;         /* Egg's identification of "now" (zulu) */
124   uint16 samp_rec;      /* Number of samples per record */
125   uint16 sec_rec;       /* Number of seconds per record */
126   uint16 rec_pkt;       /* Number of records per packet */
127   trial trialsz;        /* Number of bits per trial */
128   uint16 cksum;         /* No data, checksum goes inside */
129 } SettingsPacket;
130
131 /*  An EggCarton is the in-memory representation of a data
132     packet.  Fields in it are thus in host byte order,
133     being translated, as appropriate, when transferred
134     to and from a DATA_PACKET by Packetize() and
135     Unpacketize().  */
136
137 typedef struct eggpkt {
138   EggHeader hdr;        /* Header (type = DATA_PACKET) */
139   EggRec records[MAXREC_PKT];
140 } EggCarton;
141
142 typedef struct collect {
143   EggHeader opts;
144   EggRec data;
145   uint16 sampct;                /* Count of completed samples in rec */
146   int32 dd;                     /* Device handle */
147 } CollectRecord;
148
149 #define CONN_PERM       0
150 #define CONN_DND        1
151
152 typedef struct eggentry {
153   char *name;
154   int16 id;
155   struct sockaddr_in ipaddr;
156   int16 netmask;        /* Number of significant bits, default 32. */
157   char *primbasket;
158   int16 conntype;
159   int16 connival;       /* Connect interval in minutes */
160   int32 lastupd;        /* Zulutime of last update received */
161   int16 setup;          /* Does setup match config file? */
162   char *upcmd;          /* Command to bring net up (req if conntype == DND) */
163   char *dncmd;          /* Command to bring net down */
164   char *url;            /* URL describing basket or NULL */
165 } EggEntry;
166
167 typedef struct basketentry {
168   char *name;
169   struct sockaddr_in ipaddr;
170 } BasketEntry;
171
172 #define MAX_EGGS        100
173 #define MAX_BASKETS     5
174
175 extern EggEntry eggtable[MAX_EGGS];
176 extern BasketEntry baskettable[MAX_BASKETS];
177 extern short numeggs, numbaskets;
178 extern EggHeader protocol;
179
180 extern char *pgmname;   /* For error messages to announce program name */
181
182 #define TRUE    -1
183 #define FALSE   0
184
185 #define _GLOBAL_H
186 #endif /* _GLOBAL_H */