Home | History | Annotate | Download | only in snoop
      1  0  stevel /*
      2  0  stevel  * CDDL HEADER START
      3  0  stevel  *
      4  0  stevel  * The contents of this file are subject to the terms of the
      5  0  stevel  * Common Development and Distribution License, Version 1.0 only
      6  0  stevel  * (the "License").  You may not use this file except in compliance
      7  0  stevel  * with the License.
      8  0  stevel  *
      9  0  stevel  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10  0  stevel  * or http://www.opensolaris.org/os/licensing.
     11  0  stevel  * See the License for the specific language governing permissions
     12  0  stevel  * and limitations under the License.
     13  0  stevel  *
     14  0  stevel  * When distributing Covered Code, include this CDDL HEADER in each
     15  0  stevel  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16  0  stevel  * If applicable, add the following below this CDDL HEADER, with the
     17  0  stevel  * fields enclosed by brackets "[]" replaced with your own identifying
     18  0  stevel  * information: Portions Copyright [yyyy] [name of copyright owner]
     19  0  stevel  *
     20  0  stevel  * CDDL HEADER END
     21  0  stevel  */
     22  0  stevel /*
     23  0  stevel  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
     24  0  stevel  * Use is subject to license terms.
     25  0  stevel  */
     26  0  stevel 
     27  0  stevel #ifndef _OSPF6_H
     28  0  stevel #define	_OSPF6_H
     29  0  stevel 
     30  0  stevel #pragma ident	"%Z%%M%	%I%	%E% SMI"
     31  0  stevel 
     32  0  stevel /*
     33  0  stevel  * Definitions for parsing OSPF packets (RFC 2328)
     34  0  stevel  */
     35  0  stevel 
     36  0  stevel #ifdef __cplusplus
     37  0  stevel extern "C" {
     38  0  stevel #endif
     39  0  stevel 
     40  0  stevel struct lsa6_hdr {
     41  0  stevel 	uint16_t ls6_age;
     42  0  stevel 	uint16_t ls6_type;
     43  0  stevel 	uint32_t ls6_stateid;
     44  0  stevel 	uint32_t ls6_router;
     45  0  stevel 	uint32_t ls6_seq;
     46  0  stevel 	uint16_t ls6_chksum;
     47  0  stevel 	uint16_t ls6_length;
     48  0  stevel };
     49  0  stevel 
     50  0  stevel struct lsa6_prefix {
     51  0  stevel 	uint8_t  lsa6_plen;
     52  0  stevel 	uint8_t  lsa6_popt;
     53  0  stevel 	uint16_t lsa6_pmbz;
     54  0  stevel 	uint8_t  lsa6_pfx[4];
     55  0  stevel };
     56  0  stevel 
     57  0  stevel /* link state advertisement */
     58  0  stevel struct lsa6 {
     59  0  stevel 	struct lsa6_hdr ls6_hdr;
     60  0  stevel 
     61  0  stevel 	/* Link state types */
     62  0  stevel 	union {
     63  0  stevel 		/* Router links advertisements */
     64  0  stevel 		struct {
     65  0  stevel 			union {
     66  0  stevel 				uint8_t  rla_flg;
     67  0  stevel 				uint32_t rla_opt;
     68  0  stevel 			} un_rla_flgopt;
     69  0  stevel #define	rla6_flags	un_rla_flgopt.rla_flg
     70  0  stevel #define	rla6_options	un_rla_flgopt.rla_opt
     71  0  stevel 			struct rla6link {
     72  0  stevel 				uint8_t link_type;
     73  0  stevel 				uint8_t link_zero[1];
     74  0  stevel 				uint16_t link_metric;
     75  0  stevel 				uint32_t link_ifid;
     76  0  stevel 				uint32_t link_nifid;
     77  0  stevel 				uint32_t link_nrtid;
     78  0  stevel 			} rla_link[1];		/* may repeat	*/
     79  0  stevel 		} un_rla;
     80  0  stevel 
     81  0  stevel 		/* Network links advertisements */
     82  0  stevel 		struct {
     83  0  stevel 			uint32_t nla_options;
     84  0  stevel 			uint32_t nla_router[1];	/* may repeat	*/
     85  0  stevel 		} un_nla;
     86  0  stevel 
     87  0  stevel 		/* Inter Area Prefix LSA */
     88  0  stevel 		struct {
     89  0  stevel 			uint32_t inter_ap_metric;
     90  0  stevel 			struct lsa6_prefix inter_ap_prefix[1];
     91  0  stevel 		} un_inter_ap;
     92  0  stevel 
     93  0  stevel 		/* Link LSA */
     94  0  stevel 		struct llsa {
     95  0  stevel 			union {
     96  0  stevel 				uint8_t pri;
     97  0  stevel 				uint32_t opt;
     98  0  stevel 			} llsa_priandopt;
     99  0  stevel #define	llsa_priority	llsa_priandopt.pri
    100  0  stevel #define	llsa_options	llsa_priandopt.opt
    101  0  stevel 			struct in6_addr llsa_lladdr;
    102  0  stevel 			uint32_t llsa_nprefix;
    103  0  stevel 			struct lsa6_prefix llsa_prefix[1];
    104  0  stevel 		} un_llsa;
    105  0  stevel 
    106  0  stevel 		/* Intra-Area-Prefix */
    107  0  stevel 		struct {
    108  0  stevel 			uint16_t intra_ap_nprefix;
    109  0  stevel 			uint16_t intra_ap_lstype;
    110  0  stevel 			uint32_t intra_ap_lsid;
    111  0  stevel 			uint32_t intra_ap_rtid;
    112  0  stevel 			struct lsa6_prefix intra_ap_prefix[1];
    113  0  stevel 		} un_intra_ap;
    114  0  stevel 	} lsa_un;
    115  0  stevel };
    116  0  stevel 
    117  0  stevel struct ospf6hdr {
    118  0  stevel 	uint8_t ospf6_version;
    119  0  stevel 	uint8_t ospf6_type;
    120  0  stevel 	uint16_t ospf6_len;
    121  0  stevel 	uint32_t ospf6_routerid;
    122  0  stevel 	uint32_t ospf6_areaid;
    123  0  stevel 	uint16_t ospf6_chksum;
    124  0  stevel 	uint8_t ospf6_instanceid;
    125  0  stevel 	uint8_t ospf6_rsvd;
    126  0  stevel 	union {
    127  0  stevel 
    128  0  stevel 		/* Hello packet */
    129  0  stevel 		struct {
    130  0  stevel 			uint32_t hello_ifid;
    131  0  stevel 			union {
    132  0  stevel 				uint8_t pri;
    133  0  stevel 				uint32_t opt;
    134  0  stevel 			} hello_priandopt;
    135  0  stevel #define	hello6_priority	hello_priandopt.pri
    136  0  stevel #define	hello6_options	hello_priandopt.opt
    137  0  stevel 			uint16_t hello_helloint;
    138  0  stevel 			uint16_t hello_deadint;
    139  0  stevel 			uint32_t hello_dr;
    140  0  stevel 			uint32_t hello_bdr;
    141  0  stevel 			uint32_t hello_neighbor[1];	/* may repeat	*/
    142  0  stevel 		} un_hello;
    143  0  stevel 
    144  0  stevel 		/* Database Description packet */
    145  0  stevel 		struct {
    146  0  stevel 			uint32_t db_options;
    147  0  stevel 			uint16_t db_mtu;
    148  0  stevel 			uint8_t db_mbz;
    149  0  stevel 			uint8_t db_flags;
    150  0  stevel 			uint32_t db_seq;
    151  0  stevel 			struct lsa6_hdr db_lshdr[1];	/* may repeat	*/
    152  0  stevel 		} un_db;
    153  0  stevel 
    154  0  stevel 		/* Link State Request */
    155  0  stevel 		struct lsr6 {
    156  0  stevel 			uint16_t ls_mbz;
    157  0  stevel 			uint16_t ls_type;
    158  0  stevel 			uint32_t ls_stateid;
    159  0  stevel 			uint32_t ls_router;
    160  0  stevel 		} un_lsr[1];				/* may repeat	*/
    161  0  stevel 
    162  0  stevel 		/* Link State Update */
    163  0  stevel 		struct {
    164  0  stevel 			uint32_t lsu_count;
    165  0  stevel 			struct lsa6 lsu_lsa[1]; 	/* may repeat	*/
    166  0  stevel 		} un_lsu;
    167  0  stevel 
    168  0  stevel 		/* Link State Acknowledgement */
    169  0  stevel 		struct {
    170  0  stevel 			struct lsa6_hdr lsa_lshdr[1]; 	/* may repeat	*/
    171  0  stevel 		} un_lsa;
    172  0  stevel 	} ospf6_un;
    173  0  stevel };
    174  0  stevel 
    175  0  stevel #define	ospf6_hello	ospf6_un.un_hello
    176  0  stevel #define	ospf6_db	ospf6_un.un_db
    177  0  stevel #define	ospf6_lsr	ospf6_un.un_lsr
    178  0  stevel #define	ospf6_lsu	ospf6_un.un_lsu
    179  0  stevel #define	ospf6_lsa	ospf6_un.un_lsa
    180  0  stevel 
    181  0  stevel #ifdef __cplusplus
    182  0  stevel }
    183  0  stevel #endif
    184  0  stevel 
    185  0  stevel #endif /* _OSPF6_H */
    186