if_frad.h revision 1da177e4c3f41524e886b7f1b8a0c1fc7321cac
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 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _FRAD_H_ 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _FRAD_H_ 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/config.h> 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/if.h> 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if defined(CONFIG_DLCI) || defined(CONFIG_DLCI_MODULE) 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Structures and constants associated with the DLCI device driver */ 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dlci_add 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char devname[IFNAMSIZ]; 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short dlci; 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DLCI_GET_CONF (SIOCDEVPRIVATE + 2) 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DLCI_SET_CONF (SIOCDEVPRIVATE + 3) 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * These are related to the Sangoma SDLA and should remain in order. 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Code within the SDLA module is based on the specifics of this 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * structure. Change at your own peril. 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dlci_conf { 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short flags; 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short CIR_fwd; 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short Bc_fwd; 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short Be_fwd; 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short CIR_bwd; 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short Bc_bwd; 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short Be_bwd; 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* these are part of the status read */ 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short Tc_fwd; 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short Tc_bwd; 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short Tf_max; 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short Tb_max; 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* add any new fields here above is a mirror of sdla_dlci_conf */ 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DLCI_GET_SLAVE (SIOCDEVPRIVATE + 4) 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* configuration flags for DLCI */ 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DLCI_IGNORE_CIR_OUT 0x0001 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DLCI_ACCOUNT_CIR_IN 0x0002 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DLCI_BUFFER_IF 0x0008 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DLCI_VALID_FLAGS 0x000B 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* FRAD driver uses these to indicate what it did with packet */ 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DLCI_RET_OK 0x00 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DLCI_RET_ERR 0x01 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DLCI_RET_DROP 0x02 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* defines for the actual Frame Relay hardware */ 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_GET_CONF (SIOCDEVPRIVATE) 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_SET_CONF (SIOCDEVPRIVATE + 1) 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_LAST_IOCTL FRAD_SET_CONF 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Based on the setup for the Sangoma SDLA. If changes are 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * necessary to this structure, a routine will need to be 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * added to that module to copy fields. 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct frad_conf 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short station; 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short flags; 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short kbaud; 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short clocking; 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short mtu; 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short T391; 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short T392; 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short N391; 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short N392; 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short N393; 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short CIR_fwd; 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short Bc_fwd; 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short Be_fwd; 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short CIR_bwd; 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short Bc_bwd; 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short Be_bwd; 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Add new fields here, above is a mirror of the sdla_conf */ 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_STATION_CPE 0x0000 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_STATION_NODE 0x0001 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_TX_IGNORE_CIR 0x0001 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_RX_ACCOUNT_CIR 0x0002 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_DROP_ABORTED 0x0004 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_BUFFERIF 0x0008 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_STATS 0x0010 1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_MCI 0x0100 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_AUTODLCI 0x8000 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_VALID_FLAGS 0x811F 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_CLOCK_INT 0x0001 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_CLOCK_EXT 0x0000 1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __KERNEL__ 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* these are the fields of an RFC 1490 header */ 1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct frhdr 1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char control __attribute__((packed)); 1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* for IP packets, this can be the NLPID */ 1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char pad __attribute__((packed)); 1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char NLPID __attribute__((packed)); 1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char OUI[3] __attribute__((packed)); 1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned short PID __attribute__((packed)); 1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IP_NLPID pad 1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* see RFC 1490 for the definition of the following */ 1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_I_UI 0x03 1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_P_PADDING 0x00 1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_P_Q933 0x08 1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_P_SNAP 0x80 1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_P_CLNP 0x81 1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FRAD_P_IP 0xCC 1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dlci_local 1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct net_device_stats stats; 1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct net_device *master; 1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct net_device *slave; 1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dlci_conf config; 1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int configured; 1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct list_head list; 1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* callback function */ 1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds void (*receive)(struct sk_buff *skb, struct net_device *); 1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct frad_local 1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct net_device_stats stats; 1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* devices which this FRAD is slaved to */ 1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct net_device *master[CONFIG_DLCI_MAX]; 1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds short dlci[CONFIG_DLCI_MAX]; 1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct frad_conf config; 1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int configured; /* has this device been configured */ 1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int initialized; /* mem_start, port, irq set ? */ 1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* callback functions */ 1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*activate)(struct net_device *, struct net_device *); 1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*deactivate)(struct net_device *, struct net_device *); 1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*assoc)(struct net_device *, struct net_device *); 1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*deassoc)(struct net_device *, struct net_device *); 1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*dlci_conf)(struct net_device *, struct net_device *, int get); 1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* fields that are used by the Sangoma SDLA cards */ 1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct timer_list timer; 1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int type; /* adapter type */ 1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int state; /* state of the S502/8 control latch */ 1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int buffer; /* current buffer for S508 firmware */ 1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void dlci_ioctl_set(int (*hook)(unsigned int, void __user *)); 1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* __KERNEL__ */ 1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* CONFIG_DLCI || CONFIG_DLCI_MODULE */ 1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 201