]>
Commit | Line | Data |
---|---|---|
718e3744 | 1 | /* BGP packet management header. |
896014f4 DL |
2 | * Copyright (C) 1999 Kunihiro Ishiguro |
3 | * | |
4 | * This file is part of GNU Zebra. | |
5 | * | |
6 | * GNU Zebra is free software; you can redistribute it and/or modify it | |
7 | * under the terms of the GNU General Public License as published by the | |
8 | * Free Software Foundation; either version 2, or (at your option) any | |
9 | * later version. | |
10 | * | |
11 | * GNU Zebra is distributed in the hope that it will be useful, but | |
12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 | * General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU General Public License along | |
17 | * with this program; see the file COPYING; if not, write to the Free Software | |
18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
19 | */ | |
718e3744 | 20 | |
00d252cb | 21 | #ifndef _QUAGGA_BGP_PACKET_H |
22 | #define _QUAGGA_BGP_PACKET_H | |
23 | ||
584470fb DL |
24 | #include "hook.h" |
25 | ||
26 | DECLARE_HOOK(bgp_packet_dump, | |
27 | (struct peer *peer, uint8_t type, bgp_size_t size, | |
28 | struct stream *s), | |
29 | (peer, type, size, s)) | |
30 | ||
6fd04594 DL |
31 | DECLARE_HOOK(bgp_packet_send, |
32 | (struct peer *peer, uint8_t type, bgp_size_t size, | |
33 | struct stream *s), | |
34 | (peer, type, size, s)) | |
35 | ||
fd79ac91 | 36 | #define BGP_NLRI_LENGTH 1U |
37 | #define BGP_TOTAL_ATTR_LEN 2U | |
38 | #define BGP_UNFEASIBLE_LEN 2U | |
718e3744 | 39 | |
40 | /* When to refresh */ | |
41 | #define REFRESH_IMMEDIATE 1 | |
9ea364a2 | 42 | #define REFRESH_DEFER 2 |
718e3744 | 43 | |
44 | /* ORF Common part flag */ | |
9ea364a2 DA |
45 | #define ORF_COMMON_PART_ADD 0x00 |
46 | #define ORF_COMMON_PART_REMOVE 0x80 | |
47 | #define ORF_COMMON_PART_REMOVE_ALL 0xC0 | |
48 | #define ORF_COMMON_PART_PERMIT 0x00 | |
49 | #define ORF_COMMON_PART_DENY 0x20 | |
718e3744 | 50 | |
36235319 QY |
51 | #define BGP_UPDATE_EOR_PKT(_peer, _afi, _safi, _s) \ |
52 | do { \ | |
53 | _s = bgp_update_packet_eor(_peer, _afi, _safi); \ | |
54 | if (_s) { \ | |
55 | bgp_packet_add(_peer, _s); \ | |
56 | } \ | |
57 | } while (0) | |
d6e3c15b | 58 | |
718e3744 | 59 | /* Packet send and receive function prototypes. */ |
d62a17ae | 60 | extern void bgp_keepalive_send(struct peer *); |
61 | extern void bgp_open_send(struct peer *); | |
d7c0a89a QY |
62 | extern void bgp_notify_send(struct peer *, uint8_t, uint8_t); |
63 | extern void bgp_notify_send_with_data(struct peer *, uint8_t, uint8_t, | |
64 | uint8_t *, size_t); | |
65 | extern void bgp_route_refresh_send(struct peer *, afi_t, safi_t, uint8_t, | |
66 | uint8_t, int); | |
d62a17ae | 67 | extern void bgp_capability_send(struct peer *, afi_t, safi_t, int, int); |
00d252cb | 68 | |
d62a17ae | 69 | extern int bgp_capability_receive(struct peer *, bgp_size_t); |
96e52474 | 70 | |
d62a17ae | 71 | extern int bgp_nlri_parse(struct peer *, struct attr *, struct bgp_nlri *, |
72 | int mp_withdraw); | |
96e52474 | 73 | |
d62a17ae | 74 | extern void bgp_update_restarted_peers(struct peer *); |
75 | extern void bgp_update_implicit_eors(struct peer *); | |
76 | extern void bgp_check_update_delay(struct bgp *); | |
3f9c7369 | 77 | |
d7c0a89a | 78 | extern int bgp_packet_set_marker(struct stream *s, uint8_t type); |
d62a17ae | 79 | extern int bgp_packet_set_size(struct stream *s); |
d3ecc69e | 80 | |
56257a44 | 81 | extern int bgp_generate_updgrp_packets(struct thread *); |
424ab01d | 82 | extern int bgp_process_packet(struct thread *); |
3f9c7369 | 83 | |
9e3b51a7 | 84 | extern void bgp_send_delayed_eor(struct bgp *bgp); |
00d252cb | 85 | #endif /* _QUAGGA_BGP_PACKET_H */ |