/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _OSPF6_H #define _OSPF6_H /* * Definitions for parsing OSPF packets (RFC 2328) */ #ifdef __cplusplus extern "C" { #endif struct lsa6_hdr { uint16_t ls6_age; uint16_t ls6_type; uint32_t ls6_stateid; uint32_t ls6_router; uint32_t ls6_seq; uint16_t ls6_chksum; uint16_t ls6_length; }; struct lsa6_prefix { uint8_t lsa6_plen; uint8_t lsa6_popt; uint16_t lsa6_pmbz; uint8_t lsa6_pfx[4]; }; /* link state advertisement */ struct lsa6 { struct lsa6_hdr ls6_hdr; /* Link state types */ union { /* Router links advertisements */ struct { union { uint8_t rla_flg; uint32_t rla_opt; } un_rla_flgopt; #define rla6_flags un_rla_flgopt.rla_flg #define rla6_options un_rla_flgopt.rla_opt struct rla6link { uint8_t link_type; uint8_t link_zero[1]; uint16_t link_metric; uint32_t link_ifid; uint32_t link_nifid; uint32_t link_nrtid; } rla_link[1]; /* may repeat */ } un_rla; /* Network links advertisements */ struct { uint32_t nla_options; uint32_t nla_router[1]; /* may repeat */ } un_nla; /* Inter Area Prefix LSA */ struct { uint32_t inter_ap_metric; struct lsa6_prefix inter_ap_prefix[1]; } un_inter_ap; /* Link LSA */ struct llsa { union { uint8_t pri; uint32_t opt; } llsa_priandopt; #define llsa_priority llsa_priandopt.pri #define llsa_options llsa_priandopt.opt struct in6_addr llsa_lladdr; uint32_t llsa_nprefix; struct lsa6_prefix llsa_prefix[1]; } un_llsa; /* Intra-Area-Prefix */ struct { uint16_t intra_ap_nprefix; uint16_t intra_ap_lstype; uint32_t intra_ap_lsid; uint32_t intra_ap_rtid; struct lsa6_prefix intra_ap_prefix[1]; } un_intra_ap; } lsa_un; }; struct ospf6hdr { uint8_t ospf6_version; uint8_t ospf6_type; uint16_t ospf6_len; uint32_t ospf6_routerid; uint32_t ospf6_areaid; uint16_t ospf6_chksum; uint8_t ospf6_instanceid; uint8_t ospf6_rsvd; union { /* Hello packet */ struct { uint32_t hello_ifid; union { uint8_t pri; uint32_t opt; } hello_priandopt; #define hello6_priority hello_priandopt.pri #define hello6_options hello_priandopt.opt uint16_t hello_helloint; uint16_t hello_deadint; uint32_t hello_dr; uint32_t hello_bdr; uint32_t hello_neighbor[1]; /* may repeat */ } un_hello; /* Database Description packet */ struct { uint32_t db_options; uint16_t db_mtu; uint8_t db_mbz; uint8_t db_flags; uint32_t db_seq; struct lsa6_hdr db_lshdr[1]; /* may repeat */ } un_db; /* Link State Request */ struct lsr6 { uint16_t ls_mbz; uint16_t ls_type; uint32_t ls_stateid; uint32_t ls_router; } un_lsr[1]; /* may repeat */ /* Link State Update */ struct { uint32_t lsu_count; struct lsa6 lsu_lsa[1]; /* may repeat */ } un_lsu; /* Link State Acknowledgement */ struct { struct lsa6_hdr lsa_lshdr[1]; /* may repeat */ } un_lsa; } ospf6_un; }; #define ospf6_hello ospf6_un.un_hello #define ospf6_db ospf6_un.un_db #define ospf6_lsr ospf6_un.un_lsr #define ospf6_lsu ospf6_un.un_lsu #define ospf6_lsa ospf6_un.un_lsa #ifdef __cplusplus } #endif #endif /* _OSPF6_H */