From: Ethan Jackson Date: Wed, 19 Jun 2013 21:40:21 +0000 (-0700) Subject: lacp: Handle unknown slaves in lacp_process_packet(). X-Git-Tag: sliver-openvswitch-2.0.90-1~36^2~79 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=f1ce35146bfef05de5f342813fc8a8678eed96e8;p=sliver-openvswitch.git lacp: Handle unknown slaves in lacp_process_packet(). In future patches, ofproto-dpif-xlate may be temporarily out of sync with ofproto-dpif proper, and pass an unknown ofport to lacp_process_packet(). This patch handles that edge case gracefully. Signed-off-by: Ethan Jackson Acked-by: Ben Pfaff --- diff --git a/lib/lacp.c b/lib/lacp.c index 9daca3bd1..64cdbe728 100644 --- a/lib/lacp.c +++ b/lib/lacp.c @@ -279,6 +279,10 @@ lacp_process_packet(struct lacp *lacp, const void *slave_, const struct lacp_pdu *pdu; long long int tx_rate; + if (!slave) { + return; + } + pdu = parse_lacp_packet(packet); if (!pdu) { VLOG_WARN_RL(&rl, "%s: received an unparsable LACP PDU.", lacp->name); @@ -374,6 +378,10 @@ lacp_slave_carrier_changed(const struct lacp *lacp, const void *slave_) if (lacp) { struct slave *slave = slave_lookup(lacp, slave_); + if (!slave) { + return; + } + if (slave->status == LACP_CURRENT || slave->lacp->active) { slave_set_expired(slave); } @@ -395,7 +403,8 @@ bool lacp_slave_may_enable(const struct lacp *lacp, const void *slave_) { if (lacp) { - return slave_may_enable__(slave_lookup(lacp, slave_)); + struct slave *slave = slave_lookup(lacp, slave_); + return slave ? slave_may_enable__(slave) : false; } else { return true; } @@ -407,7 +416,8 @@ lacp_slave_may_enable(const struct lacp *lacp, const void *slave_) bool lacp_slave_is_current(const struct lacp *lacp, const void *slave_) { - return slave_lookup(lacp, slave_)->status != LACP_DEFAULTED; + struct slave *slave = slave_lookup(lacp, slave_); + return slave ? slave->status != LACP_DEFAULTED : false; } /* This function should be called periodically to update 'lacp'. */