1. 07 5月, 2009 1 次提交
  2. 06 2月, 2009 1 次提交
    • P
      netlink: change return-value logic of netlink_broadcast() · ff491a73
      Pablo Neira Ayuso 提交于
      Currently, netlink_broadcast() reports errors to the caller if no
      messages at all were delivered:
      
      1) If, at least, one message has been delivered correctly, returns 0.
      2) Otherwise, if no messages at all were delivered due to skb_clone()
         failure, return -ENOBUFS.
      3) Otherwise, if there are no listeners, return -ESRCH.
      
      With this patch, the caller knows if the delivery of any of the
      messages to the listeners have failed:
      
      1) If it fails to deliver any message (for whatever reason), return
         -ENOBUFS.
      2) Otherwise, if all messages were delivered OK, returns 0.
      3) Otherwise, if no listeners, return -ESRCH.
      
      In the current ctnetlink code and in Netfilter in general, we can add
      reliable logging and connection tracking event delivery by dropping the
      packets whose events were not successfully delivered over Netlink. Of
      course, this option would be settable via /proc as this approach reduces
      performance (in terms of filtered connections per seconds by a stateful
      firewall) but providing reliable logging and event delivery (for
      conntrackd) in return.
      
      This patch also changes some clients of netlink_broadcast() that
      may report ENOBUFS errors via printk. This error handling is not
      of any help. Instead, the userspace daemons that are listening to
      those netlink messages should resync themselves with the kernel-side
      if they hit ENOBUFS.
      
      BTW, netlink_broadcast() clients include those that call
      cn_netlink_send(), nlmsg_multicast() and genlmsg_multicast() since they
      internally call netlink_broadcast() and return its error value.
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ff491a73
  3. 08 1月, 2009 1 次提交
    • I
      wimax: basic API: kernel/user messaging, rfkill and reset · 3e65646b
      Inaky Perez-Gonzalez 提交于
      Implements the three basic operations provided by the stack's control
      interface to WiMAX devices:
      
      - Messaging channel between user space and driver/device
      
        This implements a direct communication channel between user space
        and the driver/device, by which free form messages can be sent back
        and forth.
      
        This is intended for device-specific features, vendor quirks, etc.
      
      - RF-kill framework integration
      
        Provide most of the RF-Kill integration for WiMAX drivers so that
        all device drivers have to do is after wimax_dev_add() is call
        wimax_report_rfkill_{hw,sw}() to update initial state and then every
        time it changes.
      
        Provides wimax_rfkill() for the kernel to call to set software
        RF-Kill status and/or query current hardware and software switch
        status.
      
        Exports wimax_rfkill() over generic netlink to user space.
      
      - Reset a WiMAX device
      
        Provides wimax_reset() for the kernel to reset a wimax device as
        needed and exports it over generic netlink to user space.
      
      This API is clearly limited, as it still provides no way to do the
      basic scan, connect and disconnect in a hardware independent way.  The
      WiMAX case is more complex than WiFi due to the way networks are
      discovered and provisioned.
      
      The next developments are to add the basic operations so they can be
      offerent by different drivers. However, we'd like to get more vendors
      to jump in and provide feedback of how the user/kernel API/abstraction
      layer should be.
      
      The user space code for the i2400m, as of now, uses the messaging
      channel, but that will change as the API evolves.
      Signed-off-by: NInaky Perez-Gonzalez <inaky@linux.intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      3e65646b