sap.h revision 22997
155714Skris/* 259191Skris * Copyright (c) 1995 John Hay. All rights reserved. 355714Skris * 455714Skris * Redistribution and use in source and binary forms, with or without 555714Skris * modification, are permitted provided that the following conditions 655714Skris * are met: 755714Skris * 1. Redistributions of source code must retain the above copyright 855714Skris * notice, this list of conditions and the following disclaimer. 9280304Sjkim * 2. Redistributions in binary form must reproduce the above copyright 1055714Skris * notice, this list of conditions and the following disclaimer in the 1155714Skris * documentation and/or other materials provided with the distribution. 1255714Skris * 3. All advertising materials mentioning features or use of this software 1355714Skris * must display the following acknowledgement: 1455714Skris * This product includes software developed by John Hay. 1555714Skris * 4. Neither the name of the author nor the names of any co-contributors 16280304Sjkim * may be used to endorse or promote products derived from this software 1755714Skris * without specific prior written permission. 1855714Skris * 1955714Skris * THIS SOFTWARE IS PROVIDED BY John Hay AND CONTRIBUTORS ``AS IS'' AND 2055714Skris * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2155714Skris * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2255714Skris * ARE DISCLAIMED. IN NO EVENT SHALL John Hay OR CONTRIBUTORS BE LIABLE 23280304Sjkim * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2455714Skris * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2555714Skris * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2655714Skris * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2755714Skris * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2855714Skris * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2955714Skris * SUCH DAMAGE. 3055714Skris * 3155714Skris * $Id$ 3255714Skris */ 3355714Skris#ifndef _SAP_H_ 3455714Skris#define _SAP_H_ 3555714Skris 3655714Skris#define IPXPROTO_SAP IPXPROTO_PXP 3755714Skris 38280304Sjkim#define SAP_REQ 1 3955714Skris#define SAP_RESP 2 4055714Skris#define SAP_REQ_NEAR 3 41280304Sjkim#define SAP_RESP_NEAR 4 4255714Skris 4355714Skris#define SAPCMD_MAX 5 4455714Skris#ifdef SAPCMDS 4555714Skrischar *sapcmds[SAPCMD_MAX] = 4655714Skris { "#0", "REQUEST", "RESPONSE", "REQ NEAREST", "RESP NEAREST"}; 4755714Skris#endif 4855714Skris 4955714Skris#define MAXSAPENTRIES 7 5055714Skris#define SAP_WILDCARD 0xFFFF 5155714Skris#define SERVNAMELEN 48 5255714Skristypedef struct sap_info { 53280304Sjkim u_short ServType; 5455714Skris char ServName[SERVNAMELEN]; 5555714Skris struct ipx_addr ipx; 5655714Skris u_short hops; 5755714Skris }sap_info; 5855714Skris 5955714Skristypedef struct sap_packet { 60280304Sjkim u_short sap_cmd; 61109998Smarkm sap_info sap[0]; /* Variable length. */ 62280304Sjkim }sap_packet; 63280304Sjkim 64280304Sjkimtypedef struct sap_entry { 65280304Sjkim struct sap_entry *forw; 66280304Sjkim struct sap_entry *back; 67280304Sjkim struct sap_entry *clone; 68280304Sjkim struct interface *ifp; 69280304Sjkim struct sap_info sap; 70280304Sjkim struct sockaddr source; 71280304Sjkim int hash; 72280304Sjkim int state; 7355714Skris int timer; 74280304Sjkim int metric; 75280304Sjkim }sap_entry; 7655714Skris 77280304Sjkim#define SAPHASHSIZ 32 /* Should be a power of 2 */ 78280304Sjkim#define SAPHASHMASK (SAPHASHSIZ-1) 7955714Skristypedef struct sap_hash { 80280304Sjkim struct sap_entry *forw; 81280304Sjkim struct sap_entry *back; 82280304Sjkim }sap_hash; 8355714Skris 8455714Skrisextern sap_hash sap_head[SAPHASHSIZ]; 8555714Skris 8655714Skrisextern struct sap_packet *sap_msg; 8755714Skris 8859191Skrisvoid sapinit(void); 8959191Skrisvoid sap_input(struct sockaddr *from, int size); 9055714Skrisvoid sapsndmsg(struct sockaddr *dst, int flags, struct interface *ifp); 91280304Sjkimvoid sap_supply_toall(void); 92280304Sjkimvoid sap_supply(struct sockaddr *dst, 93280304Sjkim int flags, 94280304Sjkim struct interface *ifp, 95280304Sjkim int ServType); 96280304Sjkim 97280304Sjkimstruct sap_entry *sap_lookup(u_short ServType, char *ServName); 98280304Sjkimstruct sap_entry *sap_nearestserver(ushort ServType, struct interface *ifp); 99280304Sjkimvoid sap_add(struct sap_info *si, struct sockaddr *from); 10055714Skrisvoid sap_change(struct sap_entry *sap, 101280304Sjkim struct sap_info *si, 10255714Skris struct sockaddr *from); 103280304Sjkimvoid sap_add_clone(struct sap_entry *sap, 104280304Sjkim struct sap_info *clone, 105280304Sjkim struct sockaddr *from); 10655714Skrisvoid sap_delete(struct sap_entry *sap); 107280304Sjkim 108280304Sjkim#endif /*_SAP_H_*/ 109109998Smarkm 110280304Sjkim