source: rtems-libbsd/freebsd/contrib/tcpdump/ospf6.h @ 084d4db

4.11
Last change on this file since 084d4db was 8440506, checked in by Chris Johns <chrisj@…>, on 06/15/15 at 07:42:23

Add tcpdump and libpcap.

  • Update the file builder generator to handle generator specific cflags and includes. The tcpdump and libpcap have localised headers and need specific headers paths to see them. There are also module specific flags and these need to be passed to the lex and yacc generators.
  • Add the tcpdump support.
  • Property mode set to 100644
File size: 7.1 KB
Line 
1/* @(#) $Header: /tcpdump/master/tcpdump/ospf6.h,v 1.7 2006-09-05 15:50:26 hannes Exp $ (LBL) */
2/*
3 * Copyright (c) 1991, 1993, 1994, 1995, 1996, 1997
4 *      The Regents of the University of California.  All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that: (1) source code distributions
8 * retain the above copyright notice and this paragraph in its entirety, (2)
9 * distributions including binary code include the above copyright notice and
10 * this paragraph in its entirety in the documentation or other materials
11 * provided with the distribution, and (3) all advertising materials mentioning
12 * features or use of this software display the following acknowledgement:
13 * ``This product includes software developed by the University of California,
14 * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
15 * the University nor the names of its contributors may be used to endorse
16 * or promote products derived from this software without specific prior
17 * written permission.
18 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
19 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
20 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21 *
22 * OSPF support contributed by Jeffrey Honig (jch@mitchell.cit.cornell.edu)
23 */
24#define OSPF_TYPE_HELLO         1       /* Hello */
25#define OSPF_TYPE_DD            2       /* Database Description */
26#define OSPF_TYPE_LS_REQ        3       /* Link State Request */
27#define OSPF_TYPE_LS_UPDATE     4       /* Link State Update */
28#define OSPF_TYPE_LS_ACK        5       /* Link State Ack */
29
30/* Options *_options    */
31#define OSPF6_OPTION_V6 0x01    /* V6 bit: A bit for peeping tom */
32#define OSPF6_OPTION_E  0x02    /* E bit: External routes advertised    */
33#define OSPF6_OPTION_MC 0x04    /* MC bit: Multicast capable */
34#define OSPF6_OPTION_N  0x08    /* N bit: For type-7 LSA */
35#define OSPF6_OPTION_R  0x10    /* R bit: Router bit */
36#define OSPF6_OPTION_DC 0x20    /* DC bit: Demand circuits */
37
38
39/* db_flags     */
40#define OSPF6_DB_INIT           0x04        /*  */
41#define OSPF6_DB_MORE           0x02
42#define OSPF6_DB_MASTER         0x01
43
44/* ls_type      */
45#define LS_TYPE_ROUTER          1   /* router link */
46#define LS_TYPE_NETWORK         2   /* network link */
47#define LS_TYPE_INTER_AP        3   /* Inter-Area-Prefix */
48#define LS_TYPE_INTER_AR        4   /* Inter-Area-Router */
49#define LS_TYPE_ASE             5   /* ASE */
50#define LS_TYPE_GROUP           6   /* Group membership */
51#define LS_TYPE_NSSA            7   /* NSSA */
52#define LS_TYPE_LINK            8   /* Link LSA */
53#define LS_TYPE_INTRA_AP        9   /* Intra-Area-Prefix */
54#define LS_TYPE_INTRA_ATE       10  /* Intra-Area-TE */
55#define LS_TYPE_GRACE           11  /* Grace LSA */
56#define LS_TYPE_MASK            0x1fff
57
58#define LS_SCOPE_LINKLOCAL      0x0000
59#define LS_SCOPE_AREA           0x2000
60#define LS_SCOPE_AS             0x4000
61#define LS_SCOPE_MASK           0x6000
62#define LS_SCOPE_U              0x8000
63
64/* rla_link.link_type   */
65#define RLA_TYPE_ROUTER         1   /* point-to-point to another router */
66#define RLA_TYPE_TRANSIT        2   /* connection to transit network    */
67#define RLA_TYPE_VIRTUAL        4   /* virtual link                     */
68
69/* rla_flags    */
70#define RLA_FLAG_B      0x01
71#define RLA_FLAG_E      0x02
72#define RLA_FLAG_V      0x04
73#define RLA_FLAG_W      0x08
74#define RLA_FLAG_N      0x10
75
76/* lsa_prefix options */
77#define LSA_PREFIX_OPT_NU 0x01
78#define LSA_PREFIX_OPT_LA 0x02
79#define LSA_PREFIX_OPT_MC 0x04
80#define LSA_PREFIX_OPT_P  0x08
81#define LSA_PREFIX_OPT_DN 0x10
82
83/* sla_tosmetric breakdown      */
84#define SLA_MASK_TOS            0x7f000000
85#define SLA_MASK_METRIC         0x00ffffff
86#define SLA_SHIFT_TOS           24
87
88/* asla_metric */
89#define ASLA_FLAG_FWDADDR       0x02000000
90#define ASLA_FLAG_ROUTETAG      0x01000000
91#define ASLA_MASK_METRIC        0x00ffffff
92
93typedef u_int32_t rtrid_t;
94
95/* link state advertisement header */
96struct lsa6_hdr {
97    u_int16_t ls_age;
98    u_int16_t ls_type;
99    rtrid_t ls_stateid;
100    rtrid_t ls_router;
101    u_int32_t ls_seq;
102    u_int16_t ls_chksum;
103    u_int16_t ls_length;
104};
105
106struct lsa6_prefix {
107    u_int8_t lsa_p_len;
108    u_int8_t lsa_p_opt;
109    u_int16_t lsa_p_metric;
110    u_int8_t lsa_p_prefix[4];
111};
112
113/* link state advertisement */
114struct lsa6 {
115    struct lsa6_hdr ls_hdr;
116
117    /* Link state types */
118    union {
119        /* Router links advertisements */
120        struct {
121            union {
122                u_int8_t flg;
123                u_int32_t opt;
124            } rla_flgandopt;
125#define rla_flags       rla_flgandopt.flg
126#define rla_options     rla_flgandopt.opt
127            struct rlalink6 {
128                u_int8_t link_type;
129                u_int8_t link_zero[1];
130                u_int16_t link_metric;
131                u_int32_t link_ifid;
132                u_int32_t link_nifid;
133                rtrid_t link_nrtid;
134            } rla_link[1];              /* may repeat   */
135        } un_rla;
136
137        /* Network links advertisements */
138        struct {
139            u_int32_t nla_options;
140            rtrid_t nla_router[1];      /* may repeat   */
141        } un_nla;
142
143        /* Inter Area Prefix LSA */
144        struct {
145            u_int32_t inter_ap_metric;
146            struct lsa6_prefix inter_ap_prefix[1];
147        } un_inter_ap;
148
149        /* AS external links advertisements */
150        struct {
151            u_int32_t asla_metric;
152            struct lsa6_prefix asla_prefix[1];
153            /* some optional fields follow */
154        } un_asla;
155
156#if 0
157        /* Summary links advertisements */
158        struct {
159            struct in_addr sla_mask;
160            u_int32_t sla_tosmetric[1]; /* may repeat   */
161        } un_sla;
162
163        /* Multicast group membership */
164        struct mcla {
165            u_int32_t mcla_vtype;
166            struct in_addr mcla_vid;
167        } un_mcla[1];
168#endif
169
170        /* Type 7 LSA */
171
172        /* Link LSA */
173        struct llsa {
174            union {
175                u_int8_t pri;
176                u_int32_t opt;
177            } llsa_priandopt;
178#define llsa_priority   llsa_priandopt.pri
179#define llsa_options    llsa_priandopt.opt
180            struct in6_addr llsa_lladdr;
181            u_int32_t llsa_nprefix;
182            struct lsa6_prefix llsa_prefix[1];
183        } un_llsa;
184
185        /* Intra-Area-Prefix */
186        struct {
187            u_int16_t intra_ap_nprefix;
188            u_int16_t intra_ap_lstype;
189            rtrid_t intra_ap_lsid;
190            rtrid_t intra_ap_rtid;
191            struct lsa6_prefix intra_ap_prefix[1];
192        } un_intra_ap;
193    } lsa_un;
194};
195
196
197#define OSPF_AUTH_SIZE  8
198
199/*
200 * the main header
201 */
202struct ospf6hdr {
203    u_int8_t ospf6_version;
204    u_int8_t ospf6_type;
205    u_int16_t ospf6_len;
206    rtrid_t ospf6_routerid;
207    rtrid_t ospf6_areaid;
208    u_int16_t ospf6_chksum;
209    u_int8_t ospf6_instanceid;
210    u_int8_t ospf6_rsvd;
211    union {
212
213        /* Hello packet */
214        struct {
215            u_int32_t hello_ifid;
216            union {
217                u_int8_t pri;
218                u_int32_t opt;
219            } hello_priandopt;
220#define hello_priority  hello_priandopt.pri
221#define hello_options   hello_priandopt.opt
222            u_int16_t hello_helloint;
223            u_int16_t hello_deadint;
224            rtrid_t hello_dr;
225            rtrid_t hello_bdr;
226            rtrid_t hello_neighbor[1]; /* may repeat    */
227        } un_hello;
228
229        /* Database Description packet */
230        struct {
231            u_int32_t db_options;
232            u_int16_t db_mtu;
233            u_int8_t db_mbz;
234            u_int8_t db_flags;
235            u_int32_t db_seq;
236            struct lsa6_hdr db_lshdr[1]; /* may repeat  */
237        } un_db;
238
239        /* Link State Request */
240        struct lsr6 {
241            u_int16_t ls_mbz;
242            u_int16_t ls_type;
243            rtrid_t ls_stateid;
244            rtrid_t ls_router;
245        } un_lsr[1];            /* may repeat   */
246
247        /* Link State Update */
248        struct {
249            u_int32_t lsu_count;
250            struct lsa6 lsu_lsa[1]; /* may repeat       */
251        } un_lsu;
252
253        /* Link State Acknowledgement */
254        struct {
255            struct lsa6_hdr lsa_lshdr[1]; /* may repeat */
256        } un_lsa ;
257    } ospf6_un ;
258};
259
260#define ospf6_hello     ospf6_un.un_hello
261#define ospf6_db        ospf6_un.un_db
262#define ospf6_lsr       ospf6_un.un_lsr
263#define ospf6_lsu       ospf6_un.un_lsu
264#define ospf6_lsa       ospf6_un.un_lsa
265
Note: See TracBrowser for help on using the repository browser.