1/*********************************************************************
2 *
3 * Filename:      af_irda.h
4 * Version:       1.0
5 * Description:   IrDA sockets declarations
6 * Status:        Stable
7 * Author:        Dag Brattli <dagb@cs.uit.no>
8 * Created at:    Tue Dec  9 21:13:12 1997
9 * Modified at:   Fri Jan 28 13:16:32 2000
10 * Modified by:   Dag Brattli <dagb@cs.uit.no>
11 *
12 *     Copyright (c) 1998-2000 Dag Brattli, All Rights Reserved.
13 *     Copyright (c) 2000-2002 Jean Tourrilhes <jt@hpl.hp.com>
14 *
15 *     This program is free software; you can redistribute it and/or
16 *     modify it under the terms of the GNU General Public License as
17 *     published by the Free Software Foundation; either version 2 of
18 *     the License, or (at your option) any later version.
19 *
20 *     Neither Dag Brattli nor University of Troms�� admit liability nor
21 *     provide warranty for any of this software. This material is
22 *     provided "AS-IS" and at no charge.
23 *
24 ********************************************************************/
25
26#ifndef AF_IRDA_H
27#define AF_IRDA_H
28
29#include <linux/irda.h>
30#include <net/irda/irda.h>
31#include <net/irda/iriap.h>		/* struct iriap_cb */
32#include <net/irda/irias_object.h>	/* struct ias_value */
33#include <net/irda/irlmp.h>		/* struct lsap_cb */
34#include <net/irda/irttp.h>		/* struct tsap_cb */
35#include <net/irda/discovery.h>		/* struct discovery_t */
36#include <net/sock.h>
37
38/* IrDA Socket */
39struct irda_sock {
40	/* struct sock has to be the first member of irda_sock */
41	struct sock sk;
42	__u32 saddr;          /* my local address */
43	__u32 daddr;          /* peer address */
44
45	struct lsap_cb *lsap; /* LSAP used by Ultra */
46	__u8  pid;            /* Protocol IP (PID) used by Ultra */
47
48	struct tsap_cb *tsap; /* TSAP used by this connection */
49	__u8 dtsap_sel;       /* remote TSAP address */
50	__u8 stsap_sel;       /* local TSAP address */
51
52	__u32 max_sdu_size_rx;
53	__u32 max_sdu_size_tx;
54	__u32 max_data_size;
55	__u8  max_header_size;
56	struct qos_info qos_tx;
57
58	__u16_host_order mask;           /* Hint bits mask */
59	__u16_host_order hints;          /* Hint bits */
60
61	void *ckey;           /* IrLMP client handle */
62	void *skey;           /* IrLMP service handle */
63
64	struct ias_object *ias_obj;   /* Our service name + lsap in IAS */
65	struct iriap_cb *iriap;	      /* Used to query remote IAS */
66	struct ias_value *ias_result; /* Result of remote IAS query */
67
68	hashbin_t *cachelog;		/* Result of discovery query */
69	__u32 cachedaddr;	/* Result of selective discovery query */
70
71	int nslots;           /* Number of slots to use for discovery */
72
73	int errno;            /* status of the IAS query */
74
75	wait_queue_head_t query_wait;	/* Wait for the answer to a query */
76	struct timer_list watchdog;	/* Timeout for discovery */
77
78	LOCAL_FLOW tx_flow;
79	LOCAL_FLOW rx_flow;
80};
81
82static inline struct irda_sock *irda_sk(struct sock *sk)
83{
84	return (struct irda_sock *)sk;
85}
86
87#endif /* AF_IRDA_H */
88