2025-11-28 00:35:46 +09:00

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;
}