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