[haiku-commits] r37594 - in haiku/trunk/src/add-ons/kernel/network: devices/ethernet stack

  • From: axeld@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 19 Jul 2010 15:48:16 +0200 (CEST)

Author: axeld
Date: 2010-07-19 15:48:16 +0200 (Mon, 19 Jul 2010)
New Revision: 37594
Changeset: http://dev.haiku-os.org/changeset/37594

Modified:
   haiku/trunk/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp
   haiku/trunk/src/add-ons/kernel/network/stack/datalink.cpp
   haiku/trunk/src/add-ons/kernel/network/stack/domains.cpp
   haiku/trunk/src/add-ons/kernel/network/stack/notifications.cpp
   haiku/trunk/src/add-ons/kernel/network/stack/stack_private.h
Log:
* Made the stack send out interface change notifications where needed (at least
  hopefully :-)).
* Improved interface change notification to include the flags that changed.


Modified: haiku/trunk/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp
===================================================================
--- haiku/trunk/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp        
2010-07-19 13:22:51 UTC (rev 37593)
+++ haiku/trunk/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp        
2010-07-19 13:48:16 UTC (rev 37594)
@@ -326,6 +326,7 @@
                status = bytesRead;
                goto err;
        }
+//dump_block((const char *)data, bytesRead, "rcv: ");
 
        status = gBufferModule->trim(buffer, bytesRead);
        if (status < B_OK) {

Modified: haiku/trunk/src/add-ons/kernel/network/stack/datalink.cpp
===================================================================
--- haiku/trunk/src/add-ons/kernel/network/stack/datalink.cpp   2010-07-19 
13:22:51 UTC (rev 37593)
+++ haiku/trunk/src/add-ons/kernel/network/stack/datalink.cpp   2010-07-19 
13:48:16 UTC (rev 37594)
@@ -717,6 +717,7 @@
                                }
 
                                add_default_routes(interface, option);
+                               notify_interface_changed(interface);
                        }
 
                        return address != NULL ? B_OK : B_NO_MEMORY;
@@ -811,6 +812,7 @@
                                return B_BAD_VALUE;
 
                        interface->mtu = request.ifr_mtu;
+                       notify_interface_changed(interface);
                        return B_OK;
                }
 
@@ -851,6 +853,7 @@
                                return B_BAD_ADDRESS;
 
                        interface->metric = request.ifr_metric;
+                       notify_interface_changed(interface);
                        return B_OK;
                }
 

Modified: haiku/trunk/src/add-ons/kernel/network/stack/domains.cpp
===================================================================
--- haiku/trunk/src/add-ons/kernel/network/stack/domains.cpp    2010-07-19 
13:22:51 UTC (rev 37593)
+++ haiku/trunk/src/add-ons/kernel/network/stack/domains.cpp    2010-07-19 
13:48:16 UTC (rev 37594)
@@ -271,11 +271,12 @@
 
                        case SIOCSIFFLAGS:
                        {
+                               uint32 oldFlags = interface->flags;
                                uint32 requestFlags = request->ifr_flags;
                                request->ifr_flags &= ~(IFF_UP | IFF_LINK | 
IFF_BROADCAST);
 
                                if ((requestFlags & IFF_UP) != 
(interface->flags & IFF_UP)) {
-                                       if (requestFlags & IFF_UP) {
+                                       if ((requestFlags & IFF_UP) != 0) {
                                                status = 
interface->first_info->interface_up(
                                                        
interface->first_protocol);
                                                if (status == B_OK)
@@ -290,6 +291,11 @@
                                        interface->flags &= IFF_UP | IFF_LINK | 
IFF_BROADCAST;
                                        interface->flags |= request->ifr_flags;
                                }
+                               
+                               if (oldFlags != interface->flags) {
+                                       notify_interface_changed(interface, 
oldFlags,
+                                               interface->flags);
+                               }
                                break;
                        }
                }

Modified: haiku/trunk/src/add-ons/kernel/network/stack/notifications.cpp
===================================================================
--- haiku/trunk/src/add-ons/kernel/network/stack/notifications.cpp      
2010-07-19 13:22:51 UTC (rev 37593)
+++ haiku/trunk/src/add-ons/kernel/network/stack/notifications.cpp      
2010-07-19 13:48:16 UTC (rev 37594)
@@ -1,14 +1,16 @@
 /*
- * Copyright 2008, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx
+ * Copyright 2008-2010, Axel Dörfler, axeld@xxxxxxxxxxxxxxxxx
  * Distributed under the terms of the MIT License.
  */
 
+
 /*! Provides the stack internal notification API.
 
        The actual message sending happens in another module to make the
        notification listeners independent from the stack status.
 */
 
+
 #include <net_device.h>
 #include <net_notifications.h>
 
@@ -53,7 +55,8 @@
 
 
 status_t
-notify_interface_changed(net_interface* interface)
+notify_interface_changed(net_interface* interface, uint32 oldFlags,
+       uint32 newFlags)
 {
        if (sNotificationModule == NULL)
                return B_NOT_SUPPORTED;
@@ -63,6 +66,10 @@
        message.SetTo(messageBuffer, sizeof(messageBuffer), B_NETWORK_MONITOR);
        message.AddInt32("opcode", B_NETWORK_INTERFACE_CHANGED);
        message.AddString("interface", interface->name);
+       if (oldFlags != newFlags) {
+               message.AddInt32("old flags", oldFlags);
+               message.AddInt32("new flags", newFlags);
+       }
 
        return sNotificationModule->send_notification(&message);
 }

Modified: haiku/trunk/src/add-ons/kernel/network/stack/stack_private.h
===================================================================
--- haiku/trunk/src/add-ons/kernel/network/stack/stack_private.h        
2010-07-19 13:22:51 UTC (rev 37593)
+++ haiku/trunk/src/add-ons/kernel/network/stack/stack_private.h        
2010-07-19 13:48:16 UTC (rev 37594)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2006-2008, Haiku, Inc. All Rights Reserved.
+ * Copyright 2006-2010, Haiku, Inc. All Rights Reserved.
  * Distributed under the terms of the MIT License.
  *
  * Authors:
@@ -36,7 +36,8 @@
 // notifications.cpp
 status_t notify_interface_added(net_interface* interface);
 status_t notify_interface_removed(net_interface* interface);
-status_t notify_interface_changed(net_interface* interface);
+status_t notify_interface_changed(net_interface* interface, uint32 oldFlags = 
0,
+       uint32 newFlags = 0);
 status_t notify_link_changed(net_device* device);
 status_t init_notifications();
 void uninit_notifications();
@@ -44,4 +45,5 @@
 status_t init_stack();
 status_t uninit_stack();
 
+
 #endif // STACK_PRIVATE_H


Other related posts:

  • » [haiku-commits] r37594 - in haiku/trunk/src/add-ons/kernel/network: devices/ethernet stack - axeld