]>
git.proxmox.com Git - mirror_frr.git/blob - bgpd/bgp_packet.h
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /* BGP packet management header.
3 * Copyright (C) 1999 Kunihiro Ishiguro
6 #ifndef _QUAGGA_BGP_PACKET_H
7 #define _QUAGGA_BGP_PACKET_H
11 DECLARE_HOOK(bgp_packet_dump
,
12 (struct peer
*peer
, uint8_t type
, bgp_size_t size
,
14 (peer
, type
, size
, s
));
16 DECLARE_HOOK(bgp_packet_send
,
17 (struct peer
*peer
, uint8_t type
, bgp_size_t size
,
19 (peer
, type
, size
, s
));
21 #define BGP_NLRI_LENGTH 1U
22 #define BGP_TOTAL_ATTR_LEN 2U
23 #define BGP_UNFEASIBLE_LEN 2U
26 #define REFRESH_IMMEDIATE 1
27 #define REFRESH_DEFER 2
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
36 #define BGP_UPDATE_EOR_PKT(_peer, _afi, _safi, _s) \
38 _s = bgp_update_packet_eor(_peer, _afi, _safi); \
40 bgp_packet_add(_peer, _s); \
44 /* Packet send and receive function prototypes. */
45 extern void bgp_keepalive_send(struct peer
*peer
);
46 extern void bgp_open_send(struct peer
*peer
);
47 extern void bgp_notify_send(struct peer
*peer
, uint8_t code
, uint8_t sub_code
);
48 extern void bgp_notify_send_with_data(struct peer
*peer
, uint8_t code
,
49 uint8_t sub_code
, uint8_t *data
,
51 void bgp_notify_io_invalid(struct peer
*peer
, uint8_t code
, uint8_t sub_code
,
52 uint8_t *data
, size_t datalen
);
53 extern void bgp_route_refresh_send(struct peer
*peer
, afi_t afi
, safi_t safi
,
54 uint8_t orf_type
, uint8_t when_to_refresh
,
55 int remove
, uint8_t subtype
);
56 extern void bgp_capability_send(struct peer
*peer
, afi_t afi
, safi_t safi
,
57 int capabilty_code
, int action
);
59 extern int bgp_capability_receive(struct peer
*peer
, bgp_size_t length
);
61 extern int bgp_nlri_parse(struct peer
*peer
, struct attr
*attr
,
62 struct bgp_nlri
*nlri
, bool mp_withdraw
);
64 extern void bgp_update_restarted_peers(struct peer
*peer
);
65 extern void bgp_update_implicit_eors(struct peer
*peer
);
66 extern void bgp_check_update_delay(struct bgp
*peer
);
68 extern int bgp_packet_set_marker(struct stream
*s
, uint8_t type
);
69 extern void bgp_packet_set_size(struct stream
*s
);
71 extern void bgp_generate_updgrp_packets(struct event
*event
);
72 extern void bgp_process_packet(struct event
*event
);
74 extern void bgp_send_delayed_eor(struct bgp
*bgp
);
76 /* Task callback to handle socket error encountered in the io pthread */
77 void bgp_packet_process_error(struct event
*thread
);
78 extern struct bgp_notify
79 bgp_notify_decapsulate_hard_reset(struct bgp_notify
*notify
);
80 extern bool bgp_has_graceful_restart_notification(struct peer
*peer
);
81 extern bool bgp_notify_send_hard_reset(struct peer
*peer
, uint8_t code
,
83 extern bool bgp_notify_received_hard_reset(struct peer
*peer
, uint8_t code
,
86 #endif /* _QUAGGA_BGP_PACKET_H */