-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy patheigrp_packet.h
150 lines (130 loc) · 5.07 KB
/
eigrp_packet.h
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
145
146
147
148
149
150
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* EIGRP General Sending and Receiving of EIGRP Packets.
* Copyright (C) 2013-2016
* Authors:
* Donnie Savage
* Jan Janovic
* Matej Perina
* Peter Orsag
* Peter Paluch
* Frantisek Gazo
* Tomas Hvorkovy
* Martin Kontsek
* Lukas Koribsky
*
*/
#ifndef _ZEBRA_EIGRP_PACKET_H
#define _ZEBRA_EIGRP_PACKET_H
#include "lib/stream.h"
#include "lib/sockunion.h"
#include "lib/sockopt.h"
/**
* every TLV has a header - might as well define it here
*/
#define EIGRP_TLV_HDR \
uint16_t type; \
uint16_t length;
#define EIGRP_TLV_HDR_SIZE 4
typedef struct eigrp_tlv_header {
uint16_t type;
uint16_t length;
} eigrp_tlv_header_t;
/*Prototypes*/
extern void eigrp_packet_read(struct event *);
extern void eigrp_packet_write(struct event *);
extern eigrp_packet_t *eigrp_packet_new(size_t, eigrp_neighbor_t *);
extern eigrp_packet_t *eigrp_packet_duplicate(eigrp_packet_t *,
eigrp_neighbor_t *);
extern void eigrp_packet_free(eigrp_packet_t *);
extern void eigrp_packet_delete(eigrp_interface_t *);
extern void eigrp_packet_header_init(int, eigrp_instance_t *, struct stream *,
uint32_t, uint32_t, uint32_t);
extern void eigrp_packet_checksum(eigrp_interface_t *, struct stream *,
uint16_t);
extern eigrp_packet_queue_t *eigrp_packet_queue_new(void);
extern eigrp_packet_t *eigrp_packet_queue_next(eigrp_packet_queue_t *);
extern eigrp_packet_t *eigrp_packet_dequeue(eigrp_packet_queue_t *);
extern void eigrp_packet_enqueue(eigrp_packet_queue_t *, eigrp_packet_t *);
extern void eigrp_packet_queue_free(eigrp_packet_queue_t *);
extern void eigrp_packet_queue_reset(eigrp_packet_queue_t *);
extern void eigrp_packet_send_reliably(eigrp_instance_t *, eigrp_neighbor_t *);
extern void eigrp_packet_unack_retrans(struct event *);
extern void eigrp_packet_unack_multicast_retrans(struct event *);
/**
* Found in eigrp-tlv*.c for peer versioning of TLV decoding
*/
extern void eigrp_tlv1_init(eigrp_neighbor_t *);
extern void eigrp_tlv2_init(eigrp_neighbor_t *);
/*
* untill there is reason to have their own header, these externs are found in
* eigrp_hello.c
*/
extern void eigrp_sw_version_init(void);
extern void eigrp_hello_send(eigrp_interface_t *, uint8_t, eigrp_addr_t *);
extern void eigrp_hello_send_ack(eigrp_neighbor_t *);
extern void eigrp_hello_receive(eigrp_instance_t *, eigrp_header_t *,
eigrp_addr_t *, eigrp_interface_t *,
struct stream *, int);
extern void eigrp_hello_timer(struct event *);
/*
* These externs are found in eigrp_update.c
*/
extern bool eigrp_update_prefix_apply(eigrp_instance_t *eigrp,
eigrp_interface_t *ei, int in,
struct prefix *prefix);
extern void eigrp_update_send(eigrp_instance_t *, eigrp_neighbor_t *,
eigrp_interface_t *);
extern void eigrp_update_receive(eigrp_instance_t *, eigrp_neighbor_t *,
eigrp_header_t *, struct stream *,
eigrp_interface_t *, int);
extern void eigrp_update_send_all(eigrp_instance_t *, eigrp_interface_t *);
extern void eigrp_update_send_init(eigrp_instance_t *, eigrp_neighbor_t *);
extern void eigrp_update_send_EOT(eigrp_neighbor_t *);
extern void eigrp_update_send_GR_event(struct event *);
extern void eigrp_update_send_GR(eigrp_neighbor_t *, enum GR_type,
struct vty *);
extern void eigrp_update_send_interface_GR(eigrp_interface_t *, enum GR_type,
struct vty *);
extern void eigrp_update_send_process_GR(eigrp_instance_t *, enum GR_type,
struct vty *);
/*
* These externs are found in eigrp_query.c
*/
extern void eigrp_query_send(eigrp_instance_t *, eigrp_interface_t *);
extern void eigrp_query_receive(eigrp_instance_t *, eigrp_neighbor_t *,
eigrp_header_t *, struct stream *,
eigrp_interface_t *, int);
extern uint32_t eigrp_query_send_all(eigrp_instance_t *);
/*
* These externs are found in eigrp_reply.c
*/
extern void eigrp_reply_send(eigrp_instance_t *, eigrp_neighbor_t *,
eigrp_prefix_descriptor_t *);
extern void eigrp_reply_receive(eigrp_instance_t *, eigrp_neighbor_t *,
eigrp_header_t *, struct stream *,
eigrp_interface_t *, int);
/*
* These externs are found in eigrp_siaquery.c
*/
extern void eigrp_siaquery_send(eigrp_instance_t *, eigrp_neighbor_t *,
eigrp_prefix_descriptor_t *);
extern void eigrp_siaquery_receive(eigrp_instance_t *, eigrp_neighbor_t *,
eigrp_header_t *, struct stream *,
eigrp_interface_t *, int);
/*
* These externs are found in eigrp_siareply.c
*/
extern void eigrp_siareply_send(eigrp_instance_t *, eigrp_neighbor_t *,
eigrp_prefix_descriptor_t *);
extern void eigrp_siareply_receive(eigrp_instance_t *, eigrp_neighbor_t *,
eigrp_header_t *, struct stream *,
eigrp_interface_t *, int);
/*
* These externs need to cleaned up
*/
extern void eigrp_IPv4_InternalTLV_free(struct TLV_IPv4_Internal_type *);
extern struct TLV_Sequence_Type *eigrp_SequenceTLV_new(void);
extern const struct message eigrp_packet_type_str[];
extern const size_t eigrp_packet_type_str_max;
#endif /* _ZEBRA_EIGRP_PACKET_H */