From Chris Wilson:
[obnox/wireshark/wip.git] / packet-isis-clv.h
1 /* packet-isis-clv.h
2  * Declares for common clv decoding functions.
3  *
4  * $Id: packet-isis-clv.h,v 1.10 2003/12/08 20:40:32 guy Exp $
5  * Stuart Stanley <stuarts@mxmail.net>
6  *
7  * Ethereal - Network traffic analyzer
8  * By Gerald Combs <gerald@ethereal.com>
9  * Copyright 1998 Gerald Combs
10  *
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.
15  *
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.
20  *
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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24  */
25
26 #ifndef _PACKET_ISIS_CLV_H
27 #define _PACKET_ISIS_CLV_H
28
29 /*
30  * A CLV is a tuple of a type, length and a value and is normally used for
31  * encoding information in all sorts of places.
32  * IS-IS uses a uniform CLV code space that is shared across
33  * all PDU Types.
34  *
35  * list taken from rfc3359 plus some memory from veterans ;-)
36  */
37
38 #define ISIS_CLV_AREA_ADDRESS        1   /* iso10589 */
39 #define ISIS_CLV_IS_REACH            2   /* iso10589 */
40 #define ISIS_CLV_ES_NEIGHBORS        3   /* iso10589 */
41 #define ISIS_CLV_PARTITION_DIS       4   /* iso10589 */
42 #define ISIS_CLV_PREFIX_NEIGHBORS    5   /* iso10589 */
43 #define ISIS_CLV_IS_NEIGHBORS        6   /* iso10589 */
44 #define ISIS_CLV_IS_NEIGHBORS_VARLEN 7   /* iso10589 */
45 #define ISIS_CLV_PADDING             8   /* iso10589 */
46 #define ISIS_CLV_LSP_ENTRIES         9   /* iso10589 */
47 #define ISIS_CLV_AUTHENTICATION      10  /* iso10589, rfc3567 */
48 #define ISIS_CLV_CHECKSUM            12  /* rfc3358 */
49 #define ISIS_CLV_LSP_BUFFERSIZE      14  /* iso10589 rev2 */
50 #define ISIS_CLV_EXTD_IS_REACH       22  /* draft-ietf-isis-traffic-05 */
51 #define ISIS_CLV_IS_ALIAS_ID         24  /* draft-ietf-isis-ext-lsp-frags-02 */
52 #define ISIS_CLV_INT_IP_REACH        128 /* rfc1195, rfc2966 */
53 #define ISIS_CLV_PROTOCOLS_SUPPORTED 129 /* rfc1195 */
54 #define ISIS_CLV_EXT_IP_REACH        130 /* rfc1195, rfc2966 */
55 #define ISIS_CLV_IDRP_INFO           131 /* rfc1195 */
56 #define ISIS_CLV_IP_ADDR             132 /* rfc1195 */
57 #define ISIS_CLV_IP_AUTHENTICATION   133 /* rfc1195, depreciated */
58 #define ISIS_CLV_TE_ROUTER_ID        134 /* draft-ietf-isis-traffic-05 */
59 #define ISIS_CLV_EXTD_IP_REACH       135 /* draft-ietf-isis-traffic-05 */
60 #define ISIS_CLV_HOSTNAME            137 /* rfc2763 */
61 #define ISIS_CLV_SHARED_RISK_GROUP   138 /* draft-ietf-isis-gmpls-extensions */
62 #define ISIS_CLV_RESTART             211 /* draft-ietf-isis-restart-01 */
63 #define ISIS_CLV_MT_IS_REACH         222 /* draft-ietf-isis-wg-multi-topology-05 */
64 #define ISIS_CLV_MT_SUPPORTED        229 /* draft-ietf-isis-wg-multi-topology-05 */
65 #define ISIS_CLV_IP6_ADDR            232 /* draft-ietf-isis-ipv6-02 */
66 #define ISIS_CLV_MT_IP_REACH         235 /* draft-ietf-isis-wg-multi-topology-05 */
67 #define ISIS_CLV_IP6_REACH           236 /* draft-ietf-isis-ipv6-02 */
68 #define ISIS_CLV_MT_IP6_REACH        237 /* draft-ietf-isis-wg-multi-topology-05 */
69 #define ISIS_CLV_PTP_ADJ_STATE       240 /* rfc3373 */
70 #define ISIS_CLV_IIH_SEQNR           241 /* draft-shen-isis-iih-sequence-00 */
71 #define ISIS_CLV_VENDOR_PRIVATE      250 /* draft-ietf-isis-proprietary-tlv-00 */
72
73 /*
74  * Our sub-packet dismantle structure for CLV's
75  */
76 typedef struct {
77         int     optcode;                /* code for option */
78         char    *tree_text;             /* text for fold out */
79         gint    *tree_id;               /* id for add_item */
80         void    (*dissect)(tvbuff_t *tvb, proto_tree *tree,
81                                 int offset, int id_length, int length);
82 } isis_clv_handle_t;
83
84 /*
85  * Published API functions.  NOTE, this are "local" API functions and
86  * are only valid from with isis decodes.
87  */
88 extern void isis_dissect_clvs(tvbuff_t *tvb, proto_tree *tree, int offset,
89         const isis_clv_handle_t *opts, int len, int id_length,
90         int unknown_tree_id);
91
92 extern void isis_dissect_nlpid_clv(tvbuff_t *tvb, proto_tree *tree,
93         int offset, int length);
94 extern void isis_dissect_te_router_id_clv(tvbuff_t *tvb, proto_tree *tree,
95         int offset, int length, int tree_id);
96 extern void isis_dissect_ipv6_int_clv(tvbuff_t *tvb, proto_tree *tree,
97         int offset, int length, int tree_id);
98 extern void isis_dissect_ip_int_clv(tvbuff_t *tvb, proto_tree *tree,
99         int offset, int length, int tree_id);
100 extern void isis_dissect_mt_clv(tvbuff_t *tvb, proto_tree *tree,
101         int offset, int length, int tree_id);
102 extern void isis_dissect_hostname_clv(tvbuff_t *tvb, proto_tree *tree,
103         int offset, int length);
104 extern void isis_dissect_authentication_clv(tvbuff_t *tvb, proto_tree *tree,
105         int offset, int length);
106 extern void isis_dissect_ip_authentication_clv(tvbuff_t *tvb, proto_tree *tree,
107         int offset, int length);
108 extern void isis_dissect_area_address_clv(tvbuff_t *tvb, proto_tree *tree,
109         int offset, int length);
110
111 extern void isis_dissect_metric(tvbuff_t *tvb, proto_tree *tree, int offset,
112         guint8 value, char *pstr, int force_supported);
113
114 #endif /* _PACKET_ISIS_CLV_H */