]> git.proxmox.com Git - mirror_frr.git/blob - zebra/zebra_evpn_vxlan.h
zebra: Fix dp_out_queued counter to actually reflect real life
[mirror_frr.git] / zebra / zebra_evpn_vxlan.h
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * Zebra EVPN for VxLAN code
4 * Copyright (C) 2016, 2017 Cumulus Networks, Inc.
5 */
6
7 /* Get the VRR interface for SVI if any */
8 static inline struct interface *
9 zebra_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
15 zvrf = ifp->vrf->info;
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 */
34 static inline void zevpn_vxlan_if_set(struct zebra_evpn *zevpn,
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 }
56
57 /* EVPN<=>Bridge interface association */
58 static 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 */
73 static 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 }