From owner-svn-src-projects@FreeBSD.ORG Sun Jun 21 16:10:41 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 701DC106566C; Sun, 21 Jun 2009 16:10:41 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 43FE18FC08; Sun, 21 Jun 2009 16:10:41 +0000 (UTC) (envelope-from rpaulo@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n5LGAfeB011739; Sun, 21 Jun 2009 16:10:41 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n5LGAfGi011737; Sun, 21 Jun 2009 16:10:41 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200906211610.n5LGAfGi011737@svn.freebsd.org> From: Rui Paulo Date: Sun, 21 Jun 2009 16:10:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r194589 - projects/mesh11s/sys/net80211 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2009 16:10:41 -0000 Author: rpaulo Date: Sun Jun 21 16:10:40 2009 New Revision: 194589 URL: http://svn.freebsd.org/changeset/base/194589 Log: Fix a bug in an edge case of peer link establishment and add some KASSERTS. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.c Sun Jun 21 15:40:39 2009 (r194588) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.c Sun Jun 21 16:10:40 2009 (r194589) @@ -655,6 +655,7 @@ mesh_recv_mgmt(struct ieee80211_node *ni vap->iv_meshflags & IEEE80211_MFLAGS_AP && ni->ni_mlstate == IEEE80211_NODE_MESH_IDLE) { union ieee80211_send_action_args vargs; + ni->ni_mlpid = mesh_generateid(vap); mesh_linkchange(ni, IEEE80211_NODE_MESH_OPENSNT); vargs.fixedarg[0] = ni->ni_mlpid; @@ -859,8 +860,8 @@ mesh_recv_action(struct ieee80211_node * case IEEE80211_NODE_MESH_OPENSNT: case IEEE80211_NODE_MESH_OPENRCV: case IEEE80211_NODE_MESH_CONFIRMRECV: - vargs.fixedarg[0] = ni->ni_mllid; - vargs.fixedarg[1] = ni->ni_mlpid; + vargs.fixedarg[0] = ni->ni_mlpid; + vargs.fixedarg[1] = ni->ni_mllid; vargs.fixedarg[2] = IEEE80211_REASON_PEER_LINK_CANCELED; ieee80211_send_action(ni, @@ -936,10 +937,10 @@ mesh_recv_action(struct ieee80211_node * /* NB: don't setup/clear any timeout */ break; case IEEE80211_NODE_MESH_CONFIRMRECV: - if (ni->ni_mllid != meshpeer->peer_linkid || - ni->ni_mlpid != meshpeer->peer_llinkid) { - vargs.fixedarg[0] = ni->ni_mllid; - vargs.fixedarg[1] = ni->ni_mlpid; + if (ni->ni_mlpid != meshpeer->peer_linkid || + ni->ni_mllid != meshpeer->peer_llinkid) { + vargs.fixedarg[0] = ni->ni_mlpid; + vargs.fixedarg[1] = ni->ni_mllid; vargs.fixedarg[2] = IEEE80211_REASON_PEER_LINK_CANCELED; ieee80211_send_action(ni, @@ -1383,6 +1384,7 @@ uint8_t * ieee80211_add_meshpeer(uint8_t *frm, uint8_t subtype, uint16_t localid, uint16_t peerid, uint16_t reason) { + KASSERT(localid != 0, ("localid == 0")); *frm++ = IEEE80211_ELEMID_MESHPEER; switch (subtype) { @@ -1392,6 +1394,7 @@ ieee80211_add_meshpeer(uint8_t *frm, uin ADDSHORT(frm, localid); /* local ID */ break; case IEEE80211_MESH_PEER_LINK_CONFIRM: + KASSERT(peerid != 0, ("sending peer confirm without peer id")); *frm++ = 5; /* length */ *frm++ = subtype; ADDSHORT(frm, localid); /* local ID */