Nokia's WiMAX implementation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Juuso

On Sunday 07 December 2008, juuso.oikarinen@xxxxxxxxx wrote:
> >From: ext Inaky Perez-Gonzalez [mailto:inaky@xxxxxxxxxxxxxxx]
> >There is -- keep in mind, however, that for the case of the
> >i2400m, the kernel cutline has to be at the NAP level. All the
> >NSP operations will have to be implemented in user space using
> >the NAP-based primitives offered by the driver/hw.
>
> AFAIK this is a logical point for the cutline.
>
> In my perspective, including NSP level stuff in the chipset would seem
> to include lots of device independent code in the device, which really
> shouldn't exist there.

Sorry for the lag, but it took some time until I could put all the bits
and pieces I had holted together in  good shape.

So here is the interface definition (very draft and rough) that I am
pondering:


[EXISTING]

Command: reset()
   Resets the device

Command: rfkill(state)
   stat: ON, OFF, QUERY

   Changes the software RFKILL switch, returns information about both
   software and hardware rfkill switches.

Signal: state_change(old_state, new_state, [...])  [EXISTING]
   old_state: see enum wimax_st
   new_state: see enum wimax_st
   [...]: depending on the state transition, information that
      explains why the state transition happened (why the old state
      was left, why the new one was entered).

      CONNECTING -> CONNECTED: append connection_info structure?

   Sent on every state change.


[NEW: NAP level]

Command: nap_start_scan(channel list)
   channel: struct { channel-ID, center freq, bandwidth, fft width, preamble }

   Starts an scan in the channels listed in the channel list. If a
   scan is already executing, returns -EBUSY.

   Signals caused:

   - nap_scan_result(): zero or more signals as NAPs are found; when
     done scanning all the channels, sends an empty nap_scan_result()
     signal to indicate termination of the scan.

   - state_change(): from READY to SCANNING

   Requires:

   - Device to be in ready state, otherwise return error

   Pending:

   - Add a cookie argument that would be echoed back in the nap_scan_result() 
     signal? This would help to identify scan results coming from one run or
     another.

Command: nap_stop_scan()
   Cancels an ongoing scan; forces a nap_scap_result() signal to be sent.

   Signals caused:

   - state_change(): from SCANNING to READY

   Requires:

   - Device to be in SCANNING state, otherwise return error


Signal: nap_scan_result(scan_status, nap list)
   scan_status: enum { inprogress, cancelled, done }
   nap: { channel-ID, preamble[where found], BSID / MASK, RSSI / CINR / 
LinkQ }

   Sent to report scan results; first argument indicate the current status of
   the scan process. Second is a list of found NAPs.

   The driver should try as much as possible to report NAPs as they are found,
   rather than waiting until completing the scan of the whole channel list.
   The scan process can be lengthy and it should be possible to see early
   results as soon as possible.

   RSSI/CINR/LinkQuality: provided raw.

   Pending:

   - Progress information?

     - Provide number of scanned channels (assuming all hw does) --
       too hw specific?
     - Let the driver come out with a percentage based on device specific info

Command: nap_query_nsp_list(NAP=BSID/MASK) -> NSP list
   NAP=BSID/MASK: NAP specification using a BSID/MASK as returned in
      the scan results
   NSP: { ID, Name }

   Query the NAP provide NSP information using SII.

   Requires:
   
   - device in state READY

   Pending:

   - Same as connect with NAP=BSID/MASK
   - Maybe merge with nap_query_nsp_realm()?

Command: nap_query_nsp_realm(NAP=BSID/MASK, NSPid) -> NSP realm
   NAP=BSID/MASK: NAP specification using a BSID/MASK as returned in
      the scan results
   NSPid: ID of an NSP serverd by the NAP
   NSPrealm: realm for EAP

   Requires:
   
   - device in state READY

   Pending:

   - Same as connect with NAP=BSID/MASK

   - This could be merged with nap_query_nsp_list() into a
     nap_query_nsp(). If the NSPid is provided, then also the realm is
     queried. Depends on if the hw can do it.

   - FIXME: not really clear this is all that necessary; as said in
     the mailing list, this should be a signal that is sent while we
     are connecting and the value becomes available

Command: nap_connect(NAP=BSID/MASK, [NSPid])
   NAP=BSID/MASK: NAP specification using a BSID/MASK as returned in
      the scan results
   NSPid: id of the NSP we are attempting connection to (for obtaining
      the realm)

   Starts the connection process to the given NAP. This moves the
   device to the CONNECTING state. If the connection is successful, it
   will transition to the CONNECTED state.

   Signals caused:

   - state_change(): from READY to CONNECTING; later on, as the
     process goes on, from CONNECTING to CONNECTED (on successful
     connection), from CONNECTING to any other (on unsuccessful
     connection).

   Requires:

   - device must be in the READY state.

   Pending:

   - Maybe it makes more sense for the stack to kind of cache the scan
     results and assign an ID/handle to each nap; on connect time, we
     just indicate said ID. The nap_connect() implementation can then
     just lookup the results list kept in the kernel and find the
     relevant information there.

Signal: nap_nsp_realm() -> { NSPid, REALM }
   
   During connect, if an NSPid was provided, then the REALM for EAP
   authentication with it is retuned by this signal.

Command: nap_get_link_info() -> link_info
   link_info: { BSID, RSSI, CINR, FIXME }

   Return information about the currently connected NAP.

   Pending:
 
   - Returns the same information that is sent in the state_change
     signal (when transitioning from CONNECTING to CONNECTED)?

Command: nap_disconnect()

   Disconnect from the NAP the device is connected to. Also cancels a
   pending connect.

   Signals caused:

   - state_change(): from CONNECTING to READY or from CONNECTED to
     READY.

   Requires:

   - device in CONNECTED or CONNECTING state

Signal: dhcp_renew()

   The network requests that a DHCP renegotiation is done.


I am supposedly on vacation now, so my responsiveness to email will tend
to lag a bit :)

-- 
Inaky


[Index of Archives]     [Linux Kernel]     [Linux Wireless]     [Linux Bluetooth]     [Linux Netdev]     [Linux Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux