]>
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 | ||
32 | /* zebra L2 interface information - bridge slave (linkage to bridge) */ | |
d62a17ae | 33 | struct zebra_l2info_brslave { |
34 | ifindex_t bridge_ifindex; /* Bridge Master */ | |
35 | struct interface *br_if; /* Pointer to master */ | |
6675513d | 36 | }; |
37 | ||
38 | /* zebra L2 interface information - bridge interface */ | |
d62a17ae | 39 | struct zebra_l2info_bridge { |
40 | u_char vlan_aware; /* VLAN-aware bridge? */ | |
6675513d | 41 | }; |
42 | ||
43 | /* zebra L2 interface information - VLAN interface */ | |
d62a17ae | 44 | struct zebra_l2info_vlan { |
45 | vlanid_t vid; /* VLAN id */ | |
6675513d | 46 | }; |
47 | ||
48 | /* zebra L2 interface information - VXLAN interface */ | |
d62a17ae | 49 | struct zebra_l2info_vxlan { |
50 | vni_t vni; /* VNI */ | |
51 | struct in_addr vtep_ip; /* Local tunnel IP */ | |
52 | vlanid_t access_vlan; /* Access VLAN - for VLAN-aware bridge. */ | |
6675513d | 53 | }; |
54 | ||
d62a17ae | 55 | union zebra_l2if_info { |
56 | struct zebra_l2info_bridge br; | |
57 | struct zebra_l2info_vlan vl; | |
58 | struct zebra_l2info_vxlan vxl; | |
6675513d | 59 | }; |
60 | ||
61 | /* NOTE: These macros are to be invoked only in the "correct" context. | |
62 | * IOW, the macro VNI_FROM_ZEBRA_IF() will assume the interface is | |
63 | * of type ZEBRA_IF_VXLAN. | |
64 | */ | |
65 | #define VNI_FROM_ZEBRA_IF(zif) (zif)->l2info.vxl.vni | |
66 | #define VLAN_ID_FROM_ZEBRA_IF(zif) (zif)->l2info.vl.vid | |
67 | ||
d62a17ae | 68 | #define IS_ZEBRA_IF_BRIDGE_VLAN_AWARE(zif) ((zif)->l2info.br.vlan_aware == 1) |
6675513d | 69 | |
9d303b37 | 70 | |
d62a17ae | 71 | extern void zebra_l2_map_slave_to_bridge(struct zebra_l2info_brslave *br_slave); |
72 | extern void | |
73 | zebra_l2_unmap_slave_from_bridge(struct zebra_l2info_brslave *br_slave); | |
74 | extern void zebra_l2_bridge_add_update(struct interface *ifp, | |
75 | struct zebra_l2info_bridge *bridge_info, | |
76 | int add); | |
77 | extern void zebra_l2_bridge_del(struct interface *ifp); | |
78 | extern void zebra_l2_vlanif_update(struct interface *ifp, | |
79 | struct zebra_l2info_vlan *vlan_info); | |
80 | extern void zebra_l2_vxlanif_add_update(struct interface *ifp, | |
81 | struct zebra_l2info_vxlan *vxlan_info, | |
82 | int add); | |
83 | extern void zebra_l2_vxlanif_update_access_vlan(struct interface *ifp, | |
84 | vlanid_t access_vlan); | |
85 | extern void zebra_l2_vxlanif_del(struct interface *ifp); | |
86 | extern void zebra_l2if_update_bridge_slave(struct interface *ifp, | |
87 | ifindex_t bridge_ifindex); | |
6675513d | 88 | |
89 | #endif /* _ZEBRA_L2_H */ |