mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-10-26 00:35:52 +00:00
This change set introduces data structure changes required for multiple vlan aware bridge functionality. A new structure zebra_l2_bridge_if encapsulates the vlan to access_bd association of the bridge. A vlan_table hash_table is used to record each instance of the vlan to access_bd of the bridge via zebra_l2_bridge_vlan structure. vxlan iftype derivation: netlink attribute IFLA_VXLAN_COLLECT_METADATA is used to derive the iftype of the vxlan device. If the attribute is present, then the vxlan interface is treated as single vxlan device, otherwise it would default to traditional vxlan device. zebra_vxlan_check_readd_vtep, zebra_vxlan_dp_network_mac_add/del is modified to be vni aware. mac_fdb_read_for_bridge - is modified to be (vlan, bridge) aware Signed-off-by: Sharath Ramamurthy <sramamurthy@nvidia.com>
117 lines
2.8 KiB
C
117 lines
2.8 KiB
C
/*
|
|
* Kernel routing table read by sysctl function.
|
|
* Copyright (C) 1997, 98 Kunihiro Ishiguro
|
|
*
|
|
* This file is part of GNU Zebra.
|
|
*
|
|
* GNU Zebra is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2, or (at your option) any
|
|
* later version.
|
|
*
|
|
* GNU Zebra is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; see the file COPYING; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#include <zebra.h>
|
|
|
|
#if !defined(GNU_LINUX)
|
|
|
|
#include "memory.h"
|
|
#include "log.h"
|
|
#include "vrf.h"
|
|
|
|
#include "zebra/rt.h"
|
|
#include "zebra/kernel_socket.h"
|
|
#include "zebra/zebra_pbr.h"
|
|
#include "zebra/zebra_tc.h"
|
|
#include "zebra/zebra_errors.h"
|
|
|
|
/* Kernel routing table read up by sysctl function. */
|
|
void route_read(struct zebra_ns *zns)
|
|
{
|
|
caddr_t buf, end, ref;
|
|
size_t bufsiz;
|
|
struct rt_msghdr *rtm;
|
|
|
|
#define MIBSIZ 6
|
|
int mib[MIBSIZ] = {CTL_NET, PF_ROUTE, 0, 0, NET_RT_DUMP, 0};
|
|
|
|
if (zns->ns_id != NS_DEFAULT)
|
|
return;
|
|
|
|
/* Get buffer size. */
|
|
if (sysctl(mib, MIBSIZ, NULL, &bufsiz, NULL, 0) < 0) {
|
|
flog_warn(EC_ZEBRA_SYSCTL_FAILED, "sysctl fail: %s",
|
|
safe_strerror(errno));
|
|
return;
|
|
}
|
|
|
|
/* Allocate buffer. */
|
|
ref = buf = XMALLOC(MTYPE_TMP, bufsiz);
|
|
|
|
/* Read routing table information by calling sysctl(). */
|
|
if (sysctl(mib, MIBSIZ, buf, &bufsiz, NULL, 0) < 0) {
|
|
flog_warn(EC_ZEBRA_SYSCTL_FAILED, "sysctl() fail by %s",
|
|
safe_strerror(errno));
|
|
XFREE(MTYPE_TMP, ref);
|
|
return;
|
|
}
|
|
|
|
for (end = buf + bufsiz; buf < end; buf += rtm->rtm_msglen) {
|
|
rtm = (struct rt_msghdr *)buf;
|
|
/* We must set RTF_DONE here, so rtm_read() doesn't ignore the
|
|
* message. */
|
|
SET_FLAG(rtm->rtm_flags, RTF_DONE);
|
|
rtm_read(rtm);
|
|
}
|
|
|
|
/* Free buffer. */
|
|
XFREE(MTYPE_TMP, ref);
|
|
|
|
return;
|
|
}
|
|
|
|
/* Only implemented for the netlink method. */
|
|
void macfdb_read(struct zebra_ns *zns)
|
|
{
|
|
}
|
|
|
|
void macfdb_read_for_bridge(struct zebra_ns *zns, struct interface *ifp,
|
|
struct interface *br_if, vlanid_t vid)
|
|
{
|
|
}
|
|
|
|
void macfdb_read_specific_mac(struct zebra_ns *zns, struct interface *br_if,
|
|
const struct ethaddr *mac, vlanid_t vid)
|
|
{
|
|
}
|
|
|
|
void neigh_read(struct zebra_ns *zns)
|
|
{
|
|
}
|
|
|
|
void neigh_read_for_vlan(struct zebra_ns *zns, struct interface *vlan_if)
|
|
{
|
|
}
|
|
|
|
void neigh_read_specific_ip(const struct ipaddr *ip, struct interface *vlan_if)
|
|
{
|
|
}
|
|
|
|
void kernel_read_pbr_rules(struct zebra_ns *zns)
|
|
{
|
|
}
|
|
|
|
void kernel_read_tc_qdisc(struct zebra_ns *zns)
|
|
{
|
|
}
|
|
|
|
#endif /* !defined(GNU_LINUX) */
|