Lines Matching full:ni

620 mesh_vdetach_peers(void *arg, struct ieee80211_node *ni)
622 struct ieee80211com *ic = ni->ni_ic;
625 if (ni->ni_mlstate == IEEE80211_NODE_MESH_ESTABLISHED) {
626 args[0] = ni->ni_mlpid;
627 args[1] = ni->ni_mllid;
629 ieee80211_send_action(ni,
634 callout_drain(&ni->ni_mltimer);
637 (void *)(uintptr_t) ieee80211_mac_hash(ic, ni->ni_macaddr));
695 struct ieee80211_node *ni;
707 ni = vap->iv_bss; /* NB: no reference held */
809 ieee80211_node_set_chan(ni,
811 ieee80211_htchanflags(ni->ni_chan)));
820 ether_sprintf(ni->ni_meshid));
821 ieee80211_print_essid(ni->ni_meshid,
822 ni->ni_meshidlen);
832 ieee80211_node_authorize(ni);
898 mesh_linkchange(struct ieee80211_node *ni, enum ieee80211_mesh_mlstate state)
900 struct ieee80211vap *vap = ni->ni_vap;
913 ni, "peer link: %s -> %s",
914 meshlinkstates[ni->ni_mlstate], meshlinkstates[state]);
918 ni->ni_mlstate != IEEE80211_NODE_MESH_ESTABLISHED) {
922 } else if (ni->ni_mlstate == IEEE80211_NODE_MESH_ESTABLISHED &&
928 ni->ni_mlstate = state;
931 ms->ms_ppath->mpp_peerdown(ni);
934 ieee80211_mesh_discover(vap, ni->ni_macaddr, NULL);
946 mesh_checkid(void *arg, struct ieee80211_node *ni)
950 if (*r == ni->ni_mllid)
1038 struct ieee80211_node *ni;
1042 ni = ieee80211_mesh_find_txnode(vap, rt_gate->rt_dest);
1043 if (ni == NULL) {
1055 (void) ieee80211_vap_pkt_send_dest(vap, m, ni);
1152 struct ieee80211_node *ni;
1200 ni = ieee80211_ref_node(vap->iv_bss);
1203 ni = ieee80211_mesh_find_txnode(vap, whcopy->i_addr3);
1204 if (ni == NULL) {
1219 IEEE80211_ADDR_COPY(whcopy->i_addr1, ni->ni_macaddr);
1229 mcopy->m_pkthdr.rcvif = (void *) ni;
1527 mesh_input(struct ieee80211_node *ni, struct mbuf *m,
1532 struct ieee80211vap *vap = ni->ni_vap;
1533 struct ieee80211com *ic = ni->ni_ic;
1543 KASSERT(ni != NULL, ("null node"));
1544 ni->ni_inact = ni->ni_inact_reload;
1554 ni->ni_macaddr, NULL,
1569 ni->ni_macaddr, NULL, "wrong version %x", wh->i_fc[0]);
1577 IEEE80211_RSSI_LPF(ni->ni_avgrssi, rssi);
1578 ni->ni_noise = nf;
1585 if (! ieee80211_check_rxseq(ni, wh, wh->i_addr1, rxs))
1606 if (ni == vap->iv_bss)
1608 if (ni->ni_mlstate != IEEE80211_NODE_MESH_ESTABLISHED) {
1610 ni->ni_macaddr, NULL,
1612 ni->ni_mlstate);
1640 m = ieee80211_defrag(ni, m, hdrspace, 0);
1669 ni->ni_macaddr, NULL,
1680 ni->ni_macaddr, NULL,
1702 ni->ni_macaddr, NULL,
1759 ni->ni_macaddr, "data", "%s", "decap error");
1761 IEEE80211_NODE_STAT(ni, rx_decap);
1765 m = ieee80211_decap_amsdu(ni, m);
1769 ieee80211_deliver_data(vap, ni, m);
1773 IEEE80211_NODE_STAT(ni, rx_mgmt);
1782 ni->ni_macaddr, "mgt", "too short: len %u",
1802 vap->iv_recv_mgmt(ni, m, subtype, rxs, rssi, nf);
1806 IEEE80211_NODE_STAT(ni, rx_ctrl);
1828 mesh_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m0, int subtype,
1831 struct ieee80211vap *vap = ni->ni_vap;
1833 struct ieee80211com *ic = ni->ni_ic;
1857 if (ieee80211_parse_beacon(ni, m0, rxchan, &scan) != 0)
1864 IEEE80211_NODE_STAT(ni, rx_beacons);
1866 IEEE80211_NODE_STAT(ni, rx_proberesp);
1924 if (!IEEE80211_ADDR_EQ(wh->i_addr2, ni->ni_macaddr)) {
1928 ni = ieee80211_add_neighbor(vap, wh, &scan);
1933 if (ni != vap->iv_bss &&
1935 switch (ni->ni_mlstate) {
1941 if (ni->ni_mlhcnt >= ieee80211_mesh_maxholding)
1944 ni->ni_mlpid = mesh_generateid(vap);
1945 if (ni->ni_mlpid == 0)
1947 mesh_linkchange(ni, IEEE80211_NODE_MESH_OPENSNT);
1948 args[0] = ni->ni_mlpid;
1949 ieee80211_send_action(ni,
1952 ni->ni_mlrcnt = 0;
1953 mesh_peer_timeout_setup(ni);
2047 if (ni == vap->iv_bss) {
2062 if (ieee80211_parse_action(ni, m0) == 0)
2063 (void)ic->ic_recv_action(ni, wh, frm, efrm);
2090 mesh_recv_ctl(struct ieee80211_node *ni, struct mbuf *m, int subtype)
2095 ieee80211_recv_bar(ni, m);
2104 mesh_parse_meshpeering_action(struct ieee80211_node *ni,
2109 struct ieee80211vap *vap = ni->ni_vap;
2198 switch (ni->ni_mlstate) {
2207 args[0] = ni->ni_mlpid;
2208 args[1] = ni->ni_mllid;
2218 ieee80211_send_action(ni,
2222 mesh_linkchange(ni, IEEE80211_NODE_MESH_HOLDING);
2223 mesh_peer_timeout_setup(ni);
2233 mesh_recv_action_meshpeering_open(struct ieee80211_node *ni,
2237 struct ieee80211vap *vap = ni->ni_vap;
2244 meshpeer = mesh_parse_meshpeering_action(ni, wh, frm+2+2, efrm, &ie,
2251 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
2254 switch (ni->ni_mlstate) {
2261 ieee80211_send_action(ni,
2269 mesh_linkchange(ni, IEEE80211_NODE_MESH_OPENRCV);
2270 ni->ni_mllid = meshpeer->peer_llinkid;
2271 ni->ni_mlpid = mesh_generateid(vap);
2272 if (ni->ni_mlpid == 0)
2274 args[0] = ni->ni_mlpid;
2276 ieee80211_send_action(ni,
2280 args[0] = ni->ni_mlpid;
2281 args[1] = ni->ni_mllid;
2282 ieee80211_send_action(ni,
2286 mesh_peer_timeout_setup(ni);
2290 if (ni->ni_mllid != meshpeer->peer_llinkid) {
2291 args[0] = ni->ni_mllid;
2292 args[1] = ni->ni_mlpid;
2294 ieee80211_send_action(ni,
2298 mesh_linkchange(ni, IEEE80211_NODE_MESH_HOLDING);
2299 mesh_peer_timeout_setup(ni);
2303 args[0] = ni->ni_mlpid;
2304 args[1] = ni->ni_mllid;
2305 ieee80211_send_action(ni,
2311 ni->ni_mllid = meshpeer->peer_llinkid;
2312 mesh_linkchange(ni, IEEE80211_NODE_MESH_OPENRCV);
2313 args[0] = ni->ni_mlpid;
2314 args[1] = ni->ni_mllid;
2315 ieee80211_send_action(ni,
2322 if (ni->ni_mlpid != meshpeer->peer_linkid ||
2323 ni->ni_mllid != meshpeer->peer_llinkid) {
2324 args[0] = ni->ni_mlpid;
2325 args[1] = ni->ni_mllid;
2327 ieee80211_send_action(ni,
2331 mesh_linkchange(ni,
2333 mesh_peer_timeout_setup(ni);
2336 mesh_linkchange(ni, IEEE80211_NODE_MESH_ESTABLISHED);
2337 ni->ni_mllid = meshpeer->peer_llinkid;
2338 args[0] = ni->ni_mlpid;
2339 args[1] = ni->ni_mllid;
2340 ieee80211_send_action(ni,
2344 mesh_peer_timeout_stop(ni);
2347 if (ni->ni_mllid != meshpeer->peer_llinkid) {
2348 args[0] = ni->ni_mllid;
2349 args[1] = ni->ni_mlpid;
2351 ieee80211_send_action(ni,
2355 mesh_linkchange(ni, IEEE80211_NODE_MESH_HOLDING);
2356 mesh_peer_timeout_setup(ni);
2359 args[0] = ni->ni_mlpid;
2360 args[1] = ni->ni_mllid;
2361 ieee80211_send_action(ni,
2367 args[0] = ni->ni_mlpid;
2371 ieee80211_send_action(ni,
2381 mesh_recv_action_meshpeering_confirm(struct ieee80211_node *ni,
2385 struct ieee80211vap *vap = ni->ni_vap;
2391 meshpeer = mesh_parse_meshpeering_action(ni, wh, frm+2+2+2+2, efrm, &ie,
2397 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
2401 switch (ni->ni_mlstate) {
2403 mesh_linkchange(ni, IEEE80211_NODE_MESH_ESTABLISHED);
2404 mesh_peer_timeout_stop(ni);
2407 mesh_linkchange(ni, IEEE80211_NODE_MESH_CONFIRMRCV);
2408 mesh_peer_timeout_setup(ni);
2411 args[0] = ni->ni_mlpid;
2415 ieee80211_send_action(ni,
2421 if (ni->ni_mllid != meshpeer->peer_llinkid) {
2422 args[0] = ni->ni_mlpid;
2423 args[1] = ni->ni_mllid;
2425 ieee80211_send_action(ni,
2429 mesh_linkchange(ni, IEEE80211_NODE_MESH_HOLDING);
2430 mesh_peer_timeout_setup(ni);
2437 ni->ni_mlstate);
2445 mesh_recv_action_meshpeering_close(struct ieee80211_node *ni,
2454 meshpeer = mesh_parse_meshpeering_action(ni, wh, frm+2, efrm, &ie,
2466 IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH,
2467 ni, "%s", "recv PEER CLOSE");
2469 switch (ni->ni_mlstate) {
2477 args[0] = ni->ni_mlpid;
2478 args[1] = ni->ni_mllid;
2480 ieee80211_send_action(ni,
2484 mesh_linkchange(ni, IEEE80211_NODE_MESH_HOLDING);
2485 mesh_peer_timeout_setup(ni);
2488 mesh_linkchange(ni, IEEE80211_NODE_MESH_IDLE);
2489 mesh_peer_timeout_stop(ni);
2499 mesh_recv_action_meshlmetric(struct ieee80211_node *ni,
2510 lm_rep.lm_metric = mesh_airtime_calc(ni);
2511 ieee80211_send_action(ni,
2525 mesh_parse_meshgate_action(struct ieee80211_node *ni,
2529 struct ieee80211vap *vap = ni->ni_vap;
2558 mesh_recv_action_meshgate(struct ieee80211_node *ni,
2562 struct ieee80211vap *vap = ni->ni_vap;
2571 if (mesh_parse_meshgate_action(ni, wh, &ie, frm+2, efrm) != 0) {
2573 ni->ni_macaddr, NULL, "%s",
2582 IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_MESH, ni->ni_macaddr,
2594 ni->ni_macaddr, NULL,
2646 mesh_send_action(struct ieee80211_node *ni,
2651 struct ieee80211vap *vap = ni->ni_vap;
2652 struct ieee80211com *ic = ni->ni_ic;
2656 KASSERT(ni != NULL, ("null node"));
2659 IEEE80211_NOTE(vap, IEEE80211_MSG_OUTPUT, ni,
2662 ieee80211_free_node(ni);
2669 ieee80211_free_node(ni);
2674 ieee80211_send_setup(ni, m,
2681 params.ibp_rate0 = ni->ni_txparms->mgmtrate;
2685 params.ibp_try0 = ni->ni_txparms->maxretry;
2686 params.ibp_power = ni->ni_txpower;
2688 IEEE80211_NODE_STAT(ni, tx_mgmt);
2690 ret = ieee80211_raw_output(vap, ni, m, &params);
2709 mesh_send_action_meshpeering_open(struct ieee80211_node *ni,
2712 struct ieee80211vap *vap = ni->ni_vap;
2713 struct ieee80211com *ic = ni->ni_ic;
2719 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
2724 ni, ether_sprintf(ni->ni_macaddr), ieee80211_node_refcnt(ni)+1);
2725 ieee80211_ref_node(ni);
2751 ADDSHORT(frm, ieee80211_getcapinfo(vap, ni->ni_chan));
2760 return mesh_send_action(ni, vap->iv_myaddr, ni->ni_macaddr, m);
2763 ieee80211_free_node(ni);
2769 mesh_send_action_meshpeering_confirm(struct ieee80211_node *ni,
2772 struct ieee80211vap *vap = ni->ni_vap;
2773 struct ieee80211com *ic = ni->ni_ic;
2779 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
2785 ni, ether_sprintf(ni->ni_macaddr), ieee80211_node_refcnt(ni)+1);
2786 ieee80211_ref_node(ni);
2816 ADDSHORT(frm, ieee80211_getcapinfo(vap, ni->ni_chan));
2828 return mesh_send_action(ni, vap->iv_myaddr, ni->ni_macaddr, m);
2831 ieee80211_free_node(ni);
2837 mesh_send_action_meshpeering_close(struct ieee80211_node *ni,
2840 struct ieee80211vap *vap = ni->ni_vap;
2841 struct ieee80211com *ic = ni->ni_ic;
2846 IEEE80211_NOTE(vap, IEEE80211_MSG_ACTION | IEEE80211_MSG_MESH, ni,
2852 ni, ether_sprintf(ni->ni_macaddr), ieee80211_node_refcnt(ni)+1);
2853 ieee80211_ref_node(ni);
2877 return mesh_send_action(ni, vap->iv_myaddr, ni->ni_macaddr, m);
2880 ieee80211_free_node(ni);
2886 mesh_send_action_meshlmetric(struct ieee80211_node *ni,
2889 struct ieee80211vap *vap = ni->ni_vap;
2890 struct ieee80211com *ic = ni->ni_ic;
2897 ni, "%s", "send LINK METRIC REQUEST action");
2900 ni, "send LINK METRIC REPLY action: metric 0x%x",
2905 ni, ether_sprintf(ni->ni_macaddr), ieee80211_node_refcnt(ni)+1);
2906 ieee80211_ref_node(ni);
2925 return mesh_send_action(ni, vap->iv_myaddr, ni->ni_macaddr, m);
2928 ieee80211_free_node(ni);
2934 mesh_send_action_meshgate(struct ieee80211_node *ni,
2937 struct ieee80211vap *vap = ni->ni_vap;
2938 struct ieee80211com *ic = ni->ni_ic;
2945 ni, ether_sprintf(ni->ni_macaddr), ieee80211_node_refcnt(ni)+1);
2946 ieee80211_ref_node(ni);
2964 return mesh_send_action(ni, vap->iv_myaddr, broadcastaddr, m);
2967 ieee80211_free_node(ni);
2973 mesh_peer_timeout_setup(struct ieee80211_node *ni)
2975 switch (ni->ni_mlstate) {
2977 ni->ni_mltval = ieee80211_mesh_holdingtimeout;
2980 ni->ni_mltval = ieee80211_mesh_confirmtimeout;
2983 ni->ni_mltval = 0;
2986 ni->ni_mltval = ieee80211_mesh_retrytimeout;
2989 if (ni->ni_mltval)
2990 callout_reset(&ni->ni_mltimer, ni->ni_mltval,
2991 mesh_peer_timeout_cb, ni);
2998 mesh_peer_timeout_backoff(struct ieee80211_node *ni)
3003 ni->ni_mltval += r % ni->ni_mltval;
3004 callout_reset(&ni->ni_mltimer, ni->ni_mltval, mesh_peer_timeout_cb,
3005 ni);
3009 mesh_peer_timeout_stop(struct ieee80211_node *ni)
3011 callout_drain(&ni->ni_mltimer);
3017 struct ieee80211_node *ni = (struct ieee80211_node *)arg;
3020 ni->ni_mlhcnt = 0;
3029 struct ieee80211_node *ni = (struct ieee80211_node *)arg;
3032 IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_MESH,
3033 ni, "mesh link timeout, state %d, retry counter %d",
3034 ni->ni_mlstate, ni->ni_mlrcnt);
3036 switch (ni->ni_mlstate) {
3042 if (ni->ni_mlrcnt == ieee80211_mesh_maxretries) {
3043 args[0] = ni->ni_mlpid;
3045 ieee80211_send_action(ni,
3048 ni->ni_mlrcnt = 0;
3049 mesh_linkchange(ni, IEEE80211_NODE_MESH_HOLDING);
3050 mesh_peer_timeout_setup(ni);
3052 args[0] = ni->ni_mlpid;
3053 ieee80211_send_action(ni,
3056 ni->ni_mlrcnt++;
3057 mesh_peer_timeout_backoff(ni);
3061 args[0] = ni->ni_mlpid;
3063 ieee80211_send_action(ni,
3066 mesh_linkchange(ni, IEEE80211_NODE_MESH_HOLDING);
3067 mesh_peer_timeout_setup(ni);
3070 ni->ni_mlhcnt++;
3071 if (ni->ni_mlhcnt >= ieee80211_mesh_maxholding)
3072 callout_reset(&ni->ni_mlhtimer,
3074 mesh_peer_backoff_cb, ni);
3075 mesh_linkchange(ni, IEEE80211_NODE_MESH_IDLE);
3290 mesh_airtime_calc(struct ieee80211_node *ni)
3294 struct ieee80211com *ic = ni->ni_ic;
3295 struct ifnet *ifp = ni->ni_vap->iv_ifp;
3301 rate = ni->ni_txrate;
3354 ieee80211_mesh_node_init(struct ieee80211vap *vap, struct ieee80211_node *ni)
3356 ni->ni_flags |= IEEE80211_NODE_QOS;
3357 callout_init(&ni->ni_mltimer, 1);
3358 callout_init(&ni->ni_mlhtimer, 1);
3365 ieee80211_mesh_node_cleanup(struct ieee80211_node *ni)
3367 struct ieee80211vap *vap = ni->ni_vap;
3370 callout_drain(&ni->ni_mltimer);
3371 callout_drain(&ni->ni_mlhtimer);
3374 ms->ms_ppath->mpp_peerdown(ni);
3378 ieee80211_parse_meshid(struct ieee80211_node *ni, const uint8_t *ie)
3380 ni->ni_meshidlen = ie[1];
3381 memcpy(ni->ni_meshid, ie + 2, ie[1]);
3388 ieee80211_mesh_init_neighbor(struct ieee80211_node *ni,
3392 ieee80211_parse_meshid(ni, sp->meshid);