linux-old/include/net/inetpeer.h
<<
>>
Prefs
   1/*
   2 *              INETPEER - A storage for permanent information about peers
   3 *
   4 *  Version:    $Id: inetpeer.h,v 1.1.2.1 2002/01/12 07:53:15 davem Exp $
   5 *
   6 *  Authors:    Andrey V. Savochkin <saw@msu.ru>
   7 */
   8
   9#ifndef _NET_INETPEER_H
  10#define _NET_INETPEER_H
  11
  12#include <linux/types.h>
  13#include <linux/init.h>
  14#include <linux/sched.h>
  15#include <linux/spinlock.h>
  16#include <asm/atomic.h>
  17
  18struct inet_peer
  19{
  20        struct inet_peer        *avl_left, *avl_right;
  21        struct inet_peer        *unused_next, **unused_prevp;
  22        atomic_t                refcnt;
  23        unsigned long           dtime;          /* the time of last use of not
  24                                                 * referenced entries */
  25        __u32                   v4daddr;        /* peer's address */
  26        __u16                   avl_height;
  27        __u16                   ip_id_count;    /* IP ID for the next packet */
  28        __u32                   tcp_ts;
  29        unsigned long           tcp_ts_stamp;
  30};
  31
  32void                    inet_initpeers(void) __init;
  33
  34/* can be called with or without local BH being disabled */
  35struct inet_peer        *inet_getpeer(__u32 daddr, int create);
  36
  37extern spinlock_t inet_peer_unused_lock;
  38extern struct inet_peer *inet_peer_unused_head;
  39extern struct inet_peer **inet_peer_unused_tailp;
  40/* can be called from BH context or outside */
  41static inline void      inet_putpeer(struct inet_peer *p)
  42{
  43        spin_lock_bh(&inet_peer_unused_lock);
  44        if (atomic_dec_and_test(&p->refcnt)) {
  45                p->unused_prevp = inet_peer_unused_tailp;
  46                p->unused_next = NULL;
  47                *inet_peer_unused_tailp = p;
  48                inet_peer_unused_tailp = &p->unused_next;
  49                p->dtime = jiffies;
  50        }
  51        spin_unlock_bh(&inet_peer_unused_lock);
  52}
  53
  54extern spinlock_t inet_peer_idlock;
  55/* can be called with or without local BH being disabled */
  56static inline __u16     inet_getid(struct inet_peer *p)
  57{
  58        __u16 id;
  59
  60        spin_lock_bh(&inet_peer_idlock);
  61        id = p->ip_id_count++;
  62        spin_unlock_bh(&inet_peer_idlock);
  63        return id;
  64}
  65
  66#endif /* _NET_INETPEER_H */
  67
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.