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. | |
| static int net80211_netdev_open | ( | struct net_device * | netdev | ) | [static] |
Open 802.11 device and start association.
| netdev | Wrapping network device |
| rc | Return status code |
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.
| netdev | Wrapping network device. |
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.
| netdev | Wrapping network device | |
| iobuf | I/O buffer |
| rc | Return status code |
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.
| 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.
| 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 }
1.5.7.1