@@ -262,6 +262,7 @@ struct rstp_port {
struct rstp *rstp OVS_GUARDED_BY(rstp_mutex);
struct hmap_node node OVS_GUARDED_BY(rstp_mutex); /* In rstp->ports. */
void *aux OVS_GUARDED_BY(rstp_mutex);
+ char *port_name;
struct rstp_bpdu received_bpdu_buffer OVS_GUARDED_BY(rstp_mutex);
/*************************************************************************
* MAC status parameters
@@ -760,6 +760,14 @@ rstp_port_set_port_number__(struct rstp_port *port, uint16_t port_number)
}
}
+static void
+rstp_port_set_port_name__(struct rstp_port *port, const char *name)
+ OVS_REQUIRES(rstp_mutex)
+{
+ free(port->port_name);
+ port->port_name = xstrdup(name);
+}
+
/* Converts the link speed to a port path cost [Table 17-3]. */
uint32_t
rstp_convert_speed_to_cost(unsigned int speed)
@@ -1173,6 +1181,7 @@ rstp_add_port(struct rstp *rstp)
rstp_port_set_priority__(p, RSTP_DEFAULT_PORT_PRIORITY);
rstp_port_set_port_number__(p, 0);
p->aux = NULL;
+ p->port_name = NULL;
rstp_initialize_port_defaults__(p);
VLOG_DBG("%s: RSTP port "RSTP_PORT_ID_FMT" initialized.", rstp->name,
p->port_id);
@@ -1210,6 +1219,7 @@ rstp_port_unref(struct rstp_port *rp)
ovs_mutex_lock(&rstp_mutex);
rstp = rp->rstp;
rstp_port_set_state__(rp, RSTP_DISABLED);
+ free(rp->port_name);
hmap_remove(&rstp->ports, &rp->node);
VLOG_DBG("%s: removed port "RSTP_PORT_ID_FMT"", rstp->name,
rp->port_id);
@@ -1448,13 +1458,15 @@ void
rstp_port_set(struct rstp_port *port, uint16_t port_num, int priority,
uint32_t path_cost, bool is_admin_edge, bool is_auto_edge,
enum rstp_admin_point_to_point_mac_state admin_p2p_mac_state,
- bool admin_port_state, bool do_mcheck, void *aux)
+ bool admin_port_state, bool do_mcheck, void *aux,
+ const char *name)
OVS_EXCLUDED(rstp_mutex)
{
ovs_mutex_lock(&rstp_mutex);
port->aux = aux;
rstp_port_set_priority__(port, priority);
rstp_port_set_port_number__(port, port_num);
+ rstp_port_set_port_name__(port, name);
rstp_port_set_path_cost__(port, path_cost);
rstp_port_set_admin_edge__(port, is_admin_edge);
rstp_port_set_auto_edge__(port, is_auto_edge);
@@ -221,7 +221,8 @@ uint32_t rstp_convert_speed_to_cost(unsigned int speed);
void rstp_port_set(struct rstp_port *, uint16_t port_num, int priority,
uint32_t path_cost, bool is_admin_edge, bool is_auto_edge,
enum rstp_admin_point_to_point_mac_state admin_p2p_mac_state,
- bool admin_port_state, bool do_mcheck, void *aux)
+ bool admin_port_state, bool do_mcheck, void *aux,
+ const char *name)
OVS_EXCLUDED(rstp_mutex);
enum rstp_state rstp_port_get_state(const struct rstp_port *)
@@ -2722,7 +2722,7 @@ set_rstp_port(struct ofport *ofport_,
rstp_port_set(rp, s->port_num, s->priority, s->path_cost,
s->admin_edge_port, s->auto_edge,
s->admin_p2p_mac_state, s->admin_port_state, s->mcheck,
- ofport);
+ ofport, netdev_get_name(ofport->up.netdev));
update_rstp_port_state(ofport);
/* Synchronize operational status. */
rstp_port_set_mac_operational(rp, ofport->may_enable);