Lines Matching refs:vap

202 mesh_rt_add_locked(struct ieee80211vap *vap,
205 struct ieee80211_mesh_state *ms = vap->iv_mesh;
217 rt->rt_vap = vap;
229 ieee80211_mesh_rt_find(struct ieee80211vap *vap,
232 struct ieee80211_mesh_state *ms = vap->iv_mesh;
242 ieee80211_mesh_rt_add(struct ieee80211vap *vap,
245 struct ieee80211_mesh_state *ms = vap->iv_mesh;
248 KASSERT(ieee80211_mesh_rt_find(vap, dest) == NULL,
250 KASSERT(!IEEE80211_ADDR_EQ(vap->iv_myaddr, dest),
254 rt = mesh_rt_add_locked(vap, dest);
307 ieee80211_mesh_proxy_check(struct ieee80211vap *vap,
310 struct ieee80211_mesh_state *ms = vap->iv_mesh;
316 rt = mesh_rt_add_locked(vap, dest);
318 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, dest,
320 vap->iv_stats.is_mesh_rtaddfailed++;
322 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, dest,
324 IEEE80211_ADDR_COPY(rt->rt_mesh_gate, vap->iv_myaddr);
325 IEEE80211_ADDR_COPY(rt->rt_nexthop, vap->iv_myaddr);
332 struct ieee80211com *ic = vap->iv_ic;
339 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, dest,
341 IEEE80211_ADDR_COPY(rt->rt_nexthop, vap->iv_myaddr);
367 ieee80211_mesh_rt_del(struct ieee80211vap *vap,
370 struct ieee80211_mesh_state *ms = vap->iv_mesh;
377 ms->ms_ppath->mpp_senderror(vap, dest, rt,
380 ms->ms_ppath->mpp_senderror(vap, dest, rt,
392 ieee80211_mesh_rt_flush(struct ieee80211vap *vap)
394 struct ieee80211_mesh_state *ms = vap->iv_mesh;
406 ieee80211_mesh_rt_flush_peer(struct ieee80211vap *vap,
409 struct ieee80211_mesh_state *ms = vap->iv_mesh;
425 mesh_rt_flush_invalid(struct ieee80211vap *vap)
427 struct ieee80211_mesh_state *ms = vap->iv_mesh;
484 mesh_select_proto_path(struct ieee80211vap *vap, const char *name)
486 struct ieee80211_mesh_state *ms = vap->iv_mesh;
499 mesh_select_proto_metric(struct ieee80211vap *vap, const char *name)
501 struct ieee80211_mesh_state *ms = vap->iv_mesh;
514 mesh_gatemode_setup(struct ieee80211vap *vap)
516 struct ieee80211_mesh_state *ms = vap->iv_mesh;
530 mesh_gatemode_cb, vap);
536 struct ieee80211vap *vap = (struct ieee80211vap *)arg;
537 struct ieee80211_mesh_state *ms = vap->iv_mesh;
543 IEEE80211_ADDR_COPY(gann.gann_addr, vap->iv_myaddr);
547 IEEE80211_NOTE(vap, IEEE80211_MSG_MESH, vap->iv_bss,
550 ieee80211_send_action(vap->iv_bss, IEEE80211_ACTION_CAT_MESH,
552 mesh_gatemode_setup(vap);
645 mesh_vdetach(struct ieee80211vap *vap)
647 struct ieee80211_mesh_state *ms = vap->iv_mesh;
650 ieee80211_iterate_nodes(&vap->iv_ic->ic_sta, mesh_vdetach_peers,
652 ieee80211_mesh_rt_flush(vap);
654 ms->ms_ppath->mpp_vdetach(vap);
655 IEEE80211_FREE(vap->iv_mesh, M_80211_VAP);
656 vap->iv_mesh = NULL;
660 mesh_vattach(struct ieee80211vap *vap)
663 vap->iv_newstate = mesh_newstate;
664 vap->iv_input = mesh_input;
665 vap->iv_opdetach = mesh_vdetach;
666 vap->iv_recv_mgmt = mesh_recv_mgmt;
667 vap->iv_recv_ctl = mesh_recv_ctl;
674 vap->iv_mesh = ms;
684 mesh_select_proto_metric(vap, "AIRTIME");
686 mesh_select_proto_path(vap, "HWMP");
688 ms->ms_ppath->mpp_vattach(vap);
692 * IEEE80211_M_MBSS vap state machine handler.
695 mesh_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
697 struct ieee80211_mesh_state *ms = vap->iv_mesh;
698 struct ieee80211com *ic = vap->iv_ic;
704 ostate = vap->iv_state;
705 IEEE80211_DPRINTF(vap, IEEE80211_MSG_STATE, "%s: %s -> %s (%d)\n",
708 vap->iv_state = nstate; /* state transition */
710 ieee80211_cancel_scan(vap); /* background scan */
711 ni = vap->iv_bss; /* NB: no reference held */
720 ieee80211_cancel_scan(vap);
723 ieee80211_dfs_cac_stop(vap);
734 ieee80211_reset_bss(vap);
735 ieee80211_mesh_rt_flush(vap);
741 if (vap->iv_des_chan != IEEE80211_CHAN_ANYC &&
742 !IEEE80211_IS_CHAN_RADAR(vap->iv_des_chan) &&
748 ieee80211_create_ibss(vap, vap->iv_des_chan);
754 * the vap will be marked with IEEE80211_FEXT_SCANREQ
758 if (vap->iv_flags_ext & IEEE80211_FEXT_SCANREQ) {
759 ieee80211_check_scan(vap,
760 vap->iv_scanreq_flags,
761 vap->iv_scanreq_duration,
762 vap->iv_scanreq_mindwell,
763 vap->iv_scanreq_maxdwell,
764 vap->iv_scanreq_nssid, vap->iv_scanreq_ssid);
765 vap->iv_flags_ext &= ~IEEE80211_FEXT_SCANREQ;
767 ieee80211_check_scan_current(vap);
778 ieee80211_dfs_cac_start(vap);
789 ieee80211_create_ibss(vap,
791 ic->ic_curchan, vap->iv_flags_ht));
807 ieee80211_iterate_nodes(&ic->ic_sta, sta_csa, vap);
821 if (ieee80211_msg_debug(vap)) {
822 ieee80211_note(vap,
838 mesh_rt_cleanup_cb, vap);
839 mesh_gatemode_setup(vap);
845 ms->ms_ppath->mpp_newstate(vap, ostate, arg);
852 struct ieee80211vap *vap = arg;
853 struct ieee80211_mesh_state *ms = vap->iv_mesh;
855 mesh_rt_flush_invalid(vap);
857 mesh_rt_cleanup_cb, vap);
866 ieee80211_mesh_mark_gate(struct ieee80211vap *vap, const uint8_t *addr,
869 struct ieee80211_mesh_state *ms = vap->iv_mesh;
883 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, addr,
904 struct ieee80211vap *vap = ni->ni_vap;
905 struct ieee80211_mesh_state *ms = vap->iv_mesh;
916 IEEE80211_NOTE(vap, IEEE80211_MSG_MESH,
925 ieee80211_beacon_notify(vap, IEEE80211_BEACON_MESHCONF);
930 ieee80211_beacon_notify(vap, IEEE80211_BEACON_MESHCONF);
938 ieee80211_mesh_discover(vap, ni->ni_macaddr, NULL);
959 mesh_generateid(struct ieee80211vap *vap)
966 ieee80211_iterate_nodes(&vap->iv_ic->ic_sta, mesh_checkid, &r);
978 mesh_checkpseq(struct ieee80211vap *vap,
983 rt = ieee80211_mesh_rt_find(vap, source);
985 rt = ieee80211_mesh_rt_add(vap, source);
987 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, source,
989 vap->iv_stats.is_mesh_rtaddfailed++;
992 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, source,
1009 ieee80211_mesh_find_txnode(struct ieee80211vap *vap,
1014 rt = ieee80211_mesh_rt_find(vap, dest);
1018 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, dest,
1024 rt = ieee80211_mesh_rt_find(vap, rt->rt_mesh_gate);
1027 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, dest,
1034 return ieee80211_find_txnode(vap, rt->rt_nexthop);
1038 mesh_transmit_to_gate(struct ieee80211vap *vap, struct mbuf *m,
1041 struct ifnet *ifp = vap->iv_ifp;
1044 IEEE80211_TX_UNLOCK_ASSERT(vap->iv_ic);
1046 ni = ieee80211_mesh_find_txnode(vap, rt_gate->rt_dest);
1059 (void) ieee80211_vap_pkt_send_dest(vap, m, ni);
1071 ieee80211_mesh_forward_to_gates(struct ieee80211vap *vap,
1074 struct ieee80211com *ic = vap->iv_ic;
1075 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1095 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_HWMP,
1127 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_HWMP,
1131 mesh_transmit_to_gate(vap, mcopy, rt_gate);
1145 mesh_forward(struct ieee80211vap *vap, struct mbuf *m,
1148 struct ieee80211com *ic = vap->iv_ic;
1149 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1150 struct ifnet *ifp = vap->iv_ifp;
1168 IEEE80211_NOTE_FRAME(vap, IEEE80211_MSG_MESH, wh,
1170 vap->iv_stats.is_mesh_fwd_ttl++;
1174 IEEE80211_NOTE_FRAME(vap, IEEE80211_MSG_MESH, wh,
1176 vap->iv_stats.is_mesh_fwd_disabled++;
1181 IEEE80211_NOTE_FRAME(vap, IEEE80211_MSG_MESH, wh,
1183 vap->iv_stats.is_mesh_fwd_nobuf++;
1190 IEEE80211_NOTE_FRAME(vap, IEEE80211_MSG_MESH, wh,
1192 vap->iv_stats.is_mesh_fwd_tooshort++;
1202 IEEE80211_ADDR_COPY(whcopy->i_addr2, vap->iv_myaddr);
1204 ni = ieee80211_ref_node(vap->iv_bss);
1207 ni = ieee80211_mesh_find_txnode(vap, whcopy->i_addr3);
1215 IEEE80211_NOTE_FRAME(vap, IEEE80211_MSG_MESH, wh,
1217 ms->ms_ppath->mpp_senderror(vap, whcopy->i_addr3, NULL,
1219 vap->iv_stats.is_mesh_fwd_nopath++;
1252 mesh_decap(struct ieee80211vap *vap, struct mbuf *m, int hdrlen, int meshdrlen)
1266 IEEE80211_DPRINTF(vap, IEEE80211_MSG_ANY,
1268 vap->iv_stats.is_rx_tooshort++;
1300 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
1303 vap->iv_stats.is_mesh_badae++;
1315 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
1318 vap->iv_stats.is_mesh_badae++;
1325 m = ieee80211_realign(vap, m, sizeof(*eh));
1345 mesh_isucastforme(struct ieee80211vap *vap, const struct ieee80211_frame *wh,
1358 ieee80211_mesh_rt_find(vap, mc10->mc_addr5);
1363 return IEEE80211_ADDR_EQ(wh->i_addr3, vap->iv_myaddr);
1373 mesh_recv_indiv_data_to_fwrd(struct ieee80211vap *vap, struct mbuf *m,
1377 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1381 IEEE80211_TX_UNLOCK_ASSERT(vap->iv_ic);
1393 rt_meshda = ieee80211_mesh_rt_find(vap, qwh->i_addr3);
1395 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, qwh->i_addr2,
1411 rt_meshsa = ieee80211_mesh_rt_find(vap, qwh->i_addr4);
1416 mesh_forward(vap, m, mc);
1430 mesh_recv_indiv_data_to_me(struct ieee80211vap *vap, struct mbuf *m,
1435 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1440 IEEE80211_TX_UNLOCK_ASSERT(vap->iv_ic);
1452 rt = ieee80211_mesh_rt_find(vap, qwh->i_addr4);
1465 rt = ieee80211_mesh_rt_find(vap, mc10->mc_addr5);
1474 mesh_forward(vap, m,
1482 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_OUTPUT, qwh->i_addr2,
1498 mesh_recv_group_data(struct ieee80211vap *vap, struct mbuf *m,
1502 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1505 IEEE80211_TX_UNLOCK_ASSERT(vap->iv_ic);
1507 mesh_forward(vap, m, mc);
1519 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH,
1535 struct ieee80211vap *vap = ni->ni_vap;
1537 struct ifnet *ifp = vap->iv_ifp;
1556 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
1559 vap->iv_stats.is_rx_tooshort++;
1572 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
1574 vap->iv_stats.is_rx_badversion++;
1601 if (vap->iv_acl != NULL && !vap->iv_acl->iac_check(vap, wh)) {
1602 IEEE80211_DISCARD(vap, IEEE80211_MSG_ACL,
1604 vap->iv_stats.is_rx_acl++;
1610 if (ni == vap->iv_bss)
1613 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_MESH,
1617 vap->iv_stats.is_mesh_nolink++;
1622 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1624 vap->iv_stats.is_rx_wrongdir++;
1630 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1632 vap->iv_stats.is_rx_badsubtype++;
1672 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_MESH,
1675 vap->iv_stats.is_rx_elem_missing++; /* XXX: kinda */
1683 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
1686 vap->iv_stats.is_rx_tooshort++;
1705 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
1708 vap->iv_stats.is_rx_tooshort++;
1720 if (IEEE80211_ADDR_EQ(vap->iv_myaddr, addr)) {
1721 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
1723 vap->iv_stats.is_rx_wrongbss++; /* XXX kinda */
1726 if (mesh_checkpseq(vap, addr, seq) != 0) {
1727 vap->iv_stats.is_rx_dup++;
1733 if (IEEE80211_ADDR_EQ(vap->iv_myaddr, wh->i_addr3))
1735 mesh_recv_indiv_data_to_me(vap, m, wh, mc);
1737 error = mesh_recv_group_data(vap, m, wh, mc);
1739 error = mesh_recv_indiv_data_to_fwrd(vap, m,
1742 error = mesh_recv_group_data(vap, m, wh, mc);
1748 if (ieee80211_radiotap_active_vap(vap))
1749 ieee80211_radiotap_rx(vap, m);
1755 m = mesh_decap(vap, m, hdrspace, meshdrlen);
1762 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
1764 vap->iv_stats.is_rx_decap++;
1773 ieee80211_deliver_data(vap, ni, m);
1776 vap->iv_stats.is_rx_mgmt++;
1779 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1781 vap->iv_stats.is_rx_wrongdir++;
1785 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_ANY,
1788 vap->iv_stats.is_rx_tooshort++;
1792 if ((ieee80211_msg_debug(vap) &&
1793 (vap->iv_ic->ic_flags & IEEE80211_F_SCAN)) ||
1794 ieee80211_msg_dumppkts(vap)) {
1801 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1803 vap->iv_stats.is_rx_mgtdiscard++; /* XXX */
1806 vap->iv_recv_mgmt(ni, m, subtype, rxs, rssi, nf);
1809 vap->iv_stats.is_rx_ctl++;
1813 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
1822 if (need_tap && ieee80211_radiotap_active_vap(vap))
1823 ieee80211_radiotap_rx(vap, m);
1835 struct ieee80211vap *vap = ni->ni_vap;
1836 struct ieee80211_mesh_state *ms = vap->iv_mesh;
1857 c = ieee80211_lookup_channel_rxstatus(vap, rxs);
1867 vap->iv_stats.is_rx_beacon++; /* XXX remove */
1884 ieee80211_probe_curchan(vap, 1);
1887 ieee80211_add_scan(vap, rxchan, &scan, wh,
1893 if (vap->iv_state != IEEE80211_S_RUN)
1901 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1903 vap->iv_stats.is_mesh_wrongmesh++;
1910 mesh_verify_meshconf(vap, scan.meshconf)) {
1911 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1913 vap->iv_stats.is_mesh_wrongmesh++;
1919 if (vap->iv_acl != NULL && !vap->iv_acl->iac_check(vap, wh)) {
1920 IEEE80211_DISCARD(vap, IEEE80211_MSG_ACL,
1922 vap->iv_stats.is_rx_acl++;
1932 ni = ieee80211_add_neighbor(vap, wh, &scan);
1937 if (ni != vap->iv_bss &&
1948 ni->ni_mlpid = mesh_generateid(vap);
1966 rt = ieee80211_mesh_rt_find(vap, wh->i_addr2);
1984 if (vap->iv_state != IEEE80211_S_RUN) {
1985 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1987 ieee80211_state_name[vap->iv_state]);
1988 vap->iv_stats.is_rx_mgtdiscard++;
1993 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
1995 vap->iv_stats.is_rx_mgtdiscard++; /* XXX stat */
2033 IEEE80211_VERIFY_SSID(vap->iv_bss, meshid, return);
2037 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_INPUT, wh->i_addr2,
2045 ieee80211_send_proberesp(vap, wh->i_addr2, 0);
2051 if (ni == vap->iv_bss) {
2052 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2054 vap->iv_stats.is_rx_mgtdiscard++;
2055 } else if (!IEEE80211_ADDR_EQ(vap->iv_myaddr, wh->i_addr1) &&
2057 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2059 vap->iv_stats.is_rx_mgtdiscard++;
2060 } else if (vap->iv_state != IEEE80211_S_RUN) {
2061 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2063 ieee80211_state_name[vap->iv_state]);
2064 vap->iv_stats.is_rx_mgtdiscard++;
2080 IEEE80211_DISCARD(vap, IEEE80211_MSG_INPUT,
2082 vap->iv_stats.is_rx_mgtdiscard++;
2086 IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
2088 vap->iv_stats.is_rx_badsubtype++;
2113 struct ieee80211vap *vap = ni->ni_vap;
2164 if (mesh_verify_meshpeer(vap, subtype, (const uint8_t *)mp)) {
2166 IEEE80211_DISCARD(vap,
2172 if (sendclose == 0 && mesh_verify_meshid(vap, meshid)) {
2174 IEEE80211_DISCARD(vap,
2193 mesh_verify_meshconf(vap, meshconf)) {
2195 IEEE80211_DISCARD(vap,
2201 vap->iv_stats.is_rx_mgtdiscard++;
2241 struct ieee80211vap *vap = ni->ni_vap;
2242 struct ieee80211_mesh_state *ms = vap->iv_mesh;
2255 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
2275 ni->ni_mlpid = mesh_generateid(vap);
2389 struct ieee80211vap *vap = ni->ni_vap;
2401 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
2438 IEEE80211_DISCARD(vap,
2442 vap->iv_stats.is_rx_mgtdiscard++;
2533 struct ieee80211vap *vap = ni->ni_vap;
2566 struct ieee80211vap *vap = ni->ni_vap;
2567 struct ieee80211_mesh_state *ms = vap->iv_mesh;
2576 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_MESH,
2579 vap->iv_stats.is_rx_mgtdiscard++;
2583 if (IEEE80211_ADDR_EQ(vap->iv_myaddr, ie.gann_addr))
2586 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, ni->ni_macaddr,
2597 IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_MESH,
2610 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, ie.gann_addr,
2640 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, ie.gann_addr,
2643 ieee80211_send_action(vap->iv_bss, IEEE80211_ACTION_CAT_MESH,
2655 struct ieee80211vap *vap = ni->ni_vap;
2662 if (vap->iv_state == IEEE80211_S_CAC) {
2663 IEEE80211_NOTE(vap, IEEE80211_MSG_OUTPUT, ni,
2665 vap->iv_stats.is_tx_badstate++;
2694 ret = ieee80211_raw_output(vap, ni, m, &params);
2716 struct ieee80211vap *vap = ni->ni_vap;
2723 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
2726 IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE,
2755 ADDSHORT(frm, ieee80211_getcapinfo(vap, ni->ni_chan));
2759 frm = ieee80211_add_meshid(frm, vap);
2760 frm = ieee80211_add_meshconf(frm, vap);
2764 return mesh_send_action(ni, vap->iv_myaddr, ni->ni_macaddr, m);
2766 vap->iv_stats.is_tx_nobuf++;
2776 struct ieee80211vap *vap = ni->ni_vap;
2783 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
2787 IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE,
2820 ADDSHORT(frm, ieee80211_getcapinfo(vap, ni->ni_chan));
2826 frm = ieee80211_add_meshid(frm, vap);
2827 frm = ieee80211_add_meshconf(frm, vap);
2832 return mesh_send_action(ni, vap->iv_myaddr, ni->ni_macaddr, m);
2834 vap->iv_stats.is_tx_nobuf++;
2844 struct ieee80211vap *vap = ni->ni_vap;
2850 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
2854 IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE,
2876 frm = ieee80211_add_meshid(frm, vap);
2881 return mesh_send_action(ni, vap->iv_myaddr, ni->ni_macaddr, m);
2883 vap->iv_stats.is_tx_nobuf++;
2893 struct ieee80211vap *vap = ni->ni_vap;
2900 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH,
2903 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH,
2907 IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE,
2929 return mesh_send_action(ni, vap->iv_myaddr, ni->ni_macaddr, m);
2931 vap->iv_stats.is_tx_nobuf++;
2941 struct ieee80211vap *vap = ni->ni_vap;
2947 IEEE80211_DPRINTF(vap, IEEE80211_MSG_NODE,
2968 return mesh_send_action(ni, vap->iv_myaddr, broadcastaddr, m);
2970 vap->iv_stats.is_tx_nobuf++;
3085 mesh_verify_meshid(struct ieee80211vap *vap, const uint8_t *ie)
3087 struct ieee80211_mesh_state *ms = vap->iv_mesh;
3098 mesh_verify_meshconf(struct ieee80211vap *vap, const uint8_t *ie)
3102 const struct ieee80211_mesh_state *ms = vap->iv_mesh;
3107 IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH,
3113 IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH,
3119 IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH,
3125 IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH,
3131 IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH,
3138 IEEE80211_DPRINTF(vap, IEEE80211_MSG_MESH,
3146 mesh_verify_meshpeer(struct ieee80211vap *vap, uint8_t subtype,
3157 IEEE80211_DPRINTF(vap,
3189 ieee80211_add_meshid(uint8_t *frm, struct ieee80211vap *vap)
3191 struct ieee80211_mesh_state *ms = vap->iv_mesh;
3193 KASSERT(vap->iv_opmode == IEEE80211_M_MBSS, ("not a mbss vap"));
3207 ieee80211_add_meshconf(uint8_t *frm, struct ieee80211vap *vap)
3209 const struct ieee80211_mesh_state *ms = vap->iv_mesh;
3212 KASSERT(vap->iv_opmode == IEEE80211_M_MBSS, ("not a MBSS vap"));
3358 ieee80211_mesh_node_init(struct ieee80211vap *vap, struct ieee80211_node *ni)
3371 struct ieee80211vap *vap = ni->ni_vap;
3372 struct ieee80211_mesh_state *ms = vap->iv_mesh;
3377 if (vap->iv_mesh != NULL)
3400 ieee80211_mesh_update_beacon(struct ieee80211vap *vap,
3403 KASSERT(vap->iv_opmode == IEEE80211_M_MBSS, ("not a MBSS vap"));
3406 (void)ieee80211_add_meshconf(bo->bo_meshconf, vap);
3412 mesh_ioctl_get80211(struct ieee80211vap *vap, struct ieee80211req *ireq)
3414 struct ieee80211_mesh_state *ms = vap->iv_mesh;
3422 if (vap->iv_opmode != IEEE80211_M_MBSS)
3520 mesh_ioctl_set80211(struct ieee80211vap *vap, struct ieee80211req *ireq)
3522 struct ieee80211_mesh_state *ms = vap->iv_mesh;
3528 if (vap->iv_opmode != IEEE80211_M_MBSS)
3556 mesh_gatemode_setup(vap);
3572 ieee80211_mesh_rt_flush(vap);
3579 if (IEEE80211_ADDR_EQ(vap->iv_myaddr, tmpaddr) ||
3582 ieee80211_mesh_discover(vap, tmpaddr, NULL);
3589 ieee80211_mesh_rt_del(vap, tmpaddr);
3598 error = mesh_select_proto_metric(vap, tmpproto);
3606 error = mesh_select_proto_path(vap, tmpproto);