forked from Mirror/frr
98 lines
3.1 KiB
C
98 lines
3.1 KiB
C
![]() |
/* BGP EVPN internal definitions
|
||
|
* Copyright (C) 2017 Cumulus Networks, Inc.
|
||
|
*
|
||
|
* This file is part of FRR.
|
||
|
*
|
||
|
* FRR is free software; you can redistribute it and/or modify it
|
||
|
* under the terms of the GNU General Public License as published by the
|
||
|
* Free Software Foundation; either version 2, or (at your option) any
|
||
|
* later version.
|
||
|
*
|
||
|
* FRR is distributed in the hope that it will be useful, but
|
||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
* General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with FRR; see the file COPYING. If not, write to the Free
|
||
|
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||
|
* 02111-1307, USA.
|
||
|
*/
|
||
|
|
||
|
#ifndef _BGP_EVPN_PRIVATE_H
|
||
|
#define _BGP_EVPN_PRIVATE_H
|
||
|
|
||
|
#include "vxlan.h"
|
||
|
#include "zebra.h"
|
||
|
|
||
|
#include "bgpd/bgpd.h"
|
||
|
#include "bgpd/bgp_ecommunity.h"
|
||
|
|
||
|
/* EVPN prefix lengths. */
|
||
|
#define EVPN_TYPE_2_ROUTE_PREFIXLEN 224
|
||
|
#define EVPN_TYPE_3_ROUTE_PREFIXLEN 224
|
||
|
|
||
|
/* EVPN route types. */
|
||
|
typedef enum
|
||
|
{
|
||
|
BGP_EVPN_AD_ROUTE = 1, /* Ethernet Auto-Discovery (A-D) route */
|
||
|
BGP_EVPN_MAC_IP_ROUTE, /* MAC/IP Advertisement route */
|
||
|
BGP_EVPN_IMET_ROUTE, /* Inclusive Multicast Ethernet Tag route */
|
||
|
BGP_EVPN_ES_ROUTE, /* Ethernet Segment route */
|
||
|
BGP_EVPN_IP_PREFIX_ROUTE, /* IP Prefix route */
|
||
|
} bgp_evpn_route_type;
|
||
|
|
||
|
/*
|
||
|
* Hash table of EVIs. Right now, the only type of EVI supported is with
|
||
|
* VxLAN encapsulation, hence each EVI corresponds to a L2 VNI.
|
||
|
* The VNIs are not "created" through BGP but through some other interface
|
||
|
* on the system. This table stores VNIs that BGP comes to know as present
|
||
|
* on the system (through interaction with zebra) as well as pre-configured
|
||
|
* VNIs (which need to be defined in the system to become "live").
|
||
|
*/
|
||
|
struct bgpevpn
|
||
|
{
|
||
|
vni_t vni;
|
||
|
u_int32_t flags;
|
||
|
#define VNI_FLAG_CFGD 0x1 /* VNI is user configured */
|
||
|
#define VNI_FLAG_LIVE 0x2 /* VNI is "live" */
|
||
|
#define VNI_FLAG_RD_CFGD 0x4 /* RD is user configured. */
|
||
|
#define VNI_FLAG_IMPRT_CFGD 0x8 /* Import RT is user configured */
|
||
|
#define VNI_FLAG_EXPRT_CFGD 0x10 /* Export RT is user configured */
|
||
|
|
||
|
/* Id for deriving the RD automatically for this VNI */
|
||
|
u_int16_t rd_id;
|
||
|
|
||
|
/* RD for this VNI. */
|
||
|
struct prefix_rd prd;
|
||
|
|
||
|
/* Route type 3 field */
|
||
|
struct in_addr originator_ip;
|
||
|
|
||
|
/* Import and Export RTs. */
|
||
|
struct list *import_rtl;
|
||
|
struct list *export_rtl;
|
||
|
|
||
|
/* Route table for EVPN routes for this VNI. */
|
||
|
struct bgp_table *route_table;
|
||
|
|
||
|
QOBJ_FIELDS
|
||
|
};
|
||
|
|
||
|
DECLARE_QOBJ_TYPE(bgpevpn)
|
||
|
|
||
|
/* Mapping of Import RT to VNIs.
|
||
|
* The Import RTs of all VNIs are maintained in a hash table with each
|
||
|
* RT linking to all VNIs that will import routes matching this RT.
|
||
|
*/
|
||
|
struct irt_node
|
||
|
{
|
||
|
/* RT */
|
||
|
struct ecommunity_val rt;
|
||
|
|
||
|
/* List of VNIs importing routes matching this RT. */
|
||
|
struct list *vnis;
|
||
|
};
|
||
|
|
||
|
#endif /* _BGP_EVPN_PRIVATE_H */
|