OpenSS7 SS7 for the Common Man |
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |
||||||||||||||||||||||||||
Home | Overview | Status | News | Documentation | Resources | About | |||||||||||||||||||||
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__ */
|
|||||||||||||||||||||||||||
OpenSS7 SS7 for the Common Man |
Home | Overview | Status | News | Documentation | Resources | About | ||||||||||||||||||||
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |