Network device interface functions


Functions

static int net80211_netdev_open (struct net_device *netdev)
 Open 802.11 device and start association.
static void net80211_netdev_close (struct net_device *netdev)
 Close 802.11 device.
static int net80211_netdev_transmit (struct net_device *netdev, struct io_buffer *iobuf)
 Transmit packet on 802.11 device.
static void net80211_netdev_poll (struct net_device *netdev)
 Poll 802.11 device for received packets and completed transmissions.
static void net80211_netdev_irq (struct net_device *netdev, int enable)
 Enable or disable interrupts for 802.11 device.

Function Documentation

static int net80211_netdev_open ( struct net_device netdev  )  [static]

Open 802.11 device and start association.

Parameters:
netdev Wrapping network device
Return values:
rc Return status code
This sets up a default conservative set of channels for probing, and starts the auto-association task unless the NET80211_NO_ASSOC flag is set in the wrapped 802.11 device's state field.

Definition at line 276 of file net80211.c.

References EFAULT, net80211_autoassociate(), NET80211_NO_ASSOC, net80211_null_ops, net80211_device::op, net80211_device_operations::open, net_device::priv, and net80211_device::state.

00277 {
00278         struct net80211_device *dev = netdev->priv;
00279         int rc = 0;
00280 
00281         if ( dev->op == &net80211_null_ops )
00282                 return -EFAULT;
00283 
00284         if ( dev->op->open )
00285                 rc = dev->op->open ( dev );
00286 
00287         if ( rc < 0 )
00288                 return rc;
00289 
00290         if ( ! ( dev->state & NET80211_NO_ASSOC ) )
00291                 net80211_autoassociate ( dev );
00292 
00293         return 0;
00294 }

static void net80211_netdev_close ( struct net_device netdev  )  [static]

Close 802.11 device.

Parameters:
netdev Wrapping network device.
If the association task is running, this will stop it.

Definition at line 303 of file net80211.c.

References net80211_device_operations::close, net80211_device::crypto, free(), net80211_device::handshaker, IEEE80211_REASON_LEAVING, NET80211_ASSOCIATED, net80211_send_disassoc(), NET80211_WORKING, netdev_link_down(), NULL, net80211_device::op, net_device::priv, net80211_device::proc_assoc, process_del(), net80211_handshaker::started, net80211_device::state, and net80211_handshaker::stop.

00304 {
00305         struct net80211_device *dev = netdev->priv;
00306 
00307         if ( dev->state & NET80211_WORKING )
00308                 process_del ( &dev->proc_assoc );
00309 
00310         /* Send disassociation frame to AP, to be polite */
00311         if ( dev->state & NET80211_ASSOCIATED )
00312                 net80211_send_disassoc ( dev, IEEE80211_REASON_LEAVING, 0 );
00313 
00314         if ( dev->handshaker && dev->handshaker->stop &&
00315              dev->handshaker->started )
00316                 dev->handshaker->stop ( dev );
00317 
00318         free ( dev->crypto );
00319         free ( dev->handshaker );
00320         dev->crypto = NULL;
00321         dev->handshaker = NULL;
00322 
00323         netdev_link_down ( netdev );
00324         dev->state = 0;
00325 
00326         if ( dev->op->close )
00327                 dev->op->close ( dev );
00328 }

static int net80211_netdev_transmit ( struct net_device netdev,
struct io_buffer iobuf 
) [static]

Transmit packet on 802.11 device.

Parameters:
netdev Wrapping network device
iobuf I/O buffer
Return values:
rc Return status code
If encryption is enabled for the currently associated network, the packet will be encrypted prior to transmission.

Definition at line 340 of file net80211.c.

References net80211_device::crypto, io_buffer::data, net80211_crypto::encrypt, ENOMEM, ENOSYS, ieee80211_frame::fc, IEEE80211_FC_PROTECTED, IEEE80211_FC_TYPE, IEEE80211_TYPE_DATA, netdev_tx(), netdev_tx_complete(), net80211_device::op, net_device::priv, and net80211_device_operations::transmit.

00342 {
00343         struct net80211_device *dev = netdev->priv;
00344         struct ieee80211_frame *hdr = iobuf->data;
00345         int rc = -ENOSYS;
00346 
00347         if ( dev->crypto && ! ( hdr->fc & IEEE80211_FC_PROTECTED ) &&
00348              ( ( hdr->fc & IEEE80211_FC_TYPE ) == IEEE80211_TYPE_DATA ) ) {
00349                 struct io_buffer *niob = dev->crypto->encrypt ( dev->crypto,
00350                                                                 iobuf );
00351                 if ( ! niob )
00352                         return -ENOMEM; /* only reason encryption could fail */
00353 
00354                 /* Free the non-encrypted iob */
00355                 netdev_tx_complete ( netdev, iobuf );
00356 
00357                 /* Transmit the encrypted iob; the Protected flag is
00358                    set, so we won't recurse into here again */
00359                 netdev_tx ( netdev, niob );
00360 
00361                 /* Don't transmit the freed packet */
00362                 return 0;
00363         }
00364 
00365         if ( dev->op->transmit )
00366                 rc = dev->op->transmit ( dev, iobuf );
00367 
00368         return rc;
00369 }

static void net80211_netdev_poll ( struct net_device netdev  )  [static]

Poll 802.11 device for received packets and completed transmissions.

Parameters:
netdev Wrapping network device

Definition at line 376 of file net80211.c.

References net80211_device::op, net80211_device_operations::poll, and net_device::priv.

00377 {
00378         struct net80211_device *dev = netdev->priv;
00379 
00380         if ( dev->op->poll )
00381                 dev->op->poll ( dev );
00382 }

static void net80211_netdev_irq ( struct net_device netdev,
int  enable 
) [static]

Enable or disable interrupts for 802.11 device.

Parameters:
netdev Wrapping network device
enable Whether to enable interrupts

Definition at line 390 of file net80211.c.

References net80211_device_operations::irq, net80211_device::op, and net_device::priv.

00391 {
00392         struct net80211_device *dev = netdev->priv;
00393 
00394         if ( dev->op->irq )
00395                 dev->op->irq ( dev, enable );
00396 }


Generated on Tue Apr 6 20:01:57 2010 for gPXE by  doxygen 1.5.7.1