blob: e2eabee1815cc21e9da1c4d037b7420a5a1e85fd [file] [log] [blame]
JP Abgrall53f17a92014-02-12 14:02:41 -08001/* @(#) $Header: /tcpdump/master/tcpdump/ospf6.h,v 1.7 2006-09-05 15:50:26 hannes Exp $ (LBL) */
The Android Open Source Project2949f582009-03-03 19:30:46 -08002/*
3 * Copyright (c) 1991, 1993, 1994, 1995, 1996, 1997
4 * The Regents of the University of California. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that: (1) source code distributions
8 * retain the above copyright notice and this paragraph in its entirety, (2)
9 * distributions including binary code include the above copyright notice and
10 * this paragraph in its entirety in the documentation or other materials
11 * provided with the distribution, and (3) all advertising materials mentioning
12 * features or use of this software display the following acknowledgement:
13 * ``This product includes software developed by the University of California,
14 * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
15 * the University nor the names of its contributors may be used to endorse
16 * or promote products derived from this software without specific prior
17 * written permission.
18 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
19 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
20 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21 *
22 * OSPF support contributed by Jeffrey Honig (jch@mitchell.cit.cornell.edu)
23 */
JP Abgrall53f17a92014-02-12 14:02:41 -080024#define OSPF_TYPE_HELLO 1 /* Hello */
25#define OSPF_TYPE_DD 2 /* Database Description */
26#define OSPF_TYPE_LS_REQ 3 /* Link State Request */
27#define OSPF_TYPE_LS_UPDATE 4 /* Link State Update */
28#define OSPF_TYPE_LS_ACK 5 /* Link State Ack */
The Android Open Source Project2949f582009-03-03 19:30:46 -080029
30/* Options *_options */
31#define OSPF6_OPTION_V6 0x01 /* V6 bit: A bit for peeping tom */
32#define OSPF6_OPTION_E 0x02 /* E bit: External routes advertised */
33#define OSPF6_OPTION_MC 0x04 /* MC bit: Multicast capable */
34#define OSPF6_OPTION_N 0x08 /* N bit: For type-7 LSA */
35#define OSPF6_OPTION_R 0x10 /* R bit: Router bit */
36#define OSPF6_OPTION_DC 0x20 /* DC bit: Demand circuits */
37
38
39/* db_flags */
40#define OSPF6_DB_INIT 0x04 /* */
41#define OSPF6_DB_MORE 0x02
42#define OSPF6_DB_MASTER 0x01
43
44/* ls_type */
45#define LS_TYPE_ROUTER 1 /* router link */
46#define LS_TYPE_NETWORK 2 /* network link */
47#define LS_TYPE_INTER_AP 3 /* Inter-Area-Prefix */
48#define LS_TYPE_INTER_AR 4 /* Inter-Area-Router */
49#define LS_TYPE_ASE 5 /* ASE */
50#define LS_TYPE_GROUP 6 /* Group membership */
JP Abgrall53f17a92014-02-12 14:02:41 -080051#define LS_TYPE_NSSA 7 /* NSSA */
The Android Open Source Project2949f582009-03-03 19:30:46 -080052#define LS_TYPE_LINK 8 /* Link LSA */
53#define LS_TYPE_INTRA_AP 9 /* Intra-Area-Prefix */
JP Abgrall53f17a92014-02-12 14:02:41 -080054#define LS_TYPE_INTRA_ATE 10 /* Intra-Area-TE */
55#define LS_TYPE_GRACE 11 /* Grace LSA */
The Android Open Source Project2949f582009-03-03 19:30:46 -080056#define LS_TYPE_MASK 0x1fff
57
58#define LS_SCOPE_LINKLOCAL 0x0000
59#define LS_SCOPE_AREA 0x2000
60#define LS_SCOPE_AS 0x4000
61#define LS_SCOPE_MASK 0x6000
JP Abgrall53f17a92014-02-12 14:02:41 -080062#define LS_SCOPE_U 0x8000
The Android Open Source Project2949f582009-03-03 19:30:46 -080063
64/* rla_link.link_type */
65#define RLA_TYPE_ROUTER 1 /* point-to-point to another router */
66#define RLA_TYPE_TRANSIT 2 /* connection to transit network */
67#define RLA_TYPE_VIRTUAL 4 /* virtual link */
68
69/* rla_flags */
70#define RLA_FLAG_B 0x01
71#define RLA_FLAG_E 0x02
72#define RLA_FLAG_V 0x04
73#define RLA_FLAG_W 0x08
JP Abgrall53f17a92014-02-12 14:02:41 -080074#define RLA_FLAG_N 0x10
75
76/* lsa_prefix options */
77#define LSA_PREFIX_OPT_NU 0x01
78#define LSA_PREFIX_OPT_LA 0x02
79#define LSA_PREFIX_OPT_MC 0x04
80#define LSA_PREFIX_OPT_P 0x08
81#define LSA_PREFIX_OPT_DN 0x10
The Android Open Source Project2949f582009-03-03 19:30:46 -080082
83/* sla_tosmetric breakdown */
84#define SLA_MASK_TOS 0x7f000000
85#define SLA_MASK_METRIC 0x00ffffff
86#define SLA_SHIFT_TOS 24
87
88/* asla_metric */
The Android Open Source Project2949f582009-03-03 19:30:46 -080089#define ASLA_FLAG_FWDADDR 0x02000000
90#define ASLA_FLAG_ROUTETAG 0x01000000
91#define ASLA_MASK_METRIC 0x00ffffff
92
The Android Open Source Project2949f582009-03-03 19:30:46 -080093typedef u_int32_t rtrid_t;
94
95/* link state advertisement header */
JP Abgrall53f17a92014-02-12 14:02:41 -080096struct lsa6_hdr {
The Android Open Source Project2949f582009-03-03 19:30:46 -080097 u_int16_t ls_age;
98 u_int16_t ls_type;
99 rtrid_t ls_stateid;
100 rtrid_t ls_router;
101 u_int32_t ls_seq;
102 u_int16_t ls_chksum;
103 u_int16_t ls_length;
104};
105
JP Abgrall53f17a92014-02-12 14:02:41 -0800106struct lsa6_prefix {
The Android Open Source Project2949f582009-03-03 19:30:46 -0800107 u_int8_t lsa_p_len;
108 u_int8_t lsa_p_opt;
JP Abgrall53f17a92014-02-12 14:02:41 -0800109 u_int16_t lsa_p_metric;
The Android Open Source Project2949f582009-03-03 19:30:46 -0800110 u_int8_t lsa_p_prefix[4];
111};
112
113/* link state advertisement */
JP Abgrall53f17a92014-02-12 14:02:41 -0800114struct lsa6 {
115 struct lsa6_hdr ls_hdr;
The Android Open Source Project2949f582009-03-03 19:30:46 -0800116
117 /* Link state types */
118 union {
119 /* Router links advertisements */
120 struct {
121 union {
122 u_int8_t flg;
123 u_int32_t opt;
124 } rla_flgandopt;
125#define rla_flags rla_flgandopt.flg
126#define rla_options rla_flgandopt.opt
JP Abgrall53f17a92014-02-12 14:02:41 -0800127 struct rlalink6 {
The Android Open Source Project2949f582009-03-03 19:30:46 -0800128 u_int8_t link_type;
129 u_int8_t link_zero[1];
130 u_int16_t link_metric;
131 u_int32_t link_ifid;
132 u_int32_t link_nifid;
133 rtrid_t link_nrtid;
134 } rla_link[1]; /* may repeat */
135 } un_rla;
136
137 /* Network links advertisements */
138 struct {
139 u_int32_t nla_options;
140 rtrid_t nla_router[1]; /* may repeat */
141 } un_nla;
142
143 /* Inter Area Prefix LSA */
144 struct {
145 u_int32_t inter_ap_metric;
JP Abgrall53f17a92014-02-12 14:02:41 -0800146 struct lsa6_prefix inter_ap_prefix[1];
The Android Open Source Project2949f582009-03-03 19:30:46 -0800147 } un_inter_ap;
148
149 /* AS external links advertisements */
150 struct {
151 u_int32_t asla_metric;
JP Abgrall53f17a92014-02-12 14:02:41 -0800152 struct lsa6_prefix asla_prefix[1];
The Android Open Source Project2949f582009-03-03 19:30:46 -0800153 /* some optional fields follow */
154 } un_asla;
155
156#if 0
157 /* Summary links advertisements */
158 struct {
159 struct in_addr sla_mask;
160 u_int32_t sla_tosmetric[1]; /* may repeat */
161 } un_sla;
162
163 /* Multicast group membership */
164 struct mcla {
165 u_int32_t mcla_vtype;
166 struct in_addr mcla_vid;
167 } un_mcla[1];
168#endif
169
170 /* Type 7 LSA */
171
172 /* Link LSA */
173 struct llsa {
174 union {
175 u_int8_t pri;
176 u_int32_t opt;
177 } llsa_priandopt;
178#define llsa_priority llsa_priandopt.pri
179#define llsa_options llsa_priandopt.opt
180 struct in6_addr llsa_lladdr;
181 u_int32_t llsa_nprefix;
JP Abgrall53f17a92014-02-12 14:02:41 -0800182 struct lsa6_prefix llsa_prefix[1];
The Android Open Source Project2949f582009-03-03 19:30:46 -0800183 } un_llsa;
184
185 /* Intra-Area-Prefix */
186 struct {
187 u_int16_t intra_ap_nprefix;
188 u_int16_t intra_ap_lstype;
189 rtrid_t intra_ap_lsid;
190 rtrid_t intra_ap_rtid;
JP Abgrall53f17a92014-02-12 14:02:41 -0800191 struct lsa6_prefix intra_ap_prefix[1];
The Android Open Source Project2949f582009-03-03 19:30:46 -0800192 } un_intra_ap;
193 } lsa_un;
194};
195
196
The Android Open Source Project2949f582009-03-03 19:30:46 -0800197#define OSPF_AUTH_SIZE 8
198
199/*
200 * the main header
201 */
202struct ospf6hdr {
203 u_int8_t ospf6_version;
204 u_int8_t ospf6_type;
205 u_int16_t ospf6_len;
206 rtrid_t ospf6_routerid;
207 rtrid_t ospf6_areaid;
208 u_int16_t ospf6_chksum;
209 u_int8_t ospf6_instanceid;
210 u_int8_t ospf6_rsvd;
211 union {
212
213 /* Hello packet */
214 struct {
215 u_int32_t hello_ifid;
216 union {
217 u_int8_t pri;
218 u_int32_t opt;
219 } hello_priandopt;
220#define hello_priority hello_priandopt.pri
221#define hello_options hello_priandopt.opt
222 u_int16_t hello_helloint;
223 u_int16_t hello_deadint;
224 rtrid_t hello_dr;
225 rtrid_t hello_bdr;
226 rtrid_t hello_neighbor[1]; /* may repeat */
227 } un_hello;
228
229 /* Database Description packet */
230 struct {
231 u_int32_t db_options;
232 u_int16_t db_mtu;
233 u_int8_t db_mbz;
234 u_int8_t db_flags;
235 u_int32_t db_seq;
JP Abgrall53f17a92014-02-12 14:02:41 -0800236 struct lsa6_hdr db_lshdr[1]; /* may repeat */
The Android Open Source Project2949f582009-03-03 19:30:46 -0800237 } un_db;
238
239 /* Link State Request */
JP Abgrall53f17a92014-02-12 14:02:41 -0800240 struct lsr6 {
The Android Open Source Project2949f582009-03-03 19:30:46 -0800241 u_int16_t ls_mbz;
242 u_int16_t ls_type;
243 rtrid_t ls_stateid;
244 rtrid_t ls_router;
245 } un_lsr[1]; /* may repeat */
246
247 /* Link State Update */
248 struct {
249 u_int32_t lsu_count;
JP Abgrall53f17a92014-02-12 14:02:41 -0800250 struct lsa6 lsu_lsa[1]; /* may repeat */
The Android Open Source Project2949f582009-03-03 19:30:46 -0800251 } un_lsu;
252
253 /* Link State Acknowledgement */
254 struct {
JP Abgrall53f17a92014-02-12 14:02:41 -0800255 struct lsa6_hdr lsa_lshdr[1]; /* may repeat */
The Android Open Source Project2949f582009-03-03 19:30:46 -0800256 } un_lsa ;
257 } ospf6_un ;
258};
259
260#define ospf6_hello ospf6_un.un_hello
261#define ospf6_db ospf6_un.un_db
262#define ospf6_lsr ospf6_un.un_lsr
263#define ospf6_lsu ospf6_un.un_lsu
264#define ospf6_lsa ospf6_un.un_lsa
265