Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | /*
* IrNET protocol module : Synchronous PPP over an IrDA socket.
*
* Jean II - HPL `00 - <jt@hpl.hp.com>
*
* This file contains all definitions and declarations necessary for the
* IRDA part of the IrNET module (dealing with IrTTP, IrIAS and co).
* This file is a private header, so other modules don't want to know
* what's in there...
*/
#ifndef IRNET_IRDA_H
#define IRNET_IRDA_H
/***************************** INCLUDES *****************************/
/* Please add other headers in irnet.h */
#include "irnet.h" /* Module global include */
/************************ CONSTANTS & MACROS ************************/
/*
* Name of the service (socket name) used by IrNET
*/
/* IAS object name (or part of it) */
#define IRNET_SERVICE_NAME "IrNetv1"
/* IAS attribute */
#define IRNET_IAS_VALUE "IrDA:TinyTP:LsapSel"
/* LMP notify name for client (only for /proc/net/irda/irlmp) */
#define IRNET_NOTIFY_NAME "IrNET socket"
/* LMP notify name for server (only for /proc/net/irda/irlmp) */
#define IRNET_NOTIFY_NAME_SERV "IrNET server"
/****************************** TYPES ******************************/
/*
* This is the main structure where we store all the data pertaining to
* the IrNET server (listen for connection requests) and the root
* of the IrNET socket list
*/
typedef struct irnet_root
{
irnet_socket s; /* To pretend we are a client... */
/* Generic stuff */
int magic; /* Paranoia */
int running; /* Are we operational ? */
/* Link list of all IrNET instances opened */
hashbin_t * list;
spinlock_t spinlock; /* Serialize access to the list */
/* Note : the way hashbin has been designed is absolutely not
* reentrant, beware... So, we blindly protect all with spinlock */
/* Handle for the hint bit advertised in IrLMP */
void * skey;
/* Server socket part */
struct ias_object * ias_obj; /* Our service name + lsap in IAS */
} irnet_root;
/**************************** PROTOTYPES ****************************/
/* ----------------------- CONTROL CHANNEL ----------------------- */
static void
irnet_post_event(irnet_socket *,
irnet_event,
__u32,
__u32,
char *,
__u16);
/* ----------------------- IRDA SUBROUTINES ----------------------- */
static inline int
irnet_open_tsap(irnet_socket *);
static inline __u8
irnet_ias_to_tsap(irnet_socket *,
int,
struct ias_value *);
static inline int
irnet_find_lsap_sel(irnet_socket *);
static inline int
irnet_connect_tsap(irnet_socket *);
static inline int
irnet_discover_next_daddr(irnet_socket *);
static inline int
irnet_discover_daddr_and_lsap_sel(irnet_socket *);
static inline int
irnet_dname_to_daddr(irnet_socket *);
/* ------------------------ SERVER SOCKET ------------------------ */
static inline int
irnet_daddr_to_dname(irnet_socket *);
static inline irnet_socket *
irnet_find_socket(irnet_socket *);
static inline int
irnet_connect_socket(irnet_socket *,
irnet_socket *,
struct qos_info *,
__u32,
__u8);
static inline void
irnet_disconnect_server(irnet_socket *,
struct sk_buff *);
static inline int
irnet_setup_server(void);
static inline void
irnet_destroy_server(void);
/* ---------------------- IRDA-TTP CALLBACKS ---------------------- */
static int
irnet_data_indication(void *, /* instance */
void *, /* sap */
struct sk_buff *);
static void
irnet_disconnect_indication(void *,
void *,
LM_REASON,
struct sk_buff *);
static void
irnet_connect_confirm(void *,
void *,
struct qos_info *,
__u32,
__u8,
struct sk_buff *);
static void
irnet_flow_indication(void *,
void *,
LOCAL_FLOW);
static void
irnet_status_indication(void *,
LINK_STATUS,
LOCK_STATUS);
static void
irnet_connect_indication(void *,
void *,
struct qos_info *,
__u32,
__u8,
struct sk_buff *);
/* -------------------- IRDA-IAS/LMP CALLBACKS -------------------- */
static void
irnet_getvalue_confirm(int,
__u16,
struct ias_value *,
void *);
static void
irnet_discovervalue_confirm(int,
__u16,
struct ias_value *,
void *);
#ifdef DISCOVERY_EVENTS
static void
irnet_discovery_indication(discinfo_t *,
DISCOVERY_MODE,
void *);
static void
irnet_expiry_indication(discinfo_t *,
DISCOVERY_MODE,
void *);
#endif
/**************************** VARIABLES ****************************/
/*
* The IrNET server. Listen to connection requests and co...
*/
static struct irnet_root irnet_server;
/* Control channel stuff (note : extern) */
struct irnet_ctrl_channel irnet_events;
/* The /proc/net/irda directory, defined elsewhere... */
#ifdef CONFIG_PROC_FS
extern struct proc_dir_entry *proc_irda;
#endif /* CONFIG_PROC_FS */
#endif /* IRNET_IRDA_H */
|