97 lines
3.0 KiB
C++
97 lines
3.0 KiB
C++
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|
|
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
|
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
|
// PARTICULAR PURPOSE.
|
|
//
|
|
// Copyright (C) Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// Module:
|
|
// enumerator.cpp
|
|
//
|
|
// Abstract:
|
|
//
|
|
// Entry Points:
|
|
// Enumerator - enumerate ATM interfaces on the local machine.
|
|
//
|
|
|
|
|
|
#include "atmevent.h"
|
|
|
|
|
|
// Abstract:
|
|
// Determine the number of ATM adapters on the machine and then print out
|
|
// a list of each adaptors NSAP address.
|
|
//
|
|
//
|
|
void Enumerator(
|
|
OPTIONS *pOptions
|
|
)
|
|
{
|
|
SOCKET sd = INVALID_SOCKET;
|
|
SOCKADDR_ATM atm_addr = {0};
|
|
CHAR szAddress[MAX_ATM_INTERFACE_LEN] = {'\0'};
|
|
DWORD dwNumInterfaces = 0;
|
|
DWORD dwAddrLen = 0;
|
|
DWORD dwBytes=sizeof(DWORD);
|
|
int nRet = 0;
|
|
|
|
|
|
sd = WSASocket(FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO,
|
|
&pOptions->protocolInfo, 0, WSA_FLAG_OVERLAPPED);
|
|
if (INVALID_SOCKET == sd)
|
|
{
|
|
printf("WSASocket: %d\n", WSAGetLastError());
|
|
return;
|
|
}
|
|
|
|
nRet = WSAIoctl(sd, SIO_GET_NUMBER_OF_ATM_DEVICES,
|
|
NULL, 0,
|
|
(LPVOID)&dwNumInterfaces, sizeof(dwNumInterfaces), &dwBytes,
|
|
NULL, NULL);
|
|
if (SOCKET_ERROR == nRet)
|
|
{
|
|
printf("WSAIoctl:SIO_GET_NUMBER_OF_ATM_DEVICES: %d\n", WSAGetLastError());
|
|
return;
|
|
}
|
|
|
|
for (DWORD i=0; i < dwNumInterfaces ;i++)
|
|
{
|
|
ZeroMemory(&atm_addr, sizeof(SOCKADDR_ATM));
|
|
|
|
nRet = WSAIoctl(sd, SIO_GET_ATM_ADDRESS,
|
|
(LPVOID)&i, sizeof(DWORD),
|
|
(LPVOID)&atm_addr.satm_number, sizeof(atm_addr.satm_number), &dwBytes,
|
|
NULL, NULL);
|
|
if (SOCKET_ERROR == nRet)
|
|
{
|
|
printf("WSAIoctl:SIO_GET_ATM_ADDRESS: %d\n", WSAGetLastError());
|
|
return;
|
|
}
|
|
|
|
// fill in remainder of ATM address structure
|
|
atm_addr.satm_family = AF_ATM;
|
|
atm_addr.satm_number.AddressType = ATM_NSAP;
|
|
atm_addr.satm_number.NumofDigits = ATM_ADDR_SIZE;
|
|
atm_addr.satm_blli.Layer2Protocol = SAP_FIELD_ANY;
|
|
atm_addr.satm_blli.Layer3Protocol = SAP_FIELD_ABSENT;
|
|
atm_addr.satm_bhli.HighLayerInfoType = SAP_FIELD_ABSENT;
|
|
|
|
ZeroMemory(szAddress, sizeof(szAddress));
|
|
dwAddrLen = sizeof(szAddress);
|
|
if (SOCKET_ERROR == WSAAddressToString((LPSOCKADDR)&atm_addr, sizeof(atm_addr),
|
|
&pOptions->protocolInfo, szAddress, &dwAddrLen))
|
|
{
|
|
printf("WSAAddressToString: %d\n", WSAGetLastError());
|
|
break;
|
|
}
|
|
printf("ATM Interface [%d]: <%s>\n", i, szAddress);
|
|
}
|
|
|
|
if (INVALID_SOCKET != sd)
|
|
{
|
|
closesocket(sd);
|
|
sd = INVALID_SOCKET;
|
|
}
|
|
return;
|
|
}
|