]>
Commit | Line | Data |
---|---|---|
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 | ||
11 | DECLARE_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 |
16 | DECLARE_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 | 45 | extern void bgp_keepalive_send(struct peer *); |
46 | extern void bgp_open_send(struct peer *); | |
d7c0a89a QY |
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); | |
71ca5b09 MS |
50 | void bgp_notify_io_invalid(struct peer *peer, uint8_t code, uint8_t sub_code, |
51 | uint8_t *data, size_t datalen); | |
9af52ccf DA |
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); | |
d62a17ae | 55 | extern void bgp_capability_send(struct peer *, afi_t, safi_t, int, int); |
00d252cb | 56 | |
d62a17ae | 57 | extern int bgp_capability_receive(struct peer *, bgp_size_t); |
96e52474 | 58 | |
d62a17ae | 59 | extern int bgp_nlri_parse(struct peer *, struct attr *, struct bgp_nlri *, |
60 | int mp_withdraw); | |
96e52474 | 61 | |
d62a17ae | 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 *); | |
3f9c7369 | 65 | |
d7c0a89a | 66 | extern int bgp_packet_set_marker(struct stream *s, uint8_t type); |
65baedca | 67 | extern void bgp_packet_set_size(struct stream *s); |
d3ecc69e | 68 | |
e6685141 DS |
69 | extern void bgp_generate_updgrp_packets(struct event *event); |
70 | extern void bgp_process_packet(struct event *event); | |
3f9c7369 | 71 | |
9e3b51a7 | 72 | extern void bgp_send_delayed_eor(struct bgp *bgp); |
6af96fa3 MS |
73 | |
74 | /* Task callback to handle socket error encountered in the io pthread */ | |
e6685141 | 75 | void bgp_packet_process_error(struct event *thread); |
eea685b6 DA |
76 | extern struct bgp_notify |
77 | bgp_notify_decapsulate_hard_reset(struct bgp_notify *notify); | |
20170775 | 78 | extern bool bgp_has_graceful_restart_notification(struct peer *peer); |
1ae314be DA |
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); | |
6af96fa3 | 83 | |
00d252cb | 84 | #endif /* _QUAGGA_BGP_PACKET_H */ |