NT4/private/ntos/ndis/pcimac/wan_conn.c
2020-09-30 17:12:29 +02:00

124 lines
2.6 KiB
C

/*
* WAN_CONN.C - routines for ras connection and disconnection
*/
#include <ndis.h>
//#include <ndismini.h>
#include <ndiswan.h>
#include <mydefs.h>
#include <mytypes.h>
#include <util.h>
#include <adapter.h>
#include <idd.h>
#include <mtl.h>
#include <cm.h>
#include <tapioid.h>
#include <disp.h>
INT
WanLineup(VOID *cm_1, NDIS_HANDLE Endpoint)
{
CM *cm = (CM*)cm_1;
ADAPTER *Adapter = cm->Adapter;
NDIS_MAC_LINE_UP ISDNLineUp;
MTL *mtl = (MTL*)cm->mtl;
TAPI_LINE_INFO *TapiLineInfo = (TAPI_LINE_INFO*)(cm->TapiLineInfo);
ULONG LinkSpeed;
D_LOG(D_ENTRY, ("WanLineup: entry, cm: 0x%p", cm));
//
// Get the connection speed and fill
//
mtl_get_conn_speed (mtl, &LinkSpeed);
D_LOG(D_ALWAYS, ("cm_wanlineup: ConnectSpeed: [%d]", LinkSpeed));
ISDNLineUp.LinkSpeed = LinkSpeed / 100;
//
// fill line quality
//
ISDNLineUp.Quality = NdisWanReliable;
//
// fill send windows
//
ISDNLineUp.SendWindow = MAX_WANPACKET_XMITS;
//
// fill the connection wrapper id
// this will need to change (i'm not clear on what is needed here)
//
if (Endpoint)
ISDNLineUp.ConnectionWrapperID = Endpoint;
else
ISDNLineUp.ConnectionWrapperID = (NDIS_HANDLE)cm->htCall;
//
// fill the link context
//
ISDNLineUp.NdisLinkHandle = (NDIS_HANDLE)mtl;
//
// clear out link handle since this lineup is for a new connection
// will get back a link handle from wrapper
//
ISDNLineUp.NdisLinkContext = (NDIS_HANDLE)mtl->LinkHandle = NULL;
//
// Tell the wan wrapper that the connection is now up.
// We have a new link speed, frame size, quality of service.
//
NdisMIndicateStatus(
(NDIS_HANDLE)Adapter->Handle,
NDIS_STATUS_WAN_LINE_UP, // General Status
(PVOID)&ISDNLineUp, // Specific Status (baud rate in 100bps)
sizeof(ISDNLineUp));
NdisMIndicateStatusComplete(Adapter->Handle);
//
// save new link handle
//
cm->LinkHandle = mtl->LinkHandle = ISDNLineUp.NdisLinkContext;
return(CM_E_SUCC);
}
INT
WanLinedown(VOID *cm_1)
{
CM *cm = (CM*)cm_1;
ADAPTER *Adapter = cm->Adapter;
NDIS_MAC_LINE_DOWN ISDNLineDown;
MTL *mtl = (MTL*)cm->mtl;
D_LOG(D_ENTRY, ("cm_wanlinedown: entry, cm: 0x%p", cm));
ISDNLineDown.NdisLinkContext = mtl->LinkHandle;
NdisMIndicateStatus(
(NDIS_HANDLE)Adapter->Handle,
NDIS_STATUS_WAN_LINE_DOWN, // General Status
(PVOID)&ISDNLineDown, // Specific Status (baud rate in 100bps)
sizeof(ISDNLineDown));
NdisMIndicateStatusComplete(Adapter->Handle);
//
// clear out link handles
//
cm->LinkHandle = mtl->LinkHandle = NULL;
//
// flush the mtl's wan packet queue
//
MtlFlushWanPacketTxQueue(mtl);
return(CM_E_SUCC);
}