From bd9e5f5f5b5ac9cb1bcfd4be4ac99ce4fd518e15 Mon Sep 17 00:00:00 2001 From: kjc Date: Wed, 29 Jul 1998 05:35:16 +0000 Subject: update ATM driver. (base version: midway.c 1.67 --> 1.68) several new features are added: - support vc/vp shaping - support pvc shadow interface code cleanup: - remove WMAYBE related code. ENI WMAYBE DMA doen't work. - remove updating if_lastchange for every packet. - BPF related code is moved to midway.c as it should be. (bpfwrite should work if atm_pseudohdr and LLC/SNAP are prepended.) - BPF link type is changed to DLT_ATM_RFC1483. BPF now understands only LLC/SNAP!! (because bpf can't handle variable link header length.) It is recommended to use LLC/SNAP instead of NULL encapsulation for various reasons. (BPF, IPv6, interoperability, etc.) the code has been used for months in ALTQ and KAME IPv6. OKed by phk long time ago. --- sys/net/if_atm.h | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'sys/net/if_atm.h') diff --git a/sys/net/if_atm.h b/sys/net/if_atm.h index 1d7cd8e..f1e2d8b 100644 --- a/sys/net/if_atm.h +++ b/sys/net/if_atm.h @@ -42,6 +42,14 @@ #endif #endif /* freebsd doesn't define _KERNEL */ +#ifndef NO_ATM_PVCEXT +/* + * ATM_PVCEXT enables PVC extention: VP/VC shaping + * and PVC shadow interfaces. + */ +#define ATM_PVCEXT /* enable pvc extention */ +#endif + #if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) #define RTALLOC1(A,B) rtalloc1((A),(B)) #elif defined(__FreeBSD__) @@ -51,7 +59,6 @@ /* * pseudo header for packet transmission */ - struct atm_pseudohdr { u_int8_t atm_ph[4]; /* flags+VPI+VCI1(msb)+VCI2(lsb) */ }; @@ -67,6 +74,9 @@ struct atm_pseudohdr { #define ATM_PH_AAL5 0x01 /* use AAL5? (0 == aal0) */ #define ATM_PH_LLCSNAP 0x02 /* use the LLC SNAP encoding (iff aal5) */ +#ifdef ATM_PVCEXT +#define ATM_PH_INERNAL 0x20 /* reserve for kernel internal use */ +#endif #define ATM_PH_DRIVER7 0x40 /* reserve for driver's use */ #define ATM_PH_DRIVER8 0x80 /* reserve for driver's use */ @@ -85,6 +95,29 @@ struct atm_pseudoioctl { #define SIOCATMENA _IOWR('a', 123, struct atm_pseudoioctl) /* enable */ #define SIOCATMDIS _IOWR('a', 124, struct atm_pseudoioctl) /* disable */ +#ifdef ATM_PVCEXT + +/* structure to control PVC transmitter */ +struct pvctxreq { + /* first entry must be compatible with struct ifreq */ + char pvc_ifname[IFNAMSIZ]; /* if name, e.g. "en0" */ + struct atm_pseudohdr pvc_aph; /* (flags) + vpi:vci */ + struct atm_pseudohdr pvc_joint; /* for vp shaping: another vc + to share the shaper */ + int pvc_pcr; /* peak cell rate (shaper value) */ +}; + +/* use ifioctl for now */ +#define SIOCSPVCTX _IOWR('i', 95, struct pvctxreq) +#define SIOCGPVCTX _IOWR('i', 96, struct pvctxreq) +#define SIOCSPVCSIF _IOWR('i', 97, struct ifreq) +#define SIOCGPVCSIF _IOWR('i', 98, struct ifreq) + +#ifdef _KERNEL +#define ATM_PH_PVCSIF ATM_PH_INERNAL /* pvc shadow interface */ +#endif +#endif /* ATM_PVCEXT */ + /* * XXX forget all the garbage in if_llc.h and do it the easy way */ @@ -109,3 +142,10 @@ void atm_input __P((struct ifnet *, struct atm_pseudohdr *, int atm_output __P((struct ifnet *, struct mbuf *, struct sockaddr *, struct rtentry *)); #endif +#ifdef ATM_PVCEXT +char *shadow2if __P((char *)); +#ifdef _KERNEL +struct ifnet *pvc_attach __P((struct ifnet *)); +int pvc_setaph __P((struct ifnet *, struct atm_pseudohdr *)); +#endif +#endif -- cgit v1.1