HACK: pinfo->private_data points to smb_info again
[wireshark-wip.git] / epan / dissectors / packet-teklink.c
blob30fbeb63fdc48857f8bb55a60c04a3a8fb453aa2
1 /* packet-teklink.c
2 * Routines for TEKLINK dissection
3 * Copyright (c)2010 Sven Schnelle <svens@stackframe.org>
5 * $Id$
7 * Wireshark - Network traffic analyzer
8 * By Gerald Combs <gerald@wireshark.org>
9 * Copyright 1998 Gerald Combs
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 #include "config.h"
28 #include "packet-rpc.h"
30 #define PROGRAM_TEKLINK 0x20400034
32 static int proto_teklink = -1;
33 static int hf_teklink_procedure = -1;
34 static int hf_teklink_unknown_long = -1;
35 static int hf_teklink_unknown_string = -1;
36 static int hf_teklink_cmd = -1;
37 static int hf_teklink_user = -1;
38 static int hf_teklink_host = -1;
39 static int hf_teklink_location = -1;
40 static int hf_teklink_tla_type = -1;
41 static int hf_teklink_locked = -1;
42 static int hf_teklink_vtc_srcnames = -1;
43 static int hf_teklink_vtc_dstnames = -1;
44 static int hf_teklink_vtc_sigpol = -1;
45 static int hf_teklink_vtc_sigen = -1;
46 static int hf_teklink_vtc_clksource = -1;
47 static int hf_teklink_vtc_clkmode = -1;
48 static int hf_teklink_vtc_clkedge = -1;
49 static int hf_teklink_vtc_mode = -1;
50 static int hf_teklink_vtc_edge = -1;
51 static int hf_teklink_vtc_sigfeedback = -1;
53 static gint ett_teklink = -1;
55 static const value_string teklink_vtc_srcnames[] = {
56 { 0, "VTC_SRC_APPSIG0" },
57 { 1, "VTC_SRC_APPSIG1" },
58 { 2, "VTC_SRC_APPSIG2" },
59 { 3, "VTC_SRC_APPSIG3" },
60 { 4, "VTC_SRC_APPSIG4" },
61 { 5, "VTC_SRC_APPSIG5" },
62 { 6, "VTC_SRC_APPSIG6" },
63 { 7, "VTC_SRC_APPSIG7" },
64 { 8, "VTC_SRC_APPSIG8" },
65 { 9, "VTC_SRC_APPSIG9" },
66 { 10, "VTC_SRC_APPSIG10" },
67 { 11, "VTC_SRC_APPSIG11" },
68 { 12, "VTC_SRC_TTLTRIG0" },
69 { 13, "VTC_SRC_TTLTRIG1" },
70 { 14, "VTC_SRC_TTLTRIG2" },
71 { 15, "VTC_SRC_TTLTRIG3" },
72 { 16, "VTC_SRC_TTLTRIG4" },
73 { 17, "VTC_SRC_TTLTRIG5" },
74 { 18, "VTC_SRC_TTLTRIG6" },
75 { 19, "VTC_SRC_TTLTRIG7" },
76 { 20, "VTC_SRC_XBAR1" },
77 { 21, "VTC_SRC_XBAR2" },
78 { 22, "VTC_SRC_ECLTRIG0" },
79 { 23, "VTC_SRC_ECLTRIG1" },
80 { 24, "VTC_SRC_ALL" },
81 { 25, "VTC_SRC_XXX" },
82 { 26, "VTC_SRC_XXX" },
83 { 27, "VTC_SRC_VCC" },
84 { 0, NULL },
87 static const value_string teklink_vtc_dstnames[] = {
88 { 0, "VTC_DST_APPSIG0" },
89 { 1, "VTC_DST_APPSIG1" },
90 { 2, "VTC_DST_APPSIG2" },
91 { 3, "VTC_DST_APPSIG3" },
92 { 4, "VTC_DST_APPSIG4" },
93 { 5, "VTC_DST_APPSIG5" },
94 { 6, "VTC_DST_APPSIG6" },
95 { 7, "VTC_DST_APPSIG7" },
96 { 8, "VTC_DST_APPSIG8" },
97 { 9, "VTC_DST_APPSIG9" },
98 { 10, "VTC_DST_APPSIG10" },
99 { 11, "VTC_DST_APPSIG11" },
100 { 12, "VTC_DST_TTLTRIG0" },
101 { 13, "VTC_DST_TTLTRIG1" },
102 { 14, "VTC_DST_TTLTRIG2" },
103 { 15, "VTC_DST_TTLTRIG3" },
104 { 16, "VTC_DST_TTLTRIG4" },
105 { 17, "VTC_DST_TTLTRIG5" },
106 { 18, "VTC_DST_TTLTRIG6" },
107 { 19, "VTC_DST_TTLTRIG7" },
108 { 20, "VTC_DST_XBAR1" },
109 { 21, "VTC_DST_XBAR2" },
110 { 22, "VTC_DST_ECLTRIG0" },
111 { 23, "VTC_DST_ECLTRIG1" },
112 { 24, "VTC_DST_ALL" },
113 { 0, NULL },
116 static const value_string teklink_vtc_sigen[] = {
117 { 0, "VTC_OUT_FORCE_OFF" },
118 { 1, "VTC_OUT_FORCE_ON" },
119 { 0, NULL },
122 static const value_string teklink_vtc_sigfeedback[] = {
123 { 0, "VTC_MODE_FEEDBK_OFF" },
124 { 1, "VTC_MODE_FEEDBK_ON" },
125 { 0, NULL },
128 static const value_string teklink_vtc_edge[] = {
129 { 0, "VTC_MODE_EDGE_FALL" },
130 { 1, "VTC_MODE_EDGE_RISE" },
131 { 0, NULL },
134 static const value_string teklink_vtc_sigpol[] = {
135 { 0, "VTC_OUT_POL_NORM" },
136 { 1, "VTC_OUT_POL_INVERT" },
137 { 0, NULL },
140 static const value_string teklink_vtc_clkmode[] = {
141 { 0, "VTC_CLK_MODE_ASYNCH" },
142 { 1, "VTC_CLK_MODE_SYNCH" },
143 { 0, NULL },
146 static const value_string teklink_vtc_clkedge[] = {
147 { 0, "VTC_CLK_EDGE_SENS_FALL" },
148 { 1, "VTC_CLK_EDGE_SENS_RISE" },
149 { 0, NULL },
152 static const value_string teklink_vtc_clksource[] = {
153 { 0, "VTC_CLK_SRC_GND" },
154 { 1, "VTC_CLK_SRC_1" },
155 { 2, "VTC_CLK_SRC_2" },
156 { 3, "VTC_CLK_SRC_CPUCLK" },
157 { 0, NULL },
160 static const value_string teklink_vtc_modes[] = {
161 { 0, "VTC_MODE_NONE" },
162 { 1, "VTC_MODE_1" },
163 { 2, "VTC_MODE_2" },
164 { 3, "VTC_MODE_3" },
165 { 4, "VTC_MODE_4" },
166 { 5, "VTC_MODE_5" },
167 { 6, "VTC_MODE_6" },
168 { 7, "VTC_MODE_EVENT_CNT_LAT" },
169 { 0, NULL },
172 static int dissect_teklink_tlaframeopen_call(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
173 proto_tree *tree, void* data _U_)
175 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
176 offset = dissect_rpc_string(tvb, tree, hf_teklink_unknown_string, offset, NULL);
177 offset = dissect_rpc_string(tvb, tree, hf_teklink_unknown_string, offset, NULL);
178 offset = dissect_rpc_string(tvb, tree, hf_teklink_unknown_string, offset, NULL);
179 return offset;
182 static int dissect_teklink_tlaframeclose_call(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
183 proto_tree *tree, void* data _U_)
185 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
186 return offset;
189 static int dissect_teklink_tlaframeclose_reply(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
190 proto_tree *tree, void* data _U_)
192 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
193 return offset;
196 static int dissect_teklink_tlaframeopen_reply(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
197 proto_tree *tree, void* data _U_)
199 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
200 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
201 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
202 return offset;
205 static int dissect_teklink_get_software_version_reply(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
206 proto_tree *tree, void* data _U_)
208 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
209 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
210 offset = dissect_rpc_string(tvb, tree, hf_teklink_unknown_string, offset, NULL);
211 offset = dissect_rpc_string(tvb, tree, hf_teklink_unknown_string, offset, NULL);
212 return offset;
215 static int dissect_teklink_call65_call(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
216 proto_tree *tree, void* data _U_)
218 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_cmd, offset);
219 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
220 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
221 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
222 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
223 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
224 return offset;
227 static int dissect_teklink_call65_reply(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
228 proto_tree *tree, void* data _U_)
230 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
231 return offset;
234 static int dissect_teklink_info_reply(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
235 proto_tree *tree, void* data _U_)
237 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_locked, offset);
238 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
239 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_tla_type, offset);
240 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
241 offset = dissect_rpc_string(tvb, tree, hf_teklink_unknown_string, offset, NULL);
242 offset = dissect_rpc_string(tvb, tree, hf_teklink_location, offset, NULL);
243 offset = dissect_rpc_string(tvb, tree, hf_teklink_user, offset, NULL);
244 offset = dissect_rpc_string(tvb, tree, hf_teklink_host, offset, NULL);
245 offset = dissect_rpc_string(tvb, tree, hf_teklink_unknown_string, offset, NULL);
246 return offset;
249 static int dissect_teklink_info_call(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
250 proto_tree *tree, void* data _U_)
252 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
253 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
254 return offset;
258 static int dissect_teklink_vtc_ident(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
259 proto_tree *tree, void* data _U_)
261 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
262 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
263 return offset;
266 static int dissect_teklink_vtc_sigstatall(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
267 proto_tree *tree, void* data _U_)
269 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
270 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
271 return offset;
274 static int dissect_teklink_vtc_outen(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
275 proto_tree *tree, void* data _U_)
277 guint32 sig = tvb_get_ntohl(tvb, offset);
278 guint32 sigon = tvb_get_ntohl(tvb, offset + 4);
280 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_vtc_dstnames, offset);
281 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_vtc_sigen, offset);
283 col_append_fstr(pinfo->cinfo, COL_INFO," %s, %s ",
284 val_to_str(sig, teklink_vtc_dstnames, "Unknown destination %d"),
285 sigon ? "VTC_OUT_FORCE_ON" : "VTC_OUT_FORCE_OFF");
286 return offset;
289 static int dissect_teklink_vtc_map(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
290 proto_tree *tree, void* data _U_)
292 guint32 src, dst;
294 src = tvb_get_ntohl(tvb, offset);
295 dst = tvb_get_ntohl(tvb, offset + 4);
297 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_vtc_srcnames, offset);
298 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_vtc_dstnames, offset);
300 col_append_fstr(pinfo->cinfo, COL_INFO," %s, %s ",
301 val_to_str(src, teklink_vtc_srcnames, "Unknown source %d"),
302 val_to_str(dst, teklink_vtc_dstnames, "Unknown destination %d"));
303 return offset;
306 static int dissect_teklink_vtc_clk(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
307 proto_tree *tree, void* data _U_)
309 guint32 sig, clksource, clkedge, clkmode;
311 sig = tvb_get_ntohl(tvb, offset);
312 clksource = tvb_get_ntohl(tvb, offset + 4);
313 clkedge = tvb_get_ntohl(tvb, offset + 8);
314 clkmode = tvb_get_ntohl(tvb, offset + 12);
316 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_vtc_dstnames, offset);
317 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_vtc_clksource, offset);
318 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_vtc_clkedge, offset);
319 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_vtc_clkmode, offset);
321 col_append_fstr(pinfo->cinfo, COL_INFO," %s, %s, %s, %s",
322 val_to_str(sig, teklink_vtc_dstnames, "Unknown destination %d"),
323 val_to_str(clksource, teklink_vtc_clksource, "Unknown clocksource %d"),
324 val_to_str(clkedge, teklink_vtc_clkedge, "Unknown edge setting %d"),
325 val_to_str(clkmode, teklink_vtc_clkmode, "Unknown mode setting %d"));
326 return offset;
329 static int dissect_teklink_vtc_mode(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
330 proto_tree *tree, void* data _U_)
332 guint32 sig, edge, mode;
334 sig = tvb_get_ntohl(tvb, offset);
335 edge = tvb_get_ntohl(tvb, offset + 4);
336 mode = tvb_get_ntohl(tvb, offset + 12);
338 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_vtc_dstnames, offset);
339 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_vtc_edge, offset);
340 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
341 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_vtc_mode, offset);
343 col_append_fstr(pinfo->cinfo, COL_INFO," %s, %s, %s",
344 val_to_str(sig, teklink_vtc_dstnames, "Unknown destination %d"),
345 val_to_str(edge, teklink_vtc_edge, "Unknown edge setting %d"),
346 val_to_str(mode, teklink_vtc_modes, "Unknown mode setting %d"));
347 return offset;
350 static int dissect_teklink_vtc_outsetup(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
351 proto_tree *tree, void* data _U_)
353 guint32 sig, en, pol, feedback;
355 sig = tvb_get_ntohl(tvb, offset);
356 en = tvb_get_ntohl(tvb, offset + 4);
357 pol = tvb_get_ntohl(tvb, offset + 8);
358 feedback = tvb_get_ntohl(tvb, offset + 12);
360 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_vtc_dstnames, offset);
361 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_vtc_sigen, offset);
362 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_vtc_sigpol, offset);
363 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_vtc_sigfeedback, offset);
365 col_append_fstr(pinfo->cinfo, COL_INFO," %s, %s, %s, %s",
366 val_to_str(sig, teklink_vtc_dstnames, "Unknown destination %d"),
367 val_to_str(pol, teklink_vtc_sigpol, "Unknown signal polarity %d"),
368 val_to_str(en, teklink_vtc_sigen, "Unknown signal enable %d"),
369 val_to_str(feedback, teklink_vtc_sigfeedback, "Unknown signal feedback setting %d"));
370 return offset;
373 static int dissect_teklink_vtc_res(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
374 proto_tree *tree, void* data _U_)
376 guint32 sig = tvb_get_ntohl(tvb, offset);
378 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_vtc_dstnames, offset);
380 col_append_fstr(pinfo->cinfo, COL_INFO," %s",
381 val_to_str(sig, teklink_vtc_dstnames, "Unknown destination %d"));
382 return offset;
385 static int dissect_teklink_vtl_spinbits(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
386 proto_tree *tree, void* data _U_)
388 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
389 return offset;
392 static int dissect_teklink_vtl_zmode(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
393 proto_tree *tree, void* data _U_)
395 offset = dissect_rpc_uint32(tvb, tree, hf_teklink_unknown_long, offset);
396 return offset;
399 static const vsff teklink_proc[] = {
400 { 1, "TLAFrameOpen", dissect_teklink_tlaframeopen_call, dissect_teklink_tlaframeopen_reply },
401 { 2, "TLAFrameClose", dissect_teklink_tlaframeclose_call, dissect_teklink_tlaframeclose_reply },
402 { 3, "GetSoftwareVersion", NULL, dissect_teklink_get_software_version_reply },
403 { 4, "GetInfo", dissect_teklink_info_call, dissect_teklink_info_reply },
404 { 5, "VtcIdent", NULL, dissect_teklink_vtc_ident },
405 { 7, "VtcOutEn", dissect_teklink_vtc_outen, NULL },
406 { 8, "VtcMap", dissect_teklink_vtc_map, NULL },
407 { 9, "VtcOutSetup", dissect_teklink_vtc_outsetup, NULL },
408 { 10, "VtcClk", dissect_teklink_vtc_clk, NULL },
409 { 11, "VtcMode", dissect_teklink_vtc_mode, NULL },
410 { 12, "VtcRes", dissect_teklink_vtc_res, NULL },
411 { 13, "VtcHardRes", NULL, NULL },
412 { 14, "VtcSigStatAll", NULL, dissect_teklink_vtc_sigstatall },
413 { 20, "VtlZMode", NULL, dissect_teklink_vtl_zmode },
414 { 21, "VtlSpinBits", NULL, dissect_teklink_vtl_spinbits },
415 { 65, "Unknown (65)", dissect_teklink_call65_call, dissect_teklink_call65_reply },
416 { 0, NULL, NULL, NULL }
419 static const value_string teklink_proc_vals[] = {
420 { 1, "TLAFrameOpen" },
421 { 2, "TLAFrameClose" },
422 { 3, "TLAFrameGetStatus" },
423 { 4, "GetInfo" },
424 { 5, "VtcIdent" },
425 { 7, "VtcOutEn" },
426 { 8, "VtcMap" },
427 { 9, "VtcOutSetup" },
428 { 10, "VtcClk" },
429 { 11, "VtcMode" },
430 { 12, "VtcRes" },
431 { 13, "VtcHardRes" },
432 { 14, "VtcSigStatAll" },
433 { 15, "VtcPeek" },
434 { 16, "VtcPoke" },
435 { 20, "VtlZMode" },
436 { 21, "VtlSpinBits" },
437 { 30, "TLAFrameResetVISA" },
438 { 35, "VtcRemoteDiag" },
439 { 36, "TLAFrameRunPostDiag" },
440 { 37, "TLAFrameTigerAccess" },
441 { 40, "XXX" },
442 { 41, "XXX" },
443 { 42, "TLAGetFrameError" },
444 { 50, "TLAFileOpen" },
445 { 51, "TLAReadFile" },
446 { 52, "TLAWriteFile" },
447 { 53, "TLAFileClose" },
448 { 54, "TLAFlashImage" },
450 { 0, NULL }
453 #if 0
454 static const value_string teklink_error_vals[] = {
455 { 0, NULL }
457 #endif
459 static const value_string teklink_cmd_vals[] = {
460 { 0, "TLKFreeResources" },
461 { 1, "TLKCreateDeleteEventRoute" },
462 { 2, "TLKDeleteRoutesForSignal" },
463 { 3, "CanRequestBeRouted" },
464 { 4, "TLKIsRouted" },
465 { 5, "TLACreateSysRoutes" },
466 { 6, "TLAStart" },
467 { 7, "TLAGetFrameDelay" },
468 { 8, "TLAFrameRegisterCallBack" },
469 { 10, "TLAGetTrggerDelay" },
470 { 0, NULL }
473 static const value_string teklink_tla_types[] = {
474 { 0x02, "TLA711" },
475 { 0x03, "TLA714" },
476 { 0x04, "TLA720" },
477 { 0x05, "TLA60X" },
478 { 0x06, "TLA6XX" },
479 { 0x13, "TLA714A" },
480 { 0x14, "TLA715" },
481 { 0x15, "TLA721" },
482 { 0x16, "TLA520X" },
483 { 0x17, "TLA7012" },
484 { 0x18, "TLA7016" },
485 { 0x00, NULL }
488 void
489 proto_register_teklink(void)
491 static hf_register_info hf_core[] = {
492 { &hf_teklink_procedure, {
493 "Procedure", "teklink.procedure", FT_UINT8, BASE_DEC,
494 VALS(teklink_proc_vals), 0, NULL, HFILL }},
495 { &hf_teklink_unknown_long, {
496 "Unknown long", "teklink.long", FT_UINT32, BASE_HEX,
497 NULL, 0, NULL, HFILL }},
498 { &hf_teklink_unknown_string, {
499 "Unknown String", "teklink.string", FT_STRING, BASE_NONE,
500 NULL, 0, NULL, HFILL }},
501 { &hf_teklink_cmd, {
502 "Command", "teklink.command", FT_UINT32, BASE_DEC,
503 VALS(teklink_cmd_vals), 0, NULL, HFILL }},
504 { &hf_teklink_tla_type, {
505 "TLA Type", "teklink.tla_type", FT_UINT32, BASE_DEC,
506 VALS(teklink_tla_types), 0, NULL, HFILL }},
507 { &hf_teklink_host, {
508 "Host", "teklink.host", FT_STRING, BASE_NONE,
509 NULL, 0, NULL, HFILL }},
510 { &hf_teklink_user, {
511 "User", "teklink.user", FT_STRING, BASE_NONE,
512 NULL, 0, NULL, HFILL }},
513 { &hf_teklink_location, {
514 "Location", "teklink.location", FT_STRING, BASE_NONE,
515 NULL, 0, NULL, HFILL }},
516 { &hf_teklink_locked, {
517 "Locked", "teklink.locked", FT_UINT32, BASE_HEX,
518 NULL, 0, NULL, HFILL }},
519 { &hf_teklink_vtc_dstnames, {
520 "Destination signal", "teklink.signal.destination", FT_UINT32, BASE_HEX,
521 VALS(teklink_vtc_dstnames), 0, NULL, HFILL }},
522 { &hf_teklink_vtc_srcnames, {
523 "Source signal", "teklink.signal.source", FT_UINT32, BASE_HEX,
524 VALS(teklink_vtc_srcnames), 0, NULL, HFILL }},
525 { &hf_teklink_vtc_sigen, {
526 "Signal Enable", "teklink.signal.enable", FT_UINT32, BASE_HEX,
527 VALS(teklink_vtc_sigen), 0, NULL, HFILL }},
528 { &hf_teklink_vtc_sigpol, {
529 "Signal Polarity", "teklink.signal.polarity", FT_UINT32, BASE_HEX,
530 VALS(teklink_vtc_sigpol), 0, NULL, HFILL }},
531 { &hf_teklink_vtc_clkmode, {
532 "Clock Mode", "teklink.clock.polarity", FT_UINT32, BASE_HEX,
533 VALS(teklink_vtc_clkmode), 0, NULL, HFILL }},
534 { &hf_teklink_vtc_clkedge, {
535 "Clock Edge", "teklink.clock.polarity", FT_UINT32, BASE_HEX,
536 VALS(teklink_vtc_clkedge), 0, NULL, HFILL }},
537 { &hf_teklink_vtc_clksource, {
538 "Clock Source", "teklink.clock.source", FT_UINT32, BASE_HEX,
539 VALS(teklink_vtc_clksource), 0, NULL, HFILL }},
540 { &hf_teklink_vtc_mode, {
541 "Signal Mode", "teklink.signal.mode", FT_UINT32, BASE_HEX,
542 VALS(teklink_vtc_modes), 0, NULL, HFILL }},
543 { &hf_teklink_vtc_edge, {
544 "Signal Edge", "teklink.signal.edge", FT_UINT32, BASE_HEX,
545 VALS(teklink_vtc_edge), 0, NULL, HFILL }},
546 { &hf_teklink_vtc_sigfeedback, {
547 "Signal Feedbmode", "teklink.signal.feedback", FT_UINT32, BASE_HEX,
548 VALS(teklink_vtc_sigfeedback), 0, NULL, HFILL }}
551 static gint *ett[] = {
552 &ett_teklink
555 proto_teklink = proto_register_protocol("TEKLINK", "TEKLINK", "teklink");
556 proto_register_field_array(proto_teklink, hf_core, array_length(hf_core));
557 proto_register_subtree_array(ett, array_length(ett));
560 void
561 proto_reg_handoff_teklink(void)
563 /* Register the protocol as RPC */
564 rpc_init_prog(proto_teklink, PROGRAM_TEKLINK, ett_teklink);
566 /* Register the procedure tables */
567 rpc_init_proc_table(PROGRAM_TEKLINK, 1, teklink_proc, hf_teklink_procedure);