11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DLCI/FRAD Definitions for Frame Relay Access Devices. DLCI devices are 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * created for each DLCI associated with a FRAD. The FRAD driver 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * is not truly a network device, but the lower level device 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * handler. This allows other FRAD manufacturers to use the DLCI 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * code, including its RFC1490 encapsulation alongside the current 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * implementation for the Sangoma cards. 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Version: @(#)if_ifrad.h 0.15 31 Mar 96 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Author: Mike McLagan <mike.mclagan@linux.org> 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Changes: 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 0.15 Mike McLagan changed structure defs (packed) 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * re-arranged flags 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * added DLCI_RET vars 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * modify it under the terms of the GNU General Public License 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * as published by the Free Software Foundation; either version 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 2 of the License, or (at your option) any later version. 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _FRAD_H_ 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _FRAD_H_ 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 26607ca46e97a1b6594b29647d98a32d545c24bdffDavid Howells#include <uapi/linux/if_frad.h> 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 293121a48d87a580f369eeb26aa0a075142274a353Krzysztof Hałasa#if defined(CONFIG_DLCI) || defined(CONFIG_DLCI_MODULE) 303121a48d87a580f369eeb26aa0a075142274a353Krzysztof Hałasa 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* these are the fields of an RFC 1490 header */ 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct frhdr 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 346a878184c202395ea17212f111ab9ec4b5f6d6eeJan Blunck unsigned char control; 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* for IP packets, this can be the NLPID */ 376a878184c202395ea17212f111ab9ec4b5f6d6eeJan Blunck unsigned char pad; 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 396a878184c202395ea17212f111ab9ec4b5f6d6eeJan Blunck unsigned char NLPID; 406a878184c202395ea17212f111ab9ec4b5f6d6eeJan Blunck unsigned char OUI[3]; 41904584018e9ba30a3e562d86ee7dfb6239105664Al Viro __be16 PID; 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IP_NLPID pad 44bc10502dba37d3b210efd9f3867212298f13b78eEric Dumazet} __packed; 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* see RFC 1490 for the definition of the following */ 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_I_UI 0x03 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_P_PADDING 0x00 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_P_Q933 0x08 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_P_SNAP 0x80 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_P_CLNP 0x81 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_P_IP 0xCC 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dlci_local 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct net_device *master; 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct net_device *slave; 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dlci_conf config; 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int configured; 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct list_head list; 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* callback function */ 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds void (*receive)(struct sk_buff *skb, struct net_device *); 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct frad_local 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct net_device_stats stats; 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* devices which this FRAD is slaved to */ 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct net_device *master[CONFIG_DLCI_MAX]; 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short dlci[CONFIG_DLCI_MAX]; 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct frad_conf config; 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int configured; /* has this device been configured */ 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int initialized; /* mem_start, port, irq set ? */ 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* callback functions */ 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*activate)(struct net_device *, struct net_device *); 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*deactivate)(struct net_device *, struct net_device *); 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*assoc)(struct net_device *, struct net_device *); 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*deassoc)(struct net_device *, struct net_device *); 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*dlci_conf)(struct net_device *, struct net_device *, int get); 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* fields that are used by the Sangoma SDLA cards */ 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct timer_list timer; 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int type; /* adapter type */ 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int state; /* state of the S502/8 control latch */ 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int buffer; /* current buffer for S508 firmware */ 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* CONFIG_DLCI || CONFIG_DLCI_MODULE */ 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 9520380731bc2897f2952ae055420972ded4cd786eArnaldo Carvalho de Meloextern void dlci_ioctl_set(int (*hook)(unsigned int, void __user *)); 963121a48d87a580f369eeb26aa0a075142274a353Krzysztof Hałasa 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 98