net/hsr: Use list_head (and rcu) instead of array for slave devices.

Signed-off-by: Arvid Brodin <arvid.brodin@alten.se>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Arvid Brodin
2014-07-04 23:38:05 +02:00
committed by David S. Miller
parent 51f3c60531
commit c5a7591172
9 changed files with 439 additions and 406 deletions

View File

@@ -136,20 +136,26 @@ struct hsr_ethhdr_sp {
} __packed;
enum hsr_dev_idx {
HSR_DEV_NONE = -1,
HSR_DEV_SLAVE_A = 0,
HSR_DEV_SLAVE_B,
HSR_DEV_MASTER,
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 */
};
struct hsr_port {
struct list_head port_list;
struct net_device *dev;
struct hsr_priv *hsr;
enum hsr_port_type type;
};
#define HSR_MAX_SLAVE (HSR_DEV_SLAVE_B + 1)
#define HSR_MAX_DEV (HSR_DEV_MASTER + 1)
struct hsr_priv {
struct list_head hsr_list; /* List of hsr devices */
struct rcu_head rcu_head;
struct net_device *dev;
struct net_device *slave[HSR_MAX_SLAVE];
struct list_head ports;
struct list_head node_db; /* Other HSR nodes */
struct list_head self_node_db; /* MACs of slaves */
struct timer_list announce_timer; /* Supervision frame dispatch */
@@ -160,11 +166,6 @@ struct hsr_priv {
unsigned char sup_multicast_addr[ETH_ALEN];
};
void register_hsr_master(struct hsr_priv *hsr);
void unregister_hsr_master(struct hsr_priv *hsr);
bool is_hsr_slave(struct net_device *dev);
struct hsr_priv *get_hsr_master(struct net_device *dev);
struct net_device *get_other_slave(struct hsr_priv *hsr,
struct net_device *dev);
struct hsr_port *hsr_port_get_hsr(struct hsr_priv *hsr, enum hsr_port_type pt);
#endif /* __HSR_PRIVATE_H */