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/slsi/sls_tcbc.h


File /code/strss7/drivers/slsi/sls_tcbc.h



#ident "@(#) $Id: sls_tcbc.h,v 0.8.2.1 2002/10/18 02:40:38 brian Exp $"

#ifndef __SLS_TCBC_H__
#define __SLS_TCBC_H__

static inline void lk_tsrc_alternative_routing_data_request(lk_t * lk);
static inline void lk_hmrt_changeback_ack(lk_t * lk);
static inline void lk_hmrt_changeback_declaration(lk_t * lk);
static inline void lk_hmrt_update_routing_tables(lk_t * lk);
static inline void lk_tlac_changeback_terminated(lk_t * lk);
static inline void lk_tsrc_procedure_terminated(lk_t * lk);

static inline void lk_t3_timeout(lk_t * lk)
{
	switch (lk->statem.tcbc_state) {
	case LK_STATE_TIME_CONTROLLED_DIVERSION:
		/* Restart traffic on link buffered messages first */
		lk_hmrt_update_routing_tables(lk);
		lk_tlac_changeback_terminated(lk);
		lk_tsrc_procedure_terminated(lk);
		lk->statem.tcbc_state = LK_STATE_IDLE;
		break;
	}
}

static inline void lk_t4_timeout(lk_t * lk)
{
	switch (lk->statem.tcbc_state) {
	case LK_STATE_FIRST_ATTEMPT:
		lk_hmrt_changeback_declaration(lk);
		lk_timer_start(t5);
		lk->statem.tcbc_state = LK_STATE_SECOND_ATTEMPT;
		break;
	}
}

static inline void lk_t4_timeout(lk_t * lk)
{
	switch (lk->statem.tcbc_state) {
	case LK_STATE_SECOND_ATTEMPT:
		/* Restart traffic on link buffered messages first */
		lk_hmrt_update_routing_tables(lk);
		lk_tlac_changeback_terminated(lk);
		lk_tsrc_procedure_terminated(lk);
		lk->statem.tcbc_state = LK_STATE_IDLE;
		break;
	}
}

static inline void lk_tcbc_signalling_link_available(lk_t * lk)
{
	switch (lk->statem.tcbc_state) {
	case LK_STATE_IDLE:
		lk_tsrc_alternative_routing_data_request(lk);
		lk->statem.tcbc_state = LK_STATE_WAIT_FOR_ROUTING_DATA;
		break;
	}
}

static inline void lk_tcbc_changeback_declaration(lk_t * lk)
{				/* from remote L3 */
	/* With changeback code x (from remote level 3) */
	switch (lk->statem.tcbc_state) {
	case LK_STATE_IDLE:
		lk_hmrt_changeback_ack(lk);	/* with changeback code x (to remote level 3) */
		break;
	case LK_STATE_WAIT_FOR_ROUTING_DATA:
		break;
	case LK_STATE_TIME_CONTROLLED_DIVERSION:
		break;
	case LK_STATE_FIRST_ATTEMPT:
		break;
	case LK_STATE_SECOND_ATTEMPT:
		break;
	}
}

static inline void lk_tcbc_alternative_routing_data(lk_t * lk)
{
	/* Identifies alternative link(s) carrying traffic to be changed back and also identifies
	   routing and SP accessibility changes */
	switch (lk->statem.tcbc_state) {
	case LK_STATE_WAIT_FOR_ROUTING_DATA:
		if (lk->statem.routing_changed) {
			/* Buffer concerned messages in changeback buffer(s) */
			if (lk->statem.remote_sp_accessible) {
				/* Is SP at remote end of newly available link accessible via
				   alternative link? */
				lk_hmrt_changeback_declaration(lk);	/* Send to above SP via
									   alternative link with
									   changeback code y (to
									   remote level 3) */
				lk_timer_start(t4);
				lk->statem.tcbc_state = LK_STATE_FIRST_ATTEMPT;
			} else {
				lk_timer_start(t3);
				lk->statem.tcbc_state = LK_STATE_TIME_CONTROLLED_DIVERSION;
				/* Wait to reduce risk that diversion causes mis-sequencing */
			}
		} else {
			lk_tlac_changeback_terminated(lk);
			lk_tsrc_procedure_terminated(lk);
			lk->statem.tcbc_state = LK_STATE_IDLE;
		}
		break;
	}
}

static inline void lk_tcbc_changeback_ack(lk_t * lk)
{				/* from remote L3 */
	switch (lk->statem.tcbc_state) {
	case LK_STATE_FIRST_ATTEMPT:
		lk_timer_stop(t4);
		/* Restart traffic on link buffered messages first */
		lk_hmrt_update_routing_tables(lk);
		lk_tlac_changeback_terminated(lk);
		lk_tsrc_procedure_terminated(lk);
		lk->statem.tcbc_state = LK_STATE_IDLE;
		break;
	case LK_STATE_SECOND_ATTEMPT:
		lk_timer_stop(t5);
		/* Restart traffic on link buffered messages first */
		lk_hmrt_update_routing_tables(lk);
		lk_tlac_changeback_terminated(lk);
		lk_tsrc_procedure_terminated(lk);
		lk->statem.tcbc_state = LK_STATE_IDLE;
		break;
	}
}

#endif				/* __SLS_TCBC_H__ */


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

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

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