]>
Commit | Line | Data |
---|---|---|
718e3744 | 1 | /* MPLS-VPN |
2 | Copyright (C) 2000 Kunihiro Ishiguro <kunihiro@zebra.org> | |
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 | |
17 | along with GNU Zebra; see the file COPYING. If not, write to the Free | |
18 | Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | |
19 | 02111-1307, USA. */ | |
20 | ||
00d252cb | 21 | #ifndef _QUAGGA_BGP_MPLSVPN_H |
22 | #define _QUAGGA_BGP_MPLSVPN_H | |
23 | ||
4f280b15 LB |
24 | #include "bgpd/bgp_route.h" |
25 | ||
718e3744 | 26 | #define RD_TYPE_AS 0 |
27 | #define RD_TYPE_IP 1 | |
fe770c88 | 28 | #define RD_TYPE_AS4 2 |
65efcfce LB |
29 | #if ENABLE_BGP_VNC |
30 | #define RD_TYPE_VNC_ETH 0xff00 /* VNC L2VPN */ | |
31 | #endif | |
718e3744 | 32 | |
33 | #define RD_ADDRSTRLEN 28 | |
34 | ||
5ff06872 | 35 | #ifdef MPLS_LABEL_MAX |
ac4d0be5 | 36 | #undef MPLS_LABEL_MAX |
5ff06872 LB |
37 | #endif |
38 | ||
65efcfce | 39 | typedef enum { |
ac4d0be5 | 40 | MPLS_LABEL_IPV4_EXPLICIT_NULL = 0, /* [RFC3032] */ |
41 | MPLS_LABEL_ROUTER_ALERT = 1, /* [RFC3032] */ | |
42 | MPLS_LABEL_IPV6_EXPLICIT_NULL = 2, /* [RFC3032] */ | |
43 | MPLS_LABEL_IMPLICIT_NULL = 3, /* [RFC3032] */ | |
44 | MPLS_LABEL_UNASSIGNED4 = 4, | |
45 | MPLS_LABEL_UNASSIGNED5 = 5, | |
46 | MPLS_LABEL_UNASSIGNED6 = 6, | |
47 | MPLS_LABEL_ELI = 7, /* Entropy Indicator [RFC6790] */ | |
48 | MPLS_LABEL_UNASSIGNED8 = 8, | |
49 | MPLS_LABEL_UNASSIGNED9 = 9, | |
50 | MPLS_LABEL_UNASSIGNED10 = 10, | |
51 | MPLS_LABEL_UNASSIGNED11 = 11, | |
52 | MPLS_LABEL_GAL = 13, /* [RFC5586] */ | |
53 | MPLS_LABEL_OAM_ALERT = 14, /* [RFC3429] */ | |
54 | MPLS_LABEL_EXTENSION = 15, /* [RFC7274] */ | |
55 | MPLS_LABEL_MAX = 1048575, | |
56 | MPLS_LABEL_ILLEGAL = 0xFFFFFFFF /* for internal use only */ | |
65efcfce LB |
57 | } mpls_special_label_t; |
58 | ||
ac4d0be5 | 59 | #define MPLS_LABEL_IS_SPECIAL(label) ((label) <= MPLS_LABEL_EXTENSION) |
60 | #define MPLS_LABEL_IS_NULL(label) \ | |
61 | ((label) == MPLS_LABEL_IPV4_EXPLICIT_NULL \ | |
62 | || (label) == MPLS_LABEL_IPV6_EXPLICIT_NULL \ | |
63 | || (label) == MPLS_LABEL_IMPLICIT_NULL) | |
64 | ||
65 | #define BGP_VPNVX_HELP_STR \ | |
66 | "Address Family\n" \ | |
67 | "Address Family\n" | |
68 | ||
69 | struct rd_as { | |
70 | u_int16_t type; | |
71 | as_t as; | |
72 | u_int32_t val; | |
718e3744 | 73 | }; |
74 | ||
ac4d0be5 | 75 | struct rd_ip { |
76 | u_int16_t type; | |
77 | struct in_addr ip; | |
78 | u_int16_t val; | |
718e3744 | 79 | }; |
80 | ||
65efcfce | 81 | #if ENABLE_BGP_VNC |
ac4d0be5 | 82 | struct rd_vnc_eth { |
83 | u_int16_t type; | |
84 | uint8_t local_nve_id; | |
85 | struct ethaddr macaddr; | |
65efcfce LB |
86 | }; |
87 | #endif | |
88 | ||
ac4d0be5 | 89 | extern u_int16_t decode_rd_type(u_char *); |
90 | extern void encode_rd_type(u_int16_t, u_char *); | |
91 | extern void bgp_mplsvpn_init(void); | |
92 | extern int bgp_nlri_parse_vpn(struct peer *, struct attr *, struct bgp_nlri *); | |
93 | extern u_int32_t decode_label(u_char *); | |
1a39c60a | 94 | extern void encode_label(u_int32_t, u_char *); |
ac4d0be5 | 95 | extern void decode_rd_as(u_char *, struct rd_as *); |
96 | extern void decode_rd_as4(u_char *, struct rd_as *); | |
97 | extern void decode_rd_ip(u_char *, struct rd_ip *); | |
65efcfce | 98 | #if ENABLE_BGP_VNC |
ac4d0be5 | 99 | extern void decode_rd_vnc_eth(u_char *pnt, struct rd_vnc_eth *rd_vnc_eth); |
65efcfce | 100 | #endif |
ac4d0be5 | 101 | extern int str2prefix_rd(const char *, struct prefix_rd *); |
102 | extern char *prefix_rd2str(struct prefix_rd *, char *, size_t); | |
103 | ||
104 | extern int argv_find_and_parse_vpnvx(struct cmd_token **argv, int argc, | |
105 | int *index, afi_t *afi); | |
106 | extern int bgp_show_mpls_vpn(struct vty *vty, afi_t afi, struct prefix_rd *prd, | |
107 | enum bgp_show_type type, void *output_arg, | |
108 | int tags, u_char use_json); | |
d6902373 | 109 | |
00d252cb | 110 | #endif /* _QUAGGA_BGP_MPLSVPN_H */ |