[haiku-commits] r34887 - in haiku/branches/developer/colin/wireless: headers/posix/net headers/private/net src/add-ons/kernel/network/devices src/add-ons/kernel/network/devices/ieee80211

  • From: coling@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 4 Jan 2010 15:17:57 +0100 (CET)

Author: colin
Date: 2010-01-04 15:17:57 +0100 (Mon, 04 Jan 2010)
New Revision: 34887
Changeset: http://dev.haiku-os.org/changeset/34887/haiku

Added:
   haiku/branches/developer/colin/wireless/headers/private/net/ieee80211.h
   
haiku/branches/developer/colin/wireless/src/add-ons/kernel/network/devices/ieee80211/
   
haiku/branches/developer/colin/wireless/src/add-ons/kernel/network/devices/ieee80211/Jamfile
   
haiku/branches/developer/colin/wireless/src/add-ons/kernel/network/devices/ieee80211/ieee80211.cpp
Modified:
   haiku/branches/developer/colin/wireless/headers/posix/net/if_media.h
   haiku/branches/developer/colin/wireless/headers/posix/net/if_types.h
   
haiku/branches/developer/colin/wireless/src/add-ons/kernel/network/devices/Jamfile
Log:
* Start of ieee80211 device module.
* Adding new interface type constant IFT_IEEE80211.
* White space and coding style cleanup.


Modified: haiku/branches/developer/colin/wireless/headers/posix/net/if_media.h
===================================================================
--- haiku/branches/developer/colin/wireless/headers/posix/net/if_media.h        
2010-01-04 01:09:58 UTC (rev 34886)
+++ haiku/branches/developer/colin/wireless/headers/posix/net/if_media.h        
2010-01-04 14:17:57 UTC (rev 34887)
@@ -20,17 +20,17 @@
 #define        IFM_TOKEN               0x00000040      /* Token Ring */
 #define        IFM_FDDI                0x00000060      /* Fiber Distributed 
Data Interface */
 #define        IFM_IEEE80211   0x00000080      /* Wireless IEEE 802.11 */
-#define IFM_ATM                        0x000000a0
+#define        IFM_ATM                 0x000000a0
 #define        IFM_CARP                0x000000c0      /* Common Address 
Redundancy Protocol */
 
 /* Media subtypes */
 
 /* Ethernet */
-#define IFM_AUTO               0
+#define        IFM_AUTO                0
 #define        IFM_10_T                3                       /* 10Base-T - 
RJ45 */
 #define        IFM_100_TX              6                       /* 100Base-TX - 
RJ45 */
-#define IFM_1000_T             16                      /* 1000Base-T - RJ45 */
-#define IFM_1000_SX            18                      /* 1000Base-SX - Fiber 
Optic */
+#define        IFM_1000_T              16                      /* 1000Base-T - 
RJ45 */
+#define        IFM_1000_SX             18                      /* 1000Base-SX 
- Fiber Optic */
 
 /* General options */
 

Modified: haiku/branches/developer/colin/wireless/headers/posix/net/if_types.h
===================================================================
--- haiku/branches/developer/colin/wireless/headers/posix/net/if_types.h        
2010-01-04 01:09:58 UTC (rev 34886)
+++ haiku/branches/developer/colin/wireless/headers/posix/net/if_types.h        
2010-01-04 14:17:57 UTC (rev 34887)
@@ -1,15 +1,17 @@
 /*
- * Copyright 2006, Haiku, Inc. All Rights Reserved.
+ * Copyright 2006-2010, Haiku, Inc. All Rights Reserved.
  * Distributed under the terms of the MIT License.
  */
 #ifndef _NET_IF_TYPES_H
 #define _NET_IF_TYPES_H
 
+
 #define IFT_OTHER              0x01
 #define IFT_ETHER              0x06
 #define IFT_PPP                        0x17
 #define IFT_LOOP               0x18
 #define IFT_SLIP               0x1c
 #define IFT_MODEM              0x30
+#define IFT_IEEE80211  0x47
 
 #endif /* _NET_IF_TYPES_H */

Added: haiku/branches/developer/colin/wireless/headers/private/net/ieee80211.h
===================================================================
--- haiku/branches/developer/colin/wireless/headers/private/net/ieee80211.h     
                        (rev 0)
+++ haiku/branches/developer/colin/wireless/headers/private/net/ieee80211.h     
2010-01-04 14:17:57 UTC (rev 34887)
@@ -0,0 +1,15 @@
+/*
+ * Copyright 2010, Haiku, Inc. All Rights Reserved.
+ * Distributed under the terms of the MIT License.
+ */
+#ifndef IEEE80211_H_
+#define IEEE80211_H_
+
+
+#define IEEE80211_MTU 2304
+       // IEEE 802.11-2007, p.60
+
+#define IEEE80211_NON_QOS_3_ADDRESS_DATA_HEADER_LENGTH 24
+       // IEEE 802.11-2007, p.77
+
+#endif /* IEEE80211_H_ */

Modified: 
haiku/branches/developer/colin/wireless/src/add-ons/kernel/network/devices/Jamfile
===================================================================
--- 
haiku/branches/developer/colin/wireless/src/add-ons/kernel/network/devices/Jamfile
  2010-01-04 01:09:58 UTC (rev 34886)
+++ 
haiku/branches/developer/colin/wireless/src/add-ons/kernel/network/devices/Jamfile
  2010-01-04 14:17:57 UTC (rev 34887)
@@ -1,5 +1,6 @@
 SubDir HAIKU_TOP src add-ons kernel network devices ;
 
+SubInclude HAIKU_TOP src add-ons kernel network devices bluetooth ;
 SubInclude HAIKU_TOP src add-ons kernel network devices ethernet ;
+SubInclude HAIKU_TOP src add-ons kernel network devices ieee80211 ;
 SubInclude HAIKU_TOP src add-ons kernel network devices loopback ;
-SubInclude HAIKU_TOP src add-ons kernel network devices bluetooth ;

Added: 
haiku/branches/developer/colin/wireless/src/add-ons/kernel/network/devices/ieee80211/Jamfile
===================================================================
--- 
haiku/branches/developer/colin/wireless/src/add-ons/kernel/network/devices/ieee80211/Jamfile
                                (rev 0)
+++ 
haiku/branches/developer/colin/wireless/src/add-ons/kernel/network/devices/ieee80211/Jamfile
        2010-01-04 14:17:57 UTC (rev 34887)
@@ -0,0 +1,8 @@
+SubDir HAIKU_TOP src add-ons kernel network devices ieee80211 ;
+
+UsePrivateKernelHeaders ;
+UsePrivateHeaders net ;
+
+KernelAddon ieee80211 :
+       ieee80211.cpp
+       ;

Added: 
haiku/branches/developer/colin/wireless/src/add-ons/kernel/network/devices/ieee80211/ieee80211.cpp
===================================================================
--- 
haiku/branches/developer/colin/wireless/src/add-ons/kernel/network/devices/ieee80211/ieee80211.cpp
                          (rev 0)
+++ 
haiku/branches/developer/colin/wireless/src/add-ons/kernel/network/devices/ieee80211/ieee80211.cpp
  2010-01-04 14:17:57 UTC (rev 34887)
@@ -0,0 +1,216 @@
+/*
+ * Copyright 2010, Haiku, Inc. All Rights Reserved.
+ * Distributed under the terms of the MIT License.
+ *
+ * Authors:
+ *             Colin Günther, coling@xxxxxx
+ */
+
+
+#include <ieee80211.h>
+
+#include <net_buffer.h>
+#include <net_device.h>
+#include <net_stack.h>
+
+#include <lock.h>
+#include <util/AutoLock.h>
+#include <util/DoublyLinkedList.h>
+
+#include <KernelExport.h>
+
+#include <errno.h>
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_media.h>
+#include <net/if_types.h>
+#include <new>
+#include <stdlib.h>
+#include <string.h>
+
+
+struct ieee80211_device : net_device,
+       DoublyLinkedListLinkImpl<ieee80211_device> {
+       int             fd;
+};
+
+net_buffer_module_info *gBufferModule;
+static net_stack_module_info *sStackModule;
+
+
+//     #pragma mark -
+
+
+status_t
+ieee80211_init(const char *name, net_device **_device)
+{
+       if (strncmp(name, "/dev/net/ieee80211/", 19))
+               return B_BAD_VALUE;
+
+       status_t status = get_module(NET_BUFFER_MODULE_NAME,
+               (module_info **)&gBufferModule);
+       if (status < B_OK)
+               return status;
+
+       ieee80211_device *device = new (std::nothrow) ieee80211_device;
+       if (device == NULL) {
+               put_module(NET_BUFFER_MODULE_NAME);
+               return B_NO_MEMORY;
+       }
+
+       memset(device, 0, sizeof(ieee80211_device));
+
+       strcpy(device->name, name);
+       device->flags = IFF_BROADCAST | IFF_LINK | IFF_SIMPLEX;
+       device->type = IFT_IEEE80211;
+       device->mtu = IEEE80211_MTU;
+       device->media = IFM_ACTIVE | IFM_IEEE80211;
+       device->header_length = IEEE80211_NON_QOS_3_ADDRESS_DATA_HEADER_LENGTH;
+       device->fd = -1;
+
+       *_device = device;
+       return B_OK;
+}
+
+
+status_t
+ieee80211_uninit(net_device *device)
+{
+       put_module(NET_BUFFER_MODULE_NAME);
+       delete device;
+
+       return B_OK;
+}
+
+
+status_t
+ieee80211_up(net_device *_device)
+{
+       ieee80211_device *device = (ieee80211_device *)_device;
+
+       device->fd = open(device->name, O_RDWR);
+       if (device->fd < 0)
+               return errno;
+
+       return B_OK;
+}
+
+
+void
+ieee80211_down(net_device *_device)
+{
+       ieee80211_device *device = (ieee80211_device *)_device;
+
+       close(device->fd);
+       device->fd = -1;
+}
+
+
+status_t
+ieee80211_control(net_device *_device, int32 op, void *argument,
+       size_t length)
+{
+       ieee80211_device *device = (ieee80211_device *)_device;
+       return ioctl(device->fd, op, argument, length);
+}
+
+
+status_t
+ieee80211_send_data(net_device *_device, net_buffer *buffer)
+{
+       return B_OK;
+}
+
+
+status_t
+ieee80211_receive_data(net_device *_device, net_buffer **_buffer)
+{
+       return B_OK;
+}
+
+
+status_t
+ieee80211_set_mtu(net_device *_device, size_t mtu)
+{
+       return B_OK;
+}
+
+
+status_t
+ieee80211_set_promiscuous(net_device *_device, bool promiscuous)
+{
+       return B_OK;
+}
+
+
+status_t
+ieee80211_set_media(net_device *device, uint32 media)
+{
+       return EOPNOTSUPP;
+}
+
+
+status_t
+ieee80211_add_multicast(struct net_device *_device, const sockaddr *_address)
+{
+       return EOPNOTSUPP;
+}
+
+
+status_t
+ieee80211_remove_multicast(struct net_device *_device, const sockaddr 
*_address)
+{
+       return EOPNOTSUPP;
+}
+
+
+static status_t
+ieee80211_std_ops(int32 op, ...)
+{
+       switch (op) {
+               case B_MODULE_INIT:
+               {
+                       status_t status = get_module(NET_STACK_MODULE_NAME,
+                               (module_info **)&sStackModule);
+                       if (status < B_OK)
+                               return status;
+
+                       return B_OK;
+               }
+
+               case B_MODULE_UNINIT:
+               {
+                       put_module(NET_STACK_MODULE_NAME);
+                       return B_OK;
+               }
+
+               default:
+                       return B_ERROR;
+       }
+}
+
+
+net_device_module_info sIeee80211Module = {
+       {
+               "network/devices/ieee80211/v1",
+               0,
+               ieee80211_std_ops
+       },
+       ieee80211_init,
+       ieee80211_uninit,
+       ieee80211_up,
+       ieee80211_down,
+       ieee80211_control,
+       ieee80211_send_data,
+       ieee80211_receive_data,
+       ieee80211_set_mtu,
+       ieee80211_set_promiscuous,
+       ieee80211_set_media,
+       ieee80211_add_multicast,
+       ieee80211_remove_multicast,
+};
+
+module_info *modules[] = {
+       (module_info *)&sIeee80211Module,
+       NULL
+};


Other related posts:

  • » [haiku-commits] r34887 - in haiku/branches/developer/colin/wireless: headers/posix/net headers/private/net src/add-ons/kernel/network/devices src/add-ons/kernel/network/devices/ieee80211 - coling