]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/tcpdump/ospf.h
This commit was generated by cvs2svn to compensate for changes in r48730,
[FreeBSD/FreeBSD.git] / contrib / tcpdump / ospf.h
1 /*
2  * Copyright (c) 1991, 1993, 1994, 1995, 1996, 1997
3  *      The Regents of the University of California.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that: (1) source code distributions
7  * retain the above copyright notice and this paragraph in its entirety, (2)
8  * distributions including binary code include the above copyright notice and
9  * this paragraph in its entirety in the documentation or other materials
10  * provided with the distribution, and (3) all advertising materials mentioning
11  * features or use of this software display the following acknowledgement:
12  * ``This product includes software developed by the University of California,
13  * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
14  * the University nor the names of its contributors may be used to endorse
15  * or promote products derived from this software without specific prior
16  * written permission.
17  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
18  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
19  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
20  *
21  * OSPF support contributed by Jeffrey Honig (jch@mitchell.cit.cornell.edu)
22  */
23 #define OSPF_TYPE_UMD   0       /* UMd's special monitoring packets */
24 #define OSPF_TYPE_HELLO 1       /* Hello */
25 #define OSPF_TYPE_DB    2       /* Database Description */
26 #define OSPF_TYPE_LSR   3       /* Link State Request */
27 #define OSPF_TYPE_LSU   4       /* Link State Update */
28 #define OSPF_TYPE_LSA   5       /* Link State Ack */
29 #define OSPF_TYPE_MAX   6
30
31 /* Options *_options    */
32 #define OSPF_OPTION_T   0x01    /* T bit: TOS support   */
33 #define OSPF_OPTION_E   0x02    /* E bit: External routes advertised    */
34 #define OSPF_OPTION_MC  0x04    /* MC bit: Multicast capable */
35
36 /* ospf_authtype        */
37 #define OSPF_AUTH_NONE          0       /* No auth-data */
38 #define OSPF_AUTH_SIMPLE        1       /* Simple password */
39 #define OSPF_AUTH_MD5           2       /* MD5 authentication */
40 #define     OSPF_AUTH_MD5_LEN   16      /* length of MD5 authentication */
41
42
43 /* db_flags     */
44 #define OSPF_DB_INIT            0x04        /*  */
45 #define OSPF_DB_MORE            0x02
46 #define OSPF_DB_MASTER          0x01
47
48 /* ls_type      */
49 #define LS_TYPE_ROUTER          1   /* router link */
50 #define LS_TYPE_NETWORK         2   /* network link */
51 #define LS_TYPE_SUM_IP          3   /* summary link */
52 #define LS_TYPE_SUM_ABR         4   /* summary area link */
53 #define LS_TYPE_ASE             5   /* ASE  */
54 #define LS_TYPE_GROUP           6   /* Group membership (multicast */
55                                     /* extensions 23 July 1991) */
56 #define LS_TYPE_MAX             7
57
58 /*************************************************
59  *
60  * is the above a bug in the documentation?
61  *
62  *************************************************/
63
64
65 /* rla_link.link_type   */
66 #define RLA_TYPE_ROUTER         1   /* point-to-point to another router */
67 #define RLA_TYPE_TRANSIT        2   /* connection to transit network    */
68 #define RLA_TYPE_STUB           3   /* connection to stub network       */
69 #define RLA_TYPE_VIRTUAL        4   /* virtual link                     */
70
71 /* rla_flags    */
72 #define RLA_FLAG_B      0x01
73 #define RLA_FLAG_E      0x02
74 #define RLA_FLAG_W1     0x04
75 #define RLA_FLAG_W2     0x08
76
77 /* sla_tosmetric breakdown      */
78 #define SLA_MASK_TOS            0x7f000000
79 #define SLA_MASK_METRIC         0x00ffffff
80 #define SLA_SHIFT_TOS           24
81
82 /* asla_tosmetric breakdown     */
83 #define ASLA_FLAG_EXTERNAL      0x80000000
84 #define ASLA_MASK_TOS           0x7f000000
85 #define ASLA_SHIFT_TOS          24
86 #define ASLA_MASK_METRIC        0x00ffffff
87
88 /* multicast vertex type */
89 #define MCLA_VERTEX_ROUTER      1
90 #define MCLA_VERTEX_NETWORK     2
91
92 /* link state advertisement header */
93 struct lsa_hdr {
94     u_short ls_age;
95     u_char ls_options;
96     u_char ls_type;
97     struct in_addr ls_stateid;
98     struct in_addr ls_router;
99     u_int32_t ls_seq;
100     u_short ls_chksum;
101     u_short ls_length;
102 } ;
103
104 /* link state advertisement */
105 struct lsa {
106     struct lsa_hdr ls_hdr;
107
108     /* Link state types */
109     union {
110         /* Router links advertisements */
111         struct {
112             u_char rla_flags;
113             u_char rla_zero[1];
114             u_short rla_count;
115             struct rlalink {
116                 struct in_addr link_id;
117                 struct in_addr link_data;
118                 u_char link_type;
119                 u_char link_toscount;
120                 u_short link_tos0metric;
121             } rla_link[1];              /* may repeat   */
122         } un_rla;
123
124         /* Network links advertisements */
125         struct {
126             struct in_addr nla_mask;
127             struct in_addr nla_router[1];       /* may repeat   */
128         } un_nla;
129
130         /* Summary links advertisements */
131         struct {
132             struct in_addr sla_mask;
133             u_int32_t sla_tosmetric[1]; /* may repeat   */
134         } un_sla;
135
136         /* AS external links advertisements */
137         struct {
138             struct in_addr asla_mask;
139             struct aslametric {
140                 u_int32_t asla_tosmetric;
141                 struct in_addr asla_forward;
142                 struct in_addr asla_tag;
143             } asla_metric[1];           /* may repeat   */
144         } un_asla;
145
146         /* Multicast group membership */
147         struct mcla {
148             u_int32_t mcla_vtype;
149             struct in_addr mcla_vid;
150         } un_mcla[1];
151     } lsa_un;
152 } ;
153
154
155 /*
156  * TOS metric struct (will be 0 or more in router links update)
157  */
158 struct tos_metric {
159     u_char tos_type;
160     u_char tos_zero;
161     u_short tos_metric;
162 } ;
163
164 #define OSPF_AUTH_SIZE  8
165
166 /*
167  * the main header
168  */
169 struct ospfhdr {
170     u_char ospf_version;
171     u_char ospf_type;
172     u_short ospf_len;
173     struct in_addr ospf_routerid;
174     struct in_addr ospf_areaid;
175     u_short ospf_chksum;
176     u_short ospf_authtype;
177     u_char ospf_authdata[OSPF_AUTH_SIZE];
178     union {
179
180         /* Hello packet */
181         struct {
182             struct in_addr hello_mask;
183             u_short hello_helloint;
184             u_char hello_options;
185             u_char hello_priority;
186             u_int32_t hello_deadint;
187             struct in_addr hello_dr;
188             struct in_addr hello_bdr;
189             struct in_addr hello_neighbor[1]; /* may repeat     */
190         } un_hello;
191
192         /* Database Description packet */
193         struct {
194             u_char db_zero[2];
195             u_char db_options;
196             u_char db_flags;
197             u_int32_t db_seq;
198             struct lsa_hdr db_lshdr[1]; /* may repeat   */
199         } un_db;
200
201         /* Link State Request */
202         struct lsr {
203             u_int32_t ls_type;
204             struct in_addr ls_stateid;
205             struct in_addr ls_router;
206         } un_lsr[1];            /* may repeat   */
207
208         /* Link State Update */
209         struct {
210             u_int32_t lsu_count;
211             struct lsa lsu_lsa[1]; /* may repeat        */
212         } un_lsu;
213
214         /* Link State Acknowledgement */
215         struct {
216             struct lsa_hdr lsa_lshdr[1]; /* may repeat  */
217         } un_lsa ;
218     } ospf_un ;
219 } ;
220
221 #define ospf_hello      ospf_un.un_hello
222 #define ospf_db         ospf_un.un_db
223 #define ospf_lsr        ospf_un.un_lsr
224 #define ospf_lsu        ospf_un.un_lsu
225 #define ospf_lsa        ospf_un.un_lsa
226