aboutsummaryrefslogtreecommitdiffstats
path: root/packet-ospf.h
blob: 8e3b6af3778638102b86642eca0c5129a5a13872 (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
/* packet-ospf.h (c) 1998 Hannes Boehm */

#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;

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

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