]>
Commit | Line | Data |
---|---|---|
acddc0ed | 1 | // SPDX-License-Identifier: GPL-2.0-or-later |
8557760c | 2 | /* BGP RD definitions for BGP-based VPNs (IP/EVPN) |
3 | * -- brought over from bgpd/bgp_mplsvpn.h | |
4 | * Copyright (C) 2000 Kunihiro Ishiguro <kunihiro@zebra.org> | |
8557760c | 5 | */ |
6 | ||
7 | #ifndef _QUAGGA_BGP_RD_H | |
8 | #define _QUAGGA_BGP_RD_H | |
9 | ||
4a8cd6ad PG |
10 | #include "asn.h" |
11 | #include "prefix.h" | |
12 | ||
8557760c | 13 | /* RD types */ |
6f167d23 | 14 | #define RD_TYPE_UNDEFINED (-1) |
8557760c | 15 | #define RD_TYPE_AS 0 |
16 | #define RD_TYPE_IP 1 | |
17 | #define RD_TYPE_AS4 2 | |
18 | ||
49e5a4a0 | 19 | #ifdef ENABLE_BGP_VNC |
8557760c | 20 | #define RD_TYPE_VNC_ETH 0xff00 /* VNC L2VPN */ |
21 | #endif | |
22 | ||
23 | #define RD_ADDRSTRLEN 28 | |
c44ab6f1 | 24 | #define RD_BYTES 8 |
8557760c | 25 | |
4a8cd6ad PG |
26 | #define BGP_RD_AS_FORMAT(mode) \ |
27 | ((mode == ASNOTATION_DOT) \ | |
28 | ? "%pRDD" \ | |
29 | : ((mode == ASNOTATION_DOTPLUS) ? "%pRDE" : "%pRDP")) | |
30 | ||
31 | #define BGP_RD_AS_FORMAT_SPACE(mode) \ | |
32 | ((mode == ASNOTATION_DOT) \ | |
33 | ? "%-21pRDD" \ | |
34 | : ((mode == ASNOTATION_DOTPLUS) ? "%-21pRDE" : "%-21pRDP")) | |
35 | ||
d62a17ae | 36 | struct rd_as { |
d7c0a89a | 37 | uint16_t type; |
d62a17ae | 38 | as_t as; |
d7c0a89a | 39 | uint32_t val; |
8557760c | 40 | }; |
41 | ||
d62a17ae | 42 | struct rd_ip { |
d7c0a89a | 43 | uint16_t type; |
d62a17ae | 44 | struct in_addr ip; |
d7c0a89a | 45 | uint16_t val; |
8557760c | 46 | }; |
47 | ||
49e5a4a0 | 48 | #ifdef ENABLE_BGP_VNC |
d62a17ae | 49 | struct rd_vnc_eth { |
d7c0a89a | 50 | uint16_t type; |
d62a17ae | 51 | uint8_t local_nve_id; |
52 | struct ethaddr macaddr; | |
8557760c | 53 | }; |
54 | #endif | |
55 | ||
1be1693e | 56 | extern uint16_t decode_rd_type(const uint8_t *pnt); |
d7c0a89a | 57 | extern void encode_rd_type(uint16_t, uint8_t *); |
8557760c | 58 | |
1be1693e DS |
59 | extern void decode_rd_as(const uint8_t *pnt, struct rd_as *rd_as); |
60 | extern void decode_rd_as4(const uint8_t *pnt, struct rd_as *rd_as); | |
5a1ae2c2 | 61 | extern void decode_rd_ip(const uint8_t *pnt, struct rd_ip *rd_ip); |
49e5a4a0 | 62 | #ifdef ENABLE_BGP_VNC |
5f040085 DS |
63 | extern void decode_rd_vnc_eth(const uint8_t *pnt, |
64 | struct rd_vnc_eth *rd_vnc_eth); | |
8557760c | 65 | #endif |
66 | ||
d62a17ae | 67 | extern int str2prefix_rd(const char *, struct prefix_rd *); |
4a8cd6ad PG |
68 | extern char *prefix_rd2str(const struct prefix_rd *prd, char *buf, size_t size, |
69 | enum asnotation_mode asnotation); | |
92708db6 | 70 | extern void form_auto_rd(struct in_addr router_id, uint16_t rd_id, |
71 | struct prefix_rd *prd); | |
8557760c | 72 | |
73 | #endif /* _QUAGGA_BGP_RD_H */ |