1. 29 1月, 2008 1 次提交
    • E
      [NETNS]: Modify the neighbour table code so it handles multiple network namespaces · 426b5303
      Eric W. Biederman 提交于
      I'm actually surprised at how much was involved.  At first glance it
      appears that the neighbour table data structures are already split by
      network device so all that should be needed is to modify the user
      interface commands to filter the set of neighbours by the network
      namespace of their devices.
      
      However a couple things turned up while I was reading through the
      code.  The proxy neighbour table allows entries with no network
      device, and the neighbour parms are per network device (except for the
      defaults) so they now need a per network namespace default.
      
      So I updated the two structures (which surprised me) with their very
      own network namespace parameter.  Updated the relevant lookup and
      destroy routines with a network namespace parameter and modified the
      code that interacts with users to filter out neighbour table entries
      for devices of other namespaces.
      
      I'm a little concerned that we can modify and display the global table
      configuration and from all network namespaces.  But this appears good
      enough for now.
      
      I keep thinking modifying the neighbour table to have per network
      namespace instances of each table type would should be cleaner.  The
      hash table is already dynamically sized so there are it is not a
      limiter.  The default parameter would be straight forward to take care
      of.  However when I look at the how the network table is built and
      used I still find some assumptions that there is only a single
      neighbour table for each type of table in the kernel.  The netlink
      operations, neigh_seq_start, the non-core network users that call
      neigh_lookup.  So while it might be doable it would require more
      refactoring than my current approach of just doing a little extra
      filtering in the code.
      Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
      Signed-off-by: NDaniel Lezcano <dlezcano@fr.ibm.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      426b5303
  2. 26 4月, 2007 1 次提交
  3. 26 3月, 2007 1 次提交
    • A
      [NET]: Fix neighbour destructor handling. · ecbb4169
      Alexey Kuznetsov 提交于
      ->neigh_destructor() is killed (not used), replaced with
      ->neigh_cleanup(), which is called when neighbor entry goes to dead
      state. At this point everything is still valid: neigh->dev,
      neigh->parms etc.
      
      The device should guarantee that dead neighbor entries (neigh->dead !=
      0) do not get private part initialized, otherwise nobody will cleanup
      it.
      
      I think this is enough for ipoib which is the only user of this thing.
      Initialization private part of neighbor entries happens in ipib
      start_xmit routine, which is not reached when device is down.  But it
      would be better to add explicit test for neigh->dead in any case.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ecbb4169
  4. 09 12月, 2006 1 次提交
  5. 08 12月, 2006 1 次提交
  6. 23 9月, 2006 3 次提交
  7. 13 5月, 2006 1 次提交
    • S
      [NEIGH]: Fix IP-over-ATM and ARP interaction. · bd89efc5
      Simon Kelley 提交于
      The classical IP over ATM code maintains its own IPv4 <-> <ATM stuff>
      ARP table, using the standard neighbour-table code. The
      neigh_table_init function adds this neighbour table to a linked list
      of all neighbor tables which is used by the functions neigh_delete()
      neigh_add() and neightbl_set(), all called by the netlink code.
      
      Once the ATM neighbour table is added to the list, there are two
      tables with family == AF_INET there, and ARP entries sent via netlink
      go into the first table with matching family. This is indeterminate
      and often wrong.
      
      To see the bug, on a kernel with CLIP enabled, create a standard IPv4
      ARP entry by pinging an unused address on a local subnet. Then attempt
      to complete that entry by doing
      
      ip neigh replace <ip address> lladdr <some mac address> nud reachable
      
      Looking at the ARP tables by using 
      
      ip neigh show
      
      will reveal two ARP entries for the same address. One of these can be
      found in /proc/net/arp, and the other in /proc/net/atm/arp.
      
      This patch adds a new function, neigh_table_init_no_netlink() which
      does everything the neigh_table_init() does, except add the table to
      the netlink all-arp-tables chain. In addition neigh_table_init() has a
      check that all tables on the chain have a distinct address family.
      The init call in clip.c is changed to call
      neigh_table_init_no_netlink().
      
      Since ATM ARP tables are rather more complicated than can currently be
      handled by the available rtattrs in the netlink protocol, no
      functionality is lost by this patch, and non-ATM ARP manipulation via
      netlink is rescued. A more complete solution would involve a rtattr
      for ATM ARP entries and some way for the netlink code to give
      neigh_add and friends more information than just address family with
      which to find the correct ARP table.
      
      [ I've changed the assertion checking in neigh_table_init() to not
        use BUG_ON() while holding neigh_tbl_lock.  Instead we remember that
        we found an existing tbl with the same family, and after dropping
        the lock we'll give a diagnostic kernel log message and a stack dump.
        -DaveM ]
      Signed-off-by: NSimon Kelley <simon@thekelleys.org.uk>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      bd89efc5
  8. 21 3月, 2006 1 次提交
    • M
      [NET]: Move destructor from neigh->ops to neigh_params · c5ecd62c
      Michael S. Tsirkin 提交于
      struct neigh_ops currently has a destructor field, which no in-kernel
      drivers outside of infiniband use.  The infiniband/ulp/ipoib in-tree
      driver stashes some info in the neighbour structure (the results of
      the second-stage lookup from ARP results to real link-level path), and
      it uses neigh->ops->destructor to get a callback so it can clean up
      this extra info when a neighbour is freed.  We've run into problems
      with this: since the destructor is in an ops field that is shared
      between neighbours that may belong to different net devices, there's
      no way to set/clear it safely.
      
      The following patch moves this field to neigh_parms where it can be
      safely set, together with its twin neigh_setup.  Two additional
      patches in the patch series update ipoib to use this new interface.
      Signed-off-by: NMichael S. Tsirkin <mst@mellanox.co.il>
      Signed-off-by: NRoland Dreier <rolandd@cisco.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c5ecd62c
  9. 04 1月, 2006 1 次提交
  10. 30 8月, 2005 1 次提交
  11. 19 6月, 2005 2 次提交
    • T
    • T
      [NETLINK]: Neighbour table configuration and statistics via rtnetlink · c7fb64db
      Thomas Graf 提交于
      To retrieve the neighbour tables send RTM_GETNEIGHTBL with the
      NLM_F_DUMP flag set. Every neighbour table configuration is
      spread over multiple messages to avoid running into message
      size limits on systems with many interfaces. The first message
      in the sequence transports all not device specific data such as
      statistics, configuration, and the default parameter set.
      This message is followed by 0..n messages carrying device
      specific parameter sets.
      
      Although the ordering should be sufficient, NDTA_NAME can be
      used to identify sequences. The initial message can be identified
      by checking for NDTA_CONFIG. The device specific messages do
      not contain this TLV but have NDTPA_IFINDEX set to the
      corresponding interface index.
      
      To change neighbour table attributes, send RTM_SETNEIGHTBL
      with NDTA_NAME set. Changeable attribute include NDTA_THRESH[1-3],
      NDTA_GC_INTERVAL, and all TLVs in NDTA_PARMS unless marked
      otherwise. Device specific parameter sets can be changed by
      setting NDTPA_IFINDEX to the interface index of the corresponding
      device.
      Signed-off-by: NThomas Graf <tgraf@suug.ch>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c7fb64db
  12. 17 4月, 2005 1 次提交
    • L
      Linux-2.6.12-rc2 · 1da177e4
      Linus Torvalds 提交于
      Initial git repository build. I'm not bothering with the full history,
      even though we have it. We can create a separate "historical" git
      archive of that later if we want to, and in the meantime it's about
      3.2GB when imported into git - space that would just make the early
      git days unnecessarily complicated, when we don't have a lot of good
      infrastructure for it.
      
      Let it rip!
      1da177e4