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