summaryrefslogtreecommitdiff
path: root/sys/i4b/layer2/i4b_tei.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/i4b/layer2/i4b_tei.c')
-rw-r--r--sys/i4b/layer2/i4b_tei.c322
1 files changed, 0 insertions, 322 deletions
diff --git a/sys/i4b/layer2/i4b_tei.c b/sys/i4b/layer2/i4b_tei.c
deleted file mode 100644
index 5c5b7b83fd873..0000000000000
--- a/sys/i4b/layer2/i4b_tei.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_tei.c - tei handling procedures
- * -----------------------------------
- *
- * $Id: i4b_tei.c,v 1.13 1998/12/05 18:05:23 hm Exp $
- *
- * last edit-date: [Sat Dec 5 18:30:20 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#ifdef __FreeBSD__
-#include "i4bq921.h"
-#else
-#define NI4BQ921 1
-#endif
-#if NI4BQ921 > 0
-
-#include <sys/param.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <sys/ioccom.h>
-#else
-#include <sys/ioctl.h>
-#endif
-#include <sys/kernel.h>
-#include <sys/systm.h>
-#include <sys/syslog.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <net/if.h>
-
-#ifdef __FreeBSD__
-#include <machine/i4b_debug.h>
-#include <machine/i4b_ioctl.h>
-#else
-#include <i4b/i4b_debug.h>
-#include <i4b/i4b_ioctl.h>
-#endif
-
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <machine/random.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_l1l2.h>
-#include <i4b/include/i4b_l2l3.h>
-#include <i4b/include/i4b_isdnq931.h>
-#include <i4b/include/i4b_mbuf.h>
-
-#include <i4b/layer2/i4b_l2.h>
-#include <i4b/layer2/i4b_l2fsm.h>
-
-/*---------------------------------------------------------------------------*
- * handle a received TEI management frame
- *---------------------------------------------------------------------------*/
-void
-i4b_tei_rxframe(int unit, struct mbuf *m)
-{
- l2_softc_t *l2sc = &l2_softc[unit];
- u_char *ptr = m->m_data;
-
- switch(*(ptr + OFF_MT))
- {
- case MT_ID_ASSIGN:
- if( (*(ptr + OFF_RIL) == l2sc->last_ril) &&
- (*(ptr + OFF_RIH) == l2sc->last_rih))
- {
- l2sc->tei = GET_TEIFROMAI(*(ptr+OFF_AI));
- l2sc->tei_valid = TEI_VALID;
-
- if(l2sc->T202 == TIMER_ACTIVE)
- i4b_T202_stop(l2sc);
-
- MDL_Status_Ind(l2sc->unit, STI_TEIASG, l2sc->tei);
-
- log(LOG_INFO, "i4b: unit %d, assigned TEI = %d = 0x%02x\n", l2sc->unit, l2sc->tei, l2sc->tei);
-
- DBGL2(L2_TEI_MSG, "i4b_tei_rx_frame", ("TEI ID Assign - TEI = %d\n", l2sc->tei));
-
- i4b_next_l2state(l2sc, EV_MDASGRQ);
- }
- break;
-
- case MT_ID_DENY:
- if( (*(ptr + OFF_RIL) == l2sc->last_ril) &&
- (*(ptr + OFF_RIH) == l2sc->last_rih))
- {
- l2sc->tei_valid = TEI_INVALID;
- l2sc->tei = GET_TEIFROMAI(*(ptr+OFF_AI));
-
- if(l2sc->tei == GROUP_TEI)
- {
- log(LOG_WARNING, "i4b: unit %d, denied TEI, no TEI values available from exchange!\n", l2sc->unit);
- DBGL2(L2_TEI_ERR, "i4b_tei_rx_frame", ("TEI ID Denied, No TEI values available from exchange!\n"));
- }
- else
- {
- log(LOG_WARNING, "i4b: unit %d, denied TEI = %d = 0x%02x\n", l2sc->unit, l2sc->tei, l2sc->tei);
- DBGL2(L2_TEI_ERR, "i4b_tei_rx_frame", ("TEI ID Denied - TEI = %d\n", l2sc->tei));
- }
- MDL_Status_Ind(l2sc->unit, STI_TEIASG, -1);
- i4b_next_l2state(l2sc, EV_MDERRRS);
- }
- break;
-
- case MT_ID_CHK_REQ:
- if( (l2sc->tei_valid == TEI_VALID) &&
- ( (l2sc->tei == GET_TEIFROMAI(*(ptr+OFF_AI))) ||
- (GROUP_TEI == GET_TEIFROMAI(*(ptr+OFF_AI))) ))
- {
- static int lasttei = -1;
-
- if(l2sc->tei != lasttei)
- {
- DBGL2(L2_TEI_MSG, "i4b_tei_rx_frame", ("TEI ID Check Req - TEI = %d\n", l2sc->tei));
- lasttei = l2sc->tei;
- }
-
- if(l2sc->T202 == TIMER_ACTIVE)
- i4b_T202_stop(l2sc);
- i4b_tei_chkresp(l2sc);
- }
- break;
-
- case MT_ID_REMOVE:
- if( (l2sc->tei_valid == TEI_VALID) &&
- ( (l2sc->tei == GET_TEIFROMAI(*(ptr+OFF_AI))) ||
- (l2sc->tei == GET_TEIFROMAI(*(ptr+OFF_AI)))))
- {
- l2sc->tei_valid = TEI_INVALID;
- l2sc->tei = GET_TEIFROMAI(*(ptr+OFF_AI));
-
- log(LOG_INFO, "i4b: unit %d, removed TEI = %d = 0x%02x\n", l2sc->unit, l2sc->tei, l2sc->tei);
- DBGL2(L2_TEI_MSG, "i4b_tei_rx_frame", ("TEI ID Remove - TEI = %d\n", l2sc->tei));
- MDL_Status_Ind(l2sc->unit, STI_TEIASG, -1);
- i4b_next_l2state(l2sc, EV_MDREMRQ);
- }
- break;
-
- default:
- DBGL2(L2_TEI_ERR, "i4b_tei_rx_frame", ("UNKNOWN TEI MGMT Frame, type = 0x%x\n", *(ptr + OFF_MT)));
- i4b_print_frame(m->m_len, m->m_data);
- break;
- }
- i4b_Dfreembuf(m);
-}
-
-/*---------------------------------------------------------------------------*
- * allocate and fill up a TEI management frame for sending
- *---------------------------------------------------------------------------*/
-static struct mbuf *
-build_tei_mgmt_frame(l2_softc_t *l2sc, unsigned char type)
-{
- struct mbuf *m;
-
- if((m = i4b_Dgetmbuf(TEI_MGMT_FRM_LEN)) == NULL)
- return(NULL);
-
- m->m_data[TEIM_SAPIO] = 0xfc; /* SAPI = 63, CR = 0, EA = 0 */
- m->m_data[TEIM_TEIO] = 0xff; /* TEI = 127, EA = 1 */
- m->m_data[TEIM_UIO] = UI; /* UI */
- m->m_data[TEIM_MEIO] = MEI; /* MEI */
- m->m_data[TEIM_MTO] = type; /* message type */
-
- switch(type)
- {
- case MT_ID_REQEST:
- i4b_make_rand_ri(l2sc);
- m->m_data[TEIM_RILO] = l2sc->last_ril;
- m->m_data[TEIM_RIHO] = l2sc->last_rih;
- m->m_data[TEIM_AIO] = (GROUP_TEI << 1) | 0x01;
- break;
-
- case MT_ID_CHK_RSP:
- i4b_make_rand_ri(l2sc);
- m->m_data[TEIM_RILO] = l2sc->last_ril;
- m->m_data[TEIM_RIHO] = l2sc->last_rih;
- m->m_data[TEIM_AIO] = (l2sc->tei << 1) | 0x01;
- break;
-
- case MT_ID_VERIFY:
- m->m_data[TEIM_RILO] = 0;
- m->m_data[TEIM_RIHO] = 0;
- m->m_data[TEIM_AIO] = (l2sc->tei << 1) | 0x01;
- break;
-
- default:
- i4b_Dfreembuf(m);
- panic("build_tei_mgmt_frame: invalid type");
- break;
- }
- return(m);
-}
-
-/*---------------------------------------------------------------------------*
- * i4b_tei_assign - TEI assignment procedure (Q.921, 5.3.2, pp 24)
- * T202func and N202 _MUST_ be set prior to calling this function !
- *---------------------------------------------------------------------------*/
-void
-i4b_tei_assign(l2_softc_t *l2sc)
-{
- struct mbuf *m;
-
- DBGL2(L2_TEI_MSG, "i4b_tei_assign", ("tx TEI ID_Request\n"));
-
- m = build_tei_mgmt_frame(l2sc, MT_ID_REQEST);
-
- if(m == NULL)
- panic("i4b_tei_assign: no mbuf");
-
- i4b_T202_start(l2sc);
-
- PH_Data_Req(l2sc->unit, m, MBUF_FREE);
-}
-
-/*---------------------------------------------------------------------------*
- * i4b_tei_assign - TEI verify procedure (Q.921, 5.3.5, pp 29)
- * T202func and N202 _MUST_ be set prior to calling this function !
- *---------------------------------------------------------------------------*/
-void
-i4b_tei_verify(l2_softc_t *l2sc)
-{
- struct mbuf *m;
-
- DBGL2(L2_TEI_MSG, "i4b_tei_verify", ("tx TEI ID_Verify\n"));
-
- m = build_tei_mgmt_frame(l2sc, MT_ID_VERIFY);
-
- if(m == NULL)
- panic("i4b_tei_verify: no mbuf");
-
- i4b_T202_start(l2sc);
-
- PH_Data_Req(l2sc->unit, m, MBUF_FREE);
-}
-
-/*---------------------------------------------------------------------------*
- * i4b_tei_chkresp - TEI check response procedure (Q.921, 5.3.5, pp 29)
- *---------------------------------------------------------------------------*/
-void
-i4b_tei_chkresp(l2_softc_t *l2sc)
-{
- struct mbuf *m;
- static int lasttei = 0;
-
- if(l2sc->tei != lasttei)
- {
- lasttei = l2sc->tei;
- DBGL2(L2_TEI_MSG, "i4b_tei_chkresp", ("tx TEI ID_Check_Response\n"));
- }
-
- m = build_tei_mgmt_frame(l2sc, MT_ID_CHK_RSP);
-
- if(m == NULL)
- panic("i4b_tei_chkresp: no mbuf");
-
- PH_Data_Req(l2sc->unit, m, MBUF_FREE);
-}
-
-/*---------------------------------------------------------------------------*
- * generate some 16 bit "random" number used for TEI mgmt Ri field
- *---------------------------------------------------------------------------*/
-void
-i4b_make_rand_ri(l2_softc_t *l2sc)
-{
-
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-
- u_short val;
- read_random((char *)&val, sizeof(val));
-
-#else
-
- register u_short val;
- register int i;
- static int called = 42;
-
- val = (l2sc->last_rih << 8) | l2sc->last_ril;
-
- val += ++called;
-
- for(i=0; i < 50 ; i++, val++)
- {
- val |= l2sc->unit+i;
- val <<= i;
- val ^= (time.tv_sec >> 16) ^ time.tv_usec;
- val <<= i;
- val ^= time.tv_sec ^ (time.tv_usec >> 16);
-
- if(val != 0 && val != 0xffff)
- break;
- }
-#endif
- l2sc->last_rih = (val >> 8) & 0x00ff;
- l2sc->last_ril = val & 0x00ff;
-}
-
-#endif /* NI4BQ921 > 0 */