]> git.saurik.com Git - apple/xnu.git/blame - bsd/netat/aurp.h
xnu-344.34.tar.gz
[apple/xnu.git] / bsd / netat / aurp.h
CommitLineData
1c79356b
A
1/*
2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
de355530
A
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.
1c79356b 11 *
de355530
A
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
1c79356b
A
14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
de355530
A
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.
1c79356b
A
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_
9bccf70c 32#include <sys/appleapiopts.h>
1c79356b
A
33
34/*
35 * AURP device ioctl (I_STR) 'subcommands'
36 */
37#define AUC_CFGTNL 0 /* Configure Tunnels */
38#define AUC_SHTDOWN 1 /* Shutdown AURP */
39#define AUC_EXPNET 2 /* Configure exported networks */
40#define AUC_HIDENET 3 /* Configure hidden netowrks */
41#define AUC_UDPPORT 4 /* UPD Port number */
42#define AUC_NETLIST 5 /* List of remote endpoints */
43#define AUC_TIMER 6 /* Configured update interval timer */
44#define AUC_ADDNET 7 /* Add remote endpoints */
45#define AUC_ACCEPTALL 8 /* Accept all nets */
46#define AUC_MAX 9 /* Maximun numbers of access nets */
47
48/* Default AURP-over-UDP port */
49#define AURP_SOCKNUM 387
50#define AURP_MAXNETACCESS 64
51
52#ifdef KERNEL
9bccf70c 53#ifdef __APPLE_API_PRIVATE
1c79356b
A
54
55#define AURPCODE_REG 0
56#define AURPCODE_RTMPPKT 1
57#define AURPCODE_DATAPKT 2
58#define AURPCODE_AURPPROTO 3
59#define AURPCODE_DEBUGINFO 10
60#ifdef NOT_USED
61#define AURPCODE_RTINFO 11 /* was used to set up pointers to the
62 routing table, the zone table, and
63 several functions */
64#endif
65#define AURPCODE_RTUPDATE 12
66
67#define AURPSTATE_Unconnected 0
68#define AURPSTATE_Connected 1
69#define AURPSTATE_WaitingForOpenRsp 2
70#define AURPSTATE_WaitingForRIRsp 3
71#define AURPSTATE_WaitingForTickleAck 4
72#define AURPSTATE_WaitingForRIAck1 5
73#define AURPSTATE_WaitingForRIAck2 6
74#define AURPSTATE_WaitingForRIAck3 7
75
76#define AURPCMD_RIReq 1
77#define AURPCMD_RIRsp 2
78#define AURPCMD_RIAck 3
79#define AURPCMD_RIUpd 4
80#define AURPCMD_RDReq 5
81#define AURPCMD_ZReq 6
82#define AURPCMD_ZRsp 7
83#define AURPCMD_OpenReq 8
84#define AURPCMD_OpenRsp 9
85#define AURPCMD_Tickle 14
86#define AURPCMD_TickleAck 15
87
88#define AURPSUBCODE_ZoneInfo1 1
89#define AURPSUBCODE_ZoneInfo2 2
90#define AURPSUBCODE_GetZoneNets 3
91#define AURPSUBCODE_GetDomainZoneList 4
92
93#define AURPEV_Null 0
94#define AURPEV_NetAdded 1
95#define AURPEV_NetDeleted 2
96#define AURPEV_NetRouteChange 3
97#define AURPEV_NetDistChange 4
98#define AURPEV_NetZoneChange 5
99
100#define AURP_Version 1
101#define AURP_ProbeRetryInterval 300
102#define AURP_MaxTickleRetry 4
103#define AURP_TickleRetryInterval 30
104#define AURP_MaxRetry 10
105#define AURP_RetryInterval 3
106#define AURP_UpdateRate 1
107#define AURP_UDType 0
108#define AURP_UDNode 1
109#define AURP_UDSize 2
110#define AURP_FirstSeqNum 1
111#define AURP_LastSeqNum 65535
112#define AURP_MaxPktSize 1400
113#define AURP_MaxNetAccess 64
114#define AURP_NetHiden 0x01
115
116#define AURPERR_NormalConnectionClose -1
117#define AURPERR_RoutingLoopDetected -2
118#define AURPERR_ConnectionOutOfSync -3
119#define AURPERR_OptionNegotiationError -4
120#define AURPERR_InvalidVersionNumber -5
121#define AURPERR_InsufficientResources -6
122#define AURPERR_AuthenticationError -7
123
124#define AURPFLG_NA 0x4000
125#define AURPFLG_ND 0x2000
126#define AURPFLG_NDC 0x1000
127#define AURPFLG_ZC 0x0800
128#define AURPFLG_RMA 0x4000
129#define AURPFLG_HCRA 0x2000
130#define AURPFLG_SZI 0x4000
131#define AURPFLG_LAST 0x8000
132
133/*
134 * AURP state block
135 */
136typedef struct {
137 unsigned char get_zi; /* get zone info flag */
138 unsigned char rem_node; /* node id of a tunnel peer */
139 unsigned char tickle_retry; /* tickle retry count */
140 unsigned char rcv_retry; /* data receiver retry count */
141 unsigned char snd_state; /* data sender state */
142 unsigned char rcv_state; /* data receiver state */
143 unsigned char filler[2];
144 unsigned short rcv_update_rate;
145 unsigned short snd_next_entry; /* next entry in RT */
146 unsigned short rcv_env;
147 unsigned short snd_sui;
148 unsigned short rcv_connection_id; /* data receiver connection id */
149 unsigned short snd_connection_id; /* data sender connection id */
150 unsigned short rcv_sequence_number; /* data receiver sequence number */
151 unsigned short snd_sequence_number; /* data sender sequence number */
152 int rcv_tmo;
153 int snd_tmo;
154 gbuf_t *rsp_m;
155 gbuf_t *upd_m;
156} aurp_state_t;
157
158/*
159 * AURP protocol header
160 */
161typedef struct {
162 unsigned short connection_id;
163 unsigned short sequence_number;
164 unsigned short command_code;
165 unsigned short flags;
166} aurp_hdr_t;
167
1c79356b
A
168#ifdef AURP_SUPPORT
169
170extern atlock_t aurpgen_lock;
171extern gref_t *aurp_gref;
172extern unsigned char dst_addr_cnt;
173extern unsigned char net_access_cnt;
174extern unsigned char net_export;
175extern unsigned short rcv_connection_id;
176extern int net_port;
177extern int update_tmo;
178extern aurp_state_t aurp_state[];
179extern unsigned short net_access[];
180#endif
181
182struct 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 */
195struct 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
218void aurp_wakeup __P((struct socket *, caddr_t, int));
219struct mbuf *at_gbuf_to_mbuf __P((gbuf_t *));
220gbuf_t *at_mbuf_to_gbuf __P((struct mbuf *, int));
221int at_insert __P((gbuf_t *m, unsigned int type, unsigned int node));
222int ddp_AURPfuncx __P((int code, void *param, unsigned char node));
223int AURPinit __P((void));
224int aurpd_start __P((void));
225void atalk_to_ip __P((gbuf_t *m));
226void AURPaccess __P((void));
227void AURPshutdown __P((void));
228void AURPiocack __P((gref_t *gref, gbuf_t *m));
229void AURPiocnak __P((gref_t *gref, gbuf_t *m, int error));
230void AURPsndZReq __P((aurp_state_t *state));
231void AURPsndZRsp __P((aurp_state_t *state, gbuf_t *dat_m, int flag));
232void AURPsndRIUpd __P((aurp_state_t *state));
233void AURPsndRIReq __P((aurp_state_t *state));
234void AURPsndRIAck __P((aurp_state_t *state, gbuf_t *m, unsigned short flags));
235void AURPsndOpenReq __P((aurp_state_t *state));
236void AURPsndRDReq __P((aurp_state_t *state));
237void AURPrcvZReq __P((aurp_state_t *state, gbuf_t *m));
238void AURPrcvZRsp __P((aurp_state_t *state, gbuf_t *m));
239void AURPrcvRIUpd __P((aurp_state_t *state, gbuf_t *m));
240void AURPrcvRIReq __P((aurp_state_t *state, gbuf_t *m));
241void AURPrcvRIAck __P((aurp_state_t *state, gbuf_t *m));
242void AURPrcvRIRsp __P((aurp_state_t *state, gbuf_t *m));
243void AURPrcvOpenReq __P((aurp_state_t *state, gbuf_t *m));
244void AURPrcvOpenRsp __P((aurp_state_t *state, gbuf_t *m));
245void AURPrcvTickle __P((aurp_state_t *state, gbuf_t *m));
246void AURPrcvTickleAck __P((aurp_state_t *state, gbuf_t *m));
247void AURPrcvRDReq __P((aurp_state_t *state, gbuf_t *m));
248void AURPfreemsg __P((gbuf_t *m));
249void AURPrtupdate __P((RT_entry *entry, unsigned char ev));
250void AURPsend __P((gbuf_t *mdata, int type, int node));
251void AURPcleanup __P((aurp_state_t *state));
252void AURPpurgeri __P((unsigned char node));
253int AURPgetri __P((short next_entry, unsigned char *buf, short *len));
254int AURPsetri __P((unsigned char node, gbuf_t *m));
255int AURPupdateri __P((unsigned char node, gbuf_t *m));
256
1c79356b
A
257/* AURP header for IP tunneling */
258typedef struct aurp_domain
259{ char dst_length;
260 char dst_authority;
261 short dst_distinguisher;
262 long dst_address;
263 char src_length;
264 char src_authority;
265 short src_distinguisher;
266 long src_address;
267 short version;
268 short reserved;
269 short type;
270} aurp_domain_t;
271
272/* AURP/domain header constants */
273#define AUD_Version 0x1
274#define AUD_Atalk 0x2
275#define AUD_AURP 0x3
276
277/* IP domain identifier constants */
278#define IP_LENGTH 7
279#define IP_AUTHORITY 1
280#define IP_DISTINGUISHER 0
281/* Need this because the )(*&^%$#@ compiler rounds up the size */
282#define IP_DOMAINSIZE 22
283
284/****### LD 9/26/97*/
285extern struct aurp_global_t aurp_global;
9bccf70c 286#endif /* __APPLE_API_PRIVATE */
1c79356b
A
287#endif /* KERNEL */
288#endif /* _NETAT_AURP_H_ */