From owner-svn-src-projects@FreeBSD.ORG Fri May 1 17:12:10 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 818A1106566B; Fri, 1 May 2009 17:12:10 +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 6F6B28FC16; Fri, 1 May 2009 17:12:10 +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 n41HCAHg048403; Fri, 1 May 2009 17:12:10 GMT (envelope-from rpaulo@svn.freebsd.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n41HCAtU048400; Fri, 1 May 2009 17:12:10 GMT (envelope-from rpaulo@svn.freebsd.org) Message-Id: <200905011712.n41HCAtU048400@svn.freebsd.org> From: Rui Paulo Date: Fri, 1 May 2009 17:12:10 +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: r191721 - 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: Fri, 01 May 2009 17:12:10 -0000 Author: rpaulo Date: Fri May 1 17:12:10 2009 New Revision: 191721 URL: http://svn.freebsd.org/changeset/base/191721 Log: Implement ieee80211_add_meshpeer() and use it when necessary. While there, correctly fill the capinfo for mesh action frames. Sponsored by: The FreeBSD Foundation Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c projects/mesh11s/sys/net80211/ieee80211_mesh.h projects/mesh11s/sys/net80211/ieee80211_output.c Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.c Fri May 1 17:05:49 2009 (r191720) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.c Fri May 1 17:12:10 2009 (r191721) @@ -661,6 +661,41 @@ ieee80211_add_meshconf(uint8_t *frm, str return frm + sizeof(ie); } +uint8_t * +ieee80211_add_meshpeer(uint8_t *frm, uint8_t subtype, uint16_t localid, + uint16_t peerid, uint16_t reason) +{ +#define ADDSHORT(frm, v) do { \ + frm[0] = (v) & 0xff; \ + frm[1] = (v) >> 8; \ + frm += 2; \ +} while (0) + *frm++ = IEEE80211_ELEMID_MESHPEER; + switch (subtype) { + case IEEE80211_MESH_PEER_LINK_OPEN: + *frm++ = 3; /* length */ + *frm++ = subtype; + ADDSHORT(frm, localid); /* local ID */ + break; + case IEEE80211_MESH_PEER_LINK_CONFIRM: + *frm++ = 5; /* length */ + ADDSHORT(frm, localid); /* local ID */ + ADDSHORT(frm, peerid); /* peer ID */ + break; + case IEEE80211_MESH_PEER_LINK_CLOSE: + if (peerid) + *frm++ = 7; /* length */ + else + *frm++ = 5; /* length */ + ADDSHORT(frm, localid); /* local ID */ + if (peerid) + ADDSHORT(frm, peerid); /* peer ID */ + ADDSHORT(frm, reason); + break; + } + return frm; +#undef ADDSHORT +} void ieee80211_create_mbss(struct ieee80211vap *vap, struct ieee80211_channel *chan) { Modified: projects/mesh11s/sys/net80211/ieee80211_mesh.h ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_mesh.h Fri May 1 17:05:49 2009 (r191720) +++ projects/mesh11s/sys/net80211/ieee80211_mesh.h Fri May 1 17:12:10 2009 (r191721) @@ -269,6 +269,8 @@ void ieee80211_mesh_detach(struct ieee8 void ieee80211_parse_meshid(struct ieee80211_node *, const uint8_t *); uint8_t * ieee80211_add_meshid(uint8_t *, struct ieee80211vap *); uint8_t * ieee80211_add_meshconf(uint8_t *, struct ieee80211vap *); +uint8_t * ieee80211_add_meshpeer(uint8_t *, uint8_t, uint16_t, uint16_t, + uint16_t); void ieee80211_create_mbss(struct ieee80211vap *, struct ieee80211_channel *); Modified: projects/mesh11s/sys/net80211/ieee80211_output.c ============================================================================== --- projects/mesh11s/sys/net80211/ieee80211_output.c Fri May 1 17:05:49 2009 (r191720) +++ projects/mesh11s/sys/net80211/ieee80211_output.c Fri May 1 17:12:10 2009 (r191721) @@ -73,7 +73,8 @@ static uint8_t * ieee80211_add_rates(uint8_t *, const struct ieee80211_rateset *); static uint8_t * ieee80211_add_xrates(uint8_t *, const struct ieee80211_rateset *); - +static uint16_t + getcapinfo(struct ieee80211vap *, struct ieee80211_channel *); #ifdef IEEE80211_DEBUG /* * Decide if an outbound management frame should be @@ -666,37 +667,29 @@ ieee80211_send_action(struct ieee80211_n IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni, "send PEER OPEN action: lid %x", args[0]); - *frm++ = 0; /* capabilites */ - *frm++ = 0; + ADDSHORT(frm, getcapinfo(vap, ni->ni_chan)); frm = ieee80211_add_rates(frm, rs); frm = ieee80211_add_xrates(frm, rs); frm = ieee80211_add_meshid(frm, vap); frm = ieee80211_add_meshconf(frm, vap); - *frm++ = IEEE80211_ELEMID_MESHPEER; - *frm++ = 3; /* len */ - *frm++ = IEEE80211_MESH_PEER_LINK_OPEN; /* subtype */ - ADDSHORT(frm, args[0]); /* local ID */ + frm = ieee80211_add_meshpeer(frm, + IEEE80211_MESH_PEER_LINK_OPEN, args[0], 0, 0); break; case IEEE80211_ACTION_MESHPEERING_CONFIRM: IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni, "send PEER CONFIRM action: lid %x, pid %x", args[0], args[1]); - *frm++ = 0; /* capabilites */ - *frm++ = 0; - *frm++ = 0; /* status code */ - *frm++ = 0; - *frm++ = 0; /* AID */ - *frm++ = 0; + ADDSHORT(frm, getcapinfo(vap, ni->ni_chan)); + ADDSHORT(frm, 0); /* status code */ + ADDSHORT(frm, 0); /* AID */ frm = ieee80211_add_rates(frm, rs); frm = ieee80211_add_xrates(frm, rs); frm = ieee80211_add_meshid(frm, vap); frm = ieee80211_add_meshconf(frm, vap); - *frm++ = IEEE80211_ELEMID_MESHPEER; - *frm++ = 5; /* len */ - *frm++ = IEEE80211_MESH_PEER_LINK_CONFIRM; /* subtype */ - ADDSHORT(frm, args[0]); - ADDSHORT(frm, args[1]); + frm = ieee80211_add_meshpeer(frm, + IEEE80211_MESH_PEER_LINK_CONFIRM, args[0], args[1], + 0); break; } break;