]>
Commit | Line | Data |
---|---|---|
6675513d | 1 | /* |
2 | * Zebra Layer-2 interface Data structures and definitions | |
3 | * Copyright (C) 2016, 2017 Cumulus Networks, Inc. | |
4 | * | |
5 | * This file is part of FRR. | |
6 | * | |
7 | * FRR is free software; you can redistribute it and/or modify it | |
8 | * under the terms of the GNU General Public License as published by the | |
9 | * Free Software Foundation; either version 2, or (at your option) any | |
10 | * later version. | |
11 | * | |
12 | * FRR is distributed in the hope that it will be useful, but | |
13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 | * General Public License for more details. | |
16 | * | |
17 | * You should have received a copy of the GNU General Public License | |
18 | * along with FRR; see the file COPYING. If not, write to the Free | |
19 | * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | |
20 | * 02111-1307, USA. | |
21 | */ | |
22 | ||
23 | #ifndef _ZEBRA_L2_H | |
24 | #define _ZEBRA_L2_H | |
25 | ||
26 | #include <zebra.h> | |
27 | ||
28 | #include "if.h" | |
29 | #include "vlan.h" | |
30 | #include "vxlan.h" | |
31 | ||
51e94aa7 EDP |
32 | #ifdef __cplusplus |
33 | extern "C" { | |
34 | #endif | |
35 | ||
6675513d | 36 | /* zebra L2 interface information - bridge slave (linkage to bridge) */ |
d62a17ae | 37 | struct zebra_l2info_brslave { |
38 | ifindex_t bridge_ifindex; /* Bridge Master */ | |
39 | struct interface *br_if; /* Pointer to master */ | |
6675513d | 40 | }; |
41 | ||
42 | /* zebra L2 interface information - bridge interface */ | |
d62a17ae | 43 | struct zebra_l2info_bridge { |
d7c0a89a | 44 | uint8_t vlan_aware; /* VLAN-aware bridge? */ |
6675513d | 45 | }; |
46 | ||
47 | /* zebra L2 interface information - VLAN interface */ | |
d62a17ae | 48 | struct zebra_l2info_vlan { |
49 | vlanid_t vid; /* VLAN id */ | |
6675513d | 50 | }; |
51 | ||
52 | /* zebra L2 interface information - VXLAN interface */ | |
d62a17ae | 53 | struct zebra_l2info_vxlan { |
54 | vni_t vni; /* VNI */ | |
55 | struct in_addr vtep_ip; /* Local tunnel IP */ | |
56 | vlanid_t access_vlan; /* Access VLAN - for VLAN-aware bridge. */ | |
3d434f5c | 57 | struct in_addr mcast_grp; |
6675513d | 58 | }; |
59 | ||
b9368db9 DD |
60 | struct zebra_l2info_bondslave { |
61 | ifindex_t bond_ifindex; /* Bridge Master */ | |
62 | struct interface *bond_if; /* Pointer to master */ | |
63 | }; | |
64 | ||
d62a17ae | 65 | union zebra_l2if_info { |
66 | struct zebra_l2info_bridge br; | |
67 | struct zebra_l2info_vlan vl; | |
68 | struct zebra_l2info_vxlan vxl; | |
6675513d | 69 | }; |
70 | ||
71 | /* NOTE: These macros are to be invoked only in the "correct" context. | |
72 | * IOW, the macro VNI_FROM_ZEBRA_IF() will assume the interface is | |
73 | * of type ZEBRA_IF_VXLAN. | |
74 | */ | |
75 | #define VNI_FROM_ZEBRA_IF(zif) (zif)->l2info.vxl.vni | |
76 | #define VLAN_ID_FROM_ZEBRA_IF(zif) (zif)->l2info.vl.vid | |
77 | ||
d62a17ae | 78 | #define IS_ZEBRA_IF_BRIDGE_VLAN_AWARE(zif) ((zif)->l2info.br.vlan_aware == 1) |
6675513d | 79 | |
d62a17ae | 80 | extern void zebra_l2_map_slave_to_bridge(struct zebra_l2info_brslave *br_slave); |
81 | extern void | |
82 | zebra_l2_unmap_slave_from_bridge(struct zebra_l2info_brslave *br_slave); | |
b9368db9 | 83 | extern void |
ea7ec261 | 84 | zebra_l2_map_slave_to_bond(struct zebra_l2info_bondslave *bond_slave, vrf_id_t); |
b9368db9 DD |
85 | extern void |
86 | zebra_l2_unmap_slave_from_bond(struct zebra_l2info_bondslave *bond_slave); | |
d62a17ae | 87 | extern void zebra_l2_bridge_add_update(struct interface *ifp, |
88 | struct zebra_l2info_bridge *bridge_info, | |
89 | int add); | |
90 | extern void zebra_l2_bridge_del(struct interface *ifp); | |
91 | extern void zebra_l2_vlanif_update(struct interface *ifp, | |
92 | struct zebra_l2info_vlan *vlan_info); | |
93 | extern void zebra_l2_vxlanif_add_update(struct interface *ifp, | |
94 | struct zebra_l2info_vxlan *vxlan_info, | |
95 | int add); | |
96 | extern void zebra_l2_vxlanif_update_access_vlan(struct interface *ifp, | |
97 | vlanid_t access_vlan); | |
98 | extern void zebra_l2_vxlanif_del(struct interface *ifp); | |
99 | extern void zebra_l2if_update_bridge_slave(struct interface *ifp, | |
100 | ifindex_t bridge_ifindex); | |
6675513d | 101 | |
b9368db9 DD |
102 | extern void zebra_l2if_update_bond_slave(struct interface *ifp, |
103 | ifindex_t bond_ifindex); | |
51e94aa7 EDP |
104 | |
105 | #ifdef __cplusplus | |
106 | } | |
107 | #endif | |
108 | ||
6675513d | 109 | #endif /* _ZEBRA_L2_H */ |