mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-25 03:55:09 +08:00
f266a683a4
This patch removes the separate paths for frames coming from the outside, and frames sent from the HSR device, and instead makes all frames go through hsr_forward_skb() in hsr_forward.c. This greatly improves code readability and also opens up the possibility for future support of the HSR Interlink device that is the basis for HSR RedBoxes and HSR QuadBoxes, as well as VLAN compatibility. Other improvements: * A reduction in the number of times an skb is copied on machines without HAVE_EFFICIENT_UNALIGNED_ACCESS, which improves throughput somewhat. * Headers are now created using the standard eth_header(), and using the standard hard_header_len. * Each HSR slave now gets its own private skb, so slave-specific fields can be correctly set. Signed-off-by: Arvid Brodin <arvid.brodin@alten.se> Signed-off-by: David S. Miller <davem@davemloft.net>
39 lines
1.1 KiB
C
39 lines
1.1 KiB
C
/* Copyright 2011-2014 Autronica Fire and Security AS
|
|
*
|
|
* This program 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 of the License, or (at your option)
|
|
* any later version.
|
|
*
|
|
* Author(s):
|
|
* 2011-2014 Arvid Brodin, arvid.brodin@alten.se
|
|
*/
|
|
|
|
#ifndef __HSR_SLAVE_H
|
|
#define __HSR_SLAVE_H
|
|
|
|
#include <linux/skbuff.h>
|
|
#include <linux/netdevice.h>
|
|
#include <linux/rtnetlink.h>
|
|
#include "hsr_main.h"
|
|
|
|
int hsr_add_port(struct hsr_priv *hsr, struct net_device *dev,
|
|
enum hsr_port_type pt);
|
|
void hsr_del_port(struct hsr_port *port);
|
|
bool hsr_port_exists(const struct net_device *dev);
|
|
|
|
static inline struct hsr_port *hsr_port_get_rtnl(const struct net_device *dev)
|
|
{
|
|
ASSERT_RTNL();
|
|
return hsr_port_exists(dev) ?
|
|
rtnl_dereference(dev->rx_handler_data) : NULL;
|
|
}
|
|
|
|
static inline struct hsr_port *hsr_port_get_rcu(const struct net_device *dev)
|
|
{
|
|
return hsr_port_exists(dev) ?
|
|
rcu_dereference(dev->rx_handler_data) : NULL;
|
|
}
|
|
|
|
#endif /* __HSR_SLAVE_H */
|