if_frad.h 2.9 KB
Newer Older
L
Linus Torvalds 已提交
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
/*
 * DLCI/FRAD	Definitions for Frame Relay Access Devices.  DLCI devices are
 *		created for each DLCI associated with a FRAD.  The FRAD driver
 *		is not truly a network device, but the lower level device
 *		handler.  This allows other FRAD manufacturers to use the DLCI
 *		code, including its RFC1490 encapsulation alongside the current
 *		implementation for the Sangoma cards.
 *
 * Version:	@(#)if_ifrad.h	0.15	31 Mar 96
 *
 * Author:	Mike McLagan <mike.mclagan@linux.org>
 *
 * Changes:
 *		0.15	Mike McLagan	changed structure defs (packed)
 *					re-arranged flags
 *					added DLCI_RET vars
 *
 *		This program is free software; you can redistribute it and/or
 *		modify it under the terms of the GNU General Public License
 *		as published by the Free Software Foundation; either version
 *		2 of the License, or (at your option) any later version.
 */
#ifndef _FRAD_H_
#define _FRAD_H_

26
#include <uapi/linux/if_frad.h>
L
Linus Torvalds 已提交
27 28


29 30
#if defined(CONFIG_DLCI) || defined(CONFIG_DLCI_MODULE)

L
Linus Torvalds 已提交
31 32 33
/* these are the fields of an RFC 1490 header */
struct frhdr
{
34
   unsigned char  control;
L
Linus Torvalds 已提交
35 36

   /* for IP packets, this can be the NLPID */
37
   unsigned char  pad;
L
Linus Torvalds 已提交
38

39 40
   unsigned char  NLPID;
   unsigned char  OUI[3];
A
Al Viro 已提交
41
   __be16 PID;
L
Linus Torvalds 已提交
42 43

#define IP_NLPID pad 
E
Eric Dumazet 已提交
44
} __packed;
L
Linus Torvalds 已提交
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

/* see RFC 1490 for the definition of the following */
#define FRAD_I_UI		0x03

#define FRAD_P_PADDING		0x00
#define FRAD_P_Q933		0x08
#define FRAD_P_SNAP		0x80
#define FRAD_P_CLNP		0x81
#define FRAD_P_IP		0xCC

struct dlci_local
{
   struct net_device      *master;
   struct net_device      *slave;
   struct dlci_conf       config;
   int                    configured;
   struct list_head	  list;

   /* callback function */
   void              (*receive)(struct sk_buff *skb, struct net_device *);
};

struct frad_local
{
   struct net_device_stats stats;

   /* devices which this FRAD is slaved to */
   struct net_device     *master[CONFIG_DLCI_MAX];
   short             dlci[CONFIG_DLCI_MAX];

   struct frad_conf  config;
   int               configured;	/* has this device been configured */
   int               initialized;	/* mem_start, port, irq set ? */

   /* callback functions */
   int               (*activate)(struct net_device *, struct net_device *);
   int               (*deactivate)(struct net_device *, struct net_device *);
   int               (*assoc)(struct net_device *, struct net_device *);
   int               (*deassoc)(struct net_device *, struct net_device *);
   int               (*dlci_conf)(struct net_device *, struct net_device *, int get);

   /* fields that are used by the Sangoma SDLA cards */
   struct timer_list timer;
   int               type;		/* adapter type */
   int               state;		/* state of the S502/8 control latch */
   int               buffer;		/* current buffer for S508 firmware */
};

#endif /* CONFIG_DLCI || CONFIG_DLCI_MODULE */

95
extern void dlci_ioctl_set(int (*hook)(unsigned int, void __user *));
96

L
Linus Torvalds 已提交
97
#endif