#include <linux/mrp_bridge.h>
#include "br_private_mrp.h"
static const u8 mrp_test_dmac[ETH_ALEN] = …;
static const u8 mrp_in_test_dmac[ETH_ALEN] = …;
static int br_mrp_process(struct net_bridge_port *p, struct sk_buff *skb);
static struct br_frame_type mrp_frame_type __read_mostly = …;
static bool br_mrp_is_ring_port(struct net_bridge_port *p_port,
struct net_bridge_port *s_port,
struct net_bridge_port *port)
{ … }
static bool br_mrp_is_in_port(struct net_bridge_port *i_port,
struct net_bridge_port *port)
{ … }
static struct net_bridge_port *br_mrp_get_port(struct net_bridge *br,
u32 ifindex)
{ … }
static struct br_mrp *br_mrp_find_id(struct net_bridge *br, u32 ring_id)
{ … }
static struct br_mrp *br_mrp_find_in_id(struct net_bridge *br, u32 in_id)
{ … }
static bool br_mrp_unique_ifindex(struct net_bridge *br, u32 ifindex)
{ … }
static struct br_mrp *br_mrp_find_port(struct net_bridge *br,
struct net_bridge_port *p)
{ … }
static int br_mrp_next_seq(struct br_mrp *mrp)
{ … }
static struct sk_buff *br_mrp_skb_alloc(struct net_bridge_port *p,
const u8 *src, const u8 *dst)
{ … }
static void br_mrp_skb_tlv(struct sk_buff *skb,
enum br_mrp_tlv_header_type type,
u8 length)
{ … }
static void br_mrp_skb_common(struct sk_buff *skb, struct br_mrp *mrp)
{ … }
static struct sk_buff *br_mrp_alloc_test_skb(struct br_mrp *mrp,
struct net_bridge_port *p,
enum br_mrp_port_role_type port_role)
{ … }
static struct sk_buff *br_mrp_alloc_in_test_skb(struct br_mrp *mrp,
struct net_bridge_port *p,
enum br_mrp_port_role_type port_role)
{ … }
static void br_mrp_test_work_expired(struct work_struct *work)
{ … }
static void br_mrp_in_test_work_expired(struct work_struct *work)
{ … }
static void br_mrp_del_impl(struct net_bridge *br, struct br_mrp *mrp)
{ … }
int br_mrp_add(struct net_bridge *br, struct br_mrp_instance *instance)
{ … }
void br_mrp_port_del(struct net_bridge *br, struct net_bridge_port *p)
{ … }
int br_mrp_del(struct net_bridge *br, struct br_mrp_instance *instance)
{ … }
int br_mrp_set_port_state(struct net_bridge_port *p,
enum br_mrp_port_state_type state)
{ … }
int br_mrp_set_port_role(struct net_bridge_port *p,
enum br_mrp_port_role_type role)
{ … }
int br_mrp_set_ring_state(struct net_bridge *br,
struct br_mrp_ring_state *state)
{ … }
int br_mrp_set_ring_role(struct net_bridge *br,
struct br_mrp_ring_role *role)
{ … }
int br_mrp_start_test(struct net_bridge *br,
struct br_mrp_start_test *test)
{ … }
int br_mrp_set_in_state(struct net_bridge *br, struct br_mrp_in_state *state)
{ … }
int br_mrp_set_in_role(struct net_bridge *br, struct br_mrp_in_role *role)
{ … }
int br_mrp_start_in_test(struct net_bridge *br,
struct br_mrp_start_in_test *in_test)
{ … }
static bool br_mrp_ring_frame(struct sk_buff *skb)
{ … }
static bool br_mrp_in_frame(struct sk_buff *skb)
{ … }
static void br_mrp_mrm_process(struct br_mrp *mrp, struct net_bridge_port *port,
struct sk_buff *skb)
{ … }
static bool br_mrp_test_better_than_own(struct br_mrp *mrp,
struct net_bridge *br,
const struct br_mrp_ring_test_hdr *hdr)
{ … }
static void br_mrp_mra_process(struct br_mrp *mrp, struct net_bridge *br,
struct net_bridge_port *port,
struct sk_buff *skb)
{ … }
static bool br_mrp_mim_process(struct br_mrp *mrp, struct net_bridge_port *port,
struct sk_buff *skb)
{ … }
static u8 br_mrp_get_frame_type(struct sk_buff *skb)
{ … }
static bool br_mrp_mrm_behaviour(struct br_mrp *mrp)
{ … }
static bool br_mrp_mrc_behaviour(struct br_mrp *mrp)
{ … }
static int br_mrp_rcv(struct net_bridge_port *p,
struct sk_buff *skb, struct net_device *dev)
{ … }
static int br_mrp_process(struct net_bridge_port *p, struct sk_buff *skb)
{ … }
bool br_mrp_enabled(struct net_bridge *br)
{ … }