1. 18 Jun, 2008 4 commits
    • David S. Miller's avatar
      ax25: Fix std timer socket destroy handling. · 30902dc3
      David S. Miller authored
      Tihomir Heidelberg - 9a4gl, reports:
      
      --------------------
      I would like to direct you attention to one problem existing in ax.25
      kernel since 2.4. If listening socket is closed and its SKB queue is
      released but those sockets get weird. Those "unAccepted()" sockets
      should be destroyed in ax25_std_heartbeat_expiry, but it will not
      happen. And there is also a note about that in ax25_std_timer.c:
      /* Magic here: If we listen() and a new link dies before it
      is accepted() it isn't 'dead' so doesn't get removed. */
      
      This issue cause ax25d to stop accepting new connections and I had to
      restarted ax25d approximately each day and my services were unavailable.
      Also netstat -n -l shows invalid source and device for those listening
      sockets. It is strange why ax25d's listening socket get weird because of
      this issue, but definitely when I solved this bug I do not have problems
      with ax25d anymore and my ax25d can run for months without problems.
      --------------------
      
      Actually as far as I can see, this problem is even in releases
      as far back as 2.2.x as well.
      
      It seems senseless to special case this test on TCP_LISTEN state.
      Anything still stuck in state 0 has no external references and
      we can just simply kill it off directly.
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      30902dc3
    • Wang Chen's avatar
      netdevice: change net_device->promiscuity/allmulti to unsigned int · 9d45abe1
      Wang Chen authored
      The comments of dev_set_allmulti/promiscuity() is that "While the count in
      the device remains above zero...". So negative count is useless.
      Fix the type of the counter from "int" to "unsigned int".
      Signed-off-by: default avatarWang Chen <wangchen@cn.fujitsu.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9d45abe1
    • Eric Dumazet's avatar
      udp: sk_drops handling · cb61cb9b
      Eric Dumazet authored
      In commits 33c732c3 ([IPV4]: Add raw
      drops counter) and a92aa318 ([IPV6]:
      Add raw drops counter), Wang Chen added raw drops counter for
      /proc/net/raw & /proc/net/raw6
      
      This patch adds this capability to UDP sockets too (/proc/net/udp &
      /proc/net/udp6).
      
      This means that 'RcvbufErrors' errors found in /proc/net/snmp can be also
      be examined for each udp socket.
      
      # grep Udp: /proc/net/snmp
      Udp: InDatagrams NoPorts InErrors OutDatagrams RcvbufErrors SndbufErrors
      Udp: 23971006 75 899420 16390693 146348 0
      
      # cat /proc/net/udp
       sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt  ---
      uid  timeout inode ref pointer drops
       75: 00000000:02CB 00000000:0000 07 00000000:00000000 00:00000000 00000000  ---
        0        0 2358 2 ffff81082a538c80 0
      111: 00000000:006F 00000000:0000 07 00000000:00000000 00:00000000 00000000  ---
        0        0 2286 2 ffff81042dd35c80 146348
      
      In this example, only port 111 (0x006F) was flooded by messages that
      user program could not read fast enough. 146348 messages were lost.
      Signed-off-by: default avatarEric Dumazet <dada1@cosmosbay.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      cb61cb9b
    • Bernard Pidoux's avatar
      rose: improving AX25 routing frames via ROSE network · fe2c802a
      Bernard Pidoux authored
      ROSE network is organized through nodes connected via hamradio or Internet.
      AX25 packet radio frames sent to a remote ROSE address destination are routed
      through these nodes.
      
      Without the present patch, automatic routing mechanism did not work optimally
      due to an improper parameter checking.
      
      rose_get_neigh() function is called either by rose_connect() or by
      rose_route_frame().
      
      In the case of a call from rose_connect(), f0 timer is checked to find if a connection
      is already pending. In that case it returns the address of the neighbour, or returns a NULL otherwise.
      
      When called by rose_route_frame() the purpose was to route a packet AX25 frame
      through an adjacent node given a destination rose address.
      However, in that case, t0 timer checked does not indicate if the adjacent node
      is actually connected even if the timer is not null. Thus, for each frame sent, the
      function often tried to start a new connexion even if the adjacent node was already connected.
      
      The patch adds a "new" parameter that is true when the function is called by
      rose route_frame().
      This instructs rose_get_neigh() to check node parameter "restarted". 
      If restarted is true it means that the route to the destination address is opened via a neighbour
      node already connected.
      If "restarted" is false the function returns a NULL.
      In that case the calling function will initiate a new connection as before.
      
      This results in a fast routing of frames, from nodes to nodes, until
      destination is reached, as originaly specified by ROSE protocole.
      Signed-off-by: default avatarBernard Pidoux <f6bvp@amsat.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      fe2c802a
  2. 17 Jun, 2008 36 commits