]> git.proxmox.com Git - mirror_frr.git/blob - bgpd/bgp_packet.h
*: Rename `struct thread` to `struct event`
[mirror_frr.git] / bgpd / bgp_packet.h
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* BGP packet management header.
3 * Copyright (C) 1999 Kunihiro Ishiguro
4 */
5
6 #ifndef _QUAGGA_BGP_PACKET_H
7 #define _QUAGGA_BGP_PACKET_H
8
9 #include "hook.h"
10
11 DECLARE_HOOK(bgp_packet_dump,
12 (struct peer *peer, uint8_t type, bgp_size_t size,
13 struct stream *s),
14 (peer, type, size, s));
15
16 DECLARE_HOOK(bgp_packet_send,
17 (struct peer *peer, uint8_t type, bgp_size_t size,
18 struct stream *s),
19 (peer, type, size, s));
20
21 #define BGP_NLRI_LENGTH 1U
22 #define BGP_TOTAL_ATTR_LEN 2U
23 #define BGP_UNFEASIBLE_LEN 2U
24
25 /* When to refresh */
26 #define REFRESH_IMMEDIATE 1
27 #define REFRESH_DEFER 2
28
29 /* ORF Common part flag */
30 #define ORF_COMMON_PART_ADD 0x00
31 #define ORF_COMMON_PART_REMOVE 0x80
32 #define ORF_COMMON_PART_REMOVE_ALL 0xC0
33 #define ORF_COMMON_PART_PERMIT 0x00
34 #define ORF_COMMON_PART_DENY 0x20
35
36 #define BGP_UPDATE_EOR_PKT(_peer, _afi, _safi, _s) \
37 do { \
38 _s = bgp_update_packet_eor(_peer, _afi, _safi); \
39 if (_s) { \
40 bgp_packet_add(_peer, _s); \
41 } \
42 } while (0)
43
44 /* Packet send and receive function prototypes. */
45 extern void bgp_keepalive_send(struct peer *);
46 extern void bgp_open_send(struct peer *);
47 extern void bgp_notify_send(struct peer *, uint8_t, uint8_t);
48 extern void bgp_notify_send_with_data(struct peer *, uint8_t, uint8_t,
49 uint8_t *, size_t);
50 void bgp_notify_io_invalid(struct peer *peer, uint8_t code, uint8_t sub_code,
51 uint8_t *data, size_t datalen);
52 extern void bgp_route_refresh_send(struct peer *peer, afi_t afi, safi_t safi,
53 uint8_t orf_type, uint8_t when_to_refresh,
54 int remove, uint8_t subtype);
55 extern void bgp_capability_send(struct peer *, afi_t, safi_t, int, int);
56
57 extern int bgp_capability_receive(struct peer *, bgp_size_t);
58
59 extern int bgp_nlri_parse(struct peer *, struct attr *, struct bgp_nlri *,
60 int mp_withdraw);
61
62 extern void bgp_update_restarted_peers(struct peer *);
63 extern void bgp_update_implicit_eors(struct peer *);
64 extern void bgp_check_update_delay(struct bgp *);
65
66 extern int bgp_packet_set_marker(struct stream *s, uint8_t type);
67 extern void bgp_packet_set_size(struct stream *s);
68
69 extern void bgp_generate_updgrp_packets(struct event *event);
70 extern void bgp_process_packet(struct event *event);
71
72 extern void bgp_send_delayed_eor(struct bgp *bgp);
73
74 /* Task callback to handle socket error encountered in the io pthread */
75 void bgp_packet_process_error(struct event *thread);
76 extern struct bgp_notify
77 bgp_notify_decapsulate_hard_reset(struct bgp_notify *notify);
78 extern bool bgp_has_graceful_restart_notification(struct peer *peer);
79 extern bool bgp_notify_send_hard_reset(struct peer *peer, uint8_t code,
80 uint8_t subcode);
81 extern bool bgp_notify_received_hard_reset(struct peer *peer, uint8_t code,
82 uint8_t subcode);
83
84 #endif /* _QUAGGA_BGP_PACKET_H */