|
|
1.1 root 1: /*
2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: /*
23: * Copyright (c) 1996 Apple Computer, Inc.
24: *
25: * Created April 23, 1996, by Justin C. Walker
26: *
27: * File: aurp.h
28: */
29:
30: #ifndef _NETAT_AURP_H_
31: #define _NETAT_AURP_H_
32:
33: /*
34: * AURP device ioctl (I_STR) 'subcommands'
35: */
36: #define AUC_CFGTNL 0 /* Configure Tunnels */
37: #define AUC_SHTDOWN 1 /* Shutdown AURP */
38: #define AUC_EXPNET 2 /* Configure exported networks */
39: #define AUC_HIDENET 3 /* Configure hidden netowrks */
40: #define AUC_UDPPORT 4 /* UPD Port number */
41: #define AUC_NETLIST 5 /* List of remote endpoints */
42: #define AUC_TIMER 6 /* Configured update interval timer */
43: #define AUC_ADDNET 7 /* Add remote endpoints */
44: #define AUC_ACCEPTALL 8 /* Accept all nets */
45: #define AUC_MAX 9 /* Maximun numbers of access nets */
46:
47: /* Default AURP-over-UDP port */
48: #define AURP_SOCKNUM 387
49: #define AURP_MAXNETACCESS 64
50:
51: #ifdef KERNEL
52:
53: #define AURPCODE_REG 0
54: #define AURPCODE_RTMPPKT 1
55: #define AURPCODE_DATAPKT 2
56: #define AURPCODE_AURPPROTO 3
57: #define AURPCODE_DEBUGINFO 10
58: #ifdef NOT_USED
59: #define AURPCODE_RTINFO 11 /* was used to set up pointers to the
60: routing table, the zone table, and
61: several functions */
62: #endif
63: #define AURPCODE_RTUPDATE 12
64:
65: #define AURPSTATE_Unconnected 0
66: #define AURPSTATE_Connected 1
67: #define AURPSTATE_WaitingForOpenRsp 2
68: #define AURPSTATE_WaitingForRIRsp 3
69: #define AURPSTATE_WaitingForTickleAck 4
70: #define AURPSTATE_WaitingForRIAck1 5
71: #define AURPSTATE_WaitingForRIAck2 6
72: #define AURPSTATE_WaitingForRIAck3 7
73:
74: #define AURPCMD_RIReq 1
75: #define AURPCMD_RIRsp 2
76: #define AURPCMD_RIAck 3
77: #define AURPCMD_RIUpd 4
78: #define AURPCMD_RDReq 5
79: #define AURPCMD_ZReq 6
80: #define AURPCMD_ZRsp 7
81: #define AURPCMD_OpenReq 8
82: #define AURPCMD_OpenRsp 9
83: #define AURPCMD_Tickle 14
84: #define AURPCMD_TickleAck 15
85:
86: #define AURPSUBCODE_ZoneInfo1 1
87: #define AURPSUBCODE_ZoneInfo2 2
88: #define AURPSUBCODE_GetZoneNets 3
89: #define AURPSUBCODE_GetDomainZoneList 4
90:
91: #define AURPEV_Null 0
92: #define AURPEV_NetAdded 1
93: #define AURPEV_NetDeleted 2
94: #define AURPEV_NetRouteChange 3
95: #define AURPEV_NetDistChange 4
96: #define AURPEV_NetZoneChange 5
97:
98: #define AURP_Version 1
99: #define AURP_ProbeRetryInterval 300
100: #define AURP_MaxTickleRetry 4
101: #define AURP_TickleRetryInterval 30
102: #define AURP_MaxRetry 10
103: #define AURP_RetryInterval 3
104: #define AURP_UpdateRate 1
105: #define AURP_UDType 0
106: #define AURP_UDNode 1
107: #define AURP_UDSize 2
108: #define AURP_FirstSeqNum 1
109: #define AURP_LastSeqNum 65535
110: #define AURP_MaxPktSize 1400
111: #define AURP_MaxNetAccess 64
112: #define AURP_NetHiden 0x01
113:
114: #define AURPERR_NormalConnectionClose -1
115: #define AURPERR_RoutingLoopDetected -2
116: #define AURPERR_ConnectionOutOfSync -3
117: #define AURPERR_OptionNegotiationError -4
118: #define AURPERR_InvalidVersionNumber -5
119: #define AURPERR_InsufficientResources -6
120: #define AURPERR_AuthenticationError -7
121:
122: #define AURPFLG_NA 0x4000
123: #define AURPFLG_ND 0x2000
124: #define AURPFLG_NDC 0x1000
125: #define AURPFLG_ZC 0x0800
126: #define AURPFLG_RMA 0x4000
127: #define AURPFLG_HCRA 0x2000
128: #define AURPFLG_SZI 0x4000
129: #define AURPFLG_LAST 0x8000
130:
131: /*
132: * AURP state block
133: */
134: typedef struct {
135: unsigned char get_zi; /* get zone info flag */
136: unsigned char rem_node; /* node id of a tunnel peer */
137: unsigned char tickle_retry; /* tickle retry count */
138: unsigned char rcv_retry; /* data receiver retry count */
139: unsigned char snd_state; /* data sender state */
140: unsigned char rcv_state; /* data receiver state */
141: unsigned char filler[2];
142: unsigned short rcv_update_rate;
143: unsigned short snd_next_entry; /* next entry in RT */
144: unsigned short rcv_env;
145: unsigned short snd_sui;
146: unsigned short rcv_connection_id; /* data receiver connection id */
147: unsigned short snd_connection_id; /* data sender connection id */
148: unsigned short rcv_sequence_number; /* data receiver sequence number */
149: unsigned short snd_sequence_number; /* data sender sequence number */
150: int rcv_tmo;
151: int snd_tmo;
152: gbuf_t *rsp_m;
153: gbuf_t *upd_m;
154: } aurp_state_t;
155:
156: /*
157: * AURP protocol header
158: */
159: typedef struct {
160: unsigned short connection_id;
161: unsigned short sequence_number;
162: unsigned short command_code;
163: unsigned short flags;
164: } aurp_hdr_t;
165:
166: #ifdef KERNEL
167:
168: #ifdef AURP_SUPPORT
169:
170: extern atlock_t aurpgen_lock;
171: extern gref_t *aurp_gref;
172: extern unsigned char dst_addr_cnt;
173: extern unsigned char net_access_cnt;
174: extern unsigned char net_export;
175: extern unsigned short rcv_connection_id;
176: extern int net_port;
177: extern int update_tmo;
178: extern aurp_state_t aurp_state[];
179: extern unsigned short net_access[];
180: #endif
181:
182: struct myq
183: { struct mbuf *q_head;
184: struct mbuf *q_tail;
185: int q_cnt;
186: };
187:
188: #define LOCK_DECL(x) atlock_t x
189:
190: /*
191: * Quandry: if we use a single socket, we have to rebind on each call.
192: * If we use separate sockets per tunnel endpoint, we have to examine
193: * each one on wakeup. What to do; what to do?
194: */
195: struct aurp_global_t
196: { int src_addr; /* What's our IP address? */
197: int udp_port; /* Local UDP port */
198: unsigned short net_access[AURP_MAXNETACCESS];
199: long dst_addr[256]; /* Tunnel 'other ends', passed in from user */
200: int pid; /* Who are we? */
201: struct socket *tunnel; /* IP socket for all IP endpoints */
202: int event; /* Sleep queue anchor */
203: int event_anchor; /* Sleep queue anchor */
204: atlock_t glock; /* aurp_global lock */
205: struct uio auio; /* Dummy uio struct for soreceive() */
206: /* Statistics */
207: unsigned int toosmall; /* size less than domain header, from UDP */
208: unsigned int no_mbufs; /* gbuf_to_mbuf failed */
209: unsigned int no_gbufs; /* mbuf_to_gbuf failed */
210: unsigned int shutdown; /* shutdown flag */
211: unsigned int running; /* running flag */
212: };
213:
214: #define AE_ATALK 0x01 /* A/talk input event */
215: #define AE_UDPIP 0x02 /* UDP/IP input event */
216: #define AE_SHUTDOWN 0x04 /* Shutdown AURP process */
217:
218: void aurp_wakeup __P((struct socket *, caddr_t, int));
219: struct mbuf *at_gbuf_to_mbuf __P((gbuf_t *));
220: gbuf_t *at_mbuf_to_gbuf __P((struct mbuf *, int));
221: int at_insert __P((gbuf_t *m, unsigned int type, unsigned int node));
222: int ddp_AURPfuncx __P((int code, void *param, unsigned char node));
223: int AURPinit __P((void));
224: int aurpd_start __P((void));
225: void atalk_to_ip __P((gbuf_t *m));
226: void AURPaccess __P((void));
227: void AURPshutdown __P((void));
228: void AURPiocack __P((gref_t *gref, gbuf_t *m));
229: void AURPiocnak __P((gref_t *gref, gbuf_t *m, int error));
230: void AURPsndZReq __P((aurp_state_t *state));
231: void AURPsndZRsp __P((aurp_state_t *state, gbuf_t *dat_m, int flag));
232: void AURPsndRIUpd __P((aurp_state_t *state));
233: void AURPsndRIReq __P((aurp_state_t *state));
234: void AURPsndRIAck __P((aurp_state_t *state, gbuf_t *m, unsigned short flags));
235: void AURPsndOpenReq __P((aurp_state_t *state));
236: void AURPsndRDReq __P((aurp_state_t *state));
237: void AURPrcvZReq __P((aurp_state_t *state, gbuf_t *m));
238: void AURPrcvZRsp __P((aurp_state_t *state, gbuf_t *m));
239: void AURPrcvRIUpd __P((aurp_state_t *state, gbuf_t *m));
240: void AURPrcvRIReq __P((aurp_state_t *state, gbuf_t *m));
241: void AURPrcvRIAck __P((aurp_state_t *state, gbuf_t *m));
242: void AURPrcvRIRsp __P((aurp_state_t *state, gbuf_t *m));
243: void AURPrcvOpenReq __P((aurp_state_t *state, gbuf_t *m));
244: void AURPrcvOpenRsp __P((aurp_state_t *state, gbuf_t *m));
245: void AURPrcvTickle __P((aurp_state_t *state, gbuf_t *m));
246: void AURPrcvTickleAck __P((aurp_state_t *state, gbuf_t *m));
247: void AURPrcvRDReq __P((aurp_state_t *state, gbuf_t *m));
248: void AURPfreemsg __P((gbuf_t *m));
249: void AURPrtupdate __P((RT_entry *entry, unsigned char ev));
250: void AURPsend __P((gbuf_t *mdata, int type, int node));
251: void AURPcleanup __P((aurp_state_t *state));
252: void AURPpurgeri __P((unsigned char node));
253: int AURPgetri __P((short next_entry, unsigned char *buf, short *len));
254: int AURPsetri __P((unsigned char node, gbuf_t *m));
255: int AURPupdateri __P((unsigned char node, gbuf_t *m));
256:
257: #endif /* KERNEL */
258:
259: /* AURP header for IP tunneling */
260: typedef struct aurp_domain
261: { char dst_length;
262: char dst_authority;
263: short dst_distinguisher;
264: long dst_address;
265: char src_length;
266: char src_authority;
267: short src_distinguisher;
268: long src_address;
269: short version;
270: short reserved;
271: short type;
272: } aurp_domain_t;
273:
274: /* AURP/domain header constants */
275: #define AUD_Version 0x1
276: #define AUD_Atalk 0x2
277: #define AUD_AURP 0x3
278:
279: /* IP domain identifier constants */
280: #define IP_LENGTH 7
281: #define IP_AUTHORITY 1
282: #define IP_DISTINGUISHER 0
283: /* Need this because the )(*&^%$#@ compiler rounds up the size */
284: #define IP_DOMAINSIZE 22
285:
286: /****### LD 9/26/97*/
287: extern struct aurp_global_t aurp_global;
288: #endif /* KERNEL */
289: #endif /* _NETAT_AURP_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.