mpath 51 drivers/s390/cio/device_ops.c cdev->private->options.mpath = (flags & CCWDEV_DO_MULTIPATH) != 0; mpath 80 drivers/s390/cio/device_ops.c cdev->private->options.mpath |= (flags & CCWDEV_DO_MULTIPATH) != 0; mpath 97 drivers/s390/cio/device_ops.c cdev->private->options.mpath &= (flags & CCWDEV_DO_MULTIPATH) == 0; mpath 120 drivers/s390/cio/device_ops.c return cdev->private->flags.mpath; mpath 37 drivers/s390/cio/device_pgid.c int mpath = cdev->private->flags.mpath; mpath 43 drivers/s390/cio/device_pgid.c if (sch->config.mp != mpath) { mpath 44 drivers/s390/cio/device_pgid.c sch->config.mp = mpath; mpath 49 drivers/s390/cio/device_pgid.c "vpm=%02x\n", id->ssid, id->devno, rc, pgroup, mpath, mpath 185 drivers/s390/cio/device_pgid.c if (cdev->private->flags.mpath) mpath 209 drivers/s390/cio/device_pgid.c if (cdev->private->flags.mpath) mpath 244 drivers/s390/cio/device_pgid.c if (cdev->private->flags.mpath) { mpath 246 drivers/s390/cio/device_pgid.c cdev->private->flags.mpath = 0; mpath 353 drivers/s390/cio/device_pgid.c if (cdev->private->flags.mpath) { mpath 425 drivers/s390/cio/device_pgid.c cdev->private->flags.mpath = 0; mpath 565 drivers/s390/cio/device_pgid.c cdev->private->flags.mpath = cdev->private->options.mpath; mpath 582 drivers/s390/cio/device_pgid.c cdev->private->flags.mpath = 0; mpath 617 drivers/s390/cio/device_pgid.c if (cdev->private->flags.mpath) mpath 154 drivers/s390/cio/io_sch.h unsigned int mpath:1; /* do multipathing */ mpath 165 drivers/s390/cio/io_sch.h unsigned int mpath:1; /* multipathing is set up */ mpath 75 include/net/nexthop.h bool mpath; mpath 129 include/net/nexthop.h return nh_grp->mpath; mpath 144 include/net/nexthop.h if (nh_grp->mpath) mpath 225 include/net/nexthop.h if (nh_grp->mpath) { mpath 192 net/ipv4/nexthop.c if (nhg->mpath) mpath 381 net/ipv4/nexthop.c if (nhg->mpath) { mpath 726 net/ipv4/nexthop.c newg->mpath = nhg->mpath; mpath 1148 net/ipv4/nexthop.c nhg->mpath = 1; mpath 1725 net/mac80211/cfg.c struct mesh_path *mpath; mpath 1737 net/mac80211/cfg.c mpath = mesh_path_add(sdata, dst); mpath 1738 net/mac80211/cfg.c if (IS_ERR(mpath)) { mpath 1740 net/mac80211/cfg.c return PTR_ERR(mpath); mpath 1743 net/mac80211/cfg.c mesh_path_fix_nexthop(mpath, sta); mpath 1765 net/mac80211/cfg.c struct mesh_path *mpath; mpath 1778 net/mac80211/cfg.c mpath = mesh_path_lookup(sdata, dst); mpath 1779 net/mac80211/cfg.c if (!mpath) { mpath 1784 net/mac80211/cfg.c mesh_path_fix_nexthop(mpath, sta); mpath 1790 net/mac80211/cfg.c static void mpath_set_pinfo(struct mesh_path *mpath, u8 *next_hop, mpath 1793 net/mac80211/cfg.c struct sta_info *next_hop_sta = rcu_dereference(mpath->next_hop); mpath 1802 net/mac80211/cfg.c pinfo->generation = mpath->sdata->u.mesh.mesh_paths_generation; mpath 1814 net/mac80211/cfg.c pinfo->frame_qlen = mpath->frame_queue.qlen; mpath 1815 net/mac80211/cfg.c pinfo->sn = mpath->sn; mpath 1816 net/mac80211/cfg.c pinfo->metric = mpath->metric; mpath 1817 net/mac80211/cfg.c if (time_before(jiffies, mpath->exp_time)) mpath 1818 net/mac80211/cfg.c pinfo->exptime = jiffies_to_msecs(mpath->exp_time - jiffies); mpath 1820 net/mac80211/cfg.c jiffies_to_msecs(mpath->discovery_timeout); mpath 1821 net/mac80211/cfg.c pinfo->discovery_retries = mpath->discovery_retries; mpath 1822 net/mac80211/cfg.c if (mpath->flags & MESH_PATH_ACTIVE) mpath 1824 net/mac80211/cfg.c if (mpath->flags & MESH_PATH_RESOLVING) mpath 1826 net/mac80211/cfg.c if (mpath->flags & MESH_PATH_SN_VALID) mpath 1828 net/mac80211/cfg.c if (mpath->flags & MESH_PATH_FIXED) mpath 1830 net/mac80211/cfg.c if (mpath->flags & MESH_PATH_RESOLVED) mpath 1832 net/mac80211/cfg.c pinfo->hop_count = mpath->hop_count; mpath 1833 net/mac80211/cfg.c pinfo->path_change_count = mpath->path_change_count; mpath 1841 net/mac80211/cfg.c struct mesh_path *mpath; mpath 1846 net/mac80211/cfg.c mpath = mesh_path_lookup(sdata, dst); mpath 1847 net/mac80211/cfg.c if (!mpath) { mpath 1851 net/mac80211/cfg.c memcpy(dst, mpath->dst, ETH_ALEN); mpath 1852 net/mac80211/cfg.c mpath_set_pinfo(mpath, next_hop, pinfo); mpath 1862 net/mac80211/cfg.c struct mesh_path *mpath; mpath 1867 net/mac80211/cfg.c mpath = mesh_path_lookup_by_idx(sdata, idx); mpath 1868 net/mac80211/cfg.c if (!mpath) { mpath 1872 net/mac80211/cfg.c memcpy(dst, mpath->dst, ETH_ALEN); mpath 1873 net/mac80211/cfg.c mpath_set_pinfo(mpath, next_hop, pinfo); mpath 1878 net/mac80211/cfg.c static void mpp_set_pinfo(struct mesh_path *mpath, u8 *mpp, mpath 1882 net/mac80211/cfg.c memcpy(mpp, mpath->mpp, ETH_ALEN); mpath 1884 net/mac80211/cfg.c pinfo->generation = mpath->sdata->u.mesh.mpp_paths_generation; mpath 1892 net/mac80211/cfg.c struct mesh_path *mpath; mpath 1897 net/mac80211/cfg.c mpath = mpp_path_lookup(sdata, dst); mpath 1898 net/mac80211/cfg.c if (!mpath) { mpath 1902 net/mac80211/cfg.c memcpy(dst, mpath->dst, ETH_ALEN); mpath 1903 net/mac80211/cfg.c mpp_set_pinfo(mpath, mpp, pinfo); mpath 1913 net/mac80211/cfg.c struct mesh_path *mpath; mpath 1918 net/mac80211/cfg.c mpath = mpp_path_lookup_by_idx(sdata, idx); mpath 1919 net/mac80211/cfg.c if (!mpath) { mpath 1923 net/mac80211/cfg.c memcpy(dst, mpath->dst, ETH_ALEN); mpath 1924 net/mac80211/cfg.c mpp_set_pinfo(mpath, mpp, pinfo); mpath 272 net/mac80211/mesh.h void mesh_path_fix_nexthop(struct mesh_path *mpath, struct sta_info *next_hop); mpath 279 net/mac80211/mesh.h int mesh_path_add_gate(struct mesh_path *mpath); mpath 280 net/mac80211/mesh.h int mesh_path_send_to_gates(struct mesh_path *mpath); mpath 306 net/mac80211/mesh.h void mesh_path_assign_nexthop(struct mesh_path *mpath, struct sta_info *sta); mpath 307 net/mac80211/mesh.h void mesh_path_flush_pending(struct mesh_path *mpath); mpath 308 net/mac80211/mesh.h void mesh_path_tx_pending(struct mesh_path *mpath); mpath 347 net/mac80211/mesh.h static inline void mesh_path_activate(struct mesh_path *mpath) mpath 349 net/mac80211/mesh.h mpath->flags |= MESH_PATH_ACTIVE | MESH_PATH_RESOLVED; mpath 385 net/mac80211/mesh_hwmp.c struct mesh_path *mpath; mpath 442 net/mac80211/mesh_hwmp.c mpath = mesh_path_lookup(sdata, orig_addr); mpath 443 net/mac80211/mesh_hwmp.c if (mpath) { mpath 444 net/mac80211/mesh_hwmp.c spin_lock_bh(&mpath->state_lock); mpath 445 net/mac80211/mesh_hwmp.c if (mpath->flags & MESH_PATH_FIXED) mpath 447 net/mac80211/mesh_hwmp.c else if ((mpath->flags & MESH_PATH_ACTIVE) && mpath 448 net/mac80211/mesh_hwmp.c (mpath->flags & MESH_PATH_SN_VALID)) { mpath 449 net/mac80211/mesh_hwmp.c if (SN_GT(mpath->sn, orig_sn) || mpath 450 net/mac80211/mesh_hwmp.c (mpath->sn == orig_sn && mpath 451 net/mac80211/mesh_hwmp.c (rcu_access_pointer(mpath->next_hop) != mpath 454 net/mac80211/mesh_hwmp.c new_metric) >= mpath->metric)) { mpath 458 net/mac80211/mesh_hwmp.c } else if (!(mpath->flags & MESH_PATH_ACTIVE)) { mpath 461 net/mac80211/mesh_hwmp.c have_sn = mpath->flags & MESH_PATH_SN_VALID; mpath 462 net/mac80211/mesh_hwmp.c newer_sn = have_sn && SN_GT(orig_sn, mpath->sn); mpath 464 net/mac80211/mesh_hwmp.c (SN_DELTA(orig_sn, mpath->sn) > mpath 480 net/mac80211/mesh_hwmp.c mpath = mesh_path_add(sdata, orig_addr); mpath 481 net/mac80211/mesh_hwmp.c if (IS_ERR(mpath)) { mpath 485 net/mac80211/mesh_hwmp.c spin_lock_bh(&mpath->state_lock); mpath 489 net/mac80211/mesh_hwmp.c if (rcu_access_pointer(mpath->next_hop) != sta) mpath 490 net/mac80211/mesh_hwmp.c mpath->path_change_count++; mpath 491 net/mac80211/mesh_hwmp.c mesh_path_assign_nexthop(mpath, sta); mpath 492 net/mac80211/mesh_hwmp.c mpath->flags |= MESH_PATH_SN_VALID; mpath 493 net/mac80211/mesh_hwmp.c mpath->metric = new_metric; mpath 494 net/mac80211/mesh_hwmp.c mpath->sn = orig_sn; mpath 495 net/mac80211/mesh_hwmp.c mpath->exp_time = time_after(mpath->exp_time, exp_time) mpath 496 net/mac80211/mesh_hwmp.c ? mpath->exp_time : exp_time; mpath 497 net/mac80211/mesh_hwmp.c mpath->hop_count = hopcount; mpath 498 net/mac80211/mesh_hwmp.c mesh_path_activate(mpath); mpath 499 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 503 net/mac80211/mesh_hwmp.c mesh_path_tx_pending(mpath); mpath 508 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 518 net/mac80211/mesh_hwmp.c mpath = mesh_path_lookup(sdata, ta); mpath 519 net/mac80211/mesh_hwmp.c if (mpath) { mpath 520 net/mac80211/mesh_hwmp.c spin_lock_bh(&mpath->state_lock); mpath 521 net/mac80211/mesh_hwmp.c if ((mpath->flags & MESH_PATH_FIXED) || mpath 522 net/mac80211/mesh_hwmp.c ((mpath->flags & MESH_PATH_ACTIVE) && mpath 523 net/mac80211/mesh_hwmp.c ((rcu_access_pointer(mpath->next_hop) != sta ? mpath 525 net/mac80211/mesh_hwmp.c last_hop_metric) > mpath->metric))) mpath 528 net/mac80211/mesh_hwmp.c mpath = mesh_path_add(sdata, ta); mpath 529 net/mac80211/mesh_hwmp.c if (IS_ERR(mpath)) { mpath 533 net/mac80211/mesh_hwmp.c spin_lock_bh(&mpath->state_lock); mpath 537 net/mac80211/mesh_hwmp.c if (rcu_access_pointer(mpath->next_hop) != sta) mpath 538 net/mac80211/mesh_hwmp.c mpath->path_change_count++; mpath 539 net/mac80211/mesh_hwmp.c mesh_path_assign_nexthop(mpath, sta); mpath 540 net/mac80211/mesh_hwmp.c mpath->metric = last_hop_metric; mpath 541 net/mac80211/mesh_hwmp.c mpath->exp_time = time_after(mpath->exp_time, exp_time) mpath 542 net/mac80211/mesh_hwmp.c ? mpath->exp_time : exp_time; mpath 543 net/mac80211/mesh_hwmp.c mpath->hop_count = 1; mpath 544 net/mac80211/mesh_hwmp.c mesh_path_activate(mpath); mpath 545 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 549 net/mac80211/mesh_hwmp.c mesh_path_tx_pending(mpath); mpath 551 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 564 net/mac80211/mesh_hwmp.c struct mesh_path *mpath = NULL; mpath 604 net/mac80211/mesh_hwmp.c mpath = mesh_path_lookup(sdata, orig_addr); mpath 605 net/mac80211/mesh_hwmp.c if (mpath) { mpath 614 net/mac80211/mesh_hwmp.c mesh_path_add_gate(mpath); mpath 619 net/mac80211/mesh_hwmp.c mpath = mesh_path_lookup(sdata, target_addr); mpath 620 net/mac80211/mesh_hwmp.c if (mpath) { mpath 621 net/mac80211/mesh_hwmp.c if ((!(mpath->flags & MESH_PATH_SN_VALID)) || mpath 622 net/mac80211/mesh_hwmp.c SN_LT(mpath->sn, target_sn)) { mpath 623 net/mac80211/mesh_hwmp.c mpath->sn = target_sn; mpath 624 net/mac80211/mesh_hwmp.c mpath->flags |= MESH_PATH_SN_VALID; mpath 626 net/mac80211/mesh_hwmp.c (mpath->flags & MESH_PATH_ACTIVE)) { mpath 628 net/mac80211/mesh_hwmp.c target_metric = mpath->metric; mpath 629 net/mac80211/mesh_hwmp.c target_sn = mpath->sn; mpath 666 net/mac80211/mesh_hwmp.c da = (mpath && mpath->is_root) ? mpath 667 net/mac80211/mesh_hwmp.c mpath->rann_snd_addr : broadcast_addr; mpath 688 net/mac80211/mesh_hwmp.c next_hop_deref_protected(struct mesh_path *mpath) mpath 690 net/mac80211/mesh_hwmp.c return rcu_dereference_protected(mpath->next_hop, mpath 691 net/mac80211/mesh_hwmp.c lockdep_is_held(&mpath->state_lock)); mpath 700 net/mac80211/mesh_hwmp.c struct mesh_path *mpath; mpath 724 net/mac80211/mesh_hwmp.c mpath = mesh_path_lookup(sdata, orig_addr); mpath 725 net/mac80211/mesh_hwmp.c if (mpath) mpath 726 net/mac80211/mesh_hwmp.c spin_lock_bh(&mpath->state_lock); mpath 729 net/mac80211/mesh_hwmp.c if (!(mpath->flags & MESH_PATH_ACTIVE)) { mpath 730 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 733 net/mac80211/mesh_hwmp.c memcpy(next_hop, next_hop_deref_protected(mpath)->sta.addr, ETH_ALEN); mpath 734 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 762 net/mac80211/mesh_hwmp.c struct mesh_path *mpath; mpath 780 net/mac80211/mesh_hwmp.c mpath = mesh_path_lookup(sdata, target_addr); mpath 781 net/mac80211/mesh_hwmp.c if (mpath) { mpath 784 net/mac80211/mesh_hwmp.c spin_lock_bh(&mpath->state_lock); mpath 785 net/mac80211/mesh_hwmp.c sta = next_hop_deref_protected(mpath); mpath 786 net/mac80211/mesh_hwmp.c if (mpath->flags & MESH_PATH_ACTIVE && mpath 788 net/mac80211/mesh_hwmp.c !(mpath->flags & MESH_PATH_FIXED) && mpath 789 net/mac80211/mesh_hwmp.c (!(mpath->flags & MESH_PATH_SN_VALID) || mpath 790 net/mac80211/mesh_hwmp.c SN_GT(target_sn, mpath->sn) || target_sn == 0)) { mpath 791 net/mac80211/mesh_hwmp.c mpath->flags &= ~MESH_PATH_ACTIVE; mpath 793 net/mac80211/mesh_hwmp.c mpath->sn = target_sn; mpath 795 net/mac80211/mesh_hwmp.c mpath->sn += 1; mpath 796 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 803 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 816 net/mac80211/mesh_hwmp.c struct mesh_path *mpath; mpath 852 net/mac80211/mesh_hwmp.c mpath = mesh_path_lookup(sdata, orig_addr); mpath 853 net/mac80211/mesh_hwmp.c if (!mpath) { mpath 854 net/mac80211/mesh_hwmp.c mpath = mesh_path_add(sdata, orig_addr); mpath 855 net/mac80211/mesh_hwmp.c if (IS_ERR(mpath)) { mpath 862 net/mac80211/mesh_hwmp.c if (!(SN_LT(mpath->sn, orig_sn)) && mpath 863 net/mac80211/mesh_hwmp.c !(mpath->sn == orig_sn && new_metric < mpath->rann_metric)) { mpath 868 net/mac80211/mesh_hwmp.c if ((!(mpath->flags & (MESH_PATH_ACTIVE | MESH_PATH_RESOLVING)) || mpath 869 net/mac80211/mesh_hwmp.c (time_after(jiffies, mpath->last_preq_to_root + mpath 871 net/mac80211/mesh_hwmp.c time_before(jiffies, mpath->last_preq_to_root))) && mpath 872 net/mac80211/mesh_hwmp.c !(mpath->flags & MESH_PATH_FIXED) && (ttl != 0)) { mpath 876 net/mac80211/mesh_hwmp.c mesh_queue_preq(mpath, PREQ_Q_F_START | PREQ_Q_F_REFRESH); mpath 877 net/mac80211/mesh_hwmp.c mpath->last_preq_to_root = jiffies; mpath 880 net/mac80211/mesh_hwmp.c mpath->sn = orig_sn; mpath 881 net/mac80211/mesh_hwmp.c mpath->rann_metric = new_metric; mpath 882 net/mac80211/mesh_hwmp.c mpath->is_root = true; mpath 885 net/mac80211/mesh_hwmp.c memcpy(mpath->rann_snd_addr, mgmt->sa, ETH_ALEN); mpath 888 net/mac80211/mesh_hwmp.c mesh_path_add_gate(mpath); mpath 971 net/mac80211/mesh_hwmp.c static void mesh_queue_preq(struct mesh_path *mpath, u8 flags) mpath 973 net/mac80211/mesh_hwmp.c struct ieee80211_sub_if_data *sdata = mpath->sdata; mpath 992 net/mac80211/mesh_hwmp.c spin_lock(&mpath->state_lock); mpath 993 net/mac80211/mesh_hwmp.c if (mpath->flags & MESH_PATH_REQ_QUEUED) { mpath 994 net/mac80211/mesh_hwmp.c spin_unlock(&mpath->state_lock); mpath 1000 net/mac80211/mesh_hwmp.c memcpy(preq_node->dst, mpath->dst, ETH_ALEN); mpath 1003 net/mac80211/mesh_hwmp.c mpath->flags |= MESH_PATH_REQ_QUEUED; mpath 1004 net/mac80211/mesh_hwmp.c spin_unlock(&mpath->state_lock); mpath 1033 net/mac80211/mesh_hwmp.c struct mesh_path *mpath; mpath 1053 net/mac80211/mesh_hwmp.c mpath = mesh_path_lookup(sdata, preq_node->dst); mpath 1054 net/mac80211/mesh_hwmp.c if (!mpath) mpath 1057 net/mac80211/mesh_hwmp.c spin_lock_bh(&mpath->state_lock); mpath 1058 net/mac80211/mesh_hwmp.c if (mpath->flags & (MESH_PATH_DELETED | MESH_PATH_FIXED)) { mpath 1059 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 1062 net/mac80211/mesh_hwmp.c mpath->flags &= ~MESH_PATH_REQ_QUEUED; mpath 1064 net/mac80211/mesh_hwmp.c if (mpath->flags & MESH_PATH_RESOLVING) { mpath 1065 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 1068 net/mac80211/mesh_hwmp.c mpath->flags &= ~MESH_PATH_RESOLVED; mpath 1069 net/mac80211/mesh_hwmp.c mpath->flags |= MESH_PATH_RESOLVING; mpath 1070 net/mac80211/mesh_hwmp.c mpath->discovery_retries = 0; mpath 1071 net/mac80211/mesh_hwmp.c mpath->discovery_timeout = disc_timeout_jiff(sdata); mpath 1073 net/mac80211/mesh_hwmp.c } else if (!(mpath->flags & MESH_PATH_RESOLVING) || mpath 1074 net/mac80211/mesh_hwmp.c mpath->flags & MESH_PATH_RESOLVED) { mpath 1075 net/mac80211/mesh_hwmp.c mpath->flags &= ~MESH_PATH_RESOLVING; mpath 1076 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 1092 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 1101 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 1102 net/mac80211/mesh_hwmp.c da = (mpath->is_root) ? mpath->rann_snd_addr : broadcast_addr; mpath 1104 net/mac80211/mesh_hwmp.c target_flags, mpath->dst, mpath->sn, da, 0, mpath 1107 net/mac80211/mesh_hwmp.c spin_lock_bh(&mpath->state_lock); mpath 1108 net/mac80211/mesh_hwmp.c if (mpath->flags & MESH_PATH_DELETED) { mpath 1109 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 1112 net/mac80211/mesh_hwmp.c mod_timer(&mpath->timer, jiffies + mpath->discovery_timeout); mpath 1113 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 1137 net/mac80211/mesh_hwmp.c struct mesh_path *mpath; mpath 1153 net/mac80211/mesh_hwmp.c mpath = mesh_path_lookup(sdata, target_addr); mpath 1154 net/mac80211/mesh_hwmp.c if (!mpath) { mpath 1155 net/mac80211/mesh_hwmp.c mpath = mesh_path_add(sdata, target_addr); mpath 1156 net/mac80211/mesh_hwmp.c if (IS_ERR(mpath)) { mpath 1158 net/mac80211/mesh_hwmp.c return PTR_ERR(mpath); mpath 1162 net/mac80211/mesh_hwmp.c if (!(mpath->flags & MESH_PATH_RESOLVING) && mpath 1164 net/mac80211/mesh_hwmp.c mesh_queue_preq(mpath, PREQ_Q_F_START); mpath 1166 net/mac80211/mesh_hwmp.c if (skb_queue_len(&mpath->frame_queue) >= MESH_FRAME_QUEUE_LEN) mpath 1167 net/mac80211/mesh_hwmp.c skb_to_free = skb_dequeue(&mpath->frame_queue); mpath 1171 net/mac80211/mesh_hwmp.c skb_queue_tail(&mpath->frame_queue, skb); mpath 1191 net/mac80211/mesh_hwmp.c struct mesh_path *mpath; mpath 1196 net/mac80211/mesh_hwmp.c mpath = mesh_path_lookup(sdata, target_addr); mpath 1197 net/mac80211/mesh_hwmp.c if (!mpath || !(mpath->flags & MESH_PATH_ACTIVE)) mpath 1201 net/mac80211/mesh_hwmp.c mpath->exp_time - mpath 1204 net/mac80211/mesh_hwmp.c !(mpath->flags & MESH_PATH_RESOLVING) && mpath 1205 net/mac80211/mesh_hwmp.c !(mpath->flags & MESH_PATH_FIXED)) mpath 1206 net/mac80211/mesh_hwmp.c mesh_queue_preq(mpath, PREQ_Q_F_START | PREQ_Q_F_REFRESH); mpath 1208 net/mac80211/mesh_hwmp.c next_hop = rcu_dereference(mpath->next_hop); mpath 1221 net/mac80211/mesh_hwmp.c struct mesh_path *mpath = from_timer(mpath, t, timer); mpath 1222 net/mac80211/mesh_hwmp.c struct ieee80211_sub_if_data *sdata = mpath->sdata; mpath 1228 net/mac80211/mesh_hwmp.c spin_lock_bh(&mpath->state_lock); mpath 1229 net/mac80211/mesh_hwmp.c if (mpath->flags & MESH_PATH_RESOLVED || mpath 1230 net/mac80211/mesh_hwmp.c (!(mpath->flags & MESH_PATH_RESOLVING))) { mpath 1231 net/mac80211/mesh_hwmp.c mpath->flags &= ~(MESH_PATH_RESOLVING | MESH_PATH_RESOLVED); mpath 1232 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 1233 net/mac80211/mesh_hwmp.c } else if (mpath->discovery_retries < max_preq_retries(sdata)) { mpath 1234 net/mac80211/mesh_hwmp.c ++mpath->discovery_retries; mpath 1235 net/mac80211/mesh_hwmp.c mpath->discovery_timeout *= 2; mpath 1236 net/mac80211/mesh_hwmp.c mpath->flags &= ~MESH_PATH_REQ_QUEUED; mpath 1237 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 1238 net/mac80211/mesh_hwmp.c mesh_queue_preq(mpath, 0); mpath 1240 net/mac80211/mesh_hwmp.c mpath->flags &= ~(MESH_PATH_RESOLVING | mpath 1243 net/mac80211/mesh_hwmp.c mpath->exp_time = jiffies; mpath 1244 net/mac80211/mesh_hwmp.c spin_unlock_bh(&mpath->state_lock); mpath 1245 net/mac80211/mesh_hwmp.c if (!mpath->is_gate && mesh_gate_num(sdata) > 0) { mpath 1246 net/mac80211/mesh_hwmp.c ret = mesh_path_send_to_gates(mpath); mpath 1250 net/mac80211/mesh_hwmp.c mesh_path_flush_pending(mpath); mpath 18 net/mac80211/mesh_pathtbl.c static void mesh_path_free_rcu(struct mesh_table *tbl, struct mesh_path *mpath); mpath 35 net/mac80211/mesh_pathtbl.c static inline bool mpath_expired(struct mesh_path *mpath) mpath 37 net/mac80211/mesh_pathtbl.c return (mpath->flags & MESH_PATH_ACTIVE) && mpath 38 net/mac80211/mesh_pathtbl.c time_after(jiffies, mpath->exp_time) && mpath 39 net/mac80211/mesh_pathtbl.c !(mpath->flags & MESH_PATH_FIXED); mpath 44 net/mac80211/mesh_pathtbl.c struct mesh_path *mpath = ptr; mpath 47 net/mac80211/mesh_pathtbl.c mesh_path_free_rcu(tbl, mpath); mpath 83 net/mac80211/mesh_pathtbl.c void mesh_path_assign_nexthop(struct mesh_path *mpath, struct sta_info *sta) mpath 89 net/mac80211/mesh_pathtbl.c rcu_assign_pointer(mpath->next_hop, sta); mpath 91 net/mac80211/mesh_pathtbl.c spin_lock_irqsave(&mpath->frame_queue.lock, flags); mpath 92 net/mac80211/mesh_pathtbl.c skb_queue_walk(&mpath->frame_queue, skb) { mpath 95 net/mac80211/mesh_pathtbl.c memcpy(hdr->addr2, mpath->sdata->vif.addr, ETH_ALEN); mpath 99 net/mac80211/mesh_pathtbl.c spin_unlock_irqrestore(&mpath->frame_queue.lock, flags); mpath 215 net/mac80211/mesh_pathtbl.c struct mesh_path *mpath; mpath 217 net/mac80211/mesh_pathtbl.c mpath = rhashtable_lookup(&tbl->rhead, dst, mesh_rht_params); mpath 219 net/mac80211/mesh_pathtbl.c if (mpath && mpath_expired(mpath)) { mpath 220 net/mac80211/mesh_pathtbl.c spin_lock_bh(&mpath->state_lock); mpath 221 net/mac80211/mesh_pathtbl.c mpath->flags &= ~MESH_PATH_ACTIVE; mpath 222 net/mac80211/mesh_pathtbl.c spin_unlock_bh(&mpath->state_lock); mpath 224 net/mac80211/mesh_pathtbl.c return mpath; mpath 252 net/mac80211/mesh_pathtbl.c struct mesh_path *mpath; mpath 254 net/mac80211/mesh_pathtbl.c hlist_for_each_entry_rcu(mpath, &tbl->walk_head, walk_list) { mpath 259 net/mac80211/mesh_pathtbl.c if (!mpath) mpath 262 net/mac80211/mesh_pathtbl.c if (mpath_expired(mpath)) { mpath 263 net/mac80211/mesh_pathtbl.c spin_lock_bh(&mpath->state_lock); mpath 264 net/mac80211/mesh_pathtbl.c mpath->flags &= ~MESH_PATH_ACTIVE; mpath 265 net/mac80211/mesh_pathtbl.c spin_unlock_bh(&mpath->state_lock); mpath 267 net/mac80211/mesh_pathtbl.c return mpath; mpath 304 net/mac80211/mesh_pathtbl.c int mesh_path_add_gate(struct mesh_path *mpath) mpath 310 net/mac80211/mesh_pathtbl.c tbl = mpath->sdata->u.mesh.mesh_paths; mpath 312 net/mac80211/mesh_pathtbl.c spin_lock_bh(&mpath->state_lock); mpath 313 net/mac80211/mesh_pathtbl.c if (mpath->is_gate) { mpath 315 net/mac80211/mesh_pathtbl.c spin_unlock_bh(&mpath->state_lock); mpath 318 net/mac80211/mesh_pathtbl.c mpath->is_gate = true; mpath 319 net/mac80211/mesh_pathtbl.c mpath->sdata->u.mesh.num_gates++; mpath 322 net/mac80211/mesh_pathtbl.c hlist_add_head_rcu(&mpath->gate_list, &tbl->known_gates); mpath 325 net/mac80211/mesh_pathtbl.c spin_unlock_bh(&mpath->state_lock); mpath 327 net/mac80211/mesh_pathtbl.c mpath_dbg(mpath->sdata, mpath 329 net/mac80211/mesh_pathtbl.c mpath->dst, mpath->sdata->u.mesh.num_gates); mpath 341 net/mac80211/mesh_pathtbl.c static void mesh_gate_del(struct mesh_table *tbl, struct mesh_path *mpath) mpath 343 net/mac80211/mesh_pathtbl.c lockdep_assert_held(&mpath->state_lock); mpath 344 net/mac80211/mesh_pathtbl.c if (!mpath->is_gate) mpath 347 net/mac80211/mesh_pathtbl.c mpath->is_gate = false; mpath 349 net/mac80211/mesh_pathtbl.c hlist_del_rcu(&mpath->gate_list); mpath 350 net/mac80211/mesh_pathtbl.c mpath->sdata->u.mesh.num_gates--; mpath 353 net/mac80211/mesh_pathtbl.c mpath_dbg(mpath->sdata, mpath 355 net/mac80211/mesh_pathtbl.c mpath->dst, mpath->sdata->u.mesh.num_gates); mpath 403 net/mac80211/mesh_pathtbl.c struct mesh_path *mpath, *new_mpath; mpath 421 net/mac80211/mesh_pathtbl.c mpath = rhashtable_lookup_get_insert_fast(&tbl->rhead, mpath 424 net/mac80211/mesh_pathtbl.c if (!mpath) mpath 428 net/mac80211/mesh_pathtbl.c if (mpath) { mpath 431 net/mac80211/mesh_pathtbl.c if (IS_ERR(mpath)) mpath 432 net/mac80211/mesh_pathtbl.c return mpath; mpath 434 net/mac80211/mesh_pathtbl.c new_mpath = mpath; mpath 492 net/mac80211/mesh_pathtbl.c struct mesh_path *mpath; mpath 495 net/mac80211/mesh_pathtbl.c hlist_for_each_entry_rcu(mpath, &tbl->walk_head, walk_list) { mpath 496 net/mac80211/mesh_pathtbl.c if (rcu_access_pointer(mpath->next_hop) == sta && mpath 497 net/mac80211/mesh_pathtbl.c mpath->flags & MESH_PATH_ACTIVE && mpath 498 net/mac80211/mesh_pathtbl.c !(mpath->flags & MESH_PATH_FIXED)) { mpath 499 net/mac80211/mesh_pathtbl.c spin_lock_bh(&mpath->state_lock); mpath 500 net/mac80211/mesh_pathtbl.c mpath->flags &= ~MESH_PATH_ACTIVE; mpath 501 net/mac80211/mesh_pathtbl.c ++mpath->sn; mpath 502 net/mac80211/mesh_pathtbl.c spin_unlock_bh(&mpath->state_lock); mpath 505 net/mac80211/mesh_pathtbl.c mpath->dst, mpath->sn, mpath 513 net/mac80211/mesh_pathtbl.c struct mesh_path *mpath) mpath 515 net/mac80211/mesh_pathtbl.c struct ieee80211_sub_if_data *sdata = mpath->sdata; mpath 517 net/mac80211/mesh_pathtbl.c spin_lock_bh(&mpath->state_lock); mpath 518 net/mac80211/mesh_pathtbl.c mpath->flags |= MESH_PATH_RESOLVING | MESH_PATH_DELETED; mpath 519 net/mac80211/mesh_pathtbl.c mesh_gate_del(tbl, mpath); mpath 520 net/mac80211/mesh_pathtbl.c spin_unlock_bh(&mpath->state_lock); mpath 521 net/mac80211/mesh_pathtbl.c del_timer_sync(&mpath->timer); mpath 524 net/mac80211/mesh_pathtbl.c kfree_rcu(mpath, rcu); mpath 527 net/mac80211/mesh_pathtbl.c static void __mesh_path_del(struct mesh_table *tbl, struct mesh_path *mpath) mpath 529 net/mac80211/mesh_pathtbl.c hlist_del_rcu(&mpath->walk_list); mpath 530 net/mac80211/mesh_pathtbl.c rhashtable_remove_fast(&tbl->rhead, &mpath->rhash, mesh_rht_params); mpath 531 net/mac80211/mesh_pathtbl.c mesh_path_free_rcu(tbl, mpath); mpath 549 net/mac80211/mesh_pathtbl.c struct mesh_path *mpath; mpath 553 net/mac80211/mesh_pathtbl.c hlist_for_each_entry_safe(mpath, n, &tbl->walk_head, walk_list) { mpath 554 net/mac80211/mesh_pathtbl.c if (rcu_access_pointer(mpath->next_hop) == sta) mpath 555 net/mac80211/mesh_pathtbl.c __mesh_path_del(tbl, mpath); mpath 564 net/mac80211/mesh_pathtbl.c struct mesh_path *mpath; mpath 568 net/mac80211/mesh_pathtbl.c hlist_for_each_entry_safe(mpath, n, &tbl->walk_head, walk_list) { mpath 569 net/mac80211/mesh_pathtbl.c if (ether_addr_equal(mpath->mpp, proxy)) mpath 570 net/mac80211/mesh_pathtbl.c __mesh_path_del(tbl, mpath); mpath 577 net/mac80211/mesh_pathtbl.c struct mesh_path *mpath; mpath 581 net/mac80211/mesh_pathtbl.c hlist_for_each_entry_safe(mpath, n, &tbl->walk_head, walk_list) { mpath 582 net/mac80211/mesh_pathtbl.c __mesh_path_del(tbl, mpath); mpath 614 net/mac80211/mesh_pathtbl.c struct mesh_path *mpath; mpath 617 net/mac80211/mesh_pathtbl.c mpath = rhashtable_lookup_fast(&tbl->rhead, addr, mesh_rht_params); mpath 618 net/mac80211/mesh_pathtbl.c if (!mpath) { mpath 623 net/mac80211/mesh_pathtbl.c __mesh_path_del(tbl, mpath); mpath 657 net/mac80211/mesh_pathtbl.c void mesh_path_tx_pending(struct mesh_path *mpath) mpath 659 net/mac80211/mesh_pathtbl.c if (mpath->flags & MESH_PATH_ACTIVE) mpath 660 net/mac80211/mesh_pathtbl.c ieee80211_add_pending_skbs(mpath->sdata->local, mpath 661 net/mac80211/mesh_pathtbl.c &mpath->frame_queue); mpath 674 net/mac80211/mesh_pathtbl.c int mesh_path_send_to_gates(struct mesh_path *mpath) mpath 676 net/mac80211/mesh_pathtbl.c struct ieee80211_sub_if_data *sdata = mpath->sdata; mpath 678 net/mac80211/mesh_pathtbl.c struct mesh_path *from_mpath = mpath; mpath 704 net/mac80211/mesh_pathtbl.c return (from_mpath == mpath) ? -EHOSTUNREACH : 0; mpath 729 net/mac80211/mesh_pathtbl.c void mesh_path_flush_pending(struct mesh_path *mpath) mpath 733 net/mac80211/mesh_pathtbl.c while ((skb = skb_dequeue(&mpath->frame_queue)) != NULL) mpath 734 net/mac80211/mesh_pathtbl.c mesh_path_discard_frame(mpath->sdata, skb); mpath 745 net/mac80211/mesh_pathtbl.c void mesh_path_fix_nexthop(struct mesh_path *mpath, struct sta_info *next_hop) mpath 747 net/mac80211/mesh_pathtbl.c spin_lock_bh(&mpath->state_lock); mpath 748 net/mac80211/mesh_pathtbl.c mesh_path_assign_nexthop(mpath, next_hop); mpath 749 net/mac80211/mesh_pathtbl.c mpath->sn = 0xffff; mpath 750 net/mac80211/mesh_pathtbl.c mpath->metric = 0; mpath 751 net/mac80211/mesh_pathtbl.c mpath->hop_count = 0; mpath 752 net/mac80211/mesh_pathtbl.c mpath->exp_time = 0; mpath 753 net/mac80211/mesh_pathtbl.c mpath->flags = MESH_PATH_FIXED | MESH_PATH_SN_VALID; mpath 754 net/mac80211/mesh_pathtbl.c mesh_path_activate(mpath); mpath 755 net/mac80211/mesh_pathtbl.c spin_unlock_bh(&mpath->state_lock); mpath 759 net/mac80211/mesh_pathtbl.c mesh_path_tx_pending(mpath); mpath 794 net/mac80211/mesh_pathtbl.c struct mesh_path *mpath; mpath 798 net/mac80211/mesh_pathtbl.c hlist_for_each_entry_safe(mpath, n, &tbl->walk_head, walk_list) { mpath 799 net/mac80211/mesh_pathtbl.c if ((!(mpath->flags & MESH_PATH_RESOLVING)) && mpath 800 net/mac80211/mesh_pathtbl.c (!(mpath->flags & MESH_PATH_FIXED)) && mpath 801 net/mac80211/mesh_pathtbl.c time_after(jiffies, mpath->exp_time + MESH_PATH_EXPIRE)) mpath 802 net/mac80211/mesh_pathtbl.c __mesh_path_del(tbl, mpath); mpath 2472 net/mac80211/tx.c struct mesh_path __maybe_unused *mppath = NULL, *mpath = NULL; mpath 2556 net/mac80211/tx.c mpath = mesh_path_lookup(sdata, skb->data); mpath 2557 net/mac80211/tx.c if (mpath) { mpath 2559 net/mac80211/tx.c next_hop = rcu_dereference(mpath->next_hop); mpath 2561 net/mac80211/tx.c !(mpath->flags & (MESH_PATH_ACTIVE | mpath 2572 net/mac80211/tx.c if (mppath && mpath) mpath 2573 net/mac80211/tx.c mesh_path_del(sdata, mpath->dst); mpath 2599 net/mac80211/tx.c else if (mpath) mpath 2600 net/mac80211/tx.c mesh_da = mpath->dst;