Merge remote-tracking branch 'origin/master'
[unleashed/lotheac.git] / usr / src / uts / common / io / ppp / sppptun / sppptun_impl.h
blob58480ae60ce74a3b10d2d19496769124048ceee3
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
28 * sppptun_impl.h - Internal sppptun data exposed for adb/mdb macros.
31 #ifndef _SPPPTUN_IMPL_H
32 #define _SPPPTUN_IMPL_H
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
38 /* For use with insque/remque (belongs in a system header!) */
39 struct qelem {
40 struct qelem *q_forw;
41 struct qelem *q_back;
44 typedef struct tunll_s tunll_t;
45 typedef struct tuncl_s tuncl_t;
47 typedef struct {
48 kstat_named_t lks_octrls; /* sent control messages */
49 kstat_named_t lks_octrl_drop; /* dropped control messages */
50 kstat_named_t lks_clients; /* number of clients (tcls) */
51 kstat_named_t lks_walks; /* PPPoE tcl walks */
52 kstat_named_t lks_in_nomatch; /* input without match */
53 kstat_named_t lks_indata; /* input data packets */
54 kstat_named_t lks_indata_drops; /* input data packet drops */
55 kstat_named_t lks_inctrls; /* input control packets */
56 kstat_named_t lks_inctrl_drops; /* input control pkt drops */
57 } tll_kstats_t;
59 #define TLL_KSTATS_NAMES \
60 "octrls", "octrl_drop", "clients", "walks", "in_nomatch", \
61 "indata", "indata_drops", "inctrls", "inctrl_drops"
63 typedef struct {
64 kstat_named_t cks_octrls; /* sent control messages */
65 kstat_named_t cks_octrl_drop; /* dropped control messages */
66 kstat_named_t cks_octrl_spec; /* special control messages */
67 kstat_named_t cks_walks; /* PPPoE tcl walks */
68 kstat_named_t cks_inctrls; /* input control messages */
69 kstat_named_t cks_inctrl_drops; /* input control pkt drops */
70 } tcl_kstats_t;
72 #define TCL_KSTATS_NAMES \
73 "octrls", "octrl_drop", "octrl_spec", "walks", "inctrls", \
74 "inctrl_drops"
77 * Tunnel lower layer structure; module open; connects to output device.
79 * Note: tll_flags member carefully aligned to match with tcl_flags in
80 * following structure so that we don't have to continually look at
81 * q_next to determine context. Do not move these around.
83 * Note: this is also defined in uts/adb/common/tunll.dbg; if you change
84 * this structure, don't forget to change the adb/mdb macro.
86 struct tunll_s {
87 uint32_t tll_flags; /* See TLLF_* below */
88 void *tll_next, *tll_prev;
90 int tll_error;
91 queue_t *tll_wq; /* Output data sent here */
92 tuncl_t *tll_defcl; /* Default client (daemon) */
93 ppptun_atype tll_lcladdr; /* Local address */
95 tuncl_t *tll_lastcl; /* Silly PPPoE optimization */
97 ppptun_lname tll_name;
98 int tll_index;
99 int tll_muxid;
100 int tll_style; /* Interface type; PTS_* */
101 int tll_alen; /* Address length */
103 int tll_msg_pending;
104 mblk_t *tll_msg_deferred;
106 mblk_t *tll_onclose;
108 tll_kstats_t tll_kstats; /* current statistics */
109 kstat_t *tll_ksp; /* pointer to kstats allocation */
111 uint_t tll_sap; /* SAP for PPPoE */
113 zoneid_t tll_zoneid;
117 * Tunnel client structure; used for each device open.
119 * There is one of these for each PPP session plus (perhaps) one for
120 * each tunneling protocol server daemon.
122 * Note: this is also defined in uts/adb/common/tuncl.dbg; if you change
123 * this structure, don't forget to change the adb/mdb macro.
125 struct tuncl_s {
126 uint32_t tcl_flags; /* TCLF_ flags below */
128 tunll_t *tcl_data_tll; /* Pointer to data interface */
129 tunll_t *tcl_ctrl_tll; /* Pointer to control */
131 queue_t *tcl_rq; /* Received data sent here. */
133 uint32_t tcl_seq;
135 uint32_t tcl_ctlval; /* Control distinguisher */
137 uint_t tcl_style; /* Saved style */
138 uint_t tcl_ltunid; /* Local Tunnel ID (L2F/L2TP) */
139 uint_t tcl_rtunid; /* Remote Tunnel ID (L2F/L2TP) */
140 uint_t tcl_lsessid; /* Local Session ID (minor node) */
141 uint_t tcl_rsessid; /* Remote Session ID */
142 ppptun_atype tcl_address;
144 int tcl_unit; /* PPP unit number (for debug) */
145 struct pppstat64 tcl_stats; /* Standard PPP statistics */
146 tcl_kstats_t tcl_kstats; /* current statistics */
147 kstat_t *tcl_ksp; /* pointer to kstats allocation */
149 zoneid_t tcl_zoneid;
152 #define TO_TLL(p) \
153 ((tunll_t *)((caddr_t)(p) - offsetof(tunll_t, tll_next)))
155 #define TLLF_NOTLOWER 0x00000001 /* never set */
156 #define TLLF_CLOSING 0x00000002 /* driver detach initiated */
157 #define TLLF_CLOSE_DONE 0x00000004 /* detach sent; waiting */
158 #define TLLF_SHUTDOWN_DONE 0x00000008 /* detach done */
160 #define TCLF_ISCLIENT 0x00000001 /* always set */
161 #define TCLF_FASTPATH 0x00000004 /* enable fast path recv */
162 #define TCLF_DAEMON 0x00000010 /* server side; session 0 */
163 #define TCLF_SPEER_DONE 0x00000020 /* SPEER ioctl done */
165 #ifdef __cplusplus
167 #endif
169 #endif /* _SPPPTUN_IMPL_H */