Hello, A little comment: Maybe it is better to omit from the patch the remark : /* From mesh_hwmp.c: */ (which appears twice) and add to the changelog an item like this: -Moved mpath_frame_type enum definition and max_preq_retries() macro definition from mesh_hwmp.c to mesh.h. Regards, Rami Rosen On Mon, Jan 26, 2009 at 10:39 PM, Florian Sesser <flomaillist@xxxxxxxxxxxxx> wrote: > Struct mesh_path_sel_ops, central to the abstraction > of the Path Selection Protocol. > > Signed-off-by: Florian Sesser <flomaillist@xxxxxxxxxxxxx> > --- > net/mac80211/mesh.h | 78 +++++++++++++++++++++++++++++++++++++++++++++++++-- > 1 files changed, 75 insertions(+), 3 deletions(-) > > diff --git a/net/mac80211/mesh.h b/net/mac80211/mesh.h > index 9e064ee..a4141d8 100644 > --- a/net/mac80211/mesh.h > +++ b/net/mac80211/mesh.h > @@ -169,6 +169,72 @@ struct mesh_rmc { > */ > #define MESH_PREQ_MIN_INT 10 > #define MESH_DIAM_TRAVERSAL_TIME 50 > + > +/* Default Path Selection, Path Metric, Congestion Control Mode */ > +#define MESH_PATH_SELECTION_PROTOCOL_ID 0x000FACFF > +#define MESH_PATH_SELECTION_METRIC_ID 0x000FACFF > +#define MESH_CONGESTION_CONTROL_MODE_ID 0x000FACFF > + > +/* From mesh_hwmp.c: */ > +enum mpath_frame_type { > + MPATH_PREQ = 0, > + MPATH_PREP, > + MPATH_PERR > +}; > +/* Function pointer typedefs for struct mesh_path_sel_ops */ > +typedef void (mesh_path_start_discovery_fn) (struct ieee80211_sub_if_data *sdata); > +typedef int (mesh_nexthop_lookup_fn) (struct sk_buff *skb, struct ieee80211_sub_if_data *sdata); > +typedef void (mesh_queue_preq_fn) (struct mesh_path *mpath, u8 flags); > +typedef int (mesh_path_sel_frame_tx_fn) (enum mpath_frame_type action, u8 flags, > + u8 *orig_addr, __le32 orig_dsn, u8 dst_flags, u8 *dst, __le32 dst_dsn, u8 *da, > + u8 hop_count, u8 ttl, __le32 lifetime, __le32 metric, __le32 preq_id, > + struct ieee80211_sub_if_data *sdata); > +typedef int (mesh_path_error_tx_fn) (u8 *dst, __le32 dst_dsn, u8 *ra, > + struct ieee80211_sub_if_data *sdata); > +typedef void (mesh_path_timer_fn) (unsigned long data); > +typedef u32 (mesh_route_info_get_fn) (struct ieee80211_sub_if_data *sdata, > + struct ieee80211_mgmt *mgmt, u8 *ie); > +typedef void (mesh_rx_path_sel_frame_fn) (struct ieee80211_sub_if_data *sdata, > + struct ieee80211_mgmt *mgmt, size_t len); > +typedef void (mesh_preq_frame_process_fn) (struct ieee80211_sub_if_data *sdata, > + struct ieee80211_mgmt *mgmt, u8 *preq_elem, u32 metric); > +typedef void (mesh_prep_frame_process_fn) (struct ieee80211_sub_if_data *sdata, > + struct ieee80211_mgmt *mgmt, u8 *prep_elem, u32 metric); > +typedef void (mesh_perr_frame_process_fn) (struct ieee80211_sub_if_data *sdata, > + struct ieee80211_mgmt *mgmt, u8 *perr_elem); > +typedef void (mesh_path_sel_start_fn) (struct ieee80211_if_mesh *sta); > +typedef void (mesh_path_sel_stop_fn) (struct ieee80211_if_mesh *sta); > +struct mesh_path_sel_ops { > + mesh_path_start_discovery_fn *path_start_discovery_fn; > + mesh_nexthop_lookup_fn *nexthop_lookup_fn; > + /* Needed by mesh_path_timer from mesh_pathtbl.c */ > + mesh_queue_preq_fn *queue_preq_fn; > + /* To my surprise this seems to not be needed: > + mesh_path_sel_frame_tx_fn *path_sel_frame_tx_fn; */ > + mesh_path_error_tx_fn *path_error_tx_fn; > + /* Doesn't this timer belong into mesh.c? */ > + mesh_path_timer_fn *path_timer_fn; > + mesh_rx_path_sel_frame_fn *rx_path_sel_frame_fn; > + /* Belongs into the mesh routing protocol module > + mesh_preq_frame_process_fn *preq_frame_process_fn; > + mesh_prep_frame_process_fn *prep_frame_process_fn; > + mesh_perr_frame_process_fn *perr_frame_process_fn; */ > + mesh_path_sel_start_fn *path_sel_start_fn; > + mesh_path_sel_stop_fn *path_sel_stop_fn; > +}; > + > +#define MESH_ALGO_NAME_MAX (16) > +struct mesh_path_sel_algo { > + struct list_head list; > + char name[MESH_ALGO_NAME_MAX]; > + u32 id; > + struct mesh_path_sel_ops* ops; > + struct module* owner; > +}; > + > +void mesh_path_sel_algo_register (struct mesh_path_sel_algo *algo); > +void mesh_path_sel_algo_unregister (struct mesh_path_sel_algo *algo); > + > /* Paths will be refreshed if they are closer than PATH_REFRESH_TIME to their > * expiration > */ > @@ -205,6 +271,9 @@ int mesh_rmc_check(u8 *addr, struct ieee80211s_hdr *mesh_hdr, > bool mesh_matches_local(struct ieee802_11_elems *ie, > struct ieee80211_sub_if_data *sdata); > void mesh_ids_set_default(struct ieee80211_if_mesh *mesh); > +void mesh_ids_set_pp(struct ieee80211_if_mesh *sta, u32 pp); > +void mesh_ids_set_pm(struct ieee80211_if_mesh *sta, u32 pm); > +void mesh_ids_set_cc(struct ieee80211_if_mesh *sta, u32 cc); > void mesh_mgmt_ies_add(struct sk_buff *skb, > struct ieee80211_sub_if_data *sdata); > void mesh_rmc_free(struct ieee80211_sub_if_data *sdata); > @@ -219,9 +288,9 @@ void ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata); > void ieee80211_stop_mesh(struct ieee80211_sub_if_data *sdata); > > /* Mesh paths */ > -int mesh_nexthop_lookup(struct sk_buff *skb, > - struct ieee80211_sub_if_data *sdata); > -void mesh_path_start_discovery(struct ieee80211_sub_if_data *sdata); > +struct mesh_path_sel_algo* mesh_path_sel_algo_find_by_name (const char* name); > +struct mesh_path_sel_algo* mesh_path_sel_algo_find_by_id (u32 id); > +void mesh_path_sel_algo_set (struct ieee80211_if_mesh *sta, struct mesh_path_sel_algo* algo); > struct mesh_path *mesh_path_lookup(u8 *dst, > struct ieee80211_sub_if_data *sdata); > struct mesh_path *mpp_path_lookup(u8 *dst, > @@ -293,6 +362,9 @@ static inline void mesh_path_activate(struct mesh_path *mpath) > for (i = 0; i <= x->hash_mask; i++) \ > hlist_for_each_entry_rcu(node, p, &x->hash_buckets[i], list) > > +/* Moved here from mesh_hwmp.c */ > +#define max_preq_retries(s) (s->u.mesh.mshcfg.dot11MeshHWMPmaxPREQretries) > + > void ieee80211_mesh_notify_scan_completed(struct ieee80211_local *local); > > #else > -- > 1.5.6.5 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-wireless" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html