aboutsummaryrefslogtreecommitdiffstats
path: root/packet-isis-lsp.h
blob: 597c490842bb2bbf5b9a2847a56e99b0ab28d07b (plain)
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
/* packet-isis-lsp.h
 * Defines and such for LSP and their CLV decodes
 *
 * $Id: packet-isis-lsp.h,v 1.17 2003/04/03 05:22:11 guy Exp $
 * Stuart Stanley <stuarts@mxmail.net>
 *
 * Ethereal - Network traffic analyzer
 * By Gerald Combs <gerald@ethereal.com>
 * Copyright 1998 Gerald Combs
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

#ifndef _PACKET_ISIS_LSP_H
#define _PACKET_ISIS_LSP_H

/*
 * Declarations for L1/L2 LSP base header.
 */

/* P | ATT | HIPPITY | DS FIELD description */
#define ISIS_LSP_PARTITION_MASK     0x80
#define ISIS_LSP_PARTITION_SHIFT    7
#define ISIS_LSP_PARTITION(info)    (((info) & ISIS_LSP_PARTITION_MASK) >> ISIS_LSP_PARTITION_SHIFT)

#define ISIS_LSP_ATT_MASK     0x78
#define ISIS_LSP_ATT_SHIFT    3
#define ISIS_LSP_ATT(info)    (((info) & ISIS_LSP_ATT_MASK) >> ISIS_LSP_ATT_SHIFT)

#define ISIS_LSP_ATT_DEFAULT(info)    ((info) >> 3)
#define ISIS_LSP_ATT_DELAY(info)      (((info) >> 2) & 1)
#define ISIS_LSP_ATT_EXPENSE(info)    (((info) >> 1) & 1)
#define ISIS_LSP_ATT_ERROR(info)      ((info) & 1)

#define ISIS_LSP_HIPPITY_MASK     0x04
#define ISIS_LSP_HIPPITY_SHIFT    2
#define ISIS_LSP_HIPPITY(info)    (((info) & ISIS_LSP_HIPPITY_MASK) >> ISIS_LSP_HIPPITY_SHIFT)

#define ISIS_LSP_IS_TYPE_MASK     0x03
#define ISIS_LSP_IS_TYPE(info)    ((info) & ISIS_LSP_IS_TYPE_MASK)

#define ISIS_LSP_MT_MSHIP_RES_MASK    4
#define ISIS_LSP_MT_MSHIP_RES_SHIFT   12
#define ISIS_LSP_MT_MSHIP_RES(info)  (((info) >> ISIS_LSP_MT_MSHIP_RES_SHIFT) & ISIS_LSP_MT_MSHIP_RES_MASK)

#define ISIS_LSP_MT_MSHIP_ID_MASK   0x0FFF
#define ISIS_LSP_MT_MSHIP_ID(info)  ((info) & ISIS_LSP_MT_MSHIP_ID_MASK)


#define ISIS_LSP_TYPE_UNUSED0		0
#define ISIS_LSP_TYPE_LEVEL_1		1
#define ISIS_LSP_TYPE_UNUSED2		2
#define ISIS_LSP_TYPE_LEVEL_2		3

#define ISIS_LSP_ATTACHED_NONE    0
#define ISIS_LSP_ATTACHED_DEFAULT 1
#define ISIS_LSP_ATTACHED_DELAY   2
#define ISIS_LSP_ATTACHED_EXPENSE 4
#define ISIS_LSP_ATTACHED_ERROR   8


#define ISIS_LSP_CLV_METRIC_SUPPORTED(x)	((x)&0x80)
#define ISIS_LSP_CLV_METRIC_IE(x)               ((x)&0x40)
#define ISIS_LSP_CLV_METRIC_RESERVED(x)		((x)&0x40)
#define ISIS_LSP_CLV_METRIC_UPDOWN(x)           ((x)&0x80)
#define ISIS_LSP_CLV_METRIC_VALUE(x)		((x)&0x3f)

/*
 * detail clv information on L1 lsp packets
 */
#define ISIS_CLV_L1_LSP_AREA_ADDRESS		1
#define ISIS_CLV_L1_LSP_IS_NEIGHBORS		2
#define ISIS_CLV_L1_LSP_ES_NEIGHBORS		3
#define ISIS_CLV_L1_LSP_EXT_IS_REACHABLE        22
#define ISIS_CLV_L1_LSP_IP_INT_REACHABLE	128
#define ISIS_CLV_L1_LSP_NLPID			129
#define ISIS_CLV_L1_LSP_IP_EXT_REACHABLE        130
#define ISIS_CLV_L1_LSP_IP_INTERFACE_ADDR	132
#define ISIS_CLV_L1_LSP_TE_ROUTER_ID            134
#define ISIS_CLV_L1_LSP_EXT_IP_REACHABLE        135
#define ISIS_CLV_L1_LSP_HOSTNAME                137
#define ISIS_CLV_L1_LSP_MT_IS_REACHABLE         222
#define ISIS_CLV_L1_LSP_MT                      229
#define ISIS_CLV_L1_LSP_IPv6_INTERFACE_ADDR     232
#define ISIS_CLV_L1_LSP_MT_REACHABLE_IPv4_PREFX 235
#define ISIS_CLV_L1_LSP_IPv6_REACHABLE          236
#define ISIS_CLV_L1_LSP_MT_REACHABLE_IPv6_PREFX 237
/*
 * Note, the spec say 133, but everyone seems to use 10. Any clue on why
 * this is would be appreciated!
 */
#define ISIS_CLV_L1_LSP_AUTHENTICATION_NS	10	/* non spec */
#define ISIS_CLV_L1_LSP_AUTHENTICATION		133

/*
 * detail clv information on L2 lsp packets
 */
#define ISIS_CLV_L2_LSP_AREA_ADDRESS		1
#define ISIS_CLV_L2_LSP_IS_NEIGHBORS		2
#define ISIS_CLV_L2_LSP_PARTITION_DIS		4
#define ISIS_CLV_L2_LSP_PREFIX_NEIGHBORS	5
#define ISIS_CLV_L2_LSP_EXT_IS_REACHABLE        22
#define ISIS_CLV_L2_LSP_IP_INT_REACHABLE	128
#define ISIS_CLV_L2_LSP_NLPID			129
#define ISIS_CLV_L2_LSP_IP_EXT_REACHABLE	130
#define ISIS_CLV_L2_LSP_IDRP_INFO		131
#define ISIS_CLV_L2_LSP_IP_INTERFACE_ADDR	132
#define ISIS_CLV_L2_LSP_TE_ROUTER_ID            134
#define ISIS_CLV_L2_LSP_EXT_IP_REACHABLE        135
#define ISIS_CLV_L2_LSP_HOSTNAME                137
#define ISIS_CLV_L2_LSP_MT_IS_REACHABLE         222
#define ISIS_CLV_L2_LSP_MT                      229
#define ISIS_CLV_L2_LSP_IPv6_INTERFACE_ADDR     232
#define ISIS_CLV_L2_LSP_MT_REACHABLE_IPv4_PREFX 235
#define ISIS_CLV_L2_LSP_IPv6_REACHABLE          236
#define ISIS_CLV_L2_LSP_MT_REACHABLE_IPv6_PREFX 237

/*
 * Note, the spec say 133, but everyone seems to use 10. Any clue on why
 * this is would be appreciated!
 */
#define ISIS_CLV_L2_LSP_AUTHENTICATION_NS	10  	/*non spec */
#define ISIS_CLV_L2_LSP_AUTHENTICATION		133

/*
 * Published API functions.  NOTE, this are "local" API functions and
 * are only valid from with isis decodes.
 */
extern void isis_dissect_isis_lsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
	int offset, int hello_type, int header_length, int id_length);
extern void isis_register_lsp(int proto_isis);

#endif /* _PACKET_ISIS_LSP_H */