#include <linux/cfm_bridge.h>
#include <uapi/linux/cfm_bridge.h>
#include "br_private_cfm.h"
static struct br_cfm_mep *br_mep_find(struct net_bridge *br, u32 instance)
{ … }
static struct br_cfm_mep *br_mep_find_ifindex(struct net_bridge *br,
u32 ifindex)
{ … }
static struct br_cfm_peer_mep *br_peer_mep_find(struct br_cfm_mep *mep,
u32 mepid)
{ … }
static struct net_bridge_port *br_mep_get_port(struct net_bridge *br,
u32 ifindex)
{ … }
static u32 interval_to_us(enum br_cfm_ccm_interval interval)
{ … }
static u32 interval_to_pdu(enum br_cfm_ccm_interval interval)
{ … }
static u32 pdu_to_interval(u32 value)
{ … }
static void ccm_rx_timer_start(struct br_cfm_peer_mep *peer_mep)
{ … }
static void br_cfm_notify(int event, const struct net_bridge_port *port)
{ … }
static void cc_peer_enable(struct br_cfm_peer_mep *peer_mep)
{ … }
static void cc_peer_disable(struct br_cfm_peer_mep *peer_mep)
{ … }
static struct sk_buff *ccm_frame_build(struct br_cfm_mep *mep,
const struct br_cfm_cc_ccm_tx_info *const tx_info)
{ … }
static void ccm_frame_tx(struct sk_buff *skb)
{ … }
static void ccm_tx_work_expired(struct work_struct *work)
{ … }
static void ccm_rx_work_expired(struct work_struct *work)
{ … }
static u32 ccm_tlv_extract(struct sk_buff *skb, u32 index,
struct br_cfm_peer_mep *peer_mep)
{ … }
static int br_cfm_frame_rx(struct net_bridge_port *port, struct sk_buff *skb)
{ … }
static struct br_frame_type cfm_frame_type __read_mostly = …;
int br_cfm_mep_create(struct net_bridge *br,
const u32 instance,
struct br_cfm_mep_create *const create,
struct netlink_ext_ack *extack)
{ … }
static void mep_delete_implementation(struct net_bridge *br,
struct br_cfm_mep *mep)
{ … }
int br_cfm_mep_delete(struct net_bridge *br,
const u32 instance,
struct netlink_ext_ack *extack)
{ … }
int br_cfm_mep_config_set(struct net_bridge *br,
const u32 instance,
const struct br_cfm_mep_config *const config,
struct netlink_ext_ack *extack)
{ … }
int br_cfm_cc_config_set(struct net_bridge *br,
const u32 instance,
const struct br_cfm_cc_config *const config,
struct netlink_ext_ack *extack)
{ … }
int br_cfm_cc_peer_mep_add(struct net_bridge *br, const u32 instance,
u32 mepid,
struct netlink_ext_ack *extack)
{ … }
int br_cfm_cc_peer_mep_remove(struct net_bridge *br, const u32 instance,
u32 mepid,
struct netlink_ext_ack *extack)
{ … }
int br_cfm_cc_rdi_set(struct net_bridge *br, const u32 instance,
const bool rdi, struct netlink_ext_ack *extack)
{ … }
int br_cfm_cc_ccm_tx(struct net_bridge *br, const u32 instance,
const struct br_cfm_cc_ccm_tx_info *const tx_info,
struct netlink_ext_ack *extack)
{ … }
int br_cfm_mep_count(struct net_bridge *br, u32 *count)
{ … }
int br_cfm_peer_mep_count(struct net_bridge *br, u32 *count)
{ … }
bool br_cfm_created(struct net_bridge *br)
{ … }
void br_cfm_port_del(struct net_bridge *br, struct net_bridge_port *port)
{ … }