12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* @(#) $Header: /tcpdump/master/tcpdump/ospf.h,v 1.16.2.2 2006/12/13 08:24:27 hannes Exp $ (LBL) */
22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (c) 1991, 1993, 1994, 1995, 1996, 1997
42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *	The Regents of the University of California.  All rights reserved.
52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms, with or without
72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * modification, are permitted provided that: (1) source code distributions
82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * retain the above copyright notice and this paragraph in its entirety, (2)
92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * distributions including binary code include the above copyright notice and
102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * this paragraph in its entirety in the documentation or other materials
112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * provided with the distribution, and (3) all advertising materials mentioning
122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * features or use of this software display the following acknowledgement:
132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ``This product includes software developed by the University of California,
142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the University nor the names of its contributors may be used to endorse
162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * or promote products derived from this software without specific prior
172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * written permission.
182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * OSPF support contributed by Jeffrey Honig (jch@mitchell.cit.cornell.edu)
232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_TYPE_UMD           0	/* UMd's special monitoring packets */
252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_TYPE_HELLO         1	/* Hello */
262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_TYPE_DD            2	/* Database Description */
272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_TYPE_LS_REQ        3	/* Link State Request */
282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_TYPE_LS_UPDATE     4	/* Link State Update */
292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_TYPE_LS_ACK        5	/* Link State Ack */
302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Options field
322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +------------------------------------+
342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * | * | O | DC | EA | N/P | MC | E | T |
352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * +------------------------------------+
362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define OSPF_OPTION_T	0x01	/* T bit: TOS support	*/
402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define OSPF_OPTION_E	0x02	/* E bit: External routes advertised	*/
412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_OPTION_MC	0x04	/* MC bit: Multicast capable */
422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_OPTION_NP	0x08	/* N/P bit: NSSA capable */
432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_OPTION_EA	0x10	/* EA bit: External Attribute capable */
442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_OPTION_DC	0x20	/* DC bit: Demand circuit capable */
452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_OPTION_O	0x40	/* O bit: Opaque LSA capable */
462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_OPTION_DN	0x80	/* DN bit: Up/Down Bit capable - draft-ietf-ospf-2547-dnbit-04 */
472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* ospf_authtype	*/
492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_AUTH_NONE		0	/* No auth-data */
502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_AUTH_SIMPLE	1	/* Simple password */
512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define OSPF_AUTH_SIMPLE_LEN	8	/* max length of simple authentication */
522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define OSPF_AUTH_MD5		2	/* MD5 authentication */
532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define OSPF_AUTH_MD5_LEN	16	/* length of MD5 authentication */
542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* db_flags	*/
562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_DB_INIT		0x04	    /*	*/
572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_DB_MORE		0x02
582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_DB_MASTER		0x01
592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* ls_type	*/
612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LS_TYPE_ROUTER		1   /* router link */
622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LS_TYPE_NETWORK		2   /* network link */
632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LS_TYPE_SUM_IP		3   /* summary link */
642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LS_TYPE_SUM_ABR		4   /* summary area link */
652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LS_TYPE_ASE		5   /* ASE  */
662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LS_TYPE_GROUP		6   /* Group membership (multicast */
672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project				    /* extensions 23 July 1991) */
682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LS_TYPE_NSSA            7   /* rfc3101 - Not so Stubby Areas */
692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LS_TYPE_OPAQUE_LL       9   /* rfc2370 - Opaque Link Local */
702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LS_TYPE_OPAQUE_AL      10   /* rfc2370 - Opaque Link Local */
712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	LS_TYPE_OPAQUE_DW      11   /* rfc2370 - Opaque Domain Wide */
722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TYPE_TE       1   /* rfc3630 */
742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TYPE_GRACE    3   /* rfc3623 */
752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TYPE_RI       4   /* draft-ietf-ospf-cap-03 */
762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_TLV_ROUTER 1   /* rfc3630 */
782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_TLV_LINK   2   /* rfc3630 */
792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_LINK_SUBTLV_LINK_TYPE             1 /* rfc3630 */
812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_LINK_SUBTLV_LINK_ID               2 /* rfc3630 */
822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_LINK_SUBTLV_LOCAL_IP              3 /* rfc3630 */
832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_LINK_SUBTLV_REMOTE_IP             4 /* rfc3630 */
842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_LINK_SUBTLV_TE_METRIC             5 /* rfc3630 */
852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_LINK_SUBTLV_MAX_BW                6 /* rfc3630 */
862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_LINK_SUBTLV_MAX_RES_BW            7 /* rfc3630 */
872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_LINK_SUBTLV_UNRES_BW              8 /* rfc3630 */
882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_LINK_SUBTLV_ADMIN_GROUP           9 /* rfc3630 */
892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_LINK_SUBTLV_LINK_LOCAL_REMOTE_ID 11 /* draft-ietf-ccamp-ospf-gmpls-extensions */
902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_LINK_SUBTLV_LINK_PROTECTION_TYPE 14 /* draft-ietf-ccamp-ospf-gmpls-extensions */
912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_LINK_SUBTLV_INTF_SW_CAP_DESCR    15 /* draft-ietf-ccamp-ospf-gmpls-extensions */
922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_LINK_SUBTLV_SHARED_RISK_GROUP    16 /* draft-ietf-ccamp-ospf-gmpls-extensions */
932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_LINK_SUBTLV_BW_CONSTRAINTS       17 /* rfc4124 */
942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_LINK_SUBTLV_LINK_TYPE_PTP        1  /* rfc3630 */
962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_TE_LINK_SUBTLV_LINK_TYPE_MA         2  /* rfc3630 */
972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_GRACE_TLV_PERIOD       1 /* rfc3623 */
992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_GRACE_TLV_REASON       2 /* rfc3623 */
1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_GRACE_TLV_INT_ADDRESS  3 /* rfc3623 */
1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_GRACE_TLV_REASON_UNKNOWN     0 /* rfc3623 */
1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_GRACE_TLV_REASON_SW_RESTART  1 /* rfc3623 */
1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_GRACE_TLV_REASON_SW_UPGRADE  2 /* rfc3623 */
1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_GRACE_TLV_REASON_CP_SWITCH   3 /* rfc3623 */
1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define LS_OPAQUE_RI_TLV_CAP             1 /* draft-ietf-ospf-cap-03 */
1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*************************************************
1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * is the above a bug in the documentation?
1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *************************************************/
1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* rla_link.link_type	*/
1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RLA_TYPE_ROUTER		1   /* point-to-point to another router	*/
1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RLA_TYPE_TRANSIT	2   /* connection to transit network	*/
1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RLA_TYPE_STUB		3   /* connection to stub network	*/
1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define RLA_TYPE_VIRTUAL	4   /* virtual link			*/
1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* rla_flags	*/
1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RLA_FLAG_B	0x01
1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RLA_FLAG_E	0x02
1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RLA_FLAG_W1	0x04
1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	RLA_FLAG_W2	0x08
1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* sla_tosmetric breakdown	*/
1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	SLA_MASK_TOS		0x7f000000
1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	SLA_MASK_METRIC		0x00ffffff
1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define SLA_SHIFT_TOS		24
1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* asla_tosmetric breakdown	*/
1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ASLA_FLAG_EXTERNAL	0x80000000
1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ASLA_MASK_TOS		0x7f000000
1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ASLA_SHIFT_TOS		24
1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ASLA_MASK_METRIC	0x00ffffff
1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* multicast vertex type */
1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	MCLA_VERTEX_ROUTER	1
1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	MCLA_VERTEX_NETWORK	2
1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* link state advertisement header */
1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lsa_hdr {
1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int16_t ls_age;
1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t ls_options;
1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t ls_type;
1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    union {
1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        struct in_addr lsa_id;
1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        struct { /* opaque LSAs change the LSA-ID field */
1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            u_int8_t opaque_type;
1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            u_int8_t opaque_id[3];
1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	} opaque_field;
1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    } un_lsa_id;
1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    struct in_addr ls_router;
1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int32_t ls_seq;
1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int16_t ls_chksum;
1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int16_t ls_length;
1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* link state advertisement */
1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct lsa {
1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    struct lsa_hdr ls_hdr;
1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    /* Link state types */
1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    union {
1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	/* Router links advertisements */
1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct {
1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int8_t rla_flags;
1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int8_t rla_zero[1];
1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int16_t rla_count;
1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    struct rlalink {
1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		struct in_addr link_id;
1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		struct in_addr link_data;
1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		u_int8_t link_type;
1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		u_int8_t link_toscount;
1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		u_int16_t link_tos0metric;
1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    } rla_link[1];		/* may repeat	*/
1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	} un_rla;
1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	/* Network links advertisements */
1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct {
1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    struct in_addr nla_mask;
1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    struct in_addr nla_router[1];	/* may repeat	*/
1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	} un_nla;
1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	/* Summary links advertisements */
1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct {
1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    struct in_addr sla_mask;
1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int32_t sla_tosmetric[1];	/* may repeat	*/
1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	} un_sla;
1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	/* AS external links advertisements */
1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct {
1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    struct in_addr asla_mask;
1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    struct aslametric {
1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		u_int32_t asla_tosmetric;
1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		struct in_addr asla_forward;
1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project		struct in_addr asla_tag;
2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    } asla_metric[1];		/* may repeat	*/
2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	} un_asla;
2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	/* Multicast group membership */
2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct mcla {
2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int32_t mcla_vtype;
2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    struct in_addr mcla_vid;
2072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	} un_mcla[1];
2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        /* Opaque TE LSA */
2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        struct {
2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int16_t type;
2122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int16_t length;
2132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int8_t data[1]; /* may repeat   */
2142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	} un_te_lsa_tlv;
2152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        /* Opaque Grace LSA */
2172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        struct {
2182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int16_t type;
2192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int16_t length;
2202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int8_t data[1]; /* may repeat   */
2212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	} un_grace_tlv;
2222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        /* Opaque Router information LSA */
2242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        struct {
2252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int16_t type;
2262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int16_t length;
2272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int8_t data[1]; /* may repeat   */
2282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	} un_ri_tlv;
2292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        /* Unknown LSA */
2312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project        struct unknown {
2322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int8_t data[1]; /* may repeat   */
2332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	} un_unknown[1];
2342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    } lsa_un;
2362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
2402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * TOS metric struct (will be 0 or more in router links update)
2412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
2422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct tos_metric {
2432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t tos_type;
2442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t tos_zero;
2452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int16_t tos_metric;
2462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
2472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	OSPF_AUTH_SIZE	8
2492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*
2512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the main header
2522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
2532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct ospfhdr {
2542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t ospf_version;
2552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t ospf_type;
2562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int16_t ospf_len;
2572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    struct in_addr ospf_routerid;
2582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    struct in_addr ospf_areaid;
2592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int16_t ospf_chksum;
2602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int16_t ospf_authtype;
2612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    u_int8_t ospf_authdata[OSPF_AUTH_SIZE];
2622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    union {
2632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	/* Hello packet */
2652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct {
2662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    struct in_addr hello_mask;
2672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int16_t hello_helloint;
2682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int8_t hello_options;
2692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int8_t hello_priority;
2702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int32_t hello_deadint;
2712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    struct in_addr hello_dr;
2722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    struct in_addr hello_bdr;
2732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    struct in_addr hello_neighbor[1]; /* may repeat	*/
2742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	} un_hello;
2752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	/* Database Description packet */
2772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct {
2782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int8_t db_zero[2];
2792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int8_t db_options;
2802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int8_t db_flags;
2812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int32_t db_seq;
2822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    struct lsa_hdr db_lshdr[1]; /* may repeat	*/
2832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	} un_db;
2842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	/* Link State Request */
2862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct lsr {
2872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int8_t ls_type[4];
2882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            union {
2892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                struct in_addr ls_stateid;
2902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                struct { /* opaque LSAs change the LSA-ID field */
2912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    u_int8_t opaque_type;
2922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                    u_int8_t opaque_id[3];
2932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project                } opaque_field;
2942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project            } un_ls_stateid;
2952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    struct in_addr ls_router;
2962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	} un_lsr[1];		/* may repeat	*/
2972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
2982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	/* Link State Update */
2992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct {
3002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    u_int32_t lsu_count;
3012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    struct lsa lsu_lsa[1]; /* may repeat	*/
3022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	} un_lsu;
3032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	/* Link State Acknowledgement */
3052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	struct {
3062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	    struct lsa_hdr lsa_lshdr[1]; /* may repeat	*/
3072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	} un_lsa ;
3082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project    } ospf_un ;
3092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
3102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
3112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ospf_hello	ospf_un.un_hello
3122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ospf_db		ospf_un.un_db
3132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ospf_lsr	ospf_un.un_lsr
3142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ospf_lsu	ospf_un.un_lsu
3152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define	ospf_lsa	ospf_un.un_lsa
3162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
317