@@ -25,7 +25,7 @@ static const struct nla_policy hsr_policy[IFLA_HSR_MAX + 1] = {
};
/* Here, it seems a netdevice has already been allocated for us, and the
- * hsr_dev_setup routine has been executed. Nice!
+ * hsr_prp_dev_setup routine has been executed. Nice!
*/
static int hsr_newlink(struct net *src_net, struct net_device *dev,
struct nlattr *tb[], struct nlattr *data[],
@@ -80,21 +80,22 @@ static int hsr_newlink(struct net *src_net, struct net_device *dev,
}
}
- return hsr_dev_finalize(dev, link, multicast_spec, hsr_version, extack);
+ return hsr_prp_dev_finalize(dev, link, multicast_spec, hsr_version,
+ extack);
}
static int hsr_fill_info(struct sk_buff *skb, const struct net_device *dev)
{
- struct hsr_priv *priv = netdev_priv(dev);
- struct hsr_port *port;
+ struct hsr_prp_priv *priv = netdev_priv(dev);
+ struct hsr_prp_port *port;
- port = hsr_prp_get_port(priv, HSR_PT_SLAVE_A);
+ port = hsr_prp_get_port(priv, HSR_PRP_PT_SLAVE_A);
if (port) {
if (nla_put_u32(skb, IFLA_HSR_SLAVE1, port->dev->ifindex))
goto nla_put_failure;
}
- port = hsr_prp_get_port(priv, HSR_PT_SLAVE_B);
+ port = hsr_prp_get_port(priv, HSR_PRP_PT_SLAVE_B);
if (port) {
if (nla_put_u32(skb, IFLA_HSR_SLAVE2, port->dev->ifindex))
goto nla_put_failure;
@@ -115,8 +116,8 @@ static struct rtnl_link_ops hsr_link_ops __read_mostly = {
.kind = "hsr",
.maxtype = IFLA_HSR_MAX,
.policy = hsr_policy,
- .priv_size = sizeof(struct hsr_priv),
- .setup = hsr_dev_setup,
+ .priv_size = sizeof(struct hsr_prp_priv),
+ .setup = hsr_prp_dev_setup,
.newlink = hsr_newlink,
.fill_info = hsr_fill_info,
};
@@ -142,12 +143,13 @@ static const struct genl_multicast_group hsr_mcgrps[] = {
* over one of the slave interfaces. This would indicate an open network ring
* (i.e. a link has failed somewhere).
*/
-void hsr_nl_ringerror(struct hsr_priv *priv, unsigned char addr[ETH_ALEN],
- struct hsr_port *port)
+void hsr_nl_ringerror(struct hsr_prp_priv *priv,
+ unsigned char addr[ETH_ALEN],
+ struct hsr_prp_port *port)
{
struct sk_buff *skb;
void *msg_head;
- struct hsr_port *master;
+ struct hsr_prp_port *master;
int res;
skb = genlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
@@ -177,7 +179,7 @@ void hsr_nl_ringerror(struct hsr_priv *priv, unsigned char addr[ETH_ALEN],
fail:
rcu_read_lock();
- master = hsr_prp_get_port(priv, HSR_PT_MASTER);
+ master = hsr_prp_get_port(priv, HSR_PRP_PT_MASTER);
netdev_warn(master->dev, "Could not send HSR ring error message\n");
rcu_read_unlock();
}
@@ -185,11 +187,12 @@ void hsr_nl_ringerror(struct hsr_priv *priv, unsigned char addr[ETH_ALEN],
/* This is called when we haven't heard from the node with MAC address addr for
* some time (just before the node is removed from the node table/list).
*/
-void hsr_nl_nodedown(struct hsr_priv *priv, unsigned char addr[ETH_ALEN])
+void hsr_nl_nodedown(struct hsr_prp_priv *priv,
+ unsigned char addr[ETH_ALEN])
{
struct sk_buff *skb;
void *msg_head;
- struct hsr_port *master;
+ struct hsr_prp_port *master;
int res;
skb = genlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
@@ -214,7 +217,7 @@ void hsr_nl_nodedown(struct hsr_priv *priv, unsigned char addr[ETH_ALEN])
fail:
rcu_read_lock();
- master = hsr_prp_get_port(priv, HSR_PT_MASTER);
+ master = hsr_prp_get_port(priv, HSR_PRP_PT_MASTER);
netdev_warn(master->dev, "Could not send HSR node down\n");
rcu_read_unlock();
}
@@ -236,9 +239,9 @@ static int hsr_get_node_status(struct sk_buff *skb_in, struct genl_info *info)
/* For sending */
struct sk_buff *skb_out;
void *msg_head;
- struct hsr_priv *priv;
- struct hsr_port *port;
- unsigned char hsr_node_addr_b[ETH_ALEN];
+ struct hsr_prp_priv *priv;
+ struct hsr_prp_port *port;
+ unsigned char node_addr_b[ETH_ALEN];
int hsr_node_if1_age;
u16 hsr_node_if1_seq;
int hsr_node_if2_age;
@@ -261,7 +264,7 @@ static int hsr_get_node_status(struct sk_buff *skb_in, struct genl_info *info)
nla_get_u32(info->attrs[HSR_A_IFINDEX]));
if (!hsr_dev)
goto rcu_unlock;
- if (!is_hsr_master(hsr_dev))
+ if (!is_hsr_prp_master(hsr_dev))
goto rcu_unlock;
/* Send reply */
@@ -284,15 +287,15 @@ static int hsr_get_node_status(struct sk_buff *skb_in, struct genl_info *info)
goto nla_put_failure;
priv = netdev_priv(hsr_dev);
- res = hsr_get_node_data(priv,
- (unsigned char *)
- nla_data(info->attrs[HSR_A_NODE_ADDR]),
- hsr_node_addr_b,
- &addr_b_ifindex,
- &hsr_node_if1_age,
- &hsr_node_if1_seq,
- &hsr_node_if2_age,
- &hsr_node_if2_seq);
+ res = hsr_prp_get_node_data(priv,
+ (unsigned char *)
+ nla_data(info->attrs[HSR_A_NODE_ADDR]),
+ node_addr_b,
+ &addr_b_ifindex,
+ &hsr_node_if1_age,
+ &hsr_node_if1_seq,
+ &hsr_node_if2_age,
+ &hsr_node_if2_seq);
if (res < 0)
goto nla_put_failure;
@@ -303,7 +306,7 @@ static int hsr_get_node_status(struct sk_buff *skb_in, struct genl_info *info)
if (addr_b_ifindex > -1) {
res = nla_put(skb_out, HSR_A_NODE_ADDR_B, ETH_ALEN,
- hsr_node_addr_b);
+ node_addr_b);
if (res < 0)
goto nla_put_failure;
@@ -319,7 +322,7 @@ static int hsr_get_node_status(struct sk_buff *skb_in, struct genl_info *info)
res = nla_put_u16(skb_out, HSR_A_IF1_SEQ, hsr_node_if1_seq);
if (res < 0)
goto nla_put_failure;
- port = hsr_prp_get_port(priv, HSR_PT_SLAVE_A);
+ port = hsr_prp_get_port(priv, HSR_PRP_PT_SLAVE_A);
if (port)
res = nla_put_u32(skb_out, HSR_A_IF1_IFINDEX,
port->dev->ifindex);
@@ -332,7 +335,7 @@ static int hsr_get_node_status(struct sk_buff *skb_in, struct genl_info *info)
res = nla_put_u16(skb_out, HSR_A_IF2_SEQ, hsr_node_if2_seq);
if (res < 0)
goto nla_put_failure;
- port = hsr_prp_get_port(priv, HSR_PT_SLAVE_B);
+ port = hsr_prp_get_port(priv, HSR_PRP_PT_SLAVE_B);
if (port)
res = nla_put_u32(skb_out, HSR_A_IF2_IFINDEX,
port->dev->ifindex);
@@ -367,8 +370,8 @@ static int hsr_get_node_list(struct sk_buff *skb_in, struct genl_info *info)
{
unsigned char addr[ETH_ALEN];
struct net_device *hsr_dev;
+ struct hsr_prp_priv *priv;
struct sk_buff *skb_out;
- struct hsr_priv *priv;
bool restart = false;
struct nlattr *na;
void *pos = NULL;
@@ -387,7 +390,7 @@ static int hsr_get_node_list(struct sk_buff *skb_in, struct genl_info *info)
nla_get_u32(info->attrs[HSR_A_IFINDEX]));
if (!hsr_dev)
goto rcu_unlock;
- if (!is_hsr_master(hsr_dev))
+ if (!is_hsr_prp_master(hsr_dev))
goto rcu_unlock;
restart:
@@ -415,7 +418,7 @@ static int hsr_get_node_list(struct sk_buff *skb_in, struct genl_info *info)
priv = netdev_priv(hsr_dev);
if (!pos)
- pos = hsr_get_next_node(priv, NULL, addr);
+ pos = hsr_prp_get_next_node(priv, NULL, addr);
while (pos) {
res = nla_put(skb_out, HSR_A_NODE_ADDR, ETH_ALEN, addr);
if (res < 0) {
@@ -428,7 +431,7 @@ static int hsr_get_node_list(struct sk_buff *skb_in, struct genl_info *info)
}
goto nla_put_failure;
}
- pos = hsr_get_next_node(priv, pos, addr);
+ pos = hsr_prp_get_next_node(priv, pos, addr);
}
rcu_read_unlock();
@@ -495,7 +498,7 @@ int __init hsr_netlink_init(void)
if (rc)
goto fail_genl_register_family;
- hsr_debugfs_create_root();
+ hsr_prp_debugfs_create_root();
return 0;
fail_genl_register_family:
@@ -12,15 +12,17 @@
#include <linux/module.h>
#include <uapi/linux/hsr_netlink.h>
-struct hsr_priv;
-struct hsr_port;
+struct hsr_prp_priv;
+struct hsr_prp_port;
int __init hsr_netlink_init(void);
void __exit hsr_netlink_exit(void);
-void hsr_nl_ringerror(struct hsr_priv *hsr, unsigned char addr[ETH_ALEN],
- struct hsr_port *port);
-void hsr_nl_nodedown(struct hsr_priv *hsr, unsigned char addr[ETH_ALEN]);
+void hsr_nl_ringerror(struct hsr_prp_priv *priv,
+ unsigned char addr[ETH_ALEN],
+ struct hsr_prp_port *port);
+void hsr_nl_nodedown(struct hsr_prp_priv *priv,
+ unsigned char addr[ETH_ALEN]);
void hsr_nl_framedrop(int dropcount, int dev_idx);
void hsr_nl_linkdown(int dev_idx);
@@ -20,7 +20,7 @@
#include "hsr_prp_main.h"
#include "hsr_prp_framereg.h"
-static struct dentry *hsr_debugfs_root_dir;
+static struct dentry *hsr_prp_debugfs_root_dir;
static void print_mac_address(struct seq_file *sfp, unsigned char *mac)
{
@@ -28,12 +28,12 @@ static void print_mac_address(struct seq_file *sfp, unsigned char *mac)
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
}
-/* hsr_node_table_show - Formats and prints node_table entries */
+/* hsr_prp_node_table_show - Formats and prints node_table entries */
static int
-hsr_node_table_show(struct seq_file *sfp, void *data)
+hsr_prp_node_table_show(struct seq_file *sfp, void *data)
{
- struct hsr_priv *priv = (struct hsr_priv *)sfp->private;
- struct hsr_node *node;
+ struct hsr_prp_priv *priv = (struct hsr_prp_priv *)sfp->private;
+ struct hsr_prp_node *node;
seq_puts(sfp, "Node Table entries\n");
seq_puts(sfp, "MAC-Address-A, MAC-Address-B, time_in[A], ");
@@ -41,62 +41,62 @@ hsr_node_table_show(struct seq_file *sfp, void *data)
rcu_read_lock();
list_for_each_entry_rcu(node, &priv->node_db, mac_list) {
/* skip self node */
- if (hsr_addr_is_self(priv, node->macaddress_A))
+ if (hsr_prp_addr_is_self(priv, node->macaddress_A))
continue;
print_mac_address(sfp, &node->macaddress_A[0]);
seq_puts(sfp, " ");
print_mac_address(sfp, &node->macaddress_B[0]);
- seq_printf(sfp, "0x%lx, ", node->time_in[HSR_PT_SLAVE_A]);
- seq_printf(sfp, "0x%lx ", node->time_in[HSR_PT_SLAVE_B]);
+ seq_printf(sfp, "0x%lx, ", node->time_in[HSR_PRP_PT_SLAVE_A]);
+ seq_printf(sfp, "0x%lx ", node->time_in[HSR_PRP_PT_SLAVE_B]);
seq_printf(sfp, "0x%x\n", node->addr_B_port);
}
rcu_read_unlock();
return 0;
}
-/* hsr_node_table_open - Open the node_table file
+/* hsr_prp_node_table_open - Open the node_table file
*
* Description:
* This routine opens a debugfs file node_table of specific hsr device
*/
static int
-hsr_node_table_open(struct inode *inode, struct file *filp)
+hsr_prp_node_table_open(struct inode *inode, struct file *filp)
{
- return single_open(filp, hsr_node_table_show, inode->i_private);
+ return single_open(filp, hsr_prp_node_table_show, inode->i_private);
}
-void hsr_debugfs_rename(struct net_device *dev)
+void hsr_prp_debugfs_rename(struct net_device *dev)
{
- struct hsr_priv *priv = netdev_priv(dev);
+ struct hsr_prp_priv *priv = netdev_priv(dev);
struct dentry *d;
- d = debugfs_rename(hsr_debugfs_root_dir, priv->node_tbl_root,
- hsr_debugfs_root_dir, dev->name);
+ d = debugfs_rename(hsr_prp_debugfs_root_dir, priv->node_tbl_root,
+ hsr_prp_debugfs_root_dir, dev->name);
if (IS_ERR(d))
netdev_warn(dev, "failed to rename\n");
else
priv->node_tbl_root = d;
}
-static const struct file_operations hsr_fops = {
- .open = hsr_node_table_open,
+static const struct file_operations hsr_prp_fops = {
+ .open = hsr_prp_node_table_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
-/* hsr_debugfs_init - create hsr node_table file for dumping
+/* hsr_prp_debugfs_init - create hsr node_table file for dumping
* the node table
*
* Description:
* When debugfs is configured this routine sets up the node_table file per
* hsr device for dumping the node_table entries
*/
-void hsr_debugfs_init(struct hsr_priv *priv, struct net_device *hsr_dev)
+void hsr_prp_debugfs_init(struct hsr_prp_priv *priv, struct net_device *hsr_dev)
{
struct dentry *de = NULL;
- de = debugfs_create_dir(hsr_dev->name, hsr_debugfs_root_dir);
+ de = debugfs_create_dir(hsr_dev->name, hsr_prp_debugfs_root_dir);
if (IS_ERR(de)) {
pr_err("Cannot create hsr debugfs directory\n");
return;
@@ -106,7 +106,7 @@ void hsr_debugfs_init(struct hsr_priv *priv, struct net_device *hsr_dev)
de = debugfs_create_file("node_table", S_IFREG | 0444,
priv->node_tbl_root, priv,
- &hsr_fops);
+ &hsr_prp_fops);
if (IS_ERR(de)) {
pr_err("Cannot create hsr node_table file\n");
debugfs_remove(priv->node_tbl_root);
@@ -115,30 +115,30 @@ void hsr_debugfs_init(struct hsr_priv *priv, struct net_device *hsr_dev)
}
}
-/* hsr_debugfs_term - Tear down debugfs intrastructure
+/* hsr_prp_debugfs_term - Tear down debugfs intrastructure
*
* Description:
* When Debufs is configured this routine removes debugfs file system
* elements that are specific to hsr
*/
void
-hsr_debugfs_term(struct hsr_priv *priv)
+hsr_prp_debugfs_term(struct hsr_prp_priv *priv)
{
debugfs_remove_recursive(priv->node_tbl_root);
priv->node_tbl_root = NULL;
}
-void hsr_debugfs_create_root(void)
+void hsr_prp_debugfs_create_root(void)
{
- hsr_debugfs_root_dir = debugfs_create_dir("hsr", NULL);
- if (IS_ERR(hsr_debugfs_root_dir)) {
- pr_err("Cannot create hsr debugfs root directory\n");
- hsr_debugfs_root_dir = NULL;
+ hsr_prp_debugfs_root_dir = debugfs_create_dir("hsr-prp", NULL);
+ if (IS_ERR(hsr_prp_debugfs_root_dir)) {
+ pr_err("Cannot create hsr-prp debugfs root directory\n");
+ hsr_prp_debugfs_root_dir = NULL;
}
}
-void hsr_debugfs_remove_root(void)
+void hsr_prp_debugfs_remove_root(void)
{
/* debugfs_remove() internally checks NULL and ERROR */
- debugfs_remove(hsr_debugfs_root_dir);
+ debugfs_remove(hsr_prp_debugfs_root_dir);
}
@@ -29,7 +29,7 @@ static bool is_slave_up(struct net_device *dev)
return dev && is_admin_up(dev) && netif_oper_up(dev);
}
-static void __hsr_set_operstate(struct net_device *dev, int transition)
+static void __hsr_prp_set_operstate(struct net_device *dev, int transition)
{
write_lock_bh(&dev_base_lock);
if (dev->operstate != transition) {
@@ -41,27 +41,27 @@ static void __hsr_set_operstate(struct net_device *dev, int transition)
}
}
-static void hsr_set_operstate(struct hsr_port *master, bool has_carrier)
+static void hsr_prp_set_operstate(struct hsr_prp_port *master, bool has_carrier)
{
if (!is_admin_up(master->dev)) {
- __hsr_set_operstate(master->dev, IF_OPER_DOWN);
+ __hsr_prp_set_operstate(master->dev, IF_OPER_DOWN);
return;
}
if (has_carrier)
- __hsr_set_operstate(master->dev, IF_OPER_UP);
+ __hsr_prp_set_operstate(master->dev, IF_OPER_UP);
else
- __hsr_set_operstate(master->dev, IF_OPER_LOWERLAYERDOWN);
+ __hsr_prp_set_operstate(master->dev, IF_OPER_LOWERLAYERDOWN);
}
-static bool hsr_check_carrier(struct hsr_port *master)
+static bool hsr_prp_check_carrier(struct hsr_prp_port *master)
{
- struct hsr_port *port;
+ struct hsr_prp_port *port;
ASSERT_RTNL();
- hsr_for_each_port(master->priv, port) {
- if (port->type != HSR_PT_MASTER && is_slave_up(port->dev)) {
+ hsr_prp_for_each_port(master->priv, port) {
+ if (port->type != HSR_PRP_PT_MASTER && is_slave_up(port->dev)) {
netif_carrier_on(master->dev);
return true;
}
@@ -72,65 +72,66 @@ static bool hsr_check_carrier(struct hsr_port *master)
return false;
}
-static void hsr_check_announce(struct net_device *hsr_dev,
- unsigned char old_operstate)
+static void hsr_prp_check_announce(struct net_device *dev,
+ unsigned char old_operstate)
{
- struct hsr_priv *priv;
+ struct hsr_prp_priv *priv;
- priv = netdev_priv(hsr_dev);
+ priv = netdev_priv(dev);
- if (hsr_dev->operstate == IF_OPER_UP && old_operstate != IF_OPER_UP) {
+ if (dev->operstate == IF_OPER_UP && old_operstate != IF_OPER_UP) {
/* Went up */
priv->announce_count = 0;
mod_timer(&priv->announce_timer,
- jiffies + msecs_to_jiffies(HSR_ANNOUNCE_INTERVAL));
+ jiffies +
+ msecs_to_jiffies(HSR_PRP_ANNOUNCE_INTERVAL));
}
- if (hsr_dev->operstate != IF_OPER_UP && old_operstate == IF_OPER_UP)
+ if (dev->operstate != IF_OPER_UP && old_operstate == IF_OPER_UP)
/* Went down */
del_timer(&priv->announce_timer);
}
-void hsr_check_carrier_and_operstate(struct hsr_priv *priv)
+void hsr_prp_check_carrier_and_operstate(struct hsr_prp_priv *priv)
{
- struct hsr_port *master;
+ struct hsr_prp_port *master;
unsigned char old_operstate;
bool has_carrier;
- master = hsr_prp_get_port(priv, HSR_PT_MASTER);
+ master = hsr_prp_get_port(priv, HSR_PRP_PT_MASTER);
/* netif_stacked_transfer_operstate() cannot be used here since
* it doesn't set IF_OPER_LOWERLAYERDOWN (?)
*/
old_operstate = master->dev->operstate;
- has_carrier = hsr_check_carrier(master);
- hsr_set_operstate(master, has_carrier);
- hsr_check_announce(master->dev, old_operstate);
+ has_carrier = hsr_prp_check_carrier(master);
+ hsr_prp_set_operstate(master, has_carrier);
+ hsr_prp_check_announce(master->dev, old_operstate);
}
-int hsr_get_max_mtu(struct hsr_priv *priv)
+int hsr_prp_get_max_mtu(struct hsr_prp_priv *priv)
{
unsigned int mtu_max;
- struct hsr_port *port;
+ struct hsr_prp_port *port;
mtu_max = ETH_DATA_LEN;
- hsr_for_each_port(priv, port)
- if (port->type != HSR_PT_MASTER)
+ hsr_prp_for_each_port(priv, port)
+ if (port->type != HSR_PRP_PT_MASTER)
mtu_max = min(port->dev->mtu, mtu_max);
- if (mtu_max < HSR_HLEN)
+ if (mtu_max < HSR_PRP_HLEN)
return 0;
- return mtu_max - HSR_HLEN;
+ return mtu_max - HSR_PRP_HLEN;
}
-static int hsr_dev_change_mtu(struct net_device *dev, int new_mtu)
+static int hsr_prp_dev_change_mtu(struct net_device *dev, int new_mtu)
{
- struct hsr_priv *priv;
+ struct hsr_prp_priv *priv;
priv = netdev_priv(dev);
- if (new_mtu > hsr_get_max_mtu(priv)) {
- netdev_info(dev, "A HSR master's MTU cannot be greater than the smallest MTU of its slaves minus the HSR Tag length (%d octets).\n",
- HSR_HLEN);
+ if (new_mtu > hsr_prp_get_max_mtu(priv)) {
+ netdev_info(dev, "A HSR/PRP master's MTU cannot be greater than the smallest MTU of its slaves minus the HSR Tag length (%d octets).\n",
+ HSR_PRP_HLEN);
return -EINVAL;
}
@@ -139,30 +140,30 @@ static int hsr_dev_change_mtu(struct net_device *dev, int new_mtu)
return 0;
}
-static int hsr_dev_open(struct net_device *dev)
+static int hsr_prp_dev_open(struct net_device *dev)
{
- struct hsr_priv *priv;
- struct hsr_port *port;
+ struct hsr_prp_priv *priv;
+ struct hsr_prp_port *port;
char designation;
priv = netdev_priv(dev);
designation = '\0';
- hsr_for_each_port(priv, port) {
- if (port->type == HSR_PT_MASTER)
+ hsr_prp_for_each_port(priv, port) {
+ if (port->type == HSR_PRP_PT_MASTER)
continue;
switch (port->type) {
- case HSR_PT_SLAVE_A:
+ case HSR_PRP_PT_SLAVE_A:
designation = 'A';
break;
- case HSR_PT_SLAVE_B:
+ case HSR_PRP_PT_SLAVE_B:
designation = 'B';
break;
default:
designation = '?';
}
if (!is_slave_up(port->dev))
- netdev_warn(dev, "Slave %c (%s) is not up; please bring it up to get a fully working HSR network\n",
+ netdev_warn(dev, "Slave %c (%s) is not up; please bring it up to get a fully working HSR/PRP network\n",
designation, port->dev->name);
}
@@ -172,17 +173,17 @@ static int hsr_dev_open(struct net_device *dev)
return 0;
}
-static int hsr_dev_close(struct net_device *dev)
+static int hsr_prp_dev_close(struct net_device *dev)
{
/* Nothing to do here. */
return 0;
}
-static netdev_features_t hsr_features_recompute(struct hsr_priv *priv,
- netdev_features_t features)
+static netdev_features_t hsr_prp_features_recompute(struct hsr_prp_priv *priv,
+ netdev_features_t features)
{
netdev_features_t mask;
- struct hsr_port *port;
+ struct hsr_prp_port *port;
mask = features;
@@ -194,7 +195,7 @@ static netdev_features_t hsr_features_recompute(struct hsr_priv *priv,
* may become enabled.
*/
features &= ~NETIF_F_ONE_FOR_ALL;
- hsr_for_each_port(priv, port)
+ hsr_prp_for_each_port(priv, port)
features = netdev_increment_features(features,
port->dev->features,
mask);
@@ -202,23 +203,23 @@ static netdev_features_t hsr_features_recompute(struct hsr_priv *priv,
return features;
}
-static netdev_features_t hsr_fix_features(struct net_device *dev,
- netdev_features_t features)
+static netdev_features_t hsr_prp_fix_features(struct net_device *dev,
+ netdev_features_t features)
{
- struct hsr_priv *priv = netdev_priv(dev);
+ struct hsr_prp_priv *priv = netdev_priv(dev);
- return hsr_features_recompute(priv, features);
+ return hsr_prp_features_recompute(priv, features);
}
-static int hsr_dev_xmit(struct sk_buff *skb, struct net_device *dev)
+static int hsr_prp_dev_xmit(struct sk_buff *skb, struct net_device *dev)
{
- struct hsr_priv *priv = netdev_priv(dev);
- struct hsr_port *master;
+ struct hsr_prp_priv *priv = netdev_priv(dev);
+ struct hsr_prp_port *master;
- master = hsr_prp_get_port(priv, HSR_PT_MASTER);
+ master = hsr_prp_get_port(priv, HSR_PRP_PT_MASTER);
if (master) {
skb->dev = master->dev;
- hsr_forward_skb(skb, master);
+ hsr_prp_forward_skb(skb, master);
} else {
atomic_long_inc(&dev->tx_dropped);
dev_kfree_skb_any(skb);
@@ -226,26 +227,26 @@ static int hsr_dev_xmit(struct sk_buff *skb, struct net_device *dev)
return NETDEV_TX_OK;
}
-static const struct header_ops hsr_header_ops = {
+static const struct header_ops hsr_prp_header_ops = {
.create = eth_header,
.parse = eth_header_parse,
};
-static void send_hsr_supervision_frame(struct hsr_port *master,
- u8 type, u8 hsr_ver)
+static void send_hsr_prp_supervision_frame(struct hsr_prp_port *master,
+ u8 type, u8 proto_ver)
{
struct sk_buff *skb;
int hlen, tlen;
struct hsr_tag *hsr_tag;
- struct hsr_sup_tag *hsr_stag;
- struct hsr_sup_payload *hsr_sp;
+ struct hsr_prp_sup_tag *hsr_stag;
+ struct hsr_prp_sup_payload *hsr_sp;
unsigned long irqflags;
hlen = LL_RESERVED_SPACE(master->dev);
tlen = master->dev->needed_tailroom;
skb = dev_alloc_skb(sizeof(struct hsr_tag) +
- sizeof(struct hsr_sup_tag) +
- sizeof(struct hsr_sup_payload) + hlen + tlen);
+ sizeof(struct hsr_prp_sup_tag) +
+ sizeof(struct hsr_prp_sup_payload) + hlen + tlen);
if (!skb)
return;
@@ -253,10 +254,10 @@ static void send_hsr_supervision_frame(struct hsr_port *master,
skb_reserve(skb, hlen);
skb->dev = master->dev;
- skb->protocol = htons(hsr_ver ? ETH_P_HSR : ETH_P_PRP);
+ skb->protocol = htons(proto_ver ? ETH_P_HSR : ETH_P_PRP);
skb->priority = TC_PRIO_CONTROL;
- if (dev_hard_header(skb, skb->dev, (hsr_ver ? ETH_P_HSR : ETH_P_PRP),
+ if (dev_hard_header(skb, skb->dev, (proto_ver ? ETH_P_HSR : ETH_P_PRP),
master->priv->sup_multicast_addr,
skb->dev->dev_addr, skb->len) <= 0)
goto out;
@@ -264,19 +265,19 @@ static void send_hsr_supervision_frame(struct hsr_port *master,
skb_reset_network_header(skb);
skb_reset_transport_header(skb);
- if (hsr_ver > 0) {
+ if (proto_ver > 0) {
hsr_tag = skb_put(skb, sizeof(struct hsr_tag));
hsr_tag->encap_proto = htons(ETH_P_PRP);
set_hsr_tag_LSDU_size(hsr_tag, HSR_V1_SUP_LSDUSIZE);
}
- hsr_stag = skb_put(skb, sizeof(struct hsr_sup_tag));
- set_hsr_stag_path(hsr_stag, (hsr_ver ? 0x0 : 0xf));
- set_hsr_stag_HSR_ver(hsr_stag, hsr_ver);
+ hsr_stag = skb_put(skb, sizeof(struct hsr_prp_sup_tag));
+ set_hsr_stag_path(hsr_stag, (proto_ver ? 0x0 : 0xf));
+ set_hsr_stag_HSR_ver(hsr_stag, proto_ver);
/* From HSRv1 on we have separate supervision sequence numbers. */
spin_lock_irqsave(&master->priv->seqnr_lock, irqflags);
- if (hsr_ver > 0) {
+ if (proto_ver > 0) {
hsr_stag->sequence_nr = htons(master->priv->sup_sequence_nr);
hsr_tag->sequence_nr = htons(master->priv->sequence_nr);
master->priv->sup_sequence_nr++;
@@ -289,17 +290,17 @@ static void send_hsr_supervision_frame(struct hsr_port *master,
hsr_stag->HSR_TLV_type = type;
/* TODO: Why 12 in HSRv0? */
- hsr_stag->HSR_TLV_length =
- hsr_ver ? sizeof(struct hsr_sup_payload) : 12;
+ hsr_stag->HSR_TLV_length = proto_ver ?
+ sizeof(struct hsr_prp_sup_payload) : 12;
/* Payload: MacAddressA */
- hsr_sp = skb_put(skb, sizeof(struct hsr_sup_payload));
+ hsr_sp = skb_put(skb, sizeof(struct hsr_prp_sup_payload));
ether_addr_copy(hsr_sp->macaddress_A, master->dev->dev_addr);
- if (skb_put_padto(skb, ETH_ZLEN + HSR_HLEN))
+ if (skb_put_padto(skb, ETH_ZLEN + HSR_PRP_HLEN))
return;
- hsr_forward_skb(skb, master);
+ hsr_prp_forward_skb(skb, master);
return;
out:
@@ -309,28 +310,28 @@ static void send_hsr_supervision_frame(struct hsr_port *master,
/* Announce (supervision frame) timer function
*/
-static void hsr_announce(struct timer_list *t)
+static void hsr_prp_announce(struct timer_list *t)
{
- struct hsr_priv *priv;
- struct hsr_port *master;
+ struct hsr_prp_priv *priv;
+ struct hsr_prp_port *master;
unsigned long interval;
priv = from_timer(priv, t, announce_timer);
rcu_read_lock();
- master = hsr_prp_get_port(priv, HSR_PT_MASTER);
+ master = hsr_prp_get_port(priv, HSR_PRP_PT_MASTER);
if (priv->announce_count < 3 && priv->prot_version == 0) {
- send_hsr_supervision_frame(master, HSR_TLV_ANNOUNCE,
- priv->prot_version);
+ send_hsr_prp_supervision_frame(master, HSR_TLV_ANNOUNCE,
+ priv->prot_version);
priv->announce_count++;
- interval = msecs_to_jiffies(HSR_ANNOUNCE_INTERVAL);
+ interval = msecs_to_jiffies(HSR_PRP_ANNOUNCE_INTERVAL);
} else {
- send_hsr_supervision_frame(master, HSR_TLV_LIFE_CHECK,
- priv->prot_version);
+ send_hsr_prp_supervision_frame(master, HSR_TLV_LIFE_CHECK,
+ priv->prot_version);
- interval = msecs_to_jiffies(HSR_LIFE_CHECK_INTERVAL);
+ interval = msecs_to_jiffies(HSR_PRP_LIFE_CHECK_INTERVAL);
}
if (is_admin_up(master->dev))
@@ -339,62 +340,62 @@ static void hsr_announce(struct timer_list *t)
rcu_read_unlock();
}
-static void hsr_del_ports(struct hsr_priv *priv)
+static void hsr_prp_del_ports(struct hsr_prp_priv *priv)
{
- struct hsr_port *port;
+ struct hsr_prp_port *port;
- port = hsr_prp_get_port(priv, HSR_PT_SLAVE_A);
+ port = hsr_prp_get_port(priv, HSR_PRP_PT_SLAVE_A);
if (port)
- hsr_del_port(port);
+ hsr_prp_del_port(port);
- port = hsr_prp_get_port(priv, HSR_PT_SLAVE_B);
+ port = hsr_prp_get_port(priv, HSR_PRP_PT_SLAVE_B);
if (port)
- hsr_del_port(port);
+ hsr_prp_del_port(port);
- port = hsr_prp_get_port(priv, HSR_PT_MASTER);
+ port = hsr_prp_get_port(priv, HSR_PRP_PT_MASTER);
if (port)
- hsr_del_port(port);
+ hsr_prp_del_port(port);
}
/* This has to be called after all the readers are gone.
* Otherwise we would have to check the return value of
* hsr_prp_get_port().
*/
-static void hsr_dev_destroy(struct net_device *hsr_dev)
+static void hsr_prp_dev_destroy(struct net_device *dev)
{
- struct hsr_priv *priv = netdev_priv(hsr_dev);
+ struct hsr_prp_priv *priv = netdev_priv(dev);
- hsr_debugfs_term(priv);
- hsr_del_ports(priv);
+ hsr_prp_debugfs_term(priv);
+ hsr_prp_del_ports(priv);
del_timer_sync(&priv->prune_timer);
del_timer_sync(&priv->announce_timer);
- hsr_del_self_node(priv);
- hsr_del_nodes(&priv->node_db);
+ hsr_prp_del_self_node(priv);
+ hsr_prp_del_nodes(&priv->node_db);
}
-static const struct net_device_ops hsr_device_ops = {
- .ndo_change_mtu = hsr_dev_change_mtu,
- .ndo_open = hsr_dev_open,
- .ndo_stop = hsr_dev_close,
- .ndo_start_xmit = hsr_dev_xmit,
- .ndo_fix_features = hsr_fix_features,
- .ndo_uninit = hsr_dev_destroy,
+static const struct net_device_ops hsr_prp_device_ops = {
+ .ndo_change_mtu = hsr_prp_dev_change_mtu,
+ .ndo_open = hsr_prp_dev_open,
+ .ndo_stop = hsr_prp_dev_close,
+ .ndo_start_xmit = hsr_prp_dev_xmit,
+ .ndo_fix_features = hsr_prp_fix_features,
+ .ndo_uninit = hsr_prp_dev_destroy,
};
static struct device_type hsr_type = {
.name = "hsr",
};
-void hsr_dev_setup(struct net_device *dev)
+void hsr_prp_dev_setup(struct net_device *dev)
{
eth_hw_addr_random(dev);
ether_setup(dev);
dev->min_mtu = 0;
- dev->header_ops = &hsr_header_ops;
- dev->netdev_ops = &hsr_device_ops;
+ dev->header_ops = &hsr_prp_header_ops;
+ dev->netdev_ops = &hsr_prp_device_ops;
SET_NETDEV_DEVTYPE(dev, &hsr_type);
dev->priv_flags |= IFF_NO_QUEUE;
@@ -420,9 +421,9 @@ void hsr_dev_setup(struct net_device *dev)
/* Return true if dev is a HSR master; return false otherwise.
*/
-inline bool is_hsr_master(struct net_device *dev)
+inline bool is_hsr_prp_master(struct net_device *dev)
{
- return (dev->netdev_ops->ndo_start_xmit == hsr_dev_xmit);
+ return (dev->netdev_ops->ndo_start_xmit == hsr_prp_dev_xmit);
}
/* Default multicast address for HSR Supervision frames */
@@ -430,34 +431,35 @@ static const unsigned char def_multicast_addr[ETH_ALEN] __aligned(2) = {
0x01, 0x15, 0x4e, 0x00, 0x01, 0x00
};
-int hsr_dev_finalize(struct net_device *hsr_dev, struct net_device *slave[2],
- unsigned char multicast_spec, u8 protocol_version,
- struct netlink_ext_ack *extack)
+int hsr_prp_dev_finalize(struct net_device *hsr_prp_dev,
+ struct net_device *slave[2],
+ unsigned char multicast_spec, u8 protocol_version,
+ struct netlink_ext_ack *extack)
{
- struct hsr_priv *priv;
+ struct hsr_prp_priv *priv;
int res;
- priv = netdev_priv(hsr_dev);
+ priv = netdev_priv(hsr_prp_dev);
INIT_LIST_HEAD(&priv->ports);
INIT_LIST_HEAD(&priv->node_db);
INIT_LIST_HEAD(&priv->self_node_db);
spin_lock_init(&priv->list_lock);
- ether_addr_copy(hsr_dev->dev_addr, slave[0]->dev_addr);
+ ether_addr_copy(hsr_prp_dev->dev_addr, slave[0]->dev_addr);
/* Make sure we recognize frames from ourselves in hsr_rcv() */
- res = hsr_create_self_node(priv, hsr_dev->dev_addr,
- slave[1]->dev_addr);
+ res = hsr_prp_create_self_node(priv, hsr_prp_dev->dev_addr,
+ slave[1]->dev_addr);
if (res < 0)
return res;
spin_lock_init(&priv->seqnr_lock);
/* Overflow soon to find bugs easier: */
- priv->sequence_nr = HSR_SEQNR_START;
- priv->sup_sequence_nr = HSR_SUP_SEQNR_START;
+ priv->sequence_nr = HSR_PRP_SEQNR_START;
+ priv->sup_sequence_nr = HSR_PRP_SUP_SEQNR_START;
- timer_setup(&priv->announce_timer, hsr_announce, 0);
- timer_setup(&priv->prune_timer, hsr_prune_nodes, 0);
+ timer_setup(&priv->announce_timer, hsr_prp_announce, 0);
+ timer_setup(&priv->prune_timer, hsr_prp_prune_nodes, 0);
ether_addr_copy(priv->sup_multicast_addr, def_multicast_addr);
priv->sup_multicast_addr[ETH_ALEN - 1] = multicast_spec;
@@ -466,44 +468,45 @@ int hsr_dev_finalize(struct net_device *hsr_dev, struct net_device *slave[2],
/* FIXME: should I modify the value of these?
*
- * - hsr_dev->flags - i.e.
+ * - hsr_ptp_dev->flags - i.e.
* IFF_MASTER/SLAVE?
- * - hsr_dev->priv_flags - i.e.
+ * - hsr_prp_dev->priv_flags - i.e.
* IFF_EBRIDGE?
* IFF_TX_SKB_SHARING?
* IFF_HSR_MASTER/SLAVE?
*/
/* Make sure the 1st call to netif_carrier_on() gets through */
- netif_carrier_off(hsr_dev);
+ netif_carrier_off(hsr_prp_dev);
- res = hsr_add_port(priv, hsr_dev, HSR_PT_MASTER, extack);
+ res = hsr_prp_add_port(priv, hsr_prp_dev, HSR_PRP_PT_MASTER, extack);
if (res)
goto err_add_master;
- res = register_netdevice(hsr_dev);
+ res = register_netdevice(hsr_prp_dev);
if (res)
goto err_unregister;
- res = hsr_add_port(priv, slave[0], HSR_PT_SLAVE_A, extack);
+ res = hsr_prp_add_port(priv, slave[0], HSR_PRP_PT_SLAVE_A, extack);
if (res)
goto err_add_slaves;
- res = hsr_add_port(priv, slave[1], HSR_PT_SLAVE_B, extack);
+ res = hsr_prp_add_port(priv, slave[1], HSR_PRP_PT_SLAVE_B, extack);
if (res)
goto err_add_slaves;
- hsr_debugfs_init(priv, hsr_dev);
- mod_timer(&priv->prune_timer, jiffies + msecs_to_jiffies(PRUNE_PERIOD));
+ hsr_prp_debugfs_init(priv, hsr_prp_dev);
+ mod_timer(&priv->prune_timer,
+ jiffies + msecs_to_jiffies(PRUNE_PERIOD));
return 0;
err_add_slaves:
- unregister_netdevice(hsr_dev);
+ unregister_netdevice(hsr_prp_dev);
err_unregister:
- hsr_del_ports(priv);
+ hsr_prp_del_ports(priv);
err_add_master:
- hsr_del_self_node(priv);
+ hsr_prp_del_self_node(priv);
return res;
}
@@ -5,18 +5,18 @@
* 2011-2014 Arvid Brodin, arvid.brodin@alten.se
*/
-#ifndef __HSR_DEVICE_H
-#define __HSR_DEVICE_H
+#ifndef __HSR_PRP_DEVICE_H
+#define __HSR_PRP_DEVICE_H
#include <linux/netdevice.h>
#include "hsr_prp_main.h"
-void hsr_dev_setup(struct net_device *dev);
-int hsr_dev_finalize(struct net_device *hsr_dev, struct net_device *slave[2],
- unsigned char multicast_spec, u8 protocol_version,
- struct netlink_ext_ack *extack);
-void hsr_check_carrier_and_operstate(struct hsr_priv *priv);
-bool is_hsr_master(struct net_device *dev);
-int hsr_get_max_mtu(struct hsr_priv *priv);
+void hsr_prp_dev_setup(struct net_device *dev);
+int hsr_prp_dev_finalize(struct net_device *dev, struct net_device *slave[2],
+ unsigned char multicast_spec, u8 protocol_version,
+ struct netlink_ext_ack *extack);
+void hsr_prp_check_carrier_and_operstate(struct hsr_prp_priv *priv);
+bool is_hsr_prp_master(struct net_device *dev);
+int hsr_prp_get_max_mtu(struct hsr_prp_priv *priv);
-#endif /* __HSR_DEVICE_H */
+#endif /* __HSR_PRP_DEVICE_H */
@@ -13,13 +13,13 @@
#include "hsr_prp_main.h"
#include "hsr_prp_framereg.h"
-struct hsr_node;
+struct hsr_prp_node;
-struct hsr_frame_info {
+struct hsr_prp_frame_info {
struct sk_buff *skb_std;
struct sk_buff *skb_hsr;
- struct hsr_port *port_rcv;
- struct hsr_node *node_src;
+ struct hsr_prp_port *port_rcv;
+ struct hsr_prp_node *node_src;
u16 sequence_nr;
bool is_supervision;
bool is_vlan;
@@ -42,10 +42,10 @@ struct hsr_frame_info {
* 3) Allow different MAC addresses for the two slave interfaces, using the
* MacAddressA field.
*/
-static bool is_supervision_frame(struct hsr_priv *priv, struct sk_buff *skb)
+static bool is_supervision_frame(struct hsr_prp_priv *priv, struct sk_buff *skb)
{
struct ethhdr *eth_hdr;
- struct hsr_sup_tag *hsr_sup_tag;
+ struct hsr_prp_sup_tag *hsr_sup_tag;
struct hsrv1_ethhdr_sp *hsr_V1_hdr;
WARN_ON_ONCE(!skb_mac_header_was_set(skb));
@@ -77,29 +77,30 @@ static bool is_supervision_frame(struct hsr_priv *priv, struct sk_buff *skb)
hsr_sup_tag->HSR_TLV_type != HSR_TLV_LIFE_CHECK)
return false;
if (hsr_sup_tag->HSR_TLV_length != 12 &&
- hsr_sup_tag->HSR_TLV_length != sizeof(struct hsr_sup_payload))
+ hsr_sup_tag->HSR_TLV_length != sizeof(struct hsr_prp_sup_payload))
return false;
return true;
}
static struct sk_buff *create_stripped_skb(struct sk_buff *skb_in,
- struct hsr_frame_info *frame)
+ struct hsr_prp_frame_info *frame)
{
struct sk_buff *skb;
int copylen;
unsigned char *dst, *src;
- skb_pull(skb_in, HSR_HLEN);
- skb = __pskb_copy(skb_in, skb_headroom(skb_in) - HSR_HLEN, GFP_ATOMIC);
- skb_push(skb_in, HSR_HLEN);
+ skb_pull(skb_in, HSR_PRP_HLEN);
+ skb = __pskb_copy(skb_in,
+ skb_headroom(skb_in) - HSR_PRP_HLEN, GFP_ATOMIC);
+ skb_push(skb_in, HSR_PRP_HLEN);
if (!skb)
return NULL;
skb_reset_mac_header(skb);
if (skb->ip_summed == CHECKSUM_PARTIAL)
- skb->csum_start -= HSR_HLEN;
+ skb->csum_start -= HSR_PRP_HLEN;
copylen = 2 * ETH_ALEN;
if (frame->is_vlan)
@@ -112,22 +113,22 @@ static struct sk_buff *create_stripped_skb(struct sk_buff *skb_in,
return skb;
}
-static struct sk_buff *frame_get_stripped_skb(struct hsr_frame_info *frame,
- struct hsr_port *port)
+static struct sk_buff *frame_get_stripped_skb(struct hsr_prp_frame_info *frame,
+ struct hsr_prp_port *port)
{
if (!frame->skb_std)
frame->skb_std = create_stripped_skb(frame->skb_hsr, frame);
return skb_clone(frame->skb_std, GFP_ATOMIC);
}
-static void hsr_fill_tag(struct sk_buff *skb, struct hsr_frame_info *frame,
- struct hsr_port *port, u8 proto_version)
+static void hsr_fill_tag(struct sk_buff *skb, struct hsr_prp_frame_info *frame,
+ struct hsr_prp_port *port, u8 proto_version)
{
struct hsr_ethhdr *hsr_ethhdr;
int lane_id;
int lsdu_size;
- if (port->type == HSR_PT_SLAVE_A)
+ if (port->type == HSR_PRP_PT_SLAVE_A)
lane_id = 0;
else
lane_id = 1;
@@ -147,28 +148,29 @@ static void hsr_fill_tag(struct sk_buff *skb, struct hsr_frame_info *frame,
}
static struct sk_buff *create_tagged_skb(struct sk_buff *skb_o,
- struct hsr_frame_info *frame,
- struct hsr_port *port)
+ struct hsr_prp_frame_info *frame,
+ struct hsr_prp_port *port)
{
int movelen;
unsigned char *dst, *src;
struct sk_buff *skb;
/* Create the new skb with enough headroom to fit the HSR tag */
- skb = __pskb_copy(skb_o, skb_headroom(skb_o) + HSR_HLEN, GFP_ATOMIC);
+ skb = __pskb_copy(skb_o,
+ skb_headroom(skb_o) + HSR_PRP_HLEN, GFP_ATOMIC);
if (!skb)
return NULL;
skb_reset_mac_header(skb);
if (skb->ip_summed == CHECKSUM_PARTIAL)
- skb->csum_start += HSR_HLEN;
+ skb->csum_start += HSR_PRP_HLEN;
movelen = ETH_HLEN;
if (frame->is_vlan)
movelen += VLAN_HLEN;
src = skb_mac_header(skb);
- dst = skb_push(skb, HSR_HLEN);
+ dst = skb_push(skb, HSR_PRP_HLEN);
memmove(dst, src, movelen);
skb_reset_mac_header(skb);
@@ -180,13 +182,14 @@ static struct sk_buff *create_tagged_skb(struct sk_buff *skb_o,
/* If the original frame was an HSR tagged frame, just clone it to be sent
* unchanged. Otherwise, create a private frame especially tagged for 'port'.
*/
-static struct sk_buff *frame_get_tagged_skb(struct hsr_frame_info *frame,
- struct hsr_port *port)
+static struct sk_buff *frame_get_tagged_skb(struct hsr_prp_frame_info *frame,
+ struct hsr_prp_port *port)
{
if (frame->skb_hsr)
return skb_clone(frame->skb_hsr, GFP_ATOMIC);
- if (port->type != HSR_PT_SLAVE_A && port->type != HSR_PT_SLAVE_B) {
+ if (port->type != HSR_PRP_PT_SLAVE_A &&
+ port->type != HSR_PRP_PT_SLAVE_B) {
WARN_ONCE(1, "HSR: Bug: trying to create a tagged frame for a non-ring port");
return NULL;
}
@@ -194,14 +197,14 @@ static struct sk_buff *frame_get_tagged_skb(struct hsr_frame_info *frame,
return create_tagged_skb(frame->skb_std, frame, port);
}
-static void hsr_deliver_master(struct sk_buff *skb, struct net_device *dev,
- struct hsr_node *node_src)
+static void hsr_prp_deliver_master(struct sk_buff *skb, struct net_device *dev,
+ struct hsr_prp_node *node_src)
{
bool was_multicast_frame;
int res;
was_multicast_frame = (skb->pkt_type == PACKET_MULTICAST);
- hsr_addr_subst_source(node_src, skb);
+ hsr_prp_addr_subst_source(node_src, skb);
skb_pull(skb, ETH_HLEN);
res = netif_rx(skb);
if (res == NET_RX_DROP) {
@@ -214,11 +217,11 @@ static void hsr_deliver_master(struct sk_buff *skb, struct net_device *dev,
}
}
-static int hsr_xmit(struct sk_buff *skb, struct hsr_port *port,
- struct hsr_frame_info *frame)
+static int hsr_prp_xmit(struct sk_buff *skb, struct hsr_prp_port *port,
+ struct hsr_prp_frame_info *frame)
{
- if (frame->port_rcv->type == HSR_PT_MASTER) {
- hsr_addr_subst_dest(frame->node_src, skb, port);
+ if (frame->port_rcv->type == HSR_PRP_PT_MASTER) {
+ hsr_prp_addr_subst_dest(frame->node_src, skb, port);
/* Address substitution (IEC62439-3 pp 26, 50): replace mac
* address of outgoing frame with that of the outgoing slave's.
@@ -239,37 +242,38 @@ static int hsr_xmit(struct sk_buff *skb, struct hsr_port *port,
* tags if they're of the non-HSR type (but only after duplicate discard). The
* master device always strips HSR tags.
*/
-static void hsr_forward_do(struct hsr_frame_info *frame)
+static void hsr_prp_forward_do(struct hsr_prp_frame_info *frame)
{
- struct hsr_port *port;
+ struct hsr_prp_port *port;
struct sk_buff *skb;
- hsr_for_each_port(frame->port_rcv->priv, port) {
+ hsr_prp_for_each_port(frame->port_rcv->priv, port) {
/* Don't send frame back the way it came */
if (port == frame->port_rcv)
continue;
/* Don't deliver locally unless we should */
- if (port->type == HSR_PT_MASTER && !frame->is_local_dest)
+ if (port->type == HSR_PRP_PT_MASTER && !frame->is_local_dest)
continue;
/* Deliver frames directly addressed to us to master only */
- if (port->type != HSR_PT_MASTER && frame->is_local_exclusive)
+ if (port->type != HSR_PRP_PT_MASTER &&
+ frame->is_local_exclusive)
continue;
/* Don't send frame over port where it has been sent before */
- if (hsr_register_frame_out(port, frame->node_src,
- frame->sequence_nr))
+ if (hsr_prp_register_frame_out(port, frame->node_src,
+ frame->sequence_nr))
continue;
- if (frame->is_supervision && port->type == HSR_PT_MASTER) {
- hsr_handle_sup_frame(frame->skb_hsr,
- frame->node_src,
- frame->port_rcv);
+ if (frame->is_supervision && port->type == HSR_PRP_PT_MASTER) {
+ hsr_prp_handle_sup_frame(frame->skb_hsr,
+ frame->node_src,
+ frame->port_rcv);
continue;
}
- if (port->type != HSR_PT_MASTER)
+ if (port->type != HSR_PRP_PT_MASTER)
skb = frame_get_tagged_skb(frame, port);
else
skb = frame_get_stripped_skb(frame, port);
@@ -279,17 +283,17 @@ static void hsr_forward_do(struct hsr_frame_info *frame)
}
skb->dev = port->dev;
- if (port->type == HSR_PT_MASTER)
- hsr_deliver_master(skb, port->dev, frame->node_src);
+ if (port->type == HSR_PRP_PT_MASTER)
+ hsr_prp_deliver_master(skb, port->dev, frame->node_src);
else
- hsr_xmit(skb, port, frame);
+ hsr_prp_xmit(skb, port, frame);
}
}
-static void check_local_dest(struct hsr_priv *priv, struct sk_buff *skb,
- struct hsr_frame_info *frame)
+static void check_local_dest(struct hsr_prp_priv *priv, struct sk_buff *skb,
+ struct hsr_prp_frame_info *frame)
{
- if (hsr_addr_is_self(priv, eth_hdr(skb)->h_dest)) {
+ if (hsr_prp_addr_is_self(priv, eth_hdr(skb)->h_dest)) {
frame->is_local_exclusive = true;
skb->pkt_type = PACKET_HOST;
} else {
@@ -305,14 +309,14 @@ static void check_local_dest(struct hsr_priv *priv, struct sk_buff *skb,
}
}
-static int hsr_fill_frame_info(struct hsr_frame_info *frame,
- struct sk_buff *skb, struct hsr_port *port)
+static int fill_frame_info(struct hsr_prp_frame_info *frame,
+ struct sk_buff *skb, struct hsr_prp_port *port)
{
struct ethhdr *ethhdr;
unsigned long irqflags;
frame->is_supervision = is_supervision_frame(port->priv, skb);
- frame->node_src = hsr_get_node(port, skb, frame->is_supervision);
+ frame->node_src = hsr_prp_get_node(port, skb, frame->is_supervision);
if (!frame->node_src)
return -1; /* Unknown node and !is_supervision, or no mem */
@@ -345,9 +349,9 @@ static int hsr_fill_frame_info(struct hsr_frame_info *frame,
}
/* Must be called holding rcu read lock (because of the port parameter) */
-void hsr_forward_skb(struct sk_buff *skb, struct hsr_port *port)
+void hsr_prp_forward_skb(struct sk_buff *skb, struct hsr_prp_port *port)
{
- struct hsr_frame_info frame;
+ struct hsr_prp_frame_info frame;
if (skb_mac_header(skb) != skb->data) {
WARN_ONCE(1, "%s:%d: Malformed frame (port_src %s)\n",
@@ -355,14 +359,14 @@ void hsr_forward_skb(struct sk_buff *skb, struct hsr_port *port)
goto out_drop;
}
- if (hsr_fill_frame_info(&frame, skb, port) < 0)
+ if (fill_frame_info(&frame, skb, port) < 0)
goto out_drop;
- hsr_register_frame_in(frame.node_src, port, frame.sequence_nr);
- hsr_forward_do(&frame);
+ hsr_prp_register_frame_in(frame.node_src, port, frame.sequence_nr);
+ hsr_prp_forward_do(&frame);
/* Gets called for ingress frames as well as egress from master port.
* So check and increment stats for master port only here.
*/
- if (port->type == HSR_PT_MASTER) {
+ if (port->type == HSR_PRP_PT_MASTER) {
port->dev->stats.tx_packets++;
port->dev->stats.tx_bytes += skb->len;
}
@@ -5,12 +5,12 @@
* 2011-2014 Arvid Brodin, arvid.brodin@alten.se
*/
-#ifndef __HSR_FORWARD_H
-#define __HSR_FORWARD_H
+#ifndef __HSR_PRP_FORWARD_H
+#define __HSR_PRP_FORWARD_H
#include <linux/netdevice.h>
#include "hsr_prp_main.h"
-void hsr_forward_skb(struct sk_buff *skb, struct hsr_port *port);
+void hsr_prp_forward_skb(struct sk_buff *skb, struct hsr_prp_port *port);
-#endif /* __HSR_FORWARD_H */
+#endif /* __HSR_PRP_FORWARD_H */
@@ -37,11 +37,11 @@ static bool seq_nr_after(u16 a, u16 b)
#define seq_nr_before(a, b) seq_nr_after((b), (a))
#define seq_nr_before_or_eq(a, b) (!seq_nr_after((a), (b)))
-bool hsr_addr_is_self(struct hsr_priv *priv, unsigned char *addr)
+bool hsr_prp_addr_is_self(struct hsr_prp_priv *priv, unsigned char *addr)
{
- struct hsr_node *node;
+ struct hsr_prp_node *node;
- node = list_first_or_null_rcu(&priv->self_node_db, struct hsr_node,
+ node = list_first_or_null_rcu(&priv->self_node_db, struct hsr_prp_node,
mac_list);
if (!node) {
WARN_ONCE(1, "HSR: No self node\n");
@@ -58,10 +58,11 @@ bool hsr_addr_is_self(struct hsr_priv *priv, unsigned char *addr)
/* Search for mac entry. Caller must hold rcu read lock.
*/
-static struct hsr_node *find_node_by_addr_A(struct list_head *node_db,
- const unsigned char addr[ETH_ALEN])
+static struct hsr_prp_node *
+find_node_by_addr_A(struct list_head *node_db,
+ const unsigned char addr[ETH_ALEN])
{
- struct hsr_node *node;
+ struct hsr_prp_node *node;
list_for_each_entry_rcu(node, node_db, mac_list) {
if (ether_addr_equal(node->macaddress_A, addr))
@@ -74,12 +75,12 @@ static struct hsr_node *find_node_by_addr_A(struct list_head *node_db,
/* Helper for device init; the self_node_db is used in hsr_rcv() to recognize
* frames from self that's been looped over the HSR ring.
*/
-int hsr_create_self_node(struct hsr_priv *priv,
- unsigned char addr_a[ETH_ALEN],
- unsigned char addr_b[ETH_ALEN])
+int hsr_prp_create_self_node(struct hsr_prp_priv *priv,
+ unsigned char addr_a[ETH_ALEN],
+ unsigned char addr_b[ETH_ALEN])
{
struct list_head *self_node_db = &priv->self_node_db;
- struct hsr_node *node, *oldnode;
+ struct hsr_prp_node *node, *oldnode;
node = kmalloc(sizeof(*node), GFP_KERNEL);
if (!node)
@@ -90,7 +91,7 @@ int hsr_create_self_node(struct hsr_priv *priv,
spin_lock_bh(&priv->list_lock);
oldnode = list_first_or_null_rcu(self_node_db,
- struct hsr_node, mac_list);
+ struct hsr_prp_node, mac_list);
if (oldnode) {
list_replace_rcu(&oldnode->mac_list, &node->mac_list);
spin_unlock_bh(&priv->list_lock);
@@ -103,13 +104,14 @@ int hsr_create_self_node(struct hsr_priv *priv,
return 0;
}
-void hsr_del_self_node(struct hsr_priv *priv)
+void hsr_prp_del_self_node(struct hsr_prp_priv *priv)
{
struct list_head *self_node_db = &priv->self_node_db;
- struct hsr_node *node;
+ struct hsr_prp_node *node;
spin_lock_bh(&priv->list_lock);
- node = list_first_or_null_rcu(self_node_db, struct hsr_node, mac_list);
+ node = list_first_or_null_rcu(self_node_db, struct hsr_prp_node,
+ mac_list);
if (node) {
list_del_rcu(&node->mac_list);
kfree_rcu(node, rcu_head);
@@ -117,10 +119,10 @@ void hsr_del_self_node(struct hsr_priv *priv)
spin_unlock_bh(&priv->list_lock);
}
-void hsr_del_nodes(struct list_head *node_db)
+void hsr_prp_del_nodes(struct list_head *node_db)
{
- struct hsr_node *node;
- struct hsr_node *tmp;
+ struct hsr_prp_node *node;
+ struct hsr_prp_node *tmp;
list_for_each_entry_safe(node, tmp, node_db, mac_list)
kfree(node);
@@ -130,12 +132,12 @@ void hsr_del_nodes(struct list_head *node_db)
* seq_out is used to initialize filtering of outgoing duplicate frames
* originating from the newly added node.
*/
-static struct hsr_node *hsr_add_node(struct hsr_priv *priv,
- struct list_head *node_db,
- unsigned char addr[],
- u16 seq_out)
+static struct hsr_prp_node *hsr_prp_add_node(struct hsr_prp_priv *priv,
+ struct list_head *node_db,
+ unsigned char addr[],
+ u16 seq_out)
{
- struct hsr_node *new_node, *node;
+ struct hsr_prp_node *new_node, *node;
unsigned long now;
int i;
@@ -149,9 +151,9 @@ static struct hsr_node *hsr_add_node(struct hsr_priv *priv,
* as initialization. (0 could trigger an spurious ring error warning).
*/
now = jiffies;
- for (i = 0; i < HSR_PT_PORTS; i++)
+ for (i = 0; i < HSR_PRP_PT_PORTS; i++)
new_node->time_in[i] = now;
- for (i = 0; i < HSR_PT_PORTS; i++)
+ for (i = 0; i < HSR_PRP_PT_PORTS; i++)
new_node->seq_out[i] = seq_out;
spin_lock_bh(&priv->list_lock);
@@ -173,12 +175,13 @@ static struct hsr_node *hsr_add_node(struct hsr_priv *priv,
/* Get the hsr_node from which 'skb' was sent.
*/
-struct hsr_node *hsr_get_node(struct hsr_port *port, struct sk_buff *skb,
- bool is_sup)
+struct hsr_prp_node *hsr_prp_get_node(struct hsr_prp_port *port,
+ struct sk_buff *skb,
+ bool is_sup)
{
struct list_head *node_db = &port->priv->node_db;
- struct hsr_priv *priv = port->priv;
- struct hsr_node *node;
+ struct hsr_prp_priv *priv = port->priv;
+ struct hsr_prp_node *node;
struct ethhdr *ethhdr;
u16 seq_out;
@@ -206,24 +209,25 @@ struct hsr_node *hsr_get_node(struct hsr_port *port, struct sk_buff *skb,
/* this is called also for frames from master port and
* so warn only for non master ports
*/
- if (port->type != HSR_PT_MASTER)
+ if (port->type != HSR_PRP_PT_MASTER)
WARN_ONCE(1, "%s: Non-HSR frame\n", __func__);
- seq_out = HSR_SEQNR_START;
+ seq_out = HSR_PRP_SEQNR_START;
}
- return hsr_add_node(priv, node_db, ethhdr->h_source, seq_out);
+ return hsr_prp_add_node(priv, node_db, ethhdr->h_source, seq_out);
}
/* Use the Supervision frame's info about an eventual macaddress_B for merging
* nodes that has previously had their macaddress_B registered as a separate
* node.
*/
-void hsr_handle_sup_frame(struct sk_buff *skb, struct hsr_node *node_curr,
- struct hsr_port *port_rcv)
+void hsr_prp_handle_sup_frame(struct sk_buff *skb,
+ struct hsr_prp_node *node_curr,
+ struct hsr_prp_port *port_rcv)
{
- struct hsr_priv *priv = port_rcv->priv;
- struct hsr_sup_payload *hsr_sp;
- struct hsr_node *node_real;
+ struct hsr_prp_priv *priv = port_rcv->priv;
+ struct hsr_prp_sup_payload *sp;
+ struct hsr_prp_node *node_real;
struct list_head *node_db;
struct ethhdr *ethhdr;
int i;
@@ -238,17 +242,17 @@ void hsr_handle_sup_frame(struct sk_buff *skb, struct hsr_node *node_curr,
skb_pull(skb, sizeof(struct hsr_tag));
/* And leave the HSR sup tag. */
- skb_pull(skb, sizeof(struct hsr_sup_tag));
+ skb_pull(skb, sizeof(struct hsr_prp_sup_tag));
- hsr_sp = (struct hsr_sup_payload *)skb->data;
+ sp = (struct hsr_prp_sup_payload *)skb->data;
/* Merge node_curr (registered on macaddress_B) into node_real */
node_db = &port_rcv->priv->node_db;
- node_real = find_node_by_addr_A(node_db, hsr_sp->macaddress_A);
+ node_real = find_node_by_addr_A(node_db, sp->macaddress_A);
if (!node_real)
/* No frame received from AddrA of this node yet */
- node_real = hsr_add_node(priv, node_db, hsr_sp->macaddress_A,
- HSR_SEQNR_START - 1);
+ node_real = hsr_prp_add_node(priv, node_db, sp->macaddress_A,
+ HSR_PRP_SEQNR_START - 1);
if (!node_real)
goto done; /* No mem */
if (node_real == node_curr)
@@ -256,7 +260,7 @@ void hsr_handle_sup_frame(struct sk_buff *skb, struct hsr_node *node_curr,
goto done;
ether_addr_copy(node_real->macaddress_B, ethhdr->h_source);
- for (i = 0; i < HSR_PT_PORTS; i++) {
+ for (i = 0; i < HSR_PRP_PT_PORTS; i++) {
if (!node_curr->time_in_stale[i] &&
time_after(node_curr->time_in[i], node_real->time_in[i])) {
node_real->time_in[i] = node_curr->time_in[i];
@@ -283,7 +287,7 @@ void hsr_handle_sup_frame(struct sk_buff *skb, struct hsr_node *node_curr,
* address with that node's "official" address (macaddress_A) so that upper
* layers recognize where it came from.
*/
-void hsr_addr_subst_source(struct hsr_node *node, struct sk_buff *skb)
+void hsr_prp_addr_subst_source(struct hsr_prp_node *node, struct sk_buff *skb)
{
if (!skb_mac_header_was_set(skb)) {
WARN_ONCE(1, "%s: Mac header not set\n", __func__);
@@ -302,10 +306,10 @@ void hsr_addr_subst_source(struct hsr_node *node, struct sk_buff *skb)
* This is needed to keep the packets flowing through switches that learn on
* which "side" the different interfaces are.
*/
-void hsr_addr_subst_dest(struct hsr_node *node_src, struct sk_buff *skb,
- struct hsr_port *port)
+void hsr_prp_addr_subst_dest(struct hsr_prp_node *node_src, struct sk_buff *skb,
+ struct hsr_prp_port *port)
{
- struct hsr_node *node_dst;
+ struct hsr_prp_node *node_dst;
if (!skb_mac_header_was_set(skb)) {
WARN_ONCE(1, "%s: Mac header not set\n", __func__);
@@ -328,8 +332,9 @@ void hsr_addr_subst_dest(struct hsr_node *node_src, struct sk_buff *skb,
ether_addr_copy(eth_hdr(skb)->h_dest, node_dst->macaddress_B);
}
-void hsr_register_frame_in(struct hsr_node *node, struct hsr_port *port,
- u16 sequence_nr)
+void hsr_prp_register_frame_in(struct hsr_prp_node *node,
+ struct hsr_prp_port *port,
+ u16 sequence_nr)
{
/* Don't register incoming frames without a valid sequence number. This
* ensures entries of restarted nodes gets pruned so that they can
@@ -350,8 +355,9 @@ void hsr_register_frame_in(struct hsr_node *node, struct hsr_port *port,
* 0 otherwise, or
* negative error code on error
*/
-int hsr_register_frame_out(struct hsr_port *port, struct hsr_node *node,
- u16 sequence_nr)
+int hsr_prp_register_frame_out(struct hsr_prp_port *port,
+ struct hsr_prp_node *node,
+ u16 sequence_nr)
{
if (seq_nr_before_or_eq(sequence_nr, node->seq_out[port->type]))
return 1;
@@ -360,35 +366,35 @@ int hsr_register_frame_out(struct hsr_port *port, struct hsr_node *node,
return 0;
}
-static struct hsr_port *get_late_port(struct hsr_priv *priv,
- struct hsr_node *node)
+static struct hsr_prp_port *get_late_port(struct hsr_prp_priv *priv,
+ struct hsr_prp_node *node)
{
- if (node->time_in_stale[HSR_PT_SLAVE_A])
- return hsr_prp_get_port(priv, HSR_PT_SLAVE_A);
- if (node->time_in_stale[HSR_PT_SLAVE_B])
- return hsr_prp_get_port(priv, HSR_PT_SLAVE_B);
-
- if (time_after(node->time_in[HSR_PT_SLAVE_B],
- node->time_in[HSR_PT_SLAVE_A] +
- msecs_to_jiffies(MAX_SLAVE_DIFF)))
- return hsr_prp_get_port(priv, HSR_PT_SLAVE_A);
- if (time_after(node->time_in[HSR_PT_SLAVE_A],
- node->time_in[HSR_PT_SLAVE_B] +
- msecs_to_jiffies(MAX_SLAVE_DIFF)))
- return hsr_prp_get_port(priv, HSR_PT_SLAVE_B);
+ if (node->time_in_stale[HSR_PRP_PT_SLAVE_A])
+ return hsr_prp_get_port(priv, HSR_PRP_PT_SLAVE_A);
+ if (node->time_in_stale[HSR_PRP_PT_SLAVE_B])
+ return hsr_prp_get_port(priv, HSR_PRP_PT_SLAVE_B);
+
+ if (time_after(node->time_in[HSR_PRP_PT_SLAVE_B],
+ node->time_in[HSR_PRP_PT_SLAVE_A] +
+ msecs_to_jiffies(HSR_PRP_MAX_SLAVE_DIFF)))
+ return hsr_prp_get_port(priv, HSR_PRP_PT_SLAVE_A);
+ if (time_after(node->time_in[HSR_PRP_PT_SLAVE_A],
+ node->time_in[HSR_PRP_PT_SLAVE_B] +
+ msecs_to_jiffies(HSR_PRP_MAX_SLAVE_DIFF)))
+ return hsr_prp_get_port(priv, HSR_PRP_PT_SLAVE_B);
return NULL;
}
/* Remove stale sequence_nr records. Called by timer every
- * HSR_LIFE_CHECK_INTERVAL (two seconds or so).
+ * HSR_PRP_LIFE_CHECK_INTERVAL (two seconds or so).
*/
-void hsr_prune_nodes(struct timer_list *t)
+void hsr_prp_prune_nodes(struct timer_list *t)
{
- struct hsr_priv *priv = from_timer(priv, t, prune_timer);
- struct hsr_node *node;
- struct hsr_node *tmp;
- struct hsr_port *port;
+ struct hsr_prp_priv *priv = from_timer(priv, t, prune_timer);
+ struct hsr_prp_node *node;
+ struct hsr_prp_node *tmp;
+ struct hsr_prp_port *port;
unsigned long timestamp;
unsigned long time_a, time_b;
@@ -399,32 +405,33 @@ void hsr_prune_nodes(struct timer_list *t)
* the master port. Thus the master node will be repeatedly
* pruned leading to packet loss.
*/
- if (hsr_addr_is_self(priv, node->macaddress_A))
+ if (hsr_prp_addr_is_self(priv, node->macaddress_A))
continue;
/* Shorthand */
- time_a = node->time_in[HSR_PT_SLAVE_A];
- time_b = node->time_in[HSR_PT_SLAVE_B];
+ time_a = node->time_in[HSR_PRP_PT_SLAVE_A];
+ time_b = node->time_in[HSR_PRP_PT_SLAVE_B];
/* Check for timestamps old enough to risk wrap-around */
if (time_after(jiffies, time_a + MAX_JIFFY_OFFSET / 2))
- node->time_in_stale[HSR_PT_SLAVE_A] = true;
+ node->time_in_stale[HSR_PRP_PT_SLAVE_A] = true;
if (time_after(jiffies, time_b + MAX_JIFFY_OFFSET / 2))
- node->time_in_stale[HSR_PT_SLAVE_B] = true;
+ node->time_in_stale[HSR_PRP_PT_SLAVE_B] = true;
/* Get age of newest frame from node.
* At least one time_in is OK here; nodes get pruned long
* before both time_ins can get stale
*/
timestamp = time_a;
- if (node->time_in_stale[HSR_PT_SLAVE_A] ||
- (!node->time_in_stale[HSR_PT_SLAVE_B] &&
+ if (node->time_in_stale[HSR_PRP_PT_SLAVE_A] ||
+ (!node->time_in_stale[HSR_PRP_PT_SLAVE_B] &&
time_after(time_b, time_a)))
timestamp = time_b;
/* Warn of ring error only as long as we get frames at all */
if (time_is_after_jiffies(timestamp +
- msecs_to_jiffies(1.5 * MAX_SLAVE_DIFF))) {
+ msecs_to_jiffies(1.5 *
+ HSR_PRP_MAX_SLAVE_DIFF))) {
rcu_read_lock();
port = get_late_port(priv, node);
if (port)
@@ -435,7 +442,7 @@ void hsr_prune_nodes(struct timer_list *t)
/* Prune old entries */
if (time_is_before_jiffies(timestamp +
- msecs_to_jiffies(HSR_NODE_FORGET_TIME))) {
+ msecs_to_jiffies(HSR_PRP_NODE_FORGET_TIME))) {
hsr_nl_nodedown(priv, node->macaddress_A);
list_del_rcu(&node->mac_list);
/* Note that we need to free this entry later: */
@@ -449,14 +456,14 @@ void hsr_prune_nodes(struct timer_list *t)
jiffies + msecs_to_jiffies(PRUNE_PERIOD));
}
-void *hsr_get_next_node(struct hsr_priv *priv, void *_pos,
- unsigned char addr[ETH_ALEN])
+void *hsr_prp_get_next_node(struct hsr_prp_priv *priv, void *_pos,
+ unsigned char addr[ETH_ALEN])
{
- struct hsr_node *node;
+ struct hsr_prp_node *node;
if (!_pos) {
node = list_first_or_null_rcu(&priv->node_db,
- struct hsr_node, mac_list);
+ struct hsr_prp_node, mac_list);
if (node)
ether_addr_copy(addr, node->macaddress_A);
return node;
@@ -471,17 +478,17 @@ void *hsr_get_next_node(struct hsr_priv *priv, void *_pos,
return NULL;
}
-int hsr_get_node_data(struct hsr_priv *priv,
- const unsigned char *addr,
- unsigned char addr_b[ETH_ALEN],
- unsigned int *addr_b_ifindex,
- int *if1_age,
- u16 *if1_seq,
- int *if2_age,
- u16 *if2_seq)
+int hsr_prp_get_node_data(struct hsr_prp_priv *priv,
+ const unsigned char *addr,
+ unsigned char addr_b[ETH_ALEN],
+ unsigned int *addr_b_ifindex,
+ int *if1_age,
+ u16 *if1_seq,
+ int *if2_age,
+ u16 *if2_seq)
{
- struct hsr_node *node;
- struct hsr_port *port;
+ struct hsr_prp_node *node;
+ struct hsr_prp_port *port;
unsigned long tdiff;
node = find_node_by_addr_A(&priv->node_db, addr);
@@ -490,8 +497,8 @@ int hsr_get_node_data(struct hsr_priv *priv,
ether_addr_copy(addr_b, node->macaddress_B);
- tdiff = jiffies - node->time_in[HSR_PT_SLAVE_A];
- if (node->time_in_stale[HSR_PT_SLAVE_A])
+ tdiff = jiffies - node->time_in[HSR_PRP_PT_SLAVE_A];
+ if (node->time_in_stale[HSR_PRP_PT_SLAVE_A])
*if1_age = INT_MAX;
#if HZ <= MSEC_PER_SEC
else if (tdiff > msecs_to_jiffies(INT_MAX))
@@ -500,8 +507,8 @@ int hsr_get_node_data(struct hsr_priv *priv,
else
*if1_age = jiffies_to_msecs(tdiff);
- tdiff = jiffies - node->time_in[HSR_PT_SLAVE_B];
- if (node->time_in_stale[HSR_PT_SLAVE_B])
+ tdiff = jiffies - node->time_in[HSR_PRP_PT_SLAVE_B];
+ if (node->time_in_stale[HSR_PRP_PT_SLAVE_B])
*if2_age = INT_MAX;
#if HZ <= MSEC_PER_SEC
else if (tdiff > msecs_to_jiffies(INT_MAX))
@@ -511,10 +518,10 @@ int hsr_get_node_data(struct hsr_priv *priv,
*if2_age = jiffies_to_msecs(tdiff);
/* Present sequence numbers as if they were incoming on interface */
- *if1_seq = node->seq_out[HSR_PT_SLAVE_B];
- *if2_seq = node->seq_out[HSR_PT_SLAVE_A];
+ *if1_seq = node->seq_out[HSR_PRP_PT_SLAVE_B];
+ *if2_seq = node->seq_out[HSR_PRP_PT_SLAVE_A];
- if (node->addr_B_port != HSR_PT_NONE) {
+ if (node->addr_B_port != HSR_PRP_PT_NONE) {
port = hsr_prp_get_port(priv, node->addr_B_port);
*addr_b_ifindex = port->dev->ifindex;
} else {
@@ -5,58 +5,58 @@
* 2011-2014 Arvid Brodin, arvid.brodin@alten.se
*/
-#ifndef __HSR_FRAMEREG_H
-#define __HSR_FRAMEREG_H
+#ifndef __HSR_PRP_FRAMEREG_H
+#define __HSR_PRP_FRAMEREG_H
#include "hsr_prp_main.h"
-struct hsr_node;
+struct hsr_prp_node;
-void hsr_del_self_node(struct hsr_priv *priv);
-void hsr_del_nodes(struct list_head *node_db);
-struct hsr_node *hsr_get_node(struct hsr_port *port, struct sk_buff *skb,
- bool is_sup);
-void hsr_handle_sup_frame(struct sk_buff *skb, struct hsr_node *node_curr,
- struct hsr_port *port);
-bool hsr_addr_is_self(struct hsr_priv *priv, unsigned char *addr);
+void hsr_prp_del_self_node(struct hsr_prp_priv *priv);
+void hsr_prp_del_nodes(struct list_head *node_db);
+struct hsr_prp_node *hsr_prp_get_node(struct hsr_prp_port *port,
+ struct sk_buff *skb, bool is_sup);
+void hsr_prp_handle_sup_frame(struct sk_buff *skb,
+ struct hsr_prp_node *node_curr,
+ struct hsr_prp_port *port);
+bool hsr_prp_addr_is_self(struct hsr_prp_priv *priv, unsigned char *addr);
-void hsr_addr_subst_source(struct hsr_node *node, struct sk_buff *skb);
-void hsr_addr_subst_dest(struct hsr_node *node_src, struct sk_buff *skb,
- struct hsr_port *port);
+void hsr_prp_addr_subst_source(struct hsr_prp_node *node, struct sk_buff *skb);
+void hsr_prp_addr_subst_dest(struct hsr_prp_node *node_src, struct sk_buff *skb,
+ struct hsr_prp_port *port);
-void hsr_register_frame_in(struct hsr_node *node, struct hsr_port *port,
- u16 sequence_nr);
-int hsr_register_frame_out(struct hsr_port *port, struct hsr_node *node,
- u16 sequence_nr);
+void hsr_prp_register_frame_in(struct hsr_prp_node *node,
+ struct hsr_prp_port *port, u16 sequence_nr);
+int hsr_prp_register_frame_out(struct hsr_prp_port *port,
+ struct hsr_prp_node *node, u16 sequence_nr);
-void hsr_prune_nodes(struct timer_list *t);
+void hsr_prp_prune_nodes(struct timer_list *t);
-int hsr_create_self_node(struct hsr_priv *priv,
- unsigned char addr_a[ETH_ALEN],
- unsigned char addr_b[ETH_ALEN]);
+int hsr_prp_create_self_node(struct hsr_prp_priv *priv,
+ unsigned char addr_a[ETH_ALEN],
+ unsigned char addr_b[ETH_ALEN]);
-void *hsr_get_next_node(struct hsr_priv *priv, void *_pos,
- unsigned char addr[ETH_ALEN]);
+void *hsr_prp_get_next_node(struct hsr_prp_priv *priv, void *_pos,
+ unsigned char addr[ETH_ALEN]);
-int hsr_get_node_data(struct hsr_priv *priv,
- const unsigned char *addr,
- unsigned char addr_b[ETH_ALEN],
- unsigned int *addr_b_ifindex,
- int *if1_age,
- u16 *if1_seq,
- int *if2_age,
- u16 *if2_seq);
+int hsr_prp_get_node_data(struct hsr_prp_priv *priv, const unsigned char *addr,
+ unsigned char addr_b[ETH_ALEN],
+ unsigned int *addr_b_ifindex,
+ int *if1_age,
+ u16 *if1_seq,
+ int *if2_age,
+ u16 *if2_seq);
-struct hsr_node {
+struct hsr_prp_node {
struct list_head mac_list;
unsigned char macaddress_A[ETH_ALEN];
unsigned char macaddress_B[ETH_ALEN];
/* Local slave through which AddrB frames are received from this node */
- enum hsr_port_type addr_B_port;
- unsigned long time_in[HSR_PT_PORTS];
- bool time_in_stale[HSR_PT_PORTS];
- u16 seq_out[HSR_PT_PORTS];
+ enum hsr_prp_port_type addr_B_port;
+ unsigned long time_in[HSR_PRP_PT_PORTS];
+ bool time_in_stale[HSR_PRP_PT_PORTS];
+ u16 seq_out[HSR_PRP_PT_PORTS];
struct rcu_head rcu_head;
};
-#endif /* __HSR_FRAMEREG_H */
+#endif /* __HSR_PRP_FRAMEREG_H */
@@ -15,33 +15,33 @@
#include "hsr_prp_framereg.h"
#include "hsr_prp_slave.h"
-static bool hsr_slave_empty(struct hsr_priv *priv)
+static bool hsr_prp_slave_empty(struct hsr_prp_priv *priv)
{
- struct hsr_port *port;
+ struct hsr_prp_port *port;
- hsr_for_each_port(priv, port)
- if (port->type != HSR_PT_MASTER)
+ hsr_prp_for_each_port(priv, port)
+ if (port->type != HSR_PRP_PT_MASTER)
return false;
return true;
}
-static int hsr_netdev_notify(struct notifier_block *nb, unsigned long event,
- void *ptr)
+static int hsr_prp_netdev_notify(struct notifier_block *nb, unsigned long event,
+ void *ptr)
{
- struct hsr_port *port, *master;
+ struct hsr_prp_port *port, *master;
struct net_device *dev;
- struct hsr_priv *priv;
+ struct hsr_prp_priv *priv;
LIST_HEAD(list_kill);
int mtu_max;
int res;
dev = netdev_notifier_info_to_dev(ptr);
- port = hsr_port_get_rtnl(dev);
+ port = hsr_prp_port_get_rtnl(dev);
if (!port) {
- if (!is_hsr_master(dev))
+ if (!is_hsr_prp_master(dev))
return NOTIFY_DONE; /* Not an HSR device */
priv = netdev_priv(dev);
- port = hsr_prp_get_port(priv, HSR_PT_MASTER);
+ port = hsr_prp_get_port(priv, HSR_PRP_PT_MASTER);
if (!port) {
/* Resend of notification concerning removed device? */
return NOTIFY_DONE;
@@ -54,14 +54,14 @@ static int hsr_netdev_notify(struct notifier_block *nb, unsigned long event,
case NETDEV_UP: /* Administrative state DOWN */
case NETDEV_DOWN: /* Administrative state UP */
case NETDEV_CHANGE: /* Link (carrier) state changes */
- hsr_check_carrier_and_operstate(priv);
+ hsr_prp_check_carrier_and_operstate(priv);
break;
case NETDEV_CHANGENAME:
- if (is_hsr_master(dev))
- hsr_debugfs_rename(dev);
+ if (is_hsr_prp_master(dev))
+ hsr_prp_debugfs_rename(dev);
break;
case NETDEV_CHANGEADDR:
- if (port->type == HSR_PT_MASTER) {
+ if (port->type == HSR_PRP_PT_MASTER) {
/* This should not happen since there's no
* ndo_set_mac_address() for HSR devices - i.e. not
* supported.
@@ -69,37 +69,37 @@ static int hsr_netdev_notify(struct notifier_block *nb, unsigned long event,
break;
}
- master = hsr_prp_get_port(priv, HSR_PT_MASTER);
+ master = hsr_prp_get_port(priv, HSR_PRP_PT_MASTER);
- if (port->type == HSR_PT_SLAVE_A) {
+ if (port->type == HSR_PRP_PT_SLAVE_A) {
ether_addr_copy(master->dev->dev_addr, dev->dev_addr);
call_netdevice_notifiers(NETDEV_CHANGEADDR,
master->dev);
}
/* Make sure we recognize frames from ourselves in hsr_rcv() */
- port = hsr_prp_get_port(priv, HSR_PT_SLAVE_B);
- res = hsr_create_self_node(priv,
- master->dev->dev_addr,
- port ?
- port->dev->dev_addr :
- master->dev->dev_addr);
+ port = hsr_prp_get_port(priv, HSR_PRP_PT_SLAVE_B);
+ res = hsr_prp_create_self_node(priv,
+ master->dev->dev_addr,
+ port ? port->dev->dev_addr :
+ master->dev->dev_addr);
if (res)
netdev_warn(master->dev,
"Could not update HSR node address.\n");
break;
case NETDEV_CHANGEMTU:
- if (port->type == HSR_PT_MASTER)
+ if (port->type == HSR_PRP_PT_MASTER)
break; /* Handled in ndo_change_mtu() */
- mtu_max = hsr_get_max_mtu(port->priv);
- master = hsr_prp_get_port(port->priv, HSR_PT_MASTER);
+ mtu_max = hsr_prp_get_max_mtu(port->priv);
+ master = hsr_prp_get_port(port->priv, HSR_PRP_PT_MASTER);
master->dev->mtu = mtu_max;
break;
case NETDEV_UNREGISTER:
- if (!is_hsr_master(dev)) {
- master = hsr_prp_get_port(port->priv, HSR_PT_MASTER);
- hsr_del_port(port);
- if (hsr_slave_empty(master->priv)) {
+ if (!is_hsr_prp_master(dev)) {
+ master = hsr_prp_get_port(port->priv,
+ HSR_PRP_PT_MASTER);
+ hsr_prp_del_port(port);
+ if (hsr_prp_slave_empty(master->priv)) {
unregister_netdevice_queue(master->dev,
&list_kill);
unregister_netdevice_many(&list_kill);
@@ -116,25 +116,26 @@ static int hsr_netdev_notify(struct notifier_block *nb, unsigned long event,
return NOTIFY_DONE;
}
-struct hsr_port *hsr_prp_get_port(struct hsr_priv *priv, enum hsr_port_type pt)
+struct hsr_prp_port *hsr_prp_get_port(struct hsr_prp_priv *priv,
+ enum hsr_prp_port_type pt)
{
- struct hsr_port *port;
+ struct hsr_prp_port *port;
- hsr_for_each_port(priv, port)
+ hsr_prp_for_each_port(priv, port)
if (port->type == pt)
return port;
return NULL;
}
static struct notifier_block hsr_nb = {
- .notifier_call = hsr_netdev_notify, /* Slave event notifications */
+ .notifier_call = hsr_prp_netdev_notify, /* Slave event notifications */
};
-static int __init hsr_init(void)
+static int __init hsr_prp_init(void)
{
int res;
- BUILD_BUG_ON(sizeof(struct hsr_tag) != HSR_HLEN);
+ BUILD_BUG_ON(sizeof(struct hsr_tag) != HSR_PRP_HLEN);
register_netdevice_notifier(&hsr_nb);
res = hsr_netlink_init();
@@ -142,13 +143,13 @@ static int __init hsr_init(void)
return res;
}
-static void __exit hsr_exit(void)
+static void __exit hsr_prp_exit(void)
{
unregister_netdevice_notifier(&hsr_nb);
hsr_netlink_exit();
- hsr_debugfs_remove_root();
+ hsr_prp_debugfs_remove_root();
}
-module_init(hsr_init);
-module_exit(hsr_exit);
+module_init(hsr_prp_init);
+module_exit(hsr_prp_exit);
MODULE_LICENSE("GPL");
@@ -5,8 +5,8 @@
* 2011-2014 Arvid Brodin, arvid.brodin@alten.se
*/
-#ifndef __HSR_PRIVATE_H
-#define __HSR_PRIVATE_H
+#ifndef __HSR_PRP_MAIN_H
+#define __HSR_PRP_MAIN_H
#include <linux/netdevice.h>
#include <linux/list.h>
@@ -15,19 +15,19 @@
* Table 8.
* All values in milliseconds.
*/
-#define HSR_LIFE_CHECK_INTERVAL 2000 /* ms */
-#define HSR_NODE_FORGET_TIME 60000 /* ms */
-#define HSR_ANNOUNCE_INTERVAL 100 /* ms */
+#define HSR_PRP_LIFE_CHECK_INTERVAL 2000 /* ms */
+#define HSR_PRP_NODE_FORGET_TIME 60000 /* ms */
+#define HSR_PRP_ANNOUNCE_INTERVAL 100 /* ms */
/* By how much may slave1 and slave2 timestamps of latest received frame from
* each node differ before we notify of communication problem?
*/
-#define MAX_SLAVE_DIFF 3000 /* ms */
-#define HSR_SEQNR_START (USHRT_MAX - 1024)
-#define HSR_SUP_SEQNR_START (HSR_SEQNR_START / 2)
+#define HSR_PRP_MAX_SLAVE_DIFF 3000 /* ms */
+#define HSR_PRP_SEQNR_START (USHRT_MAX - 1024)
+#define HSR_PRP_SUP_SEQNR_START (HSR_PRP_SEQNR_START / 2)
/* How often shall we check for broken ring and remove node entries older than
- * HSR_NODE_FORGET_TIME?
+ * HSR_PRP_NODE_FORGET_TIME?
*/
#define PRUNE_PERIOD 3000 /* ms */
@@ -48,7 +48,7 @@ struct hsr_tag {
__be16 encap_proto;
} __packed;
-#define HSR_HLEN 6
+#define HSR_PRP_HLEN 6
#define HSR_V1_SUP_LSDUSIZE 52
@@ -83,55 +83,56 @@ struct hsr_ethhdr {
/* HSR Supervision Frame data types.
* Field names as defined in the IEC:2010 standard for HSR.
*/
-struct hsr_sup_tag {
+struct hsr_prp_sup_tag {
__be16 path_and_HSR_ver;
__be16 sequence_nr;
__u8 HSR_TLV_type;
__u8 HSR_TLV_length;
} __packed;
-struct hsr_sup_payload {
+struct hsr_prp_sup_payload {
unsigned char macaddress_A[ETH_ALEN];
} __packed;
-static inline void set_hsr_stag_path(struct hsr_sup_tag *hst, u16 path)
+static inline void set_hsr_stag_path(struct hsr_prp_sup_tag *hst, u16 path)
{
set_hsr_tag_path((struct hsr_tag *)hst, path);
}
-static inline void set_hsr_stag_HSR_ver(struct hsr_sup_tag *hst, u16 HSR_ver)
+static inline void set_hsr_stag_HSR_ver(struct hsr_prp_sup_tag *hst,
+ u16 HSR_ver)
{
set_hsr_tag_LSDU_size((struct hsr_tag *)hst, HSR_ver);
}
struct hsrv0_ethhdr_sp {
struct ethhdr ethhdr;
- struct hsr_sup_tag hsr_sup;
+ struct hsr_prp_sup_tag hsr_sup;
} __packed;
struct hsrv1_ethhdr_sp {
struct ethhdr ethhdr;
struct hsr_tag hsr;
- struct hsr_sup_tag hsr_sup;
+ struct hsr_prp_sup_tag hsr_sup;
} __packed;
-enum hsr_port_type {
- HSR_PT_NONE = 0, /* Must be 0, used by framereg */
- HSR_PT_SLAVE_A,
- HSR_PT_SLAVE_B,
- HSR_PT_INTERLINK,
- HSR_PT_MASTER,
- HSR_PT_PORTS, /* This must be the last item in the enum */
+enum hsr_prp_port_type {
+ HSR_PRP_PT_NONE = 0, /* Must be 0, used by framereg */
+ HSR_PRP_PT_SLAVE_A,
+ HSR_PRP_PT_SLAVE_B,
+ HSR_PRP_PT_INTERLINK,
+ HSR_PRP_PT_MASTER,
+ HSR_PRP_PT_PORTS, /* This must be the last item in the enum */
};
-struct hsr_port {
+struct hsr_prp_port {
struct list_head port_list;
struct net_device *dev;
- struct hsr_priv *priv;
- enum hsr_port_type type;
+ struct hsr_prp_priv *priv;
+ enum hsr_prp_port_type type;
};
-struct hsr_priv {
+struct hsr_prp_priv {
struct rcu_head rcu_head;
struct list_head ports;
struct list_head node_db; /* Known HSR nodes */
@@ -150,10 +151,11 @@ struct hsr_priv {
#endif
};
-#define hsr_for_each_port(priv, port) \
+#define hsr_prp_for_each_port(priv, port) \
list_for_each_entry_rcu((port), &(priv)->ports, port_list)
-struct hsr_port *hsr_prp_get_port(struct hsr_priv *priv, enum hsr_port_type pt);
+struct hsr_prp_port *hsr_prp_get_port(struct hsr_prp_priv *priv,
+ enum hsr_prp_port_type pt);
/* Caller must ensure skb is a valid HSR frame */
static inline u16 hsr_get_skb_sequence_nr(struct sk_buff *skb)
@@ -165,24 +167,29 @@ static inline u16 hsr_get_skb_sequence_nr(struct sk_buff *skb)
}
#if IS_ENABLED(CONFIG_DEBUG_FS)
-void hsr_debugfs_rename(struct net_device *dev);
-void hsr_debugfs_init(struct hsr_priv *priv, struct net_device *hsr_dev);
-void hsr_debugfs_term(struct hsr_priv *priv);
-void hsr_debugfs_create_root(void);
-void hsr_debugfs_remove_root(void);
+void hsr_prp_debugfs_rename(struct net_device *dev);
+void hsr_prp_debugfs_init(struct hsr_prp_priv *priv, struct net_device *ndev);
+void hsr_prp_debugfs_term(struct hsr_prp_priv *priv);
+void hsr_prp_debugfs_create_root(void);
+void hsr_prp_debugfs_remove_root(void);
#else
-static inline void hsr_debugfs_rename(struct net_device *dev)
+static inline void hsr_prp_debugfs_rename(struct net_device *dev)
{
}
-static inline void hsr_debugfs_init(struct hsr_priv *priv,
- struct net_device *hsr_dev)
+
+static inline void hsr_prp_debugfs_init(struct hsr_prp_priv *priv,
+ struct net_device *ndev)
{}
-static inline void hsr_debugfs_term(struct hsr_priv *priv)
+
+static inline void hsr_prp_debugfs_term(struct hsr_prp_priv *priv)
{}
+
static inline void hsr_debugfs_create_root(void)
{}
+
static inline void hsr_debugfs_remove_root(void)
{}
+
#endif
-#endif /* __HSR_PRIVATE_H */
+#endif /* __HSR_PRP_MAIN_H */
@@ -14,10 +14,10 @@
#include "hsr_prp_forward.h"
#include "hsr_prp_framereg.h"
-static rx_handler_result_t hsr_handle_frame(struct sk_buff **pskb)
+static rx_handler_result_t hsr_prp_handle_frame(struct sk_buff **pskb)
{
struct sk_buff *skb = *pskb;
- struct hsr_port *port;
+ struct hsr_prp_port *port;
__be16 protocol;
if (!skb_mac_header_was_set(skb)) {
@@ -25,11 +25,11 @@ static rx_handler_result_t hsr_handle_frame(struct sk_buff **pskb)
return RX_HANDLER_PASS;
}
- port = hsr_port_get_rcu(skb->dev);
+ port = hsr_prp_port_get_rcu(skb->dev);
if (!port)
goto finish_pass;
- if (hsr_addr_is_self(port->priv, eth_hdr(skb)->h_source)) {
+ if (hsr_prp_addr_is_self(port->priv, eth_hdr(skb)->h_source)) {
/* Directly kill frames sent by ourselves */
kfree_skb(skb);
goto finish_consume;
@@ -41,7 +41,7 @@ static rx_handler_result_t hsr_handle_frame(struct sk_buff **pskb)
skb_push(skb, ETH_HLEN);
- hsr_forward_skb(skb, port);
+ hsr_prp_forward_skb(skb, port);
finish_consume:
return RX_HANDLER_CONSUMED;
@@ -50,13 +50,13 @@ static rx_handler_result_t hsr_handle_frame(struct sk_buff **pskb)
return RX_HANDLER_PASS;
}
-bool hsr_port_exists(const struct net_device *dev)
+bool hsr_prp_port_exists(const struct net_device *dev)
{
- return rcu_access_pointer(dev->rx_handler) == hsr_handle_frame;
+ return rcu_access_pointer(dev->rx_handler) == hsr_prp_handle_frame;
}
-static int hsr_check_dev_ok(struct net_device *dev,
- struct netlink_ext_ack *extack)
+static int hsr_prp_check_dev_ok(struct net_device *dev,
+ struct netlink_ext_ack *extack)
{
/* Don't allow HSR on non-ethernet like devices */
if ((dev->flags & IFF_LOOPBACK) || dev->type != ARPHRD_ETHER ||
@@ -66,13 +66,13 @@ static int hsr_check_dev_ok(struct net_device *dev,
}
/* Don't allow enslaving hsr devices */
- if (is_hsr_master(dev)) {
+ if (is_hsr_prp_master(dev)) {
NL_SET_ERR_MSG_MOD(extack,
"Cannot create trees of HSR devices.");
return -EINVAL;
}
- if (hsr_port_exists(dev)) {
+ if (hsr_prp_port_exists(dev)) {
NL_SET_ERR_MSG_MOD(extack,
"This device is already a HSR slave.");
return -EINVAL;
@@ -97,27 +97,28 @@ static int hsr_check_dev_ok(struct net_device *dev,
}
/* Setup device to be added to the HSR bridge. */
-static int hsr_portdev_setup(struct hsr_priv *priv, struct net_device *dev,
- struct hsr_port *port,
- struct netlink_ext_ack *extack)
+static int hsr_prp_portdev_setup(struct hsr_prp_priv *priv,
+ struct net_device *dev,
+ struct hsr_prp_port *port,
+ struct netlink_ext_ack *extack)
{
- struct net_device *hsr_dev;
- struct hsr_port *master;
+ struct net_device *hsr_prp_dev;
+ struct hsr_prp_port *master;
int res;
res = dev_set_promiscuity(dev, 1);
if (res)
return res;
- master = hsr_prp_get_port(priv, HSR_PT_MASTER);
- hsr_dev = master->dev;
+ master = hsr_prp_get_port(priv, HSR_PRP_PT_MASTER);
+ hsr_prp_dev = master->dev;
- res = netdev_upper_dev_link(dev, hsr_dev, extack);
+ res = netdev_upper_dev_link(dev, hsr_prp_dev, extack);
if (res)
goto fail_upper_dev_link;
- res = netdev_rx_handler_register(dev, hsr_handle_frame, port);
+ res = netdev_rx_handler_register(dev, hsr_prp_handle_frame, port);
if (res)
goto fail_rx_handler;
dev_disable_lro(dev);
@@ -125,20 +126,21 @@ static int hsr_portdev_setup(struct hsr_priv *priv, struct net_device *dev,
return 0;
fail_rx_handler:
- netdev_upper_dev_unlink(dev, hsr_dev);
+ netdev_upper_dev_unlink(dev, hsr_prp_dev);
fail_upper_dev_link:
dev_set_promiscuity(dev, -1);
return res;
}
-int hsr_add_port(struct hsr_priv *priv, struct net_device *dev,
- enum hsr_port_type type, struct netlink_ext_ack *extack)
+int hsr_prp_add_port(struct hsr_prp_priv *priv, struct net_device *dev,
+ enum hsr_prp_port_type type,
+ struct netlink_ext_ack *extack)
{
- struct hsr_port *port, *master;
+ struct hsr_prp_port *port, *master;
int res;
- if (type != HSR_PT_MASTER) {
- res = hsr_check_dev_ok(dev, extack);
+ if (type != HSR_PRP_PT_MASTER) {
+ res = hsr_prp_check_dev_ok(dev, extack);
if (res)
return res;
}
@@ -155,8 +157,8 @@ int hsr_add_port(struct hsr_priv *priv, struct net_device *dev,
port->dev = dev;
port->type = type;
- if (type != HSR_PT_MASTER) {
- res = hsr_portdev_setup(priv, dev, port, extack);
+ if (type != HSR_PRP_PT_MASTER) {
+ res = hsr_prp_portdev_setup(priv, dev, port, extack);
if (res)
goto fail_dev_setup;
}
@@ -164,9 +166,9 @@ int hsr_add_port(struct hsr_priv *priv, struct net_device *dev,
list_add_tail_rcu(&port->port_list, &priv->ports);
synchronize_rcu();
- master = hsr_prp_get_port(priv, HSR_PT_MASTER);
+ master = hsr_prp_get_port(priv, HSR_PRP_PT_MASTER);
netdev_update_features(master->dev);
- dev_set_mtu(master->dev, hsr_get_max_mtu(priv));
+ dev_set_mtu(master->dev, hsr_prp_get_max_mtu(priv));
return 0;
@@ -175,18 +177,18 @@ int hsr_add_port(struct hsr_priv *priv, struct net_device *dev,
return res;
}
-void hsr_del_port(struct hsr_port *port)
+void hsr_prp_del_port(struct hsr_prp_port *port)
{
- struct hsr_priv *priv;
- struct hsr_port *master;
+ struct hsr_prp_priv *priv;
+ struct hsr_prp_port *master;
priv = port->priv;
- master = hsr_prp_get_port(priv, HSR_PT_MASTER);
+ master = hsr_prp_get_port(priv, HSR_PRP_PT_MASTER);
list_del_rcu(&port->port_list);
if (port != master) {
netdev_update_features(master->dev);
- dev_set_mtu(master->dev, hsr_get_max_mtu(priv));
+ dev_set_mtu(master->dev, hsr_prp_get_max_mtu(priv));
netdev_rx_handler_unregister(port->dev);
dev_set_promiscuity(port->dev, -1);
netdev_upper_dev_unlink(port->dev, master->dev);
@@ -4,30 +4,34 @@
* 2011-2014 Arvid Brodin, arvid.brodin@alten.se
*/
-#ifndef __HSR_SLAVE_H
-#define __HSR_SLAVE_H
+#ifndef __HSR_PRP_SLAVE_H
+#define __HSR_PRP_SLAVE_H
#include <linux/skbuff.h>
#include <linux/netdevice.h>
#include <linux/rtnetlink.h>
#include "hsr_prp_main.h"
-int hsr_add_port(struct hsr_priv *priv, struct net_device *dev,
- enum hsr_port_type pt, struct netlink_ext_ack *extack);
-void hsr_del_port(struct hsr_port *port);
-bool hsr_port_exists(const struct net_device *dev);
+int hsr_prp_add_port(struct hsr_prp_priv *hsr, struct net_device *dev,
+ enum hsr_prp_port_type pt, struct netlink_ext_ack *extack);
+void hsr_prp_del_port(struct hsr_prp_port *port);
+bool hsr_prp_port_exists(const struct net_device *dev);
-static inline struct hsr_port *hsr_port_get_rtnl(const struct net_device *dev)
+static inline
+struct hsr_prp_port *hsr_prp_port_get_rtnl(const struct net_device *dev)
{
ASSERT_RTNL();
- return hsr_port_exists(dev) ?
- rtnl_dereference(dev->rx_handler_data) : NULL;
+ return hsr_prp_port_exists(dev) ?
+ rtnl_dereference(dev->rx_handler_data) :
+ NULL;
}
-static inline struct hsr_port *hsr_port_get_rcu(const struct net_device *dev)
+static inline
+struct hsr_prp_port *hsr_prp_port_get_rcu(const struct net_device *dev)
{
- return hsr_port_exists(dev) ?
- rcu_dereference(dev->rx_handler_data) : NULL;
+ return hsr_prp_port_exists(dev) ?
+ rcu_dereference(dev->rx_handler_data) :
+ NULL;
}
-#endif /* __HSR_SLAVE_H */
+#endif /* __HSR_PRP_SLAVE_H */
This is a preparatory patch to introduce PRP device support. PRP device is very much similar to HSR in terms of device creation/removal, packet handling, etc. So this patch rename the functions that can be reused for PRP with a hsr_prp prefix. Common definitions and structure types are prefixed as well per similar reason. Similarly all constants common to HSR and PRP are prefixed with HSR_PRP. Common code that uses hsr_dev for function argument is changed to hsr_prp_dev or dev or ndev depending on the existing usage and context. Signed-off-by: Murali Karicheri <m-karicheri2@ti.com> --- net/hsr-prp/hsr_netlink.c | 75 ++++----- net/hsr-prp/hsr_netlink.h | 12 +- net/hsr-prp/hsr_prp_debugfs.c | 60 ++++---- net/hsr-prp/hsr_prp_device.c | 271 +++++++++++++++++---------------- net/hsr-prp/hsr_prp_device.h | 20 +-- net/hsr-prp/hsr_prp_forward.c | 122 ++++++++------- net/hsr-prp/hsr_prp_forward.h | 8 +- net/hsr-prp/hsr_prp_framereg.c | 209 +++++++++++++------------ net/hsr-prp/hsr_prp_framereg.h | 74 ++++----- net/hsr-prp/hsr_prp_main.c | 81 +++++----- net/hsr-prp/hsr_prp_main.h | 85 ++++++----- net/hsr-prp/hsr_prp_slave.c | 72 ++++----- net/hsr-prp/hsr_prp_slave.h | 30 ++-- 13 files changed, 576 insertions(+), 543 deletions(-)