back to topotato report
topotato coverage report
Current view: top level - zebra - zebra_vxlan.h (source / functions) Hit Total Coverage
Test: test_pim6_bootstrap.py::PIM6Bootstrap Lines: 2 5 40.0 %
Date: 2023-02-16 02:07:22 Functions: 0 0 -

          Line data    Source code
       1             : /*
       2             :  * Zebra VxLAN (EVPN) Data structures and definitions
       3             :  * These are public definitions referenced by other files.
       4             :  * Copyright (C) 2016, 2017 Cumulus Networks, Inc.
       5             :  *
       6             :  * This file is part of FRR.
       7             :  *
       8             :  * FRR is free software; you can redistribute it and/or modify it
       9             :  * under the terms of the GNU General Public License as published by the
      10             :  * Free Software Foundation; either version 2, or (at your option) any
      11             :  * later version.
      12             :  *
      13             :  * FRR is distributed in the hope that it will be useful, but
      14             :  * WITHOUT ANY WARRANTY; without even the implied warranty of
      15             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      16             :  * General Public License for more details.
      17             :  *
      18             :  * You should have received a copy of the GNU General Public License
      19             :  * along with FRR; see the file COPYING.  If not, write to the Free
      20             :  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
      21             :  * 02111-1307, USA.
      22             :  */
      23             : 
      24             : #ifndef _ZEBRA_VXLAN_H
      25             : #define _ZEBRA_VXLAN_H
      26             : 
      27             : #include <zebra.h>
      28             : #include <zebra/zebra_router.h>
      29             : 
      30             : #include "linklist.h"
      31             : #include "if.h"
      32             : #include "vlan.h"
      33             : #include "vxlan.h"
      34             : 
      35             : #include "lib/json.h"
      36             : #include "zebra/zebra_vrf.h"
      37             : #include "zebra/zserv.h"
      38             : #include "zebra/zebra_dplane.h"
      39             : 
      40             : #ifdef __cplusplus
      41             : extern "C" {
      42             : #endif
      43             : 
      44             : /* Is EVPN enabled? */
      45             : #define EVPN_ENABLED(zvrf)  (zvrf)->advertise_all_vni
      46          10 : static inline int is_evpn_enabled(void)
      47             : {
      48          10 :         return EVPN_ENABLED(zebra_vrf_get_evpn());
      49             : }
      50             : 
      51             : static inline int
      52           0 : is_vxlan_flooding_head_end(void)
      53             : {
      54           0 :         struct zebra_vrf *zvrf = zebra_vrf_get_evpn();
      55           0 :         return (zvrf->vxlan_flood_ctrl == VXLAN_FLOOD_HEAD_END_REPL);
      56             : }
      57             : 
      58             : /* VxLAN interface change flags of interest. */
      59             : #define ZEBRA_VXLIF_LOCAL_IP_CHANGE     (1 << 0)
      60             : #define ZEBRA_VXLIF_MASTER_CHANGE       (1 << 1)
      61             : #define ZEBRA_VXLIF_VLAN_CHANGE         (1 << 2)
      62             : #define ZEBRA_VXLIF_MCAST_GRP_CHANGE    (1 << 3)
      63             : #define ZEBRA_VXLIF_MASTER_MAC_CHANGE (1 << 4)
      64             : 
      65             : 
      66             : #define VNI_STR_LEN 32
      67             : 
      68             : /* ZAPI message handlers */
      69             : extern void zebra_vxlan_remote_macip_add(ZAPI_HANDLER_ARGS);
      70             : extern void zebra_vxlan_remote_macip_del(ZAPI_HANDLER_ARGS);
      71             : extern void zebra_vxlan_remote_vtep_add_zapi(ZAPI_HANDLER_ARGS);
      72             : extern void zebra_vxlan_remote_vtep_del_zapi(ZAPI_HANDLER_ARGS);
      73             : void zebra_vxlan_remote_vtep_add(vrf_id_t vrf_id, vni_t vni,
      74             :                                  struct in_addr vtep_ip, int flood_control);
      75             : extern void zebra_vxlan_remote_vtep_del(vrf_id_t vrf_id, vni_t vni,
      76             :                                         struct in_addr vtep_ip);
      77             : extern void zebra_vxlan_flood_control(ZAPI_HANDLER_ARGS);
      78             : extern void zebra_vxlan_advertise_subnet(ZAPI_HANDLER_ARGS);
      79             : extern void zebra_vxlan_advertise_svi_macip(ZAPI_HANDLER_ARGS);
      80             : extern void zebra_vxlan_advertise_gw_macip(ZAPI_HANDLER_ARGS);
      81             : extern void zebra_vxlan_advertise_all_vni(ZAPI_HANDLER_ARGS);
      82             : extern void zebra_vxlan_dup_addr_detection(ZAPI_HANDLER_ARGS);
      83             : extern void zebra_vxlan_sg_replay(ZAPI_HANDLER_ARGS);
      84             : 
      85             : extern int is_l3vni_for_prefix_routes_only(vni_t vni);
      86             : extern ifindex_t get_l3vni_svi_ifindex(vrf_id_t vrf_id);
      87             : extern int zebra_vxlan_vrf_delete(struct zebra_vrf *zvrf);
      88             : extern int zebra_vxlan_vrf_enable(struct zebra_vrf *zvrf);
      89             : extern int zebra_vxlan_vrf_disable(struct zebra_vrf *zvrf);
      90             : extern int zebra_vxlan_vrf_delete(struct zebra_vrf *zvrf);
      91             : extern void zebra_vxlan_print_specific_nh_l3vni(struct vty *vty, vni_t l3vni,
      92             :                                                 struct ipaddr *ip, bool uj);
      93             : extern void zebra_vxlan_print_evpn(struct vty *vty, bool uj);
      94             : extern void zebra_vxlan_print_specific_rmac_l3vni(struct vty *vty, vni_t l3vni,
      95             :                                                   struct ethaddr *rmac,
      96             :                                                   bool use_json);
      97             : extern void zebra_vxlan_print_macs_vni(struct vty *vty, struct zebra_vrf *zvrf,
      98             :                                        vni_t vni, bool use_json, bool detail);
      99             : extern void zebra_vxlan_print_macs_all_vni(struct vty *vty,
     100             :                                            struct zebra_vrf *zvrf,
     101             :                                            bool print_dup,
     102             :                                            bool use_json);
     103             : extern void zebra_vxlan_print_macs_all_vni_detail(struct vty *vty,
     104             :                                                   struct zebra_vrf *zvrf,
     105             :                                                   bool print_dup,
     106             :                                                   bool use_json);
     107             : extern void zebra_vxlan_print_macs_all_vni_vtep(struct vty *vty,
     108             :                                                 struct zebra_vrf *zvrf,
     109             :                                                 struct in_addr vtep_ip,
     110             :                                                 bool use_json);
     111             : extern void zebra_vxlan_print_specific_mac_vni(struct vty *vty,
     112             :                                                struct zebra_vrf *zvrf,
     113             :                                                vni_t vni, struct ethaddr *mac,
     114             :                                                bool use_json);
     115             : extern void zebra_vxlan_print_macs_vni_vtep(struct vty *vty,
     116             :                                             struct zebra_vrf *zvrf, vni_t vni,
     117             :                                             struct in_addr vtep_ip,
     118             :                                             bool use_json);
     119             : extern void zebra_vxlan_print_macs_vni_dad(struct vty *vty,
     120             :                                            struct zebra_vrf *zvrf, vni_t vni,
     121             :                                            bool use_json);
     122             : extern void zebra_vxlan_print_neigh_vni(struct vty *vty, struct zebra_vrf *zvrf,
     123             :                                         vni_t vni, bool use_json);
     124             : extern void zebra_vxlan_print_neigh_all_vni(struct vty *vty,
     125             :                                             struct zebra_vrf *zvrf,
     126             :                                             bool print_dup,
     127             :                                             bool use_json);
     128             : extern void zebra_vxlan_print_neigh_all_vni_detail(struct vty *vty,
     129             :                                                    struct zebra_vrf *zvrf,
     130             :                                                    bool print_dup,
     131             :                                                    bool use_json);
     132             : extern void zebra_vxlan_print_specific_neigh_vni(struct vty *vty,
     133             :                                                  struct zebra_vrf *zvrf,
     134             :                                                  vni_t vni, struct ipaddr *ip,
     135             :                                                  bool use_json);
     136             : extern void zebra_vxlan_print_neigh_vni_vtep(struct vty *vty,
     137             :                                              struct zebra_vrf *zvrf, vni_t vni,
     138             :                                              struct in_addr vtep_ip,
     139             :                                              bool use_json);
     140             : extern void zebra_vxlan_print_neigh_vni_dad(struct vty *vty,
     141             :                                         struct zebra_vrf *zvrf, vni_t vni,
     142             :                                         bool use_json);
     143             : extern void zebra_vxlan_print_vni(struct vty *vty, struct zebra_vrf *zvrf,
     144             :                                   vni_t vni, bool use_json,
     145             :                                   json_object *json_array);
     146             : extern void zebra_vxlan_print_vnis(struct vty *vty, struct zebra_vrf *zvrf,
     147             :                                    bool use_json);
     148             : extern void zebra_vxlan_print_vnis_detail(struct vty *vty,
     149             :                                           struct zebra_vrf *zvrf,
     150             :                                           bool use_json);
     151             : extern void zebra_vxlan_print_rmacs_l3vni(struct vty *vty, vni_t vni,
     152             :                                           bool use_json);
     153             : extern void zebra_vxlan_print_rmacs_all_l3vni(struct vty *vty, bool use_json);
     154             : extern void zebra_vxlan_print_nh_l3vni(struct vty *vty, vni_t vni,
     155             :                                        bool use_json);
     156             : extern void zebra_vxlan_print_nh_all_l3vni(struct vty *vty, bool use_json);
     157             : extern void zebra_vxlan_print_l3vni(struct vty *vty, vni_t vni, bool use_json);
     158             : extern void zebra_vxlan_print_vrf_vni(struct vty *vty, struct zebra_vrf *zvrf,
     159             :                                       json_object *json_vrfs);
     160             : extern int zebra_vxlan_add_del_gw_macip(struct interface *ifp,
     161             :                                         const struct prefix *p, int add);
     162             : extern int zebra_vxlan_svi_up(struct interface *ifp, struct interface *link_if);
     163             : extern int zebra_vxlan_svi_down(struct interface *ifp,
     164             :                                 struct interface *link_if);
     165             : extern int zebra_vxlan_handle_kernel_neigh_update(
     166             :         struct interface *ifp, struct interface *link_if, struct ipaddr *ip,
     167             :         struct ethaddr *macaddr, uint16_t state, bool is_ext,
     168             :         bool is_router, bool local_inactive, bool dp_static);
     169             : extern int zebra_vxlan_handle_kernel_neigh_del(struct interface *ifp,
     170             :                                        struct interface *link_if,
     171             :                                        struct ipaddr *ip);
     172             : extern int zebra_vxlan_local_mac_add_update(struct interface *ifp,
     173             :                                             struct interface *br_if,
     174             :                                             struct ethaddr *mac, vlanid_t vid,
     175             :                                             bool sticky, bool local_inactive,
     176             :                                                 bool dp_static);
     177             : extern int zebra_vxlan_local_mac_del(struct interface *ifp,
     178             :                                      struct interface *br_if,
     179             :                                      struct ethaddr *mac, vlanid_t vid);
     180             : extern int zebra_vxlan_check_readd_vtep(struct interface *ifp,
     181             :                                         struct in_addr vtep_ip);
     182             : extern int zebra_vxlan_if_up(struct interface *ifp);
     183             : extern int zebra_vxlan_if_down(struct interface *ifp);
     184             : extern int zebra_vxlan_if_add(struct interface *ifp);
     185             : extern int zebra_vxlan_if_update(struct interface *ifp, uint16_t chgflags);
     186             : extern int zebra_vxlan_if_del(struct interface *ifp);
     187             : extern int zebra_vxlan_process_vrf_vni_cmd(struct zebra_vrf *zvrf, vni_t vni,
     188             :                                            char *err, int err_str_sz,
     189             :                                            int filter, int add);
     190             : extern void zebra_vxlan_init_tables(struct zebra_vrf *zvrf);
     191             : extern void zebra_vxlan_close_tables(struct zebra_vrf *);
     192             : extern void zebra_vxlan_cleanup_tables(struct zebra_vrf *);
     193             : extern void zebra_vxlan_init(void);
     194             : extern void zebra_vxlan_disable(void);
     195             : extern void zebra_vxlan_evpn_vrf_route_add(vrf_id_t vrf_id,
     196             :                                            const struct ethaddr *rmac,
     197             :                                            const struct ipaddr *ip,
     198             :                                            const struct prefix *host_prefix);
     199             : extern void zebra_vxlan_evpn_vrf_route_del(vrf_id_t vrf_id,
     200             :                                            struct ipaddr *vtep_ip,
     201             :                                            struct prefix *host_prefix);
     202             : extern int zebra_vxlan_clear_dup_detect_vni_mac(struct zebra_vrf *zvrf,
     203             :                                                 vni_t vni,
     204             :                                                 struct ethaddr *macaddr,
     205             :                                                 char *errmsg,
     206             :                                                 size_t errmsg_len);
     207             : extern int zebra_vxlan_clear_dup_detect_vni_ip(struct zebra_vrf *zvrf,
     208             :                                                vni_t vni, struct ipaddr *ip,
     209             :                                                char *errmsg, size_t errmsg_len);
     210             : extern int zebra_vxlan_clear_dup_detect_vni_all(struct zebra_vrf *zvrf);
     211             : extern int zebra_vxlan_clear_dup_detect_vni(struct zebra_vrf *zvrf, vni_t vni);
     212             : extern void zebra_vxlan_handle_result(struct zebra_dplane_ctx *ctx);
     213             : 
     214             : extern void zebra_evpn_init(void);
     215             : extern void zebra_vxlan_macvlan_up(struct interface *ifp);
     216             : extern void zebra_vxlan_macvlan_down(struct interface *ifp);
     217             : extern int vni_list_cmp(void *p1, void *p2);
     218             : extern int zebra_vxlan_dp_network_mac_add(struct interface *ifp,
     219             :                                           struct interface *br_if,
     220             :                                           struct ethaddr *macaddr, vlanid_t vid,
     221             :                                           uint32_t nhg_id, bool sticky,
     222             :                                           bool dp_static);
     223             : extern int zebra_vxlan_dp_network_mac_del(struct interface *ifp,
     224             :                                           struct interface *br_if,
     225             :                                           struct ethaddr *macaddr,
     226             :                                           vlanid_t vid);
     227             : 
     228             : extern void zebra_vxlan_set_accept_bgp_seq(bool set);
     229             : extern bool zebra_vxlan_get_accept_bgp_seq(void);
     230             : 
     231             : #ifdef __cplusplus
     232             : }
     233             : #endif
     234             : 
     235             : #endif /* _ZEBRA_VXLAN_H */

Generated by: LCOV version v1.16-topotato