aboutsummaryrefslogtreecommitdiffstats
path: root/packet-ospf.h
blob: d7618e2c16e364157d2d84f7258b2a73b28ebafb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/* packet-ospf.h (c) 1998 Hannes Boehm */

/* $Id: packet-ospf.h,v 1.6 2000/02/15 21:02:49 gram Exp $ */

#define OSPF_HEADER_LENGTH	24

#define OSPF_HELLO	1
#define OSPF_DB_DESC	2
#define OSPF_LS_REQ	3
#define OSPF_LS_UPD	4
#define OSPF_LS_ACK	5

#define OSPF_AUTH_NONE		0
#define OSPF_AUTH_SIMPLE	1
#define OSPF_AUTH_CRYPT		2

#define OSPF_OPTIONS_E		2
#define OSPF_OPTIONS_MC		4
#define OSPF_OPTIONS_NP		8
#define OSPF_OPTIONS_EA		16
#define OSPF_OPTIONS_DC		32

#define OSPF_DBD_FLAG_MS	1
#define OSPF_DBD_FLAG_M		2
#define OSPF_DBD_FLAG_I		4

#define OSPF_LS_REQ_LENGTH	12

#define OSPF_LSTYPE_ROUTER	1
#define OSPF_LSTYPE_NETWORK	2
#define OSPF_LSTYPE_SUMMERY	3
#define OSPF_LSTYPE_ASBR	4
#define OSPF_LSTYPE_ASEXT	5

#define OSPF_LINK_PTP		1
#define OSPF_LINK_TRANSIT	2
#define OSPF_LINK_STUB		3
#define OSPF_LINK_VIRTUAL	4

#define OSPF_LSA_HEADER_LENGTH	20

typedef struct _e_ospfhdr {
    guint8  version;
    guint8  packet_type;
    guint16 length;
    guint32 routerid;
    guint32 area;
    guint16 checksum;
    guint16 auth_type;
    char auth_data[8];
} e_ospfhdr;

typedef struct _e_ospf_hello {
    guint32 network_mask;
    guint16 hellointervall;
    guint8  options;
    guint8  priority;
    guint32 dead_interval;
    guint32 drouter;
    guint32 bdrouter;
} e_ospf_hello ;

typedef struct _e_ospf_dbd {
   guint16 interface_mtu;
   guint8  options;
   guint8  flags;
   guint32 dd_sequence;
} e_ospf_dbd;

typedef struct _e_ospf_ls_req {
    guint32	ls_type;
    guint32	ls_id;
    guint32	adv_router;
} e_ospf_ls_req;

typedef struct _e_ospf_lsa_hdr {
    guint16	ls_age;
    guint8	options;
    guint8	ls_type;
    guint32	ls_id;
    guint32	adv_router;
    guint32	ls_seq;
    guint16	ls_checksum;
    guint16	length;
} e_ospf_lsa_hdr;

typedef struct _e_ospf_router_lsa {
    guint8 flags;
    guint8 empfty;
    guint16 nr_links;
} e_ospf_router_lsa;

typedef struct _e_ospf_router_data {
    guint32 link_id;
    guint32 link_data;
    guint8 link_type;
    guint8 nr_tos;
    guint16 tos0_metric;
} e_ospf_router_data;

typedef struct _e_ospf_router_metric {
    guint8	tos;
    guint8	empty;
    guint16	metric;
} e_ospf_router_metric;

typedef struct  _e_ospf_network_lsa {
    guint32	network_mask;
} e_ospf_network_lsa;

typedef struct _e_ospf_lsa_upd_hdr {
    guint32	lsa_nr;
} e_ospf_lsa_upd_hdr;

typedef struct _e_ospf_summary_lsa {
    guint32	network_mask;
} e_ospf_summary_lsa;

typedef struct _e_ospf_asexternal_lsa {
    guint8	options;
    guint8      metric[3];
    guint32	gateway;
    guint32 	external_tag;
} e_ospf_asexternal_lsa;

typedef struct _e_ospf_crypto {
    guint16   mbz;
    guint8      key_id;
    guint8      length;
    guint32   sequence_num;
} e_ospf_crypto;

void dissect_ospf(const u_char *, int, frame_data *, proto_tree *);
void dissect_ospf_hello(const u_char*, int, frame_data*, proto_tree*);
void dissect_ospf_db_desc(const u_char*, int, frame_data*, proto_tree*); 
void dissect_ospf_ls_req(const u_char*, int, frame_data*, proto_tree*); 
void dissect_ospf_ls_upd(const u_char*, int, frame_data*, proto_tree*); 
void dissect_ospf_ls_ack(const u_char*, int, frame_data*, proto_tree*); 

/* dissect_ospf_lsa returns the length of the LSA 
 * if disassemble_body is set to FALSE (e.g. in LSA ACK 
 * packets), the LSA-header length is returned (20)
 */
int dissect_ospf_lsa(const u_char*, int, frame_data*, proto_tree*, int disassemble_body);