1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
/*
* CM.H - definitions for connection manager
*/
#ifndef _CM_
#define _CM_
#include <ndistapi.h>
#include <cm_pub.h>
/* error codes */
#define CM_E_SUCC 0 /* success, ok */
#define CM_E_NOSLOT 1 /* no slot available error */
#define CM_E_BUSY 2 /* cm context is busy */
#define CM_E_NOSUCH 3 /* no such object */
#define CM_E_BADCHAN 4 /* bad channel argument */
#define CM_E_IDD 5 /* idd command errored */
#define CM_E_NOMEM 6 /* ran out of memory */
#define CM_E_NOTIMPL 7 /* functionalit not implemented yet */
#define CM_E_BADPARAM 8 /* bad parameter */
#define CM_E_BADSTATE 9 /* bad state */
#define CM_E_BADUUS 10 /* bad user-to-user signalling packet */
#define CM_E_BADPORT 11 /* bad nai given */
//
// q931 switch styles
//
#define CM_SWITCHSTYLE_NONE 0 // no style
#define CM_SWITCHSTYLE_AUTO 1 // auto detect
#define CM_SWITCHSTYLE_NI1 2 // national isdn 1
#define CM_SWITCHSTYLE_ATT 3 // at&t 5ess
#define CM_SWITCHSTYLE_NTI 4 // northern telecom dms100
#define CM_SWITCHSTYLE_NET3 5 // net3 (europe)
#define CM_SWITCHSTYLE_1TR6 6 // 1tr6 (german)
#define CM_SWITCHSTYLE_VN3 7 // vn3 (france)
#define CM_SWITCHSTYLE_INS64 8 // ins64 (japan)
//
// local cm def's
//
/* map a channel to signaling idd port */
#define CM_PORT(_chan) ((_chan)->lterm + IDD_PORT_CM0_TX)
/* user to user signaling structure (!must be byte alligned!) */
#pragma pack(2)
typedef struct
{
CHAR dst_addr[6]; /* destination address */
CHAR src_addr[6]; /* source address */
USHORT pkt_type; /* packet type field */
#define CM_PKT_TYPE 0x5601 /* - private packet type */
UCHAR prot_desc; /* protocol descriptor field */
#define CM_PROT_DESC 0x78 /* - private protoocl descriptor */
UCHAR opcode; /* opcode fields */
#define CM_ASSOC_RQ 0x01 /* - request for chan/conn assoc */
#define CM_ASSOC_ACK 0x02 /* - assoc ack'ed */
#define CM_ASSOC_NACK 0x03 /* - assoc not ack'ed */
UCHAR cause; /* cause value, to assist in diag */
#define CM_NO_PROF 0x01 /* - no matching profile */
#define CM_NO_CONN 0x02 /* - no connection slot avail */
#define CM_NO_CHAN 0x03 /* - no channel slot avail */
#define CM_DUP_CONN 0x04 /* - dup conn name */
UCHAR conn; /* connection index */
UCHAR channum; /* # of channels in connections */
UCHAR chan; /* channel index */
CHAR lname[24]; /* local profile name */
ULONG option_0; // uus option fields
#define UUS_0_COMPRESSION 0x00004000
#define COMP_TX_ENA 0x01
#define COMP_RX_ENA 0x02
ULONG option_1;
CHAR rname[24]; /* remote profile name */
ULONG option_2;
ULONG option_3;
UCHAR chksum; /* zero checksum field */
} CM_UUS;
#pragma pack()
/* C compiler fails go generate odd sized structures!, must defined by self */
#define CM_UUS_SIZE (sizeof(CM_UUS) - 1)
/* special channel ustates */
#define CM_US_UNDEF (USHORT)(-1) /* undefined, not known yet */
#define CM_US_WAIT_CID (USHORT)(-2) /* waiting for a cid */
#define CM_US_GAVE_UP (USHORT)(-4) /* gave up on this channel */
#define CM_US_WAIT_CONN 50 /* connected, waiting on other */
#define CM_US_UUS_SEND 51 /* sending uus now */
#define CM_US_UUS_OKED 52 /* uus oked by side, wait on other */
#define CM_US_CONN 53 /* connected */
/* CM class operation prototypes */
INT cm_init(VOID);
INT cm_term(VOID);
INT cm_register_idd(VOID* idd);
INT cm_deregister_idd(VOID* idd);
/* CM object operation prototypes */
INT cm_create(VOID** cm_1, NDIS_HANDLE AdapterHandle);
INT cm_destroy(VOID* cm_1);
INT cm_set_profile(VOID* cm_1, CM_PROF* prof);
INT cm_get_profile(VOID* cm_1, CM_PROF* prof);
INT cm_listen(VOID* cm_1);
INT cm_connect(VOID* cm_1);
INT cm_disconnect(VOID* cm_1);
INT cm_get_status(VOID* cm_1, CM_STATUS* stat);
INT cm_report_frame(VOID* cm_1, BOOL is_rx, CHAR* buf, ULONG len);
/* prototypes for internal functions */
VOID cm__q931_handler(IDD* idd, USHORT chan, ULONG Reserved, IDD_MSG* msg);
VOID cm__q931_bchan_handler(VOID* idd, USHORT chan, ULONG RxFrameType, IDD_XMSG* msg);
VOID cm__q931_cmpl_handler(VOID* idd, USHORT chan, IDD_MSG* msg);
INT cm__elem_rq(VOID* idd, USHORT port, CHAR* elem, USHORT elem_num);
INT cm__initiate_conn(CM* cm);
INT cm__disc_rq(CM_CHAN* chan);
INT cm__est_rq(CM_CHAN* chan);
INT cm__est_rsp(CM_CHAN* chan);
INT cm__est_ignore(PVOID idd, USHORT cid, USHORT lterm);
INT cm__deactivate_conn(CM* cm, BOOL by_idle_timer);
INT cm__activate_conn(CM* cm, ULONG CompressionFlag);
INT cm__bchan_ctrl(CM_CHAN* chan, BOOL turn_on);
INT cm__bchan_ctrl_comp(CM_CHAN *chan, ULONG CompressionFlag);
CM_CHAN* cm__map_chan(VOID* idd, USHORT lterm, USHORT cid);
CM_CHAN* cm__map_bchan_chan(VOID* idd, USHORT port);
INT cm__ans_est_ind(CM_CHAN* chan, IDD_MSG* msg, VOID* idd, USHORT lterm);
INT cm__org_cid_ind(CM_CHAN* chan, IDD_MSG* msg);
INT cm__org_state_ind(CM_CHAN* chan, IDD_MSG* msg);
INT cm__ans_state_ind(CM_CHAN* chan, IDD_MSG* msg);
INT cm__org_elem_ind(CM_CHAN* chan, IDD_MSG* msg);
INT cm__org_data_ind(CM_CHAN* chan, IDD_MSG* msg);
INT cm__ans_data_ind(CM_CHAN* chan, IDD_MSG* msg);
UCHAR cm__calc_chksum(VOID* buf_1, INT len);
CM* cm__get_conn(ULONG conn_index);
INT cm__get_next_chan(CM_CHAN* chan);
INT cm__tx_uus_pkt(CM_CHAN *chan, UCHAR opcode, UCHAR cause);
INT cm__get_bchan(IDD_MSG* msg, USHORT* bchan);
INT cm__get_type(IDD_MSG* msg, USHORT* type);
INT cm__get_addr(IDD_MSG* msg, CHAR addr[32]);
ULONG cm__type2speed(USHORT type);
UCHAR *cm__q931_elem(VOID* ptr_1, INT len, UCHAR elem);
INT cm__timer_tick(CM* cm);
CM_CHAN *cm__chan_alloc(VOID);
VOID cm__chan_free(CM_CHAN* chan);
BOOL cm__chan_foreach(BOOL (*func)(), VOID* a1, VOID* a2);
BOOL cm__inc_chan_num(CM_CHAN* chan, CM_CHAN* ref_chan, ULONG *chan_num);
BOOL cm__add_chan(CM_CHAN* chan, CM_CHAN* ref_chan, CM* cm);
CM* cm__find_listen_conn(CHAR* lname, CHAR* rname, CHAR* addr, VOID*);
VOID ChannelInit(VOID);
VOID ChannelTerm(VOID);
VOID cm__ppp_conn(VOID *idd, USHORT port);
INT WanLineup(VOID* cm_1, NDIS_HANDLE Endpoint);
INT WanLinedown(VOID* cm_1);
ULONG EnumCmInSystem(VOID);
ULONG EnumCmPerAdapter(ADAPTER*);
INT IoEnumCm(VOID* cmd_1);
VOID* CmGetMtl(VOID* cm_1);
UCHAR* GetDstAddr(VOID *cm_1);
UCHAR* GetSrcAddr(VOID *cm_1);
VOID CmPollFunction(VOID *a1, ADAPTER *Adapter, VOID *a3, VOID *a4);
VOID CmSetSwitchStyle(CHAR *SwitchStyle);
#endif /* _CM_ */
|