11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*********************************************************************
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Filename:      discovery.h
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Version:
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Description:
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Status:        Experimental.
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Author:        Dag Brattli <dagb@cs.uit.no>
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Created at:    Tue Apr  6 16:53:53 1999
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Modified at:   Tue Oct  5 10:05:10 1999
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Modified by:   Dag Brattli <dagb@cs.uit.no>
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *     Copyright (c) 1999 Dag Brattli, All Rights Reserved.
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *     Copyright (c) 2000-2002 Jean Tourrilhes <jt@hpl.hp.com>
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *     This program is free software; you can redistribute it and/or
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *     modify it under the terms of the GNU General Public License as
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *     published by the Free Software Foundation; either version 2 of
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *     the License, or (at your option) any later version.
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *     This program is distributed in the hope that it will be useful,
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *     but WITHOUT ANY WARRANTY; without even the implied warranty of
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *     GNU General Public License for more details.
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *     You should have received a copy of the GNU General Public License
26a6227e26d946bc56df47ca5fe418660a07ef8288Jeff Kirsher *     along with this program; if not, see <http://www.gnu.org/licenses/>.
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ********************************************************************/
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef DISCOVERY_H
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DISCOVERY_H
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/param.h>
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <net/irda/irda.h>
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <net/irda/irqueue.h>		/* irda_queue_t */
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <net/irda/irlap_event.h>	/* LAP_REASON */
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DISCOVERY_EXPIRE_TIMEOUT (2*sysctl_discovery_timeout*HZ)
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DISCOVERY_DEFAULT_SLOTS  0
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  This type is used by the protocols that transmit 16 bits words in
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  little endian format. A little endian machine stores MSB of word in
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  byte[1] and LSB in byte[0]. A big endian machine stores MSB in byte[0]
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  and LSB in byte[1].
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This structure is used in the code for things that are endian neutral
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * but that fit in a word so that we can manipulate them efficiently.
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * By endian neutral, I mean things that are really an array of bytes,
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * and always used as such, for example the hint bits. Jean II
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef union {
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u16 word;
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u8  byte[2];
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} __u16_host_order;
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Types of discovery */
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef enum {
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	DISCOVERY_LOG,		/* What's in our discovery log */
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	DISCOVERY_ACTIVE,	/* Doing our own discovery on the medium */
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	DISCOVERY_PASSIVE,	/* Peer doing discovery on the medium */
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	EXPIRY_TIMEOUT,		/* Entry expired due to timeout */
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} DISCOVERY_MODE;
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NICKNAME_MAX_LEN 21
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Basic discovery information about a peer */
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct irda_device_info		discinfo_t;	/* linux/irda.h */
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The DISCOVERY structure is used for both discovery requests and responses
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct discovery_t {
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	irda_queue_t	q;		/* Must be first! */
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	discinfo_t	data;		/* Basic discovery information */
78f4ab2f72e9340207ae95e2a7622a74220a61f46aJoe Perches	int		name_len;	/* Length of nickname */
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	LAP_REASON	condition;	/* More info about the discovery */
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int		gen_addr_bit;	/* Need to generate a new device
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					 * address? */
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int		nslots;		/* Number of slots to use when
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					 * discovering */
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	timestamp;	/* Last time discovered */
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long	firststamp;	/* First time discovered */
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} discovery_t;
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid irlmp_add_discovery(hashbin_t *cachelog, discovery_t *discovery);
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid irlmp_add_discovery_log(hashbin_t *cachelog, hashbin_t *log);
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid irlmp_expire_discoveries(hashbin_t *log, __u32 saddr, int force);
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct irda_device_info *irlmp_copy_discoveries(hashbin_t *log, int *pn,
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds						__u16 mask, int old_entries);
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
96