]> git.proxmox.com Git - mirror_frr.git/blame - bgpd/bgp_packet.h
Merge pull request #12989 from opensourcerouting/fix/memory_leaks_bgpd
[mirror_frr.git] / bgpd / bgp_packet.h
CommitLineData
acddc0ed 1// SPDX-License-Identifier: GPL-2.0-or-later
718e3744 2/* BGP packet management header.
896014f4 3 * Copyright (C) 1999 Kunihiro Ishiguro
896014f4 4 */
718e3744 5
00d252cb 6#ifndef _QUAGGA_BGP_PACKET_H
7#define _QUAGGA_BGP_PACKET_H
8
584470fb
DL
9#include "hook.h"
10
11DECLARE_HOOK(bgp_packet_dump,
12 (struct peer *peer, uint8_t type, bgp_size_t size,
13 struct stream *s),
8451921b 14 (peer, type, size, s));
584470fb 15
6fd04594
DL
16DECLARE_HOOK(bgp_packet_send,
17 (struct peer *peer, uint8_t type, bgp_size_t size,
18 struct stream *s),
8451921b 19 (peer, type, size, s));
6fd04594 20
fd79ac91 21#define BGP_NLRI_LENGTH 1U
22#define BGP_TOTAL_ATTR_LEN 2U
23#define BGP_UNFEASIBLE_LEN 2U
718e3744 24
25/* When to refresh */
26#define REFRESH_IMMEDIATE 1
9ea364a2 27#define REFRESH_DEFER 2
718e3744 28
29/* ORF Common part flag */
9ea364a2
DA
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
718e3744 35
36235319
QY
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)
d6e3c15b 43
718e3744 44/* Packet send and receive function prototypes. */
d62a17ae 45extern void bgp_keepalive_send(struct peer *);
46extern void bgp_open_send(struct peer *);
d7c0a89a
QY
47extern void bgp_notify_send(struct peer *, uint8_t, uint8_t);
48extern void bgp_notify_send_with_data(struct peer *, uint8_t, uint8_t,
49 uint8_t *, size_t);
71ca5b09
MS
50void bgp_notify_io_invalid(struct peer *peer, uint8_t code, uint8_t sub_code,
51 uint8_t *data, size_t datalen);
9af52ccf
DA
52extern 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);
d62a17ae 55extern void bgp_capability_send(struct peer *, afi_t, safi_t, int, int);
00d252cb 56
d62a17ae 57extern int bgp_capability_receive(struct peer *, bgp_size_t);
96e52474 58
d62a17ae 59extern int bgp_nlri_parse(struct peer *, struct attr *, struct bgp_nlri *,
60 int mp_withdraw);
96e52474 61
d62a17ae 62extern void bgp_update_restarted_peers(struct peer *);
63extern void bgp_update_implicit_eors(struct peer *);
64extern void bgp_check_update_delay(struct bgp *);
3f9c7369 65
d7c0a89a 66extern int bgp_packet_set_marker(struct stream *s, uint8_t type);
65baedca 67extern void bgp_packet_set_size(struct stream *s);
d3ecc69e 68
cc9f21da
DS
69extern void bgp_generate_updgrp_packets(struct thread *);
70extern void bgp_process_packet(struct thread *);
3f9c7369 71
9e3b51a7 72extern void bgp_send_delayed_eor(struct bgp *bgp);
6af96fa3
MS
73
74/* Task callback to handle socket error encountered in the io pthread */
cc9f21da 75void bgp_packet_process_error(struct thread *thread);
eea685b6
DA
76extern struct bgp_notify
77bgp_notify_decapsulate_hard_reset(struct bgp_notify *notify);
20170775 78extern bool bgp_has_graceful_restart_notification(struct peer *peer);
1ae314be
DA
79extern bool bgp_notify_send_hard_reset(struct peer *peer, uint8_t code,
80 uint8_t subcode);
81extern bool bgp_notify_received_hard_reset(struct peer *peer, uint8_t code,
82 uint8_t subcode);
6af96fa3 83
00d252cb 84#endif /* _QUAGGA_BGP_PACKET_H */