svn commit: r194594 - projects/mesh11s/sys/net80211
Rui Paulo
rpaulo at FreeBSD.org
Sun Jun 21 16:42:55 UTC 2009
Author: rpaulo
Date: Sun Jun 21 16:42:52 2009
New Revision: 194594
URL: http://svn.freebsd.org/changeset/base/194594
Log:
Add HWMP_LOCK/UNLOCK macros and use them.
Sponsored by: The FreeBSD Foundation
Modified:
projects/mesh11s/sys/net80211/ieee80211_hwmp.c
Modified: projects/mesh11s/sys/net80211/ieee80211_hwmp.c
==============================================================================
--- projects/mesh11s/sys/net80211/ieee80211_hwmp.c Sun Jun 21 16:26:22 2009 (r194593)
+++ projects/mesh11s/sys/net80211/ieee80211_hwmp.c Sun Jun 21 16:42:52 2009 (r194594)
@@ -114,6 +114,9 @@ static const struct timeval ieee80211_hw
#define timeval2msecs(tv) (tv.tv_sec * 1000 + tv.tv_usec / 1000)
+#define HWMP_LOCK(hs) mtx_lock(&(hs)->hs_lock)
+#define HWMP_UNLOCK(hs) mtx_unlock(&(hs)->hs_lock)
+
/*
* Target Address set in a Proactive PREQ.
* XXX
@@ -527,12 +530,12 @@ hwmp_recv_preq(struct ieee80211vap *vap,
return;
}
- mtx_lock(&hs->hs_lock);
+ HWMP_LOCK(hs);
TAILQ_FOREACH(fi, &hs->hs_head, fi_next) {
if (IEEE80211_ADDR_EQ(preq->preq_origaddr, fi->fi_dest))
break;
}
- mtx_unlock(&hs->hs_lock);
+ HWMP_UNLOCK(hs);
/*
* Record the PREQ ID and the originator MAC address.
@@ -545,9 +548,9 @@ hwmp_recv_preq(struct ieee80211vap *vap,
fi->fi_seq = preq->preq_origseq;
fi->fi_metric = preq->preq_metric;
fi->fi_lifetime = preq->preq_lifetime;
- mtx_lock(&hs->hs_lock);
+ HWMP_LOCK(hs);
TAILQ_INSERT_TAIL(&hs->hs_head, fi, fi_next);
- mtx_unlock(&hs->hs_lock);
+ HWMP_UNLOCK(hs);
}
fi->fi_preqid = preq->preq_id;
@@ -732,12 +735,12 @@ hwmp_recv_prep(struct ieee80211vap *vap,
/*
* Find out if this path reply is useful to us.
*/
- mtx_lock(&hs->hs_lock);
+ HWMP_LOCK(hs);
TAILQ_FOREACH(fi, &hs->hs_head, fi_next) {
if (IEEE80211_ADDR_EQ(prep->prep_targetaddr, fi->fi_dest))
break;
}
- mtx_unlock(&hs->hs_lock);
+ HWMP_UNLOCK(hs);
/* XXX */
if (fi == NULL)
@@ -831,12 +834,12 @@ hwmp_recv_perr(struct ieee80211vap *vap,
!(vap->iv_meshflags & IEEE80211_MFLAGS_FWRD))
return;
- mtx_lock(&hs->hs_lock);
+ HWMP_LOCK(hs);
TAILQ_FOREACH(fi, &hs->hs_head, fi_next) {
if (IEEE80211_ADDR_EQ(PERR_DADDR(0), fi->fi_dest))
break;
}
- mtx_unlock(&hs->hs_lock);
+ HWMP_UNLOCK(hs);
if (fi == NULL)
return;
@@ -886,12 +889,12 @@ hwmp_recv_rann(struct ieee80211vap *vap,
* Acceptance criteria: check the HWMP sequence number
* and the path metric is better than what we have.
*/
- mtx_lock(&hs->hs_lock);
+ HWMP_LOCK(hs);
TAILQ_FOREACH(fi, &hs->hs_head, fi_next) {
if (IEEE80211_ADDR_EQ(rann->rann_addr, fi->fi_dest))
break;
}
- mtx_unlock(&hs->hs_lock);
+ HWMP_UNLOCK(hs);
if (fi == NULL) {
struct ieee80211_meshpreq_ie preq;
@@ -969,7 +972,7 @@ ieee80211_hwmp_discover(struct ieee80211
if (IEEE80211_IS_MULTICAST(dest))
return ieee80211_find_txnode(vap, dest);
- mtx_lock(&hs->hs_lock);
+ HWMP_LOCK(hs);
TAILQ_FOREACH(fi, &hs->hs_head, fi_next) {
if (IEEE80211_ADDR_EQ(fi->fi_dest, dest)) {
if (IEEE80211_ADDR_EQ(fi->fi_nexthop, invalidaddr)) {
@@ -980,7 +983,7 @@ ieee80211_hwmp_discover(struct ieee80211
break;
}
}
- mtx_unlock(&hs->hs_lock);
+ HWMP_UNLOCK(hs);
if (fi == NULL) {
fi = malloc(sizeof(struct ieee80211_hwmp_fi), M_80211_HWMP,
@@ -990,9 +993,9 @@ ieee80211_hwmp_discover(struct ieee80211
fi->fi_preqid = ++hs->hs_preqid;
fi->fi_metric = IEEE80211_MESHLMETRIC_INITIALVAL;
fi->fi_lifetime = timeval2msecs(ieee80211_hwmp_pathtimeout);
- mtx_lock(&hs->hs_lock);
+ HWMP_LOCK(hs);
TAILQ_INSERT_TAIL(&hs->hs_head, fi, fi_next);
- mtx_unlock(&hs->hs_lock);
+ HWMP_UNLOCK(hs);
sendpreq = 1;
unknowndst = 1;
}
@@ -1042,7 +1045,7 @@ hwmp_ioctl_get80211(struct ieee80211vap
{
int error;
size_t len, off;
- struct ieee80211_hwmp_state *hs;
+ struct ieee80211_hwmp_state *hs = vap->iv_hwmp;
struct ieee80211_hwmp_fi *fi;
uint8_t *p;
@@ -1051,13 +1054,12 @@ hwmp_ioctl_get80211(struct ieee80211vap
error = 0;
switch (ireq->i_type) {
case IEEE80211_IOC_HWMP_TABLE:
- hs = vap->iv_hwmp;
len = 0;
- mtx_lock(&hs->hs_lock);
+ HWMP_LOCK(hs);
TAILQ_FOREACH(fi, &hs->hs_head, fi_next) {
len += sizeof(*fi);
}
- mtx_unlock(&hs->hs_lock);
+ HWMP_UNLOCK(hs);
if (len > ireq->i_len || ireq->i_len < sizeof(*fi))
return ENOMEM;
ireq->i_len = len;
@@ -1065,14 +1067,14 @@ hwmp_ioctl_get80211(struct ieee80211vap
if (p == NULL)
return ENOMEM;
off = 0;
- mtx_lock(&hs->hs_lock);
+ HWMP_LOCK(hs);
TAILQ_FOREACH(fi, &hs->hs_head, fi_next) {
if (off >= len)
break;
memcpy(p + off, fi, sizeof(*fi));
off += sizeof(*fi);
}
- mtx_unlock(&hs->hs_lock);
+ HWMP_UNLOCK(hs);
error = copyout(p, (uint8_t *) ireq->i_data, ireq->i_len);
free(p, M_TEMP);
break;
More information about the svn-src-projects
mailing list