xref: /freebsd/contrib/tcpdump/ospf.h (revision ee67461e56828dd1f8de165947ba83f6d9148a87)
14edb46e9SPaul Traina /*
24644f044SBill Fenner  * Copyright (c) 1991, 1993, 1994, 1995, 1996, 1997
34edb46e9SPaul Traina  *	The Regents of the University of California.  All rights reserved.
44edb46e9SPaul Traina  *
54edb46e9SPaul Traina  * Redistribution and use in source and binary forms, with or without
64edb46e9SPaul Traina  * modification, are permitted provided that: (1) source code distributions
74edb46e9SPaul Traina  * retain the above copyright notice and this paragraph in its entirety, (2)
84edb46e9SPaul Traina  * distributions including binary code include the above copyright notice and
94edb46e9SPaul Traina  * this paragraph in its entirety in the documentation or other materials
104edb46e9SPaul Traina  * provided with the distribution, and (3) all advertising materials mentioning
114edb46e9SPaul Traina  * features or use of this software display the following acknowledgement:
124edb46e9SPaul Traina  * ``This product includes software developed by the University of California,
134edb46e9SPaul Traina  * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
144edb46e9SPaul Traina  * the University nor the names of its contributors may be used to endorse
154edb46e9SPaul Traina  * or promote products derived from this software without specific prior
164edb46e9SPaul Traina  * written permission.
174edb46e9SPaul Traina  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
184edb46e9SPaul Traina  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
194edb46e9SPaul Traina  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
204edb46e9SPaul Traina  *
214edb46e9SPaul Traina  * OSPF support contributed by Jeffrey Honig (jch@mitchell.cit.cornell.edu)
224edb46e9SPaul Traina  */
234edb46e9SPaul Traina #define	OSPF_TYPE_HELLO         1	/* Hello */
245b0fe478SBruce M Simpson #define	OSPF_TYPE_DD            2	/* Database Description */
255b0fe478SBruce M Simpson #define	OSPF_TYPE_LS_REQ        3	/* Link State Request */
265b0fe478SBruce M Simpson #define	OSPF_TYPE_LS_UPDATE     4	/* Link State Update */
275b0fe478SBruce M Simpson #define	OSPF_TYPE_LS_ACK        5	/* Link State Ack */
284edb46e9SPaul Traina 
295b0fe478SBruce M Simpson /* Options field
305b0fe478SBruce M Simpson  *
315b0fe478SBruce M Simpson  * +------------------------------------+
32a5779b6eSRui Paulo  * | DN | O | DC | L | N/P | MC | E | T |
335b0fe478SBruce M Simpson  * +------------------------------------+
345b0fe478SBruce M Simpson  *
355b0fe478SBruce M Simpson  */
365b0fe478SBruce M Simpson 
37*ee67461eSJoseph Mingrone #define	OSPF_OPTION_MT	0x01	/* MT bit: multi-topology */
384edb46e9SPaul Traina #define	OSPF_OPTION_E	0x02	/* E bit: External routes advertised */
394edb46e9SPaul Traina #define	OSPF_OPTION_MC	0x04	/* MC bit: Multicast capable */
405b0fe478SBruce M Simpson #define	OSPF_OPTION_NP	0x08	/* N/P bit: NSSA capable */
41a5779b6eSRui Paulo #define	OSPF_OPTION_L	0x10	/* L bit: Packet contains LLS data block */
425b0fe478SBruce M Simpson #define	OSPF_OPTION_DC	0x20	/* DC bit: Demand circuit capable */
435b0fe478SBruce M Simpson #define	OSPF_OPTION_O	0x40	/* O bit: Opaque LSA capable */
441de50e9fSSam Leffler #define	OSPF_OPTION_DN	0x80	/* DN bit: Up/Down Bit capable - draft-ietf-ospf-2547-dnbit-04 */
454edb46e9SPaul Traina 
464edb46e9SPaul Traina /* ospf_authtype	*/
474edb46e9SPaul Traina #define	OSPF_AUTH_NONE		0	/* No auth-data */
484edb46e9SPaul Traina #define	OSPF_AUTH_SIMPLE	1	/* Simple password */
49b5bfcb5dSMax Laier #define OSPF_AUTH_SIMPLE_LEN	8	/* max length of simple authentication */
504644f044SBill Fenner #define OSPF_AUTH_MD5		2	/* MD5 authentication */
514644f044SBill Fenner #define OSPF_AUTH_MD5_LEN	16	/* length of MD5 authentication */
524644f044SBill Fenner 
534edb46e9SPaul Traina /* db_flags	*/
54a5779b6eSRui Paulo #define	OSPF_DB_INIT		0x04
554edb46e9SPaul Traina #define	OSPF_DB_MORE		0x02
564edb46e9SPaul Traina #define	OSPF_DB_MASTER          0x01
57a5779b6eSRui Paulo #define OSPF_DB_RESYNC          0x08  /* RFC4811 */
584edb46e9SPaul Traina 
594edb46e9SPaul Traina /* ls_type	*/
604edb46e9SPaul Traina #define	LS_TYPE_ROUTER		1   /* router link */
614edb46e9SPaul Traina #define	LS_TYPE_NETWORK		2   /* network link */
624edb46e9SPaul Traina #define	LS_TYPE_SUM_IP		3   /* summary link */
634edb46e9SPaul Traina #define	LS_TYPE_SUM_ABR		4   /* summary area link */
644edb46e9SPaul Traina #define	LS_TYPE_ASE		5   /* ASE  */
654edb46e9SPaul Traina #define	LS_TYPE_GROUP		6   /* Group membership (multicast */
664edb46e9SPaul Traina 				    /* extensions 23 July 1991) */
671de50e9fSSam Leffler #define	LS_TYPE_NSSA            7   /* rfc3101 - Not so Stubby Areas */
685b0fe478SBruce M Simpson #define	LS_TYPE_OPAQUE_LL       9   /* rfc2370 - Opaque Link Local */
695b0fe478SBruce M Simpson #define	LS_TYPE_OPAQUE_AL      10   /* rfc2370 - Opaque Link Local */
705b0fe478SBruce M Simpson #define	LS_TYPE_OPAQUE_DW      11   /* rfc2370 - Opaque Domain Wide */
715b0fe478SBruce M Simpson 
725b0fe478SBruce M Simpson #define LS_OPAQUE_TYPE_TE       1   /* rfc3630 */
731de50e9fSSam Leffler #define LS_OPAQUE_TYPE_GRACE    3   /* rfc3623 */
741de50e9fSSam Leffler #define LS_OPAQUE_TYPE_RI       4   /* draft-ietf-ospf-cap-03 */
755b0fe478SBruce M Simpson 
765b0fe478SBruce M Simpson #define LS_OPAQUE_TE_TLV_ROUTER 1   /* rfc3630 */
775b0fe478SBruce M Simpson #define LS_OPAQUE_TE_TLV_LINK   2   /* rfc3630 */
785b0fe478SBruce M Simpson 
795b0fe478SBruce M Simpson #define LS_OPAQUE_TE_LINK_SUBTLV_LINK_TYPE             1 /* rfc3630 */
805b0fe478SBruce M Simpson #define LS_OPAQUE_TE_LINK_SUBTLV_LINK_ID               2 /* rfc3630 */
815b0fe478SBruce M Simpson #define LS_OPAQUE_TE_LINK_SUBTLV_LOCAL_IP              3 /* rfc3630 */
825b0fe478SBruce M Simpson #define LS_OPAQUE_TE_LINK_SUBTLV_REMOTE_IP             4 /* rfc3630 */
835b0fe478SBruce M Simpson #define LS_OPAQUE_TE_LINK_SUBTLV_TE_METRIC             5 /* rfc3630 */
845b0fe478SBruce M Simpson #define LS_OPAQUE_TE_LINK_SUBTLV_MAX_BW                6 /* rfc3630 */
855b0fe478SBruce M Simpson #define LS_OPAQUE_TE_LINK_SUBTLV_MAX_RES_BW            7 /* rfc3630 */
865b0fe478SBruce M Simpson #define LS_OPAQUE_TE_LINK_SUBTLV_UNRES_BW              8 /* rfc3630 */
875b0fe478SBruce M Simpson #define LS_OPAQUE_TE_LINK_SUBTLV_ADMIN_GROUP           9 /* rfc3630 */
88a5779b6eSRui Paulo #define LS_OPAQUE_TE_LINK_SUBTLV_LINK_LOCAL_REMOTE_ID 11 /* rfc4203 */
89a5779b6eSRui Paulo #define LS_OPAQUE_TE_LINK_SUBTLV_LINK_PROTECTION_TYPE 14 /* rfc4203 */
90a5779b6eSRui Paulo #define LS_OPAQUE_TE_LINK_SUBTLV_INTF_SW_CAP_DESCR    15 /* rfc4203 */
91a5779b6eSRui Paulo #define LS_OPAQUE_TE_LINK_SUBTLV_SHARED_RISK_GROUP    16 /* rfc4203 */
922ebc47dbSSam Leffler #define LS_OPAQUE_TE_LINK_SUBTLV_BW_CONSTRAINTS       17 /* rfc4124 */
935b0fe478SBruce M Simpson 
945b0fe478SBruce M Simpson #define LS_OPAQUE_TE_LINK_SUBTLV_LINK_TYPE_PTP        1  /* rfc3630 */
955b0fe478SBruce M Simpson #define LS_OPAQUE_TE_LINK_SUBTLV_LINK_TYPE_MA         2  /* rfc3630 */
964edb46e9SPaul Traina 
971de50e9fSSam Leffler #define LS_OPAQUE_GRACE_TLV_PERIOD       1 /* rfc3623 */
981de50e9fSSam Leffler #define LS_OPAQUE_GRACE_TLV_REASON       2 /* rfc3623 */
991de50e9fSSam Leffler #define LS_OPAQUE_GRACE_TLV_INT_ADDRESS  3 /* rfc3623 */
1001de50e9fSSam Leffler 
1011de50e9fSSam Leffler #define LS_OPAQUE_GRACE_TLV_REASON_UNKNOWN     0 /* rfc3623 */
1021de50e9fSSam Leffler #define LS_OPAQUE_GRACE_TLV_REASON_SW_RESTART  1 /* rfc3623 */
1031de50e9fSSam Leffler #define LS_OPAQUE_GRACE_TLV_REASON_SW_UPGRADE  2 /* rfc3623 */
1041de50e9fSSam Leffler #define LS_OPAQUE_GRACE_TLV_REASON_CP_SWITCH   3 /* rfc3623 */
1051de50e9fSSam Leffler 
1061de50e9fSSam Leffler #define LS_OPAQUE_RI_TLV_CAP             1 /* draft-ietf-ospf-cap-03 */
1071de50e9fSSam Leffler 
1084edb46e9SPaul Traina 
1094edb46e9SPaul Traina /* rla_link.link_type	*/
1104edb46e9SPaul Traina #define	RLA_TYPE_ROUTER		1   /* point-to-point to another router	*/
1114edb46e9SPaul Traina #define	RLA_TYPE_TRANSIT	2   /* connection to transit network	*/
1124edb46e9SPaul Traina #define	RLA_TYPE_STUB		3   /* connection to stub network	*/
1134edb46e9SPaul Traina #define RLA_TYPE_VIRTUAL	4   /* virtual link			*/
1144edb46e9SPaul Traina 
1154edb46e9SPaul Traina /* rla_flags	*/
1164edb46e9SPaul Traina #define	RLA_FLAG_B	0x01
1174edb46e9SPaul Traina #define	RLA_FLAG_E	0x02
118*ee67461eSJoseph Mingrone #define	RLA_FLAG_V	0x04
119*ee67461eSJoseph Mingrone #define	RLA_FLAG_W	0x08
120*ee67461eSJoseph Mingrone #define	RLA_FLAG_NT	0x10 /* RFC3101 Appendix B */
121*ee67461eSJoseph Mingrone #define	RLA_FLAG_H	0x80
1224edb46e9SPaul Traina 
1234edb46e9SPaul Traina /* sla_tosmetric breakdown	*/
1244edb46e9SPaul Traina #define	SLA_MASK_TOS		0x7f000000
1254edb46e9SPaul Traina #define	SLA_MASK_METRIC		0x00ffffff
1264edb46e9SPaul Traina #define SLA_SHIFT_TOS		24
1274edb46e9SPaul Traina 
1284edb46e9SPaul Traina /* asla_tosmetric breakdown	*/
1294edb46e9SPaul Traina #define	ASLA_FLAG_EXTERNAL	0x80000000
1304edb46e9SPaul Traina #define	ASLA_MASK_TOS		0x7f000000
1314edb46e9SPaul Traina #define	ASLA_SHIFT_TOS		24
1324edb46e9SPaul Traina #define	ASLA_MASK_METRIC	0x00ffffff
1334edb46e9SPaul Traina 
1344edb46e9SPaul Traina /* multicast vertex type */
1354edb46e9SPaul Traina #define	MCLA_VERTEX_ROUTER	1
1364edb46e9SPaul Traina #define	MCLA_VERTEX_NETWORK	2
1374edb46e9SPaul Traina 
138a5779b6eSRui Paulo /* Link-Local-Signaling */
1393c602fabSXin LI #define OSPF_LLS_HDRLEN         4U /* RFC5613 Section 2.2 */
1403c602fabSXin LI 
141a5779b6eSRui Paulo #define OSPF_LLS_EO             1  /* RFC4811, RFC4812 */
142a5779b6eSRui Paulo #define OSPF_LLS_MD5            2  /* RFC4813 */
143a5779b6eSRui Paulo 
144a5779b6eSRui Paulo #define OSPF_LLS_EO_LR		0x00000001		/* RFC4811 */
145a5779b6eSRui Paulo #define OSPF_LLS_EO_RS		0x00000002		/* RFC4812 */
146a5779b6eSRui Paulo 
147a5779b6eSRui Paulo /*
148a5779b6eSRui Paulo  * TOS metric struct (will be 0 or more in router links update)
149a5779b6eSRui Paulo  */
150a5779b6eSRui Paulo struct tos_metric {
151*ee67461eSJoseph Mingrone     nd_uint8_t  tos_type;
152*ee67461eSJoseph Mingrone     nd_uint8_t  reserved;
153*ee67461eSJoseph Mingrone     nd_uint16_t tos_metric;
154a5779b6eSRui Paulo };
155a5779b6eSRui Paulo struct tos_link {
156*ee67461eSJoseph Mingrone     nd_uint8_t  link_type;
157*ee67461eSJoseph Mingrone     nd_uint8_t  link_tos_count;
158*ee67461eSJoseph Mingrone     nd_uint16_t tos_metric;
159a5779b6eSRui Paulo };
160a5779b6eSRui Paulo union un_tos {
161a5779b6eSRui Paulo     struct tos_link link;
162a5779b6eSRui Paulo     struct tos_metric metrics;
163a5779b6eSRui Paulo };
164a5779b6eSRui Paulo 
1654edb46e9SPaul Traina /* link state advertisement header */
1664edb46e9SPaul Traina struct lsa_hdr {
167*ee67461eSJoseph Mingrone     nd_uint16_t ls_age;
168*ee67461eSJoseph Mingrone     nd_uint8_t  ls_options;
169*ee67461eSJoseph Mingrone     nd_uint8_t  ls_type;
1705b0fe478SBruce M Simpson     union {
171*ee67461eSJoseph Mingrone         nd_ipv4 lsa_id;
1725b0fe478SBruce M Simpson         struct { /* opaque LSAs change the LSA-ID field */
173*ee67461eSJoseph Mingrone             nd_uint8_t  opaque_type;
174*ee67461eSJoseph Mingrone             nd_uint24_t opaque_id;
1755b0fe478SBruce M Simpson 	} opaque_field;
1765b0fe478SBruce M Simpson     } un_lsa_id;
177*ee67461eSJoseph Mingrone     nd_ipv4     ls_router;
178*ee67461eSJoseph Mingrone     nd_uint32_t ls_seq;
179*ee67461eSJoseph Mingrone     nd_uint16_t ls_chksum;
180*ee67461eSJoseph Mingrone     nd_uint16_t ls_length;
1814edb46e9SPaul Traina };
1824edb46e9SPaul Traina 
1834edb46e9SPaul Traina /* link state advertisement */
1844edb46e9SPaul Traina struct lsa {
1854edb46e9SPaul Traina     struct lsa_hdr ls_hdr;
1864edb46e9SPaul Traina 
1874edb46e9SPaul Traina     /* Link state types */
1884edb46e9SPaul Traina     union {
1894edb46e9SPaul Traina 	/* Router links advertisements */
1904edb46e9SPaul Traina 	struct {
191*ee67461eSJoseph Mingrone 	    nd_uint8_t  rla_flags;
192*ee67461eSJoseph Mingrone 	    nd_byte     rla_zero;
193*ee67461eSJoseph Mingrone 	    nd_uint16_t rla_count;
1944edb46e9SPaul Traina 	    struct rlalink {
195*ee67461eSJoseph Mingrone 		nd_ipv4 link_id;
196*ee67461eSJoseph Mingrone 		nd_ipv4 link_data;
197a5779b6eSRui Paulo                 union un_tos un_tos;
1984edb46e9SPaul Traina 	    } rla_link[1];		/* may repeat	*/
1994edb46e9SPaul Traina 	} un_rla;
2004edb46e9SPaul Traina 
2014edb46e9SPaul Traina 	/* Network links advertisements */
2024edb46e9SPaul Traina 	struct {
203*ee67461eSJoseph Mingrone 	    nd_ipv4 nla_mask;
204*ee67461eSJoseph Mingrone 	    nd_ipv4 nla_router[1];	/* may repeat	*/
2054edb46e9SPaul Traina 	} un_nla;
2064edb46e9SPaul Traina 
2074edb46e9SPaul Traina 	/* Summary links advertisements */
2084edb46e9SPaul Traina 	struct {
209*ee67461eSJoseph Mingrone 	    nd_ipv4     sla_mask;
210*ee67461eSJoseph Mingrone 	    nd_uint32_t sla_tosmetric[1];	/* may repeat	*/
2114edb46e9SPaul Traina 	} un_sla;
2124edb46e9SPaul Traina 
2134edb46e9SPaul Traina 	/* AS external links advertisements */
2144edb46e9SPaul Traina 	struct {
215*ee67461eSJoseph Mingrone 	    nd_ipv4 asla_mask;
2164edb46e9SPaul Traina 	    struct aslametric {
217*ee67461eSJoseph Mingrone 		nd_uint32_t asla_tosmetric;
218*ee67461eSJoseph Mingrone 		nd_ipv4     asla_forward;
219*ee67461eSJoseph Mingrone 		nd_ipv4     asla_tag;
2204edb46e9SPaul Traina 	    } asla_metric[1];		/* may repeat	*/
2214edb46e9SPaul Traina 	} un_asla;
2224edb46e9SPaul Traina 
2234edb46e9SPaul Traina 	/* Multicast group membership */
2244edb46e9SPaul Traina 	struct mcla {
225*ee67461eSJoseph Mingrone 	    nd_uint32_t mcla_vtype;
226*ee67461eSJoseph Mingrone 	    nd_ipv4     mcla_vid;
2274edb46e9SPaul Traina 	} un_mcla[1];
2285b0fe478SBruce M Simpson 
2295b0fe478SBruce M Simpson         /* Opaque TE LSA */
2305b0fe478SBruce M Simpson         struct {
231*ee67461eSJoseph Mingrone 	    nd_uint16_t type;
232*ee67461eSJoseph Mingrone 	    nd_uint16_t length;
233*ee67461eSJoseph Mingrone 	    nd_byte     data[1]; /* may repeat   */
234*ee67461eSJoseph Mingrone 	} un_te_lsa_tlv[1]; /* may repeat */
2355b0fe478SBruce M Simpson 
2361de50e9fSSam Leffler         /* Opaque Grace LSA */
2371de50e9fSSam Leffler         struct {
238*ee67461eSJoseph Mingrone 	    nd_uint16_t type;
239*ee67461eSJoseph Mingrone 	    nd_uint16_t length;
240*ee67461eSJoseph Mingrone 	    nd_byte     data[1]; /* may repeat   */
241*ee67461eSJoseph Mingrone 	} un_grace_tlv[1]; /* may repeat */
2421de50e9fSSam Leffler 
2431de50e9fSSam Leffler         /* Opaque Router information LSA */
2441de50e9fSSam Leffler         struct {
245*ee67461eSJoseph Mingrone 	    nd_uint16_t type;
246*ee67461eSJoseph Mingrone 	    nd_uint16_t length;
247*ee67461eSJoseph Mingrone 	    nd_byte     data[1]; /* may repeat   */
248*ee67461eSJoseph Mingrone 	} un_ri_tlv[1]; /* may repeat */
2491de50e9fSSam Leffler 
2505b0fe478SBruce M Simpson         /* Unknown LSA */
2515b0fe478SBruce M Simpson         struct unknown {
252*ee67461eSJoseph Mingrone 	    nd_byte data[1]; /* may repeat   */
2535b0fe478SBruce M Simpson 	} un_unknown[1];
2545b0fe478SBruce M Simpson 
2554edb46e9SPaul Traina     } lsa_un;
2564edb46e9SPaul Traina };
2574edb46e9SPaul Traina 
2584edb46e9SPaul Traina #define	OSPF_AUTH_SIZE	8
2594edb46e9SPaul Traina 
2604edb46e9SPaul Traina /*
2614edb46e9SPaul Traina  * the main header
2624edb46e9SPaul Traina  */
2634edb46e9SPaul Traina struct ospfhdr {
264*ee67461eSJoseph Mingrone     nd_uint8_t  ospf_version;
265*ee67461eSJoseph Mingrone     nd_uint8_t  ospf_type;
266*ee67461eSJoseph Mingrone     nd_uint16_t ospf_len;
267*ee67461eSJoseph Mingrone     nd_ipv4     ospf_routerid;
268*ee67461eSJoseph Mingrone     nd_ipv4     ospf_areaid;
269*ee67461eSJoseph Mingrone     nd_uint16_t ospf_chksum;
270*ee67461eSJoseph Mingrone     nd_uint16_t ospf_authtype;
271*ee67461eSJoseph Mingrone     nd_byte     ospf_authdata[OSPF_AUTH_SIZE];
2724edb46e9SPaul Traina     union {
2734edb46e9SPaul Traina 
2744edb46e9SPaul Traina 	/* Hello packet */
2754edb46e9SPaul Traina 	struct {
276*ee67461eSJoseph Mingrone 	    nd_ipv4     hello_mask;
277*ee67461eSJoseph Mingrone 	    nd_uint16_t hello_helloint;
278*ee67461eSJoseph Mingrone 	    nd_uint8_t  hello_options;
279*ee67461eSJoseph Mingrone 	    nd_uint8_t  hello_priority;
280*ee67461eSJoseph Mingrone 	    nd_uint32_t hello_deadint;
281*ee67461eSJoseph Mingrone 	    nd_ipv4     hello_dr;
282*ee67461eSJoseph Mingrone 	    nd_ipv4     hello_bdr;
283*ee67461eSJoseph Mingrone 	    nd_ipv4     hello_neighbor[1]; /* may repeat	*/
2844edb46e9SPaul Traina 	} un_hello;
2854edb46e9SPaul Traina 
2864edb46e9SPaul Traina 	/* Database Description packet */
2874edb46e9SPaul Traina 	struct {
288*ee67461eSJoseph Mingrone 	    nd_uint16_t db_ifmtu;
289*ee67461eSJoseph Mingrone 	    nd_uint8_t  db_options;
290*ee67461eSJoseph Mingrone 	    nd_uint8_t  db_flags;
291*ee67461eSJoseph Mingrone 	    nd_uint32_t db_seq;
2924edb46e9SPaul Traina 	    struct lsa_hdr db_lshdr[1]; /* may repeat	*/
2934edb46e9SPaul Traina 	} un_db;
2944edb46e9SPaul Traina 
2954edb46e9SPaul Traina 	/* Link State Request */
2964edb46e9SPaul Traina 	struct lsr {
297*ee67461eSJoseph Mingrone 	    nd_uint32_t ls_type;
2985b0fe478SBruce M Simpson             union {
299*ee67461eSJoseph Mingrone                 nd_ipv4 ls_stateid;
3005b0fe478SBruce M Simpson                 struct { /* opaque LSAs change the LSA-ID field */
301*ee67461eSJoseph Mingrone                     nd_uint8_t  opaque_type;
302*ee67461eSJoseph Mingrone                     nd_uint24_t opaque_id;
3035b0fe478SBruce M Simpson                 } opaque_field;
3045b0fe478SBruce M Simpson             } un_ls_stateid;
305*ee67461eSJoseph Mingrone 	    nd_ipv4 ls_router;
3064edb46e9SPaul Traina 	} un_lsr[1];		/* may repeat	*/
3074edb46e9SPaul Traina 
3084edb46e9SPaul Traina 	/* Link State Update */
3094edb46e9SPaul Traina 	struct {
310*ee67461eSJoseph Mingrone 	    nd_uint32_t lsu_count;
3114edb46e9SPaul Traina 	    struct lsa  lsu_lsa[1]; /* may repeat	*/
3124edb46e9SPaul Traina 	} un_lsu;
3134edb46e9SPaul Traina 
3144edb46e9SPaul Traina 	/* Link State Acknowledgement */
3154edb46e9SPaul Traina 	struct {
3164edb46e9SPaul Traina 	    struct lsa_hdr lsa_lshdr[1]; /* may repeat	*/
3174edb46e9SPaul Traina 	} un_lsa ;
3184edb46e9SPaul Traina     } ospf_un ;
3194edb46e9SPaul Traina };
3204edb46e9SPaul Traina 
3214edb46e9SPaul Traina #define	ospf_hello	ospf_un.un_hello
3224edb46e9SPaul Traina #define	ospf_db		ospf_un.un_db
3234edb46e9SPaul Traina #define	ospf_lsr	ospf_un.un_lsr
3244edb46e9SPaul Traina #define	ospf_lsu	ospf_un.un_lsu
3254edb46e9SPaul Traina #define	ospf_lsa	ospf_un.un_lsa
326