freebsd-dev/sys/netgraph/atm/atmpif/ng_atmpif_var.h
2005-01-07 01:45:51 +00:00

148 lines
4.6 KiB
C

/*-
* Copyright (c) 2003 Harti Brandt.
* Copyright (c) 2003 Vincent Jardin.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
/*
* Supported AALs
*/
enum vatmpif_aal {
VATMPIF_AAL_0 = 0, /* Cell Service */
VATMPIF_AAL_4 = 4, /* AAL 3/4 */
VATMPIF_AAL_5 = 5, /* AAL 5 */
};
typedef enum vatmpif_aal Vatmpif_aal;
/*
* Supported traffic type
*/
enum vatmpif_traffic_type {
VATMPIF_TRAF_CBR = 0x01, /* Constant bit rate */
VATMPIF_TRAF_VBR = 0x02, /* Variable bit rate */
VATMPIF_TRAF_ABR = 0x03, /* Available Bit Rate */
VATMPIF_TRAF_UBR = 0x04, /* Unspecified bit rate */
};
typedef enum vatmpif_traffic_type Vatmpif_traffic_type;
typedef struct t_atm_traffic Vatmpif_traffic;
/*
* Host protocol control blocks
*
*/
/*
* Device VCC Entry
*
* Contains the common (vv_cmn) and specific information for each VCC
* which is opened through a ATM PIF node.
* It is a virtual VCC. From the Netgraph poit of view it is a
* per-node's hook private data.
*
* It is a polymorph object with the instances of Cmn_vcc.
*/
struct vatmpif_vcc {
Cmn_vcc vv_cmn; /* Common VCC stuff */
Vatmpif_aal vv_aal; /* AAL */
Vatmpif_traffic vv_traffic; /* forward and backward ATM traffic */
Vatmpif_traffic_type vv_traffic_type;/* CBR, VBR, UBR, ... */
};
typedef struct vatmpif_vcc Vatmpif_vcc;
#define vv_next vv_cmn.cv_next
#define vv_toku vv_cmn.cv_toku
#define vv_upper vv_cmn.cv_upper
#define vv_connvc vv_cmn.cv_connvc
#define vv_state vv_cmn.cv_state
/*
* The hook structure describes a virtual link
*/
struct ng_vatmpif_hook {
hook_p hook; /* netgraph hook */
Vatmpif_stats stats; /* link stats */
uint32_t InSeq; /* last received sequence number + 1 */
uint32_t OutSeq; /* last sent sequence number */
uint32_t cur_pcr; /* slot's reserved PCR */
};
/*
* Device Virtual Unit Structure
*
* Contains all the information for a single device (adapter).
* It is a virtual device. From the Netgraph point of view it is
* a per-node private data.
*
* It is a polymorph object with the instances of Cmn_unit.
*/
struct vatmpif_unit {
Cmn_unit vu_cmn; /* Common unit stuff */
node_p node; /* netgraph node */
struct ng_vatmpif_hook* link; /* virtual link hoook */
struct ng_vatmpif_config conf; /* node configuration */
};
typedef struct vatmpif_unit Vatmpif_unit;
#define ng_vatmpif_private vatmpif_unit
typedef struct ng_vatmpif_private *priv_p;
#define vu_pif vu_cmn.cu_pif
#define vu_unit vu_cmn.cu_unit
#define vu_flags vu_cmn.cu_flags
#define vu_mtu vu_cmn.cu_mtu
#define vu_open_vcc vu_cmn.cu_open_vcc
#define vu_vcc vu_cmn.cu_vcc
#define vu_vcc_zone vu_cmn.cu_vcc_zone
#define vu_nif_zone vu_cmn.cu_nif_zone
#define vu_ioctl vu_cmn.cu_ioctl
#define vu_instvcc vu_cmn.cu_instvcc
#define vu_openvcc vu_cmn.cu_openvcc
#define vu_closevcc vu_cmn.cu_closevcc
#define vu_output vu_cmn.cu_output
#define vu_config vu_cmn.cu_config
#define vu_softc vu_cmn.cu_softc
#define vu_stats link->stats
#define vu_cur_pcr link->cur_pcr
/*
* Netgraph to HARP API
*/
int vatmpif_harp_attach(node_p node);
int vatmpif_harp_detach(node_p node);
int vatmpif_harp_recv_drain(Vatmpif_unit *vup, KBuffer *m,
uint8_t vpi, uint16_t vci, uint8_t pt, uint8_t clp, Vatmpif_aal aal);
/*
* HARP to Netgraph API
*/
int ng_atmpif_transmit(const priv_p priv, struct mbuf *m,
uint8_t vpi, uint16_t vci, uint8_t pt, uint8_t clp, Vatmpif_aal aal);
extern uma_zone_t vatmpif_nif_zone;
extern uma_zone_t vatmpif_vcc_zone;