xref: /dflybsd-src/contrib/tcpdump/ospf.h (revision 59c07fbdf8168fa08c76c515186d561b5a92690c)
141c99275SPeter Avalos /*
241c99275SPeter Avalos  * Copyright (c) 1991, 1993, 1994, 1995, 1996, 1997
341c99275SPeter Avalos  *	The Regents of the University of California.  All rights reserved.
441c99275SPeter Avalos  *
541c99275SPeter Avalos  * Redistribution and use in source and binary forms, with or without
641c99275SPeter Avalos  * modification, are permitted provided that: (1) source code distributions
741c99275SPeter Avalos  * retain the above copyright notice and this paragraph in its entirety, (2)
841c99275SPeter Avalos  * distributions including binary code include the above copyright notice and
941c99275SPeter Avalos  * this paragraph in its entirety in the documentation or other materials
1041c99275SPeter Avalos  * provided with the distribution, and (3) all advertising materials mentioning
1141c99275SPeter Avalos  * features or use of this software display the following acknowledgement:
1241c99275SPeter Avalos  * ``This product includes software developed by the University of California,
1341c99275SPeter Avalos  * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
1441c99275SPeter Avalos  * the University nor the names of its contributors may be used to endorse
1541c99275SPeter Avalos  * or promote products derived from this software without specific prior
1641c99275SPeter Avalos  * written permission.
1741c99275SPeter Avalos  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
1841c99275SPeter Avalos  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
1941c99275SPeter Avalos  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
2041c99275SPeter Avalos  *
2141c99275SPeter Avalos  * OSPF support contributed by Jeffrey Honig (jch@mitchell.cit.cornell.edu)
2241c99275SPeter Avalos  */
2341c99275SPeter Avalos #define	OSPF_TYPE_HELLO         1	/* Hello */
2441c99275SPeter Avalos #define	OSPF_TYPE_DD            2	/* Database Description */
2541c99275SPeter Avalos #define	OSPF_TYPE_LS_REQ        3	/* Link State Request */
2641c99275SPeter Avalos #define	OSPF_TYPE_LS_UPDATE     4	/* Link State Update */
2741c99275SPeter Avalos #define	OSPF_TYPE_LS_ACK        5	/* Link State Ack */
2841c99275SPeter Avalos 
2941c99275SPeter Avalos /* Options field
3041c99275SPeter Avalos  *
3141c99275SPeter Avalos  * +------------------------------------+
32ea7b4bf5SPeter Avalos  * | DN | O | DC | L | N/P | MC | E | T |
3341c99275SPeter Avalos  * +------------------------------------+
3441c99275SPeter Avalos  *
3541c99275SPeter Avalos  */
3641c99275SPeter Avalos 
37*ed775ee7SAntonio Huete Jimenez #define	OSPF_OPTION_MT	0x01	/* MT bit: multi-topology */
3841c99275SPeter Avalos #define	OSPF_OPTION_E	0x02	/* E bit: External routes advertised */
3941c99275SPeter Avalos #define	OSPF_OPTION_MC	0x04	/* MC bit: Multicast capable */
4041c99275SPeter Avalos #define	OSPF_OPTION_NP	0x08	/* N/P bit: NSSA capable */
41ea7b4bf5SPeter Avalos #define	OSPF_OPTION_L	0x10	/* L bit: Packet contains LLS data block */
4241c99275SPeter Avalos #define	OSPF_OPTION_DC	0x20	/* DC bit: Demand circuit capable */
4341c99275SPeter Avalos #define	OSPF_OPTION_O	0x40	/* O bit: Opaque LSA capable */
4441c99275SPeter Avalos #define	OSPF_OPTION_DN	0x80	/* DN bit: Up/Down Bit capable - draft-ietf-ospf-2547-dnbit-04 */
4541c99275SPeter Avalos 
4641c99275SPeter Avalos /* ospf_authtype	*/
4741c99275SPeter Avalos #define	OSPF_AUTH_NONE		0	/* No auth-data */
4841c99275SPeter Avalos #define	OSPF_AUTH_SIMPLE	1	/* Simple password */
4941c99275SPeter Avalos #define OSPF_AUTH_SIMPLE_LEN	8	/* max length of simple authentication */
5041c99275SPeter Avalos #define OSPF_AUTH_MD5		2	/* MD5 authentication */
5141c99275SPeter Avalos #define OSPF_AUTH_MD5_LEN	16	/* length of MD5 authentication */
5241c99275SPeter Avalos 
5341c99275SPeter Avalos /* db_flags	*/
54ea7b4bf5SPeter Avalos #define	OSPF_DB_INIT		0x04
5541c99275SPeter Avalos #define	OSPF_DB_MORE		0x02
5641c99275SPeter Avalos #define	OSPF_DB_MASTER          0x01
57ea7b4bf5SPeter Avalos #define OSPF_DB_RESYNC          0x08  /* RFC4811 */
5841c99275SPeter Avalos 
5941c99275SPeter Avalos /* ls_type	*/
6041c99275SPeter Avalos #define	LS_TYPE_ROUTER		1   /* router link */
6141c99275SPeter Avalos #define	LS_TYPE_NETWORK		2   /* network link */
6241c99275SPeter Avalos #define	LS_TYPE_SUM_IP		3   /* summary link */
6341c99275SPeter Avalos #define	LS_TYPE_SUM_ABR		4   /* summary area link */
6441c99275SPeter Avalos #define	LS_TYPE_ASE		5   /* ASE  */
6541c99275SPeter Avalos #define	LS_TYPE_GROUP		6   /* Group membership (multicast */
6641c99275SPeter Avalos 				    /* extensions 23 July 1991) */
6741c99275SPeter Avalos #define	LS_TYPE_NSSA            7   /* rfc3101 - Not so Stubby Areas */
6841c99275SPeter Avalos #define	LS_TYPE_OPAQUE_LL       9   /* rfc2370 - Opaque Link Local */
6941c99275SPeter Avalos #define	LS_TYPE_OPAQUE_AL      10   /* rfc2370 - Opaque Link Local */
7041c99275SPeter Avalos #define	LS_TYPE_OPAQUE_DW      11   /* rfc2370 - Opaque Domain Wide */
7141c99275SPeter Avalos 
7241c99275SPeter Avalos #define LS_OPAQUE_TYPE_TE       1   /* rfc3630 */
7341c99275SPeter Avalos #define LS_OPAQUE_TYPE_GRACE    3   /* rfc3623 */
7441c99275SPeter Avalos #define LS_OPAQUE_TYPE_RI       4   /* draft-ietf-ospf-cap-03 */
7541c99275SPeter Avalos 
7641c99275SPeter Avalos #define LS_OPAQUE_TE_TLV_ROUTER 1   /* rfc3630 */
7741c99275SPeter Avalos #define LS_OPAQUE_TE_TLV_LINK   2   /* rfc3630 */
7841c99275SPeter Avalos 
7941c99275SPeter Avalos #define LS_OPAQUE_TE_LINK_SUBTLV_LINK_TYPE             1 /* rfc3630 */
8041c99275SPeter Avalos #define LS_OPAQUE_TE_LINK_SUBTLV_LINK_ID               2 /* rfc3630 */
8141c99275SPeter Avalos #define LS_OPAQUE_TE_LINK_SUBTLV_LOCAL_IP              3 /* rfc3630 */
8241c99275SPeter Avalos #define LS_OPAQUE_TE_LINK_SUBTLV_REMOTE_IP             4 /* rfc3630 */
8341c99275SPeter Avalos #define LS_OPAQUE_TE_LINK_SUBTLV_TE_METRIC             5 /* rfc3630 */
8441c99275SPeter Avalos #define LS_OPAQUE_TE_LINK_SUBTLV_MAX_BW                6 /* rfc3630 */
8541c99275SPeter Avalos #define LS_OPAQUE_TE_LINK_SUBTLV_MAX_RES_BW            7 /* rfc3630 */
8641c99275SPeter Avalos #define LS_OPAQUE_TE_LINK_SUBTLV_UNRES_BW              8 /* rfc3630 */
8741c99275SPeter Avalos #define LS_OPAQUE_TE_LINK_SUBTLV_ADMIN_GROUP           9 /* rfc3630 */
88ea7b4bf5SPeter Avalos #define LS_OPAQUE_TE_LINK_SUBTLV_LINK_LOCAL_REMOTE_ID 11 /* rfc4203 */
89ea7b4bf5SPeter Avalos #define LS_OPAQUE_TE_LINK_SUBTLV_LINK_PROTECTION_TYPE 14 /* rfc4203 */
90ea7b4bf5SPeter Avalos #define LS_OPAQUE_TE_LINK_SUBTLV_INTF_SW_CAP_DESCR    15 /* rfc4203 */
91ea7b4bf5SPeter Avalos #define LS_OPAQUE_TE_LINK_SUBTLV_SHARED_RISK_GROUP    16 /* rfc4203 */
9241c99275SPeter Avalos #define LS_OPAQUE_TE_LINK_SUBTLV_BW_CONSTRAINTS       17 /* rfc4124 */
9341c99275SPeter Avalos 
9441c99275SPeter Avalos #define LS_OPAQUE_TE_LINK_SUBTLV_LINK_TYPE_PTP        1  /* rfc3630 */
9541c99275SPeter Avalos #define LS_OPAQUE_TE_LINK_SUBTLV_LINK_TYPE_MA         2  /* rfc3630 */
9641c99275SPeter Avalos 
9741c99275SPeter Avalos #define LS_OPAQUE_GRACE_TLV_PERIOD       1 /* rfc3623 */
9841c99275SPeter Avalos #define LS_OPAQUE_GRACE_TLV_REASON       2 /* rfc3623 */
9941c99275SPeter Avalos #define LS_OPAQUE_GRACE_TLV_INT_ADDRESS  3 /* rfc3623 */
10041c99275SPeter Avalos 
10141c99275SPeter Avalos #define LS_OPAQUE_GRACE_TLV_REASON_UNKNOWN     0 /* rfc3623 */
10241c99275SPeter Avalos #define LS_OPAQUE_GRACE_TLV_REASON_SW_RESTART  1 /* rfc3623 */
10341c99275SPeter Avalos #define LS_OPAQUE_GRACE_TLV_REASON_SW_UPGRADE  2 /* rfc3623 */
10441c99275SPeter Avalos #define LS_OPAQUE_GRACE_TLV_REASON_CP_SWITCH   3 /* rfc3623 */
10541c99275SPeter Avalos 
10641c99275SPeter Avalos #define LS_OPAQUE_RI_TLV_CAP             1 /* draft-ietf-ospf-cap-03 */
10741c99275SPeter Avalos 
10841c99275SPeter Avalos 
10941c99275SPeter Avalos /* rla_link.link_type	*/
11041c99275SPeter Avalos #define	RLA_TYPE_ROUTER		1   /* point-to-point to another router	*/
11141c99275SPeter Avalos #define	RLA_TYPE_TRANSIT	2   /* connection to transit network	*/
11241c99275SPeter Avalos #define	RLA_TYPE_STUB		3   /* connection to stub network	*/
11341c99275SPeter Avalos #define RLA_TYPE_VIRTUAL	4   /* virtual link			*/
11441c99275SPeter Avalos 
11541c99275SPeter Avalos /* rla_flags	*/
11641c99275SPeter Avalos #define	RLA_FLAG_B	0x01
11741c99275SPeter Avalos #define	RLA_FLAG_E	0x02
11841c99275SPeter Avalos #define	RLA_FLAG_W1	0x04
11941c99275SPeter Avalos #define	RLA_FLAG_W2	0x08
12041c99275SPeter Avalos 
12141c99275SPeter Avalos /* sla_tosmetric breakdown	*/
12241c99275SPeter Avalos #define	SLA_MASK_TOS		0x7f000000
12341c99275SPeter Avalos #define	SLA_MASK_METRIC		0x00ffffff
12441c99275SPeter Avalos #define SLA_SHIFT_TOS		24
12541c99275SPeter Avalos 
12641c99275SPeter Avalos /* asla_tosmetric breakdown	*/
12741c99275SPeter Avalos #define	ASLA_FLAG_EXTERNAL	0x80000000
12841c99275SPeter Avalos #define	ASLA_MASK_TOS		0x7f000000
12941c99275SPeter Avalos #define	ASLA_SHIFT_TOS		24
13041c99275SPeter Avalos #define	ASLA_MASK_METRIC	0x00ffffff
13141c99275SPeter Avalos 
13241c99275SPeter Avalos /* multicast vertex type */
13341c99275SPeter Avalos #define	MCLA_VERTEX_ROUTER	1
13441c99275SPeter Avalos #define	MCLA_VERTEX_NETWORK	2
13541c99275SPeter Avalos 
136ea7b4bf5SPeter Avalos /* Link-Local-Signaling */
137411677aeSAaron LI #define OSPF_LLS_HDRLEN         4U /* RFC5613 Section 2.2 */
138411677aeSAaron LI 
139ea7b4bf5SPeter Avalos #define OSPF_LLS_EO             1  /* RFC4811, RFC4812 */
140ea7b4bf5SPeter Avalos #define OSPF_LLS_MD5            2  /* RFC4813 */
141ea7b4bf5SPeter Avalos 
142ea7b4bf5SPeter Avalos #define OSPF_LLS_EO_LR		0x00000001		/* RFC4811 */
143ea7b4bf5SPeter Avalos #define OSPF_LLS_EO_RS		0x00000002		/* RFC4812 */
144ea7b4bf5SPeter Avalos 
145ea7b4bf5SPeter Avalos /*
146ea7b4bf5SPeter Avalos  * TOS metric struct (will be 0 or more in router links update)
147ea7b4bf5SPeter Avalos  */
148ea7b4bf5SPeter Avalos struct tos_metric {
149*ed775ee7SAntonio Huete Jimenez     nd_uint8_t  tos_type;
150*ed775ee7SAntonio Huete Jimenez     nd_uint8_t  reserved;
151*ed775ee7SAntonio Huete Jimenez     nd_uint16_t tos_metric;
152ea7b4bf5SPeter Avalos };
153ea7b4bf5SPeter Avalos struct tos_link {
154*ed775ee7SAntonio Huete Jimenez     nd_uint8_t  link_type;
155*ed775ee7SAntonio Huete Jimenez     nd_uint8_t  link_tos_count;
156*ed775ee7SAntonio Huete Jimenez     nd_uint16_t tos_metric;
157ea7b4bf5SPeter Avalos };
158ea7b4bf5SPeter Avalos union un_tos {
159ea7b4bf5SPeter Avalos     struct tos_link link;
160ea7b4bf5SPeter Avalos     struct tos_metric metrics;
161ea7b4bf5SPeter Avalos };
162ea7b4bf5SPeter Avalos 
16341c99275SPeter Avalos /* link state advertisement header */
16441c99275SPeter Avalos struct lsa_hdr {
165*ed775ee7SAntonio Huete Jimenez     nd_uint16_t ls_age;
166*ed775ee7SAntonio Huete Jimenez     nd_uint8_t  ls_options;
167*ed775ee7SAntonio Huete Jimenez     nd_uint8_t  ls_type;
16841c99275SPeter Avalos     union {
169*ed775ee7SAntonio Huete Jimenez         nd_ipv4 lsa_id;
17041c99275SPeter Avalos         struct { /* opaque LSAs change the LSA-ID field */
171*ed775ee7SAntonio Huete Jimenez             nd_uint8_t  opaque_type;
172*ed775ee7SAntonio Huete Jimenez             nd_uint24_t opaque_id;
17341c99275SPeter Avalos 	} opaque_field;
17441c99275SPeter Avalos     } un_lsa_id;
175*ed775ee7SAntonio Huete Jimenez     nd_ipv4     ls_router;
176*ed775ee7SAntonio Huete Jimenez     nd_uint32_t ls_seq;
177*ed775ee7SAntonio Huete Jimenez     nd_uint16_t ls_chksum;
178*ed775ee7SAntonio Huete Jimenez     nd_uint16_t ls_length;
17941c99275SPeter Avalos };
18041c99275SPeter Avalos 
18141c99275SPeter Avalos /* link state advertisement */
18241c99275SPeter Avalos struct lsa {
18341c99275SPeter Avalos     struct lsa_hdr ls_hdr;
18441c99275SPeter Avalos 
18541c99275SPeter Avalos     /* Link state types */
18641c99275SPeter Avalos     union {
18741c99275SPeter Avalos 	/* Router links advertisements */
18841c99275SPeter Avalos 	struct {
189*ed775ee7SAntonio Huete Jimenez 	    nd_uint8_t  rla_flags;
190*ed775ee7SAntonio Huete Jimenez 	    nd_byte     rla_zero;
191*ed775ee7SAntonio Huete Jimenez 	    nd_uint16_t rla_count;
19241c99275SPeter Avalos 	    struct rlalink {
193*ed775ee7SAntonio Huete Jimenez 		nd_ipv4 link_id;
194*ed775ee7SAntonio Huete Jimenez 		nd_ipv4 link_data;
195ea7b4bf5SPeter Avalos                 union un_tos un_tos;
19641c99275SPeter Avalos 	    } rla_link[1];		/* may repeat	*/
19741c99275SPeter Avalos 	} un_rla;
19841c99275SPeter Avalos 
19941c99275SPeter Avalos 	/* Network links advertisements */
20041c99275SPeter Avalos 	struct {
201*ed775ee7SAntonio Huete Jimenez 	    nd_ipv4 nla_mask;
202*ed775ee7SAntonio Huete Jimenez 	    nd_ipv4 nla_router[1];	/* may repeat	*/
20341c99275SPeter Avalos 	} un_nla;
20441c99275SPeter Avalos 
20541c99275SPeter Avalos 	/* Summary links advertisements */
20641c99275SPeter Avalos 	struct {
207*ed775ee7SAntonio Huete Jimenez 	    nd_ipv4     sla_mask;
208*ed775ee7SAntonio Huete Jimenez 	    nd_uint32_t sla_tosmetric[1];	/* may repeat	*/
20941c99275SPeter Avalos 	} un_sla;
21041c99275SPeter Avalos 
21141c99275SPeter Avalos 	/* AS external links advertisements */
21241c99275SPeter Avalos 	struct {
213*ed775ee7SAntonio Huete Jimenez 	    nd_ipv4 asla_mask;
21441c99275SPeter Avalos 	    struct aslametric {
215*ed775ee7SAntonio Huete Jimenez 		nd_uint32_t asla_tosmetric;
216*ed775ee7SAntonio Huete Jimenez 		nd_ipv4     asla_forward;
217*ed775ee7SAntonio Huete Jimenez 		nd_ipv4     asla_tag;
21841c99275SPeter Avalos 	    } asla_metric[1];		/* may repeat	*/
21941c99275SPeter Avalos 	} un_asla;
22041c99275SPeter Avalos 
22141c99275SPeter Avalos 	/* Multicast group membership */
22241c99275SPeter Avalos 	struct mcla {
223*ed775ee7SAntonio Huete Jimenez 	    nd_uint32_t mcla_vtype;
224*ed775ee7SAntonio Huete Jimenez 	    nd_ipv4     mcla_vid;
22541c99275SPeter Avalos 	} un_mcla[1];
22641c99275SPeter Avalos 
22741c99275SPeter Avalos         /* Opaque TE LSA */
22841c99275SPeter Avalos         struct {
229*ed775ee7SAntonio Huete Jimenez 	    nd_uint16_t type;
230*ed775ee7SAntonio Huete Jimenez 	    nd_uint16_t length;
231*ed775ee7SAntonio Huete Jimenez 	    nd_byte     data[1]; /* may repeat   */
232*ed775ee7SAntonio Huete Jimenez 	} un_te_lsa_tlv[1]; /* may repeat */
23341c99275SPeter Avalos 
23441c99275SPeter Avalos         /* Opaque Grace LSA */
23541c99275SPeter Avalos         struct {
236*ed775ee7SAntonio Huete Jimenez 	    nd_uint16_t type;
237*ed775ee7SAntonio Huete Jimenez 	    nd_uint16_t length;
238*ed775ee7SAntonio Huete Jimenez 	    nd_byte     data[1]; /* may repeat   */
239*ed775ee7SAntonio Huete Jimenez 	} un_grace_tlv[1]; /* may repeat */
24041c99275SPeter Avalos 
24141c99275SPeter Avalos         /* Opaque Router information LSA */
24241c99275SPeter Avalos         struct {
243*ed775ee7SAntonio Huete Jimenez 	    nd_uint16_t type;
244*ed775ee7SAntonio Huete Jimenez 	    nd_uint16_t length;
245*ed775ee7SAntonio Huete Jimenez 	    nd_byte     data[1]; /* may repeat   */
246*ed775ee7SAntonio Huete Jimenez 	} un_ri_tlv[1]; /* may repeat */
24741c99275SPeter Avalos 
24841c99275SPeter Avalos         /* Unknown LSA */
24941c99275SPeter Avalos         struct unknown {
250*ed775ee7SAntonio Huete Jimenez 	    nd_byte data[1]; /* may repeat   */
25141c99275SPeter Avalos 	} un_unknown[1];
25241c99275SPeter Avalos 
25341c99275SPeter Avalos     } lsa_un;
25441c99275SPeter Avalos };
25541c99275SPeter Avalos 
25641c99275SPeter Avalos #define	OSPF_AUTH_SIZE	8
25741c99275SPeter Avalos 
25841c99275SPeter Avalos /*
25941c99275SPeter Avalos  * the main header
26041c99275SPeter Avalos  */
26141c99275SPeter Avalos struct ospfhdr {
262*ed775ee7SAntonio Huete Jimenez     nd_uint8_t  ospf_version;
263*ed775ee7SAntonio Huete Jimenez     nd_uint8_t  ospf_type;
264*ed775ee7SAntonio Huete Jimenez     nd_uint16_t ospf_len;
265*ed775ee7SAntonio Huete Jimenez     nd_ipv4     ospf_routerid;
266*ed775ee7SAntonio Huete Jimenez     nd_ipv4     ospf_areaid;
267*ed775ee7SAntonio Huete Jimenez     nd_uint16_t ospf_chksum;
268*ed775ee7SAntonio Huete Jimenez     nd_uint16_t ospf_authtype;
269*ed775ee7SAntonio Huete Jimenez     nd_byte     ospf_authdata[OSPF_AUTH_SIZE];
27041c99275SPeter Avalos     union {
27141c99275SPeter Avalos 
27241c99275SPeter Avalos 	/* Hello packet */
27341c99275SPeter Avalos 	struct {
274*ed775ee7SAntonio Huete Jimenez 	    nd_ipv4     hello_mask;
275*ed775ee7SAntonio Huete Jimenez 	    nd_uint16_t hello_helloint;
276*ed775ee7SAntonio Huete Jimenez 	    nd_uint8_t  hello_options;
277*ed775ee7SAntonio Huete Jimenez 	    nd_uint8_t  hello_priority;
278*ed775ee7SAntonio Huete Jimenez 	    nd_uint32_t hello_deadint;
279*ed775ee7SAntonio Huete Jimenez 	    nd_ipv4     hello_dr;
280*ed775ee7SAntonio Huete Jimenez 	    nd_ipv4     hello_bdr;
281*ed775ee7SAntonio Huete Jimenez 	    nd_ipv4     hello_neighbor[1]; /* may repeat	*/
28241c99275SPeter Avalos 	} un_hello;
28341c99275SPeter Avalos 
28441c99275SPeter Avalos 	/* Database Description packet */
28541c99275SPeter Avalos 	struct {
286*ed775ee7SAntonio Huete Jimenez 	    nd_uint16_t db_ifmtu;
287*ed775ee7SAntonio Huete Jimenez 	    nd_uint8_t  db_options;
288*ed775ee7SAntonio Huete Jimenez 	    nd_uint8_t  db_flags;
289*ed775ee7SAntonio Huete Jimenez 	    nd_uint32_t db_seq;
29041c99275SPeter Avalos 	    struct lsa_hdr db_lshdr[1]; /* may repeat	*/
29141c99275SPeter Avalos 	} un_db;
29241c99275SPeter Avalos 
29341c99275SPeter Avalos 	/* Link State Request */
29441c99275SPeter Avalos 	struct lsr {
295*ed775ee7SAntonio Huete Jimenez 	    nd_uint32_t ls_type;
29641c99275SPeter Avalos             union {
297*ed775ee7SAntonio Huete Jimenez                 nd_ipv4 ls_stateid;
29841c99275SPeter Avalos                 struct { /* opaque LSAs change the LSA-ID field */
299*ed775ee7SAntonio Huete Jimenez                     nd_uint8_t  opaque_type;
300*ed775ee7SAntonio Huete Jimenez                     nd_uint24_t opaque_id;
30141c99275SPeter Avalos                 } opaque_field;
30241c99275SPeter Avalos             } un_ls_stateid;
303*ed775ee7SAntonio Huete Jimenez 	    nd_ipv4 ls_router;
30441c99275SPeter Avalos 	} un_lsr[1];		/* may repeat	*/
30541c99275SPeter Avalos 
30641c99275SPeter Avalos 	/* Link State Update */
30741c99275SPeter Avalos 	struct {
308*ed775ee7SAntonio Huete Jimenez 	    nd_uint32_t lsu_count;
30941c99275SPeter Avalos 	    struct lsa  lsu_lsa[1]; /* may repeat	*/
31041c99275SPeter Avalos 	} un_lsu;
31141c99275SPeter Avalos 
31241c99275SPeter Avalos 	/* Link State Acknowledgement */
31341c99275SPeter Avalos 	struct {
31441c99275SPeter Avalos 	    struct lsa_hdr lsa_lshdr[1]; /* may repeat	*/
31541c99275SPeter Avalos 	} un_lsa ;
31641c99275SPeter Avalos     } ospf_un ;
31741c99275SPeter Avalos };
31841c99275SPeter Avalos 
31941c99275SPeter Avalos #define	ospf_hello	ospf_un.un_hello
32041c99275SPeter Avalos #define	ospf_db		ospf_un.un_db
32141c99275SPeter Avalos #define	ospf_lsr	ospf_un.un_lsr
32241c99275SPeter Avalos #define	ospf_lsu	ospf_un.un_lsu
32341c99275SPeter Avalos #define	ospf_lsa	ospf_un.un_lsa
324