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