Lines Matching defs:vap
198 mesh_rt_add_locked(struct ieee80211vap *vap,
201 struct ieee80211_mesh_state *ms = vap->iv_mesh;
213 rt->rt_vap = vap;
225 ieee80211_mesh_rt_find(struct ieee80211vap *vap,
228 struct ieee80211_mesh_state *ms = vap->iv_mesh;
238 ieee80211_mesh_rt_add(struct ieee80211vap *vap,
241 struct ieee80211_mesh_state *ms = vap->iv_mesh;
244 KASSERT(ieee80211_mesh_rt_find(vap, dest) == NULL,
246 KASSERT(!IEEE80211_ADDR_EQ(vap->iv_myaddr, dest),
250 rt = mesh_rt_add_locked(vap, dest);
303 ieee80211_mesh_proxy_check(struct ieee80211vap *vap,
306 struct ieee80211_mesh_state *ms = vap->iv_mesh;
312 rt = mesh_rt_add_locked(vap, dest);
314 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, dest,
316 vap->iv_stats.is_mesh_rtaddfailed++;
318 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, dest,
320 IEEE80211_ADDR_COPY(rt->rt_mesh_gate, vap->iv_myaddr);
321 IEEE80211_ADDR_COPY(rt->rt_nexthop, vap->iv_myaddr);
328 struct ieee80211com *ic = vap->iv_ic;
335 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, dest,
337 IEEE80211_ADDR_COPY(rt->rt_nexthop, vap->iv_myaddr);
363 ieee80211_mesh_rt_del(struct ieee80211vap *vap,
366 struct ieee80211_mesh_state *ms = vap->iv_mesh;
373 ms->ms_ppath->mpp_senderror(vap, dest, rt,
376 ms->ms_ppath->mpp_senderror(vap, dest, rt,
388 ieee80211_mesh_rt_flush(struct ieee80211vap *vap)
390 struct ieee80211_mesh_state *ms = vap->iv_mesh;
402 ieee80211_mesh_rt_flush_peer(struct ieee80211vap *vap,
405 struct ieee80211_mesh_state *ms = vap->iv_mesh;
421 mesh_rt_flush_invalid(struct ieee80211vap *vap)
423 struct ieee80211_mesh_state *ms = vap->iv_mesh;
480 mesh_select_proto_path(struct ieee80211vap *vap, const char *name)
482 struct ieee80211_mesh_state *ms = vap->iv_mesh;
495 mesh_select_proto_metric(struct ieee80211vap *vap, const char *name)
497 struct ieee80211_mesh_state *ms = vap->iv_mesh;
510 mesh_gatemode_setup(struct ieee80211vap *vap)
512 struct ieee80211_mesh_state *ms = vap->iv_mesh;
526 mesh_gatemode_cb, vap);
532 struct ieee80211vap *vap = (struct ieee80211vap *)arg;
533 struct ieee80211_mesh_state *ms = vap->iv_mesh;
539 IEEE80211_ADDR_COPY(gann.gann_addr, vap->iv_myaddr);
543 IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, vap->iv_bss,
546 ieee80211_send_action(vap->iv_bss, IEEE80211_ACTION_CAT_MESH,
548 mesh_gatemode_setup(vap);
641 mesh_vdetach(struct ieee80211vap *vap)
643 struct ieee80211_mesh_state *ms = vap->iv_mesh;
646 ieee80211_iterate_nodes(&vap->iv_ic->ic_sta, mesh_vdetach_peers,
648 ieee80211_mesh_rt_flush(vap);
650 ms->ms_ppath->mpp_vdetach(vap);
651 IEEE80211_FREE(vap->iv_mesh, M_80211_VAP);
652 vap->iv_mesh = NULL;
656 mesh_vattach(struct ieee80211vap *vap)
659 vap->iv_newstate = mesh_newstate;
660 vap->iv_input = mesh_input;
661 vap->iv_opdetach = mesh_vdetach;
662 vap->iv_recv_mgmt = mesh_recv_mgmt;
663 vap->iv_recv_ctl = mesh_recv_ctl;
670 vap->iv_mesh = ms;
680 mesh_select_proto_metric(vap, "AIRTIME");
682 mesh_select_proto_path(vap, "HWMP");
684 ms->ms_ppath->mpp_vattach(vap);
688 * IEEE80211_M_MBSS vap state machine handler.
691 mesh_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
693 struct ieee80211_mesh_state *ms = vap->iv_mesh;
694 struct ieee80211com *ic = vap->iv_ic;
700 ostate = vap->iv_state;
701 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE, "%s: %s -> %s (%d)\n",
704 vap->iv_state = nstate; /* state transition */
706 ieee80211_cancel_scan(vap); /* background scan */
707 ni = vap->iv_bss; /* NB: no reference held */
716 ieee80211_cancel_scan(vap);
719 ieee80211_dfs_cac_stop(vap);
730 ieee80211_reset_bss(vap);
731 ieee80211_mesh_rt_flush(vap);
737 if (vap->iv_des_chan != IEEE80211_CHAN_ANYC &&
738 !IEEE80211_IS_CHAN_RADAR(vap->iv_des_chan) &&
744 ieee80211_create_ibss(vap, vap->iv_des_chan);
750 * the vap will be marked with IEEE80211_FEXT_SCANREQ
754 if (vap->iv_flags_ext & IEEE80211_FEXT_SCANREQ) {
755 ieee80211_check_scan(vap,
756 vap->iv_scanreq_flags,
757 vap->iv_scanreq_duration,
758 vap->iv_scanreq_mindwell,
759 vap->iv_scanreq_maxdwell,
760 vap->iv_scanreq_nssid, vap->iv_scanreq_ssid);
761 vap->iv_flags_ext &= ~IEEE80211_FEXT_SCANREQ;
763 ieee80211_check_scan_current(vap);
774 ieee80211_dfs_cac_start(vap);
785 ieee80211_create_ibss(vap,
787 ic->ic_curchan, vap->iv_flags_ht));
803 ieee80211_iterate_nodes(&ic->ic_sta, sta_csa, vap);
817 if (ieee80211_msg_debug(vap)) {
818 ieee80211_note(vap,
834 mesh_rt_cleanup_cb, vap);
835 mesh_gatemode_setup(vap);
841 ms->ms_ppath->mpp_newstate(vap, ostate, arg);
848 struct ieee80211vap *vap = arg;
849 struct ieee80211_mesh_state *ms = vap->iv_mesh;
851 mesh_rt_flush_invalid(vap);
853 mesh_rt_cleanup_cb, vap);
862 ieee80211_mesh_mark_gate(struct ieee80211vap *vap, const uint8_t *addr,
865 struct ieee80211_mesh_state *ms = vap->iv_mesh;
879 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, addr,
900 struct ieee80211vap *vap = ni->ni_vap;
901 struct ieee80211_mesh_state *ms = vap->iv_mesh;
912 IEEE80211_NOTE(vap, IEEE80211_MSG_MESH,
921 ieee80211_beacon_notify(vap, IEEE80211_BEACON_MESHCONF);
926 ieee80211_beacon_notify(vap, IEEE80211_BEACON_MESHCONF);
934 ieee80211_mesh_discover(vap, ni->ni_macaddr, NULL);
955 mesh_generateid(struct ieee80211vap *vap)
962 ieee80211_iterate_nodes(&vap->iv_ic->ic_sta, mesh_checkid, &r);
974 mesh_checkpseq(struct ieee80211vap *vap,
979 rt = ieee80211_mesh_rt_find(vap, source);
981 rt = ieee80211_mesh_rt_add(vap, source);
983 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, source,
985 vap->iv_stats.is_mesh_rtaddfailed++;
988 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, source,
1005 ieee80211_mesh_find_txnode(struct ieee80211vap *vap,
1010 rt = ieee80211_mesh_rt_find(vap, dest);
1014 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, dest,
1020 rt = ieee80211_mesh_rt_find(vap, rt->rt_mesh_gate);
1023 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, dest,
1030 return ieee80211_find_txnode(vap, rt->rt_nexthop);
1034 mesh_transmit_to_gate(struct ieee80211vap *vap, struct mbuf *m,
1037 struct ifnet *ifp = vap->iv_ifp;
1040 IEEE80211_TX_UNLOCK_ASSERT(vap->iv_ic);
1042 ni = ieee80211_mesh_find_txnode(vap, rt_gate->rt_dest);
1055 (void) ieee80211_vap_pkt_send_dest(vap, m, ni);
1067 ieee80211_mesh_forward_to_gates(struct ieee80211vap *vap,
1070 struct ieee80211com *ic = vap->iv_ic;
1071 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1091 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_HWMP,
1123 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_HWMP,
1127 mesh_transmit_to_gate(vap, mcopy, rt_gate);
1141 mesh_forward(struct ieee80211vap *vap, struct mbuf *m,
1144 struct ieee80211com *ic = vap->iv_ic;
1145 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1146 struct ifnet *ifp = vap->iv_ifp;
1164 IEEE80211_NOTE_FRAME(vap, IEEE80211_MSG_MESH, wh,
1166 vap->iv_stats.is_mesh_fwd_ttl++;
1170 IEEE80211_NOTE_FRAME(vap, IEEE80211_MSG_MESH, wh,
1172 vap->iv_stats.is_mesh_fwd_disabled++;
1177 IEEE80211_NOTE_FRAME(vap, IEEE80211_MSG_MESH, wh,
1179 vap->iv_stats.is_mesh_fwd_nobuf++;
1186 IEEE80211_NOTE_FRAME(vap, IEEE80211_MSG_MESH, wh,
1188 vap->iv_stats.is_mesh_fwd_tooshort++;
1198 IEEE80211_ADDR_COPY(whcopy->i_addr2, vap->iv_myaddr);
1200 ni = ieee80211_ref_node(vap->iv_bss);
1203 ni = ieee80211_mesh_find_txnode(vap, whcopy->i_addr3);
1211 IEEE80211_NOTE_FRAME(vap, IEEE80211_MSG_MESH, wh,
1213 ms->ms_ppath->mpp_senderror(vap, whcopy->i_addr3, NULL,
1215 vap->iv_stats.is_mesh_fwd_nopath++;
1249 mesh_decap(struct ieee80211vap *vap, struct mbuf *m, int hdrlen, int meshdrlen)
1263 IEEE80211_DPRINTF(vap, IEEE80211_MSG_ANY,
1265 vap->iv_stats.is_rx_tooshort++;
1297 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
1300 vap->iv_stats.is_mesh_badae++;
1312 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
1315 vap->iv_stats.is_mesh_badae++;
1322 m = ieee80211_realign(vap, m, sizeof(*eh));
1342 mesh_isucastforme(struct ieee80211vap *vap, const struct ieee80211_frame *wh,
1355 ieee80211_mesh_rt_find(vap, mc10->mc_addr5);
1360 return IEEE80211_ADDR_EQ(wh->i_addr3, vap->iv_myaddr);
1370 mesh_recv_indiv_data_to_fwrd(struct ieee80211vap *vap, struct mbuf *m,
1374 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1378 IEEE80211_TX_UNLOCK_ASSERT(vap->iv_ic);
1390 rt_meshda = ieee80211_mesh_rt_find(vap, qwh->i_addr3);
1392 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, qwh->i_addr2,
1408 rt_meshsa = ieee80211_mesh_rt_find(vap, qwh->i_addr4);
1413 mesh_forward(vap, m, mc);
1427 mesh_recv_indiv_data_to_me(struct ieee80211vap *vap, struct mbuf *m,
1432 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1437 IEEE80211_TX_UNLOCK_ASSERT(vap->iv_ic);
1449 rt = ieee80211_mesh_rt_find(vap, qwh->i_addr4);
1462 rt = ieee80211_mesh_rt_find(vap, mc10->mc_addr5);
1471 mesh_forward(vap, m,
1479 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_OUTPUT, qwh->i_addr2,
1495 mesh_recv_group_data(struct ieee80211vap *vap, struct mbuf *m,
1499 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1502 IEEE80211_TX_UNLOCK_ASSERT(vap->iv_ic);
1504 mesh_forward(vap, m, mc);
1516 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH,
1532 struct ieee80211vap *vap = ni->ni_vap;
1534 struct ifnet *ifp = vap->iv_ifp;
1553 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
1556 vap->iv_stats.is_rx_tooshort++;
1568 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
1570 vap->iv_stats.is_rx_badversion++;
1597 if (vap->iv_acl != NULL && !vap->iv_acl->iac_check(vap, wh)) {
1598 IEEE80211_DISCARD(vap, IEEE80211_MSG_ACL,
1600 vap->iv_stats.is_rx_acl++;
1606 if (ni == vap->iv_bss)
1609 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_MESH,
1613 vap->iv_stats.is_mesh_nolink++;
1618 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1620 vap->iv_stats.is_rx_wrongdir++;
1626 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1628 vap->iv_stats.is_rx_badsubtype++;
1668 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_MESH,
1671 vap->iv_stats.is_rx_elem_missing++; /* XXX: kinda */
1679 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
1682 vap->iv_stats.is_rx_tooshort++;
1701 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
1704 vap->iv_stats.is_rx_tooshort++;
1716 if (IEEE80211_ADDR_EQ(vap->iv_myaddr, addr)) {
1717 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
1719 vap->iv_stats.is_rx_wrongbss++; /* XXX kinda */
1722 if (mesh_checkpseq(vap, addr, seq) != 0) {
1723 vap->iv_stats.is_rx_dup++;
1729 if (IEEE80211_ADDR_EQ(vap->iv_myaddr, wh->i_addr3))
1731 mesh_recv_indiv_data_to_me(vap, m, wh, mc);
1733 error = mesh_recv_group_data(vap, m, wh, mc);
1735 error = mesh_recv_indiv_data_to_fwrd(vap, m,
1738 error = mesh_recv_group_data(vap, m, wh, mc);
1744 if (ieee80211_radiotap_active_vap(vap))
1745 ieee80211_radiotap_rx(vap, m);
1751 m = mesh_decap(vap, m, hdrspace, meshdrlen);
1758 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
1760 vap->iv_stats.is_rx_decap++;
1769 ieee80211_deliver_data(vap, ni, m);
1772 vap->iv_stats.is_rx_mgmt++;
1775 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1777 vap->iv_stats.is_rx_wrongdir++;
1781 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
1784 vap->iv_stats.is_rx_tooshort++;
1788 if ((ieee80211_msg_debug(vap) &&
1789 (vap->iv_ic->ic_flags & IEEE80211_F_SCAN)) ||
1790 ieee80211_msg_dumppkts(vap)) {
1797 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1799 vap->iv_stats.is_rx_mgtdiscard++; /* XXX */
1802 vap->iv_recv_mgmt(ni, m, subtype, rxs, rssi, nf);
1805 vap->iv_stats.is_rx_ctl++;
1809 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
1818 if (need_tap && ieee80211_radiotap_active_vap(vap))
1819 ieee80211_radiotap_rx(vap, m);
1831 struct ieee80211vap *vap = ni->ni_vap;
1832 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1853 c = ieee80211_lookup_channel_rxstatus(vap, rxs);
1863 vap->iv_stats.is_rx_beacon++; /* XXX remove */
1880 ieee80211_probe_curchan(vap, true);
1883 ieee80211_add_scan(vap, rxchan, &scan, wh,
1889 if (vap->iv_state != IEEE80211_S_RUN)
1897 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1899 vap->iv_stats.is_mesh_wrongmesh++;
1906 mesh_verify_meshconf(vap, scan.meshconf)) {
1907 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1909 vap->iv_stats.is_mesh_wrongmesh++;
1915 if (vap->iv_acl != NULL && !vap->iv_acl->iac_check(vap, wh)) {
1916 IEEE80211_DISCARD(vap, IEEE80211_MSG_ACL,
1918 vap->iv_stats.is_rx_acl++;
1928 ni = ieee80211_add_neighbor(vap, wh, &scan);
1933 if (ni != vap->iv_bss &&
1944 ni->ni_mlpid = mesh_generateid(vap);
1962 rt = ieee80211_mesh_rt_find(vap, wh->i_addr2);
1980 if (vap->iv_state != IEEE80211_S_RUN) {
1981 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1983 ieee80211_state_name[vap->iv_state]);
1984 vap->iv_stats.is_rx_mgtdiscard++;
1989 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1991 vap->iv_stats.is_rx_mgtdiscard++; /* XXX stat */
2029 IEEE80211_VERIFY_SSID(vap->iv_bss, meshid, return);
2033 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_INPUT, wh->i_addr2,
2041 ieee80211_send_proberesp(vap, wh->i_addr2, 0);
2047 if (ni == vap->iv_bss) {
2048 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2050 vap->iv_stats.is_rx_mgtdiscard++;
2051 } else if (!IEEE80211_ADDR_EQ(vap->iv_myaddr, wh->i_addr1) &&
2053 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2055 vap->iv_stats.is_rx_mgtdiscard++;
2056 } else if (vap->iv_state != IEEE80211_S_RUN) {
2057 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2059 ieee80211_state_name[vap->iv_state]);
2060 vap->iv_stats.is_rx_mgtdiscard++;
2076 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2078 vap->iv_stats.is_rx_mgtdiscard++;
2082 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
2084 vap->iv_stats.is_rx_badsubtype++;
2109 struct ieee80211vap *vap = ni->ni_vap;
2160 if (mesh_verify_meshpeer(vap, subtype, (const uint8_t *)mp)) {
2162 IEEE80211_DISCARD(vap,
2168 if (sendclose == 0 && mesh_verify_meshid(vap, meshid)) {
2170 IEEE80211_DISCARD(vap,
2189 mesh_verify_meshconf(vap, meshconf)) {
2191 IEEE80211_DISCARD(vap,
2197 vap->iv_stats.is_rx_mgtdiscard++;
2237 struct ieee80211vap *vap = ni->ni_vap;
2238 struct ieee80211_mesh_state *ms = vap->iv_mesh;
2251 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
2271 ni->ni_mlpid = mesh_generateid(vap);
2385 struct ieee80211vap *vap = ni->ni_vap;
2397 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
2434 IEEE80211_DISCARD(vap,
2438 vap->iv_stats.is_rx_mgtdiscard++;
2529 struct ieee80211vap *vap = ni->ni_vap;
2562 struct ieee80211vap *vap = ni->ni_vap;
2563 struct ieee80211_mesh_state *ms = vap->iv_mesh;
2572 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_MESH,
2575 vap->iv_stats.is_rx_mgtdiscard++;
2579 if (IEEE80211_ADDR_EQ(vap->iv_myaddr, ie.gann_addr))
2582 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, ni->ni_macaddr,
2593 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_MESH,
2606 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, ie.gann_addr,
2636 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, ie.gann_addr,
2639 ieee80211_send_action(vap->iv_bss, IEEE80211_ACTION_CAT_MESH,
2651 struct ieee80211vap *vap = ni->ni_vap;
2658 if (vap->iv_state == IEEE80211_S_CAC) {
2659 IEEE80211_NOTE(vap, IEEE80211_MSG_OUTPUT, ni,
2661 vap->iv_stats.is_tx_badstate++;
2690 ret = ieee80211_raw_output(vap, ni, m, ¶ms);
2712 struct ieee80211vap *vap = ni->ni_vap;
2719 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
2722 IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE,
2751 ADDSHORT(frm, ieee80211_getcapinfo(vap, ni->ni_chan));
2755 frm = ieee80211_add_meshid(frm, vap);
2756 frm = ieee80211_add_meshconf(frm, vap);
2760 return mesh_send_action(ni, vap->iv_myaddr, ni->ni_macaddr, m);
2762 vap->iv_stats.is_tx_nobuf++;
2772 struct ieee80211vap *vap = ni->ni_vap;
2779 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
2783 IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE,
2816 ADDSHORT(frm, ieee80211_getcapinfo(vap, ni->ni_chan));
2822 frm = ieee80211_add_meshid(frm, vap);
2823 frm = ieee80211_add_meshconf(frm, vap);
2828 return mesh_send_action(ni, vap->iv_myaddr, ni->ni_macaddr, m);
2830 vap->iv_stats.is_tx_nobuf++;
2840 struct ieee80211vap *vap = ni->ni_vap;
2846 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
2850 IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE,
2872 frm = ieee80211_add_meshid(frm, vap);
2877 return mesh_send_action(ni, vap->iv_myaddr, ni->ni_macaddr, m);
2879 vap->iv_stats.is_tx_nobuf++;
2889 struct ieee80211vap *vap = ni->ni_vap;
2896 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH,
2899 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH,
2903 IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE,
2925 return mesh_send_action(ni, vap->iv_myaddr, ni->ni_macaddr, m);
2927 vap->iv_stats.is_tx_nobuf++;
2937 struct ieee80211vap *vap = ni->ni_vap;
2943 IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE,
2964 return mesh_send_action(ni, vap->iv_myaddr, broadcastaddr, m);
2966 vap->iv_stats.is_tx_nobuf++;
3081 mesh_verify_meshid(struct ieee80211vap *vap, const uint8_t *ie)
3083 struct ieee80211_mesh_state *ms = vap->iv_mesh;
3094 mesh_verify_meshconf(struct ieee80211vap *vap, const uint8_t *ie)
3098 const struct ieee80211_mesh_state *ms = vap->iv_mesh;
3103 IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH,
3109 IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH,
3115 IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH,
3121 IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH,
3127 IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH,
3134 IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH,
3142 mesh_verify_meshpeer(struct ieee80211vap *vap, uint8_t subtype,
3153 IEEE80211_DPRINTF(vap,
3185 ieee80211_add_meshid(uint8_t *frm, struct ieee80211vap *vap)
3187 struct ieee80211_mesh_state *ms = vap->iv_mesh;
3189 KASSERT(vap->iv_opmode == IEEE80211_M_MBSS, ("not a mbss vap"));
3203 ieee80211_add_meshconf(uint8_t *frm, struct ieee80211vap *vap)
3205 const struct ieee80211_mesh_state *ms = vap->iv_mesh;
3208 KASSERT(vap->iv_opmode == IEEE80211_M_MBSS, ("not a MBSS vap"));
3354 ieee80211_mesh_node_init(struct ieee80211vap *vap, struct ieee80211_node *ni)
3367 struct ieee80211vap *vap = ni->ni_vap;
3368 struct ieee80211_mesh_state *ms = vap->iv_mesh;
3373 if (vap->iv_mesh != NULL)
3396 ieee80211_mesh_update_beacon(struct ieee80211vap *vap,
3399 KASSERT(vap->iv_opmode == IEEE80211_M_MBSS, ("not a MBSS vap"));
3402 (void)ieee80211_add_meshconf(bo->bo_meshconf, vap);
3408 mesh_ioctl_get80211(struct ieee80211vap *vap, struct ieee80211req *ireq)
3410 struct ieee80211_mesh_state *ms = vap->iv_mesh;
3418 if (vap->iv_opmode != IEEE80211_M_MBSS)
3516 mesh_ioctl_set80211(struct ieee80211vap *vap, struct ieee80211req *ireq)
3518 struct ieee80211_mesh_state *ms = vap->iv_mesh;
3524 if (vap->iv_opmode != IEEE80211_M_MBSS)
3552 mesh_gatemode_setup(vap);
3568 ieee80211_mesh_rt_flush(vap);
3575 if (IEEE80211_ADDR_EQ(vap->iv_myaddr, tmpaddr) ||
3578 ieee80211_mesh_discover(vap, tmpaddr, NULL);
3585 ieee80211_mesh_rt_del(vap, tmpaddr);
3594 error = mesh_select_proto_metric(vap, tmpproto);
3602 error = mesh_select_proto_path(vap, tmpproto);