]> git.proxmox.com Git - mirror_frr.git/blame - zebra/zebra_evpn_vxlan.h
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / zebra / zebra_evpn_vxlan.h
CommitLineData
acddc0ed 1// SPDX-License-Identifier: GPL-2.0-or-later
8b5fdf2e
PR
2/*
3 * Zebra EVPN for VxLAN code
4 * Copyright (C) 2016, 2017 Cumulus Networks, Inc.
8b5fdf2e
PR
5 */
6
7/* Get the VRR interface for SVI if any */
8static inline struct interface *
9zebra_get_vrr_intf_for_svi(struct interface *ifp)
10{
11 struct zebra_vrf *zvrf = NULL;
12 struct interface *tmp_if = NULL;
13 struct zebra_if *zif = NULL;
14
096f7609 15 zvrf = ifp->vrf->info;
8b5fdf2e
PR
16 assert(zvrf);
17
18 FOR_ALL_INTERFACES (zvrf->vrf, tmp_if) {
19 zif = tmp_if->info;
20 if (!zif)
21 continue;
22
23 if (!IS_ZEBRA_IF_MACVLAN(tmp_if))
24 continue;
25
26 if (zif->link == ifp)
27 return tmp_if;
28 }
29
30 return NULL;
31}
32
33/* EVPN<=>vxlan_zif association */
f6371c34 34static inline void zevpn_vxlan_if_set(struct zebra_evpn *zevpn,
8b5fdf2e
PR
35 struct interface *ifp, bool set)
36{
37 struct zebra_if *zif;
38
39 if (set) {
40 if (zevpn->vxlan_if == ifp)
41 return;
42 zevpn->vxlan_if = ifp;
43 } else {
44 if (!zevpn->vxlan_if)
45 return;
46 zevpn->vxlan_if = NULL;
47 }
48
49 if (ifp)
50 zif = ifp->info;
51 else
52 zif = NULL;
53
54 zebra_evpn_vxl_evpn_set(zif, zevpn, set);
55}
efde4f25
SR
56
57/* EVPN<=>Bridge interface association */
58static inline void zevpn_bridge_if_set(struct zebra_evpn *zevpn,
59 struct interface *ifp, bool set)
60{
61 if (set) {
62 if (zevpn->bridge_if == ifp)
63 return;
64 zevpn->bridge_if = ifp;
65 } else {
66 if (!zevpn->bridge_if)
67 return;
68 zevpn->bridge_if = NULL;
69 }
70}
71
72/* EVPN<=>Bridge interface association */
73static inline void zl3vni_bridge_if_set(struct zebra_l3vni *zl3vni,
74 struct interface *ifp, bool set)
75{
76 if (set) {
77 if (zl3vni->bridge_if == ifp)
78 return;
79 zl3vni->bridge_if = ifp;
80 } else {
81 if (!zl3vni->bridge_if)
82 return;
83 zl3vni->bridge_if = NULL;
84 }
85}