OpenSS7
SS7 for the
Common Man

© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved.
Last modified:

Home Overview Status News Documentation Resources About
   
 Overview
 Status
 News
 Documentation
 Resources
 About

   
Home Index Prev Next More Download Info FAQ Mail   Home -> Resources -> Browse Source -> strss7/drivers/sctp/sctp_hash.h


File /code/strss7/drivers/sctp/sctp_hash.h



#ifndef __SCTP_HASH_H__
#define __SCTP_HASH_H__

#ident "@(#) $RCSfile: sctp_hash.h,v $ $Name:  $($Revision: 0.8.2.2 $) $Date: 2003/02/23 09:32:24 $"

#include <asm/softirq.h>	/* for start_bh_atomic, end_bh_atomic */

/*
 *  Hashing Functions
 *  -------------------------------------------------------------------------
 */
/* for now: adjust it and scale it with kernel pages later */
#define sctp_bhash_size (1<<6)
#define sctp_lhash_size (1<<6)
#define sctp_phash_size (1<<6)
#define sctp_cache_size (1<<6)
#define sctp_vhash_size (1<<6)
#define sctp_thash_size (1<<6)

extern sctp_t *sctp_bhash[];			/* bind */
extern sctp_t *sctp_lhash[];			/* listen */
extern sctp_t *sctp_phash[];			/* p_tag */
extern sctp_t *sctp_cache[];			/* v_tag *//* level 1 */
extern sctp_t *sctp_vhash[];			/* v_tag *//* level 2 */
extern sctp_t *sctp_thash[];			/* tcb *//* level 4 */

static inline uint sctp_bhashfn(uint16_t port)
{
	return ((sctp_bhash_size - 1) & port);
}
static inline uint sctp_lhashfn(uint16_t port)
{
	return ((sctp_lhash_size - 1) & port);
}
static inline uint sctp_phashfn(uint32_t ptag)
{
	return ((sctp_phash_size - 1) & ptag);
}
static inline uint sctp_cachefn(uint32_t vtag)
{
	return ((sctp_cache_size - 1) & vtag);
}
static inline uint sctp_vhashfn(uint32_t vtag)
{
	return ((sctp_vhash_size - 1) & vtag);
}
static inline uint sctp_thashfn(uint16_t sport, uint16_t dport)
{
	return ((sctp_thash_size - 1) & (sport + (dport << 4)));
}

static inline uint sctp_sp_bhashfn(sctp_t * sp)
{
	return sctp_bhashfn(sp->sport);
}
static inline uint sctp_sp_lhashfn(sctp_t * sp)
{
	return sctp_lhashfn(sp->sport);
}
static inline uint sctp_sp_phashfn(sctp_t * sp)
{
	return sctp_phashfn(sp->p_tag);
}
static inline uint sctp_sp_cachefn(sctp_t * sp)
{
	return (sp->hashent = sctp_cachefn(sp->v_tag));
}
static inline uint sctp_sp_vhashfn(sctp_t * sp)
{
	return sctp_vhashfn(sp->v_tag);
}
static inline uint sctp_sp_thashfn(sctp_t * sp)
{
	return sctp_thashfn(sp->sport, sp->dport);
}

extern rwlock_t sctp_hash_lock;
extern void sctp_init_locks(void);
extern void sctp_term_locks(void);

#define SCTPHASH_RLOCK()    read_lock_bh(&sctp_hash_lock)
#define SCTPHASH_RUNLOCK()  read_unlock_bh(&sctp_hash_lock)
#define SCTPHASH_WLOCK()    write_lock_bh(&sctp_hash_lock)
#define SCTPHASH_WUNLOCK()  write_unlock_bh(&sctp_hash_lock)

#define SCTPHASH_BH_RLOCK()    read_lock(&sctp_hash_lock)
#define SCTPHASH_BH_RUNLOCK()  read_unlock(&sctp_hash_lock)
#define SCTPHASH_BH_WLOCK()    write_lock(&sctp_hash_lock)
#define SCTPHASH_BH_WUNLOCK()  write_unlock(&sctp_hash_lock)

extern void sctp_phash_rehash(sctp_t * sp);
extern int sctp_bind_hash(sctp_t * sp, uint cons);
extern int sctp_conn_hash(sctp_t * sp);
extern void __sctp_unhash(sctp_t * sp);		/* without locks */
extern void __sctp_bind_unhash(sctp_t * sp);	/* without locks */
extern void __sctp_conn_unhash(sctp_t * sp);	/* without locks */

extern uint16_t sctp_get_port(void);

extern sctp_t *sctp_lookup_tcb(uint16_t sport, uint16_t dport, uint32_t saddr, uint32_t daddr);
extern sctp_t *sctp_lookup_ptag(uint32_t p_tag, uint16_t sport, uint16_t dport, uint32_t saddr, uint16_t daddr);
extern sctp_t *sctp_lookup(struct sctphdr *sh, uint32_t daddr, uint32_t saddr);

#endif				/* __SCTP_HASH_H__ */


Home Index Prev Next More Download Info FAQ Mail   Home -> Resources -> Browse Source -> strss7/drivers/sctp/sctp_hash.h

OpenSS7
SS7 for the
Common Man
Home Overview Status News Documentation Resources About

© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved.
Last modified: