On Sunday 13 May 2007 22:15, Zhu Yi wrote: > +#define DLS_STATUS_OK 0 > +#define DLS_STATUS_NOLINK 1 > +#define DLS_STATUS_SETUP 2 > +struct dls_info { > + atomic_t refcnt; > + int status; > + u8 addr[ETH_ALEN]; > + struct dls_info *hnext; /* next entry in hash table list */ > + u32 timeout; > + u32 supp_rates; > +}; > + The dls_info code looks like it was copied from the sta_info code and modified to store what you need. No good. Instead, you should modify struct sta_info to hold the information necessary. This also allows the rate control to work properly. AFAICT, mac80211 will send all frames in DLS at the lowest rate because this code does not set up a sta_info for its destination. An appropriate sta_info entry is also necessary to be able to set up encryption properly. (of course, user space can also set up a sta_info entry after setting up a DLS entry and make things work correctly.. but that's dumb) There is also a need for some way to notify the low level driver that it should not attempt any power management after a direct link is established (or that it should, once all DLS links are torn down). This callback/hook is also necessary to configure PS in hardware correctly in general and get rid of the management frame sniffing that iwlwifi is currently doing to achieve this. > + if (dls_link_status(&sdata->u.sta, hdr.addr1) == DLS_STATUS_OK){ How is this line suppose to work? I don't see hdr.addr1 initialized at any point before this. -Michael Wu
Attachment:
pgpybHfJRTdz0.pgp
Description: PGP signature