142 lines
2.7 KiB
C
142 lines
2.7 KiB
C
/*++
|
||
|
||
Copyright (c) 1997 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
udp.c
|
||
|
||
Abstract:
|
||
|
||
Boot loader UDP routines.
|
||
|
||
Author:
|
||
|
||
Chuck Lenzmeier (chuckl) December 27, 1996
|
||
|
||
Revision History:
|
||
|
||
Notes:
|
||
|
||
--*/
|
||
|
||
#include "precomp.h"
|
||
#pragma hdrstop
|
||
|
||
ULONG UdpNextPort = 0;
|
||
|
||
USHORT UdpUnicastDestinationPort;
|
||
|
||
#if 0
|
||
USHORT UdpMulticastDestinationPort;
|
||
ULONG UdpMulticastDestinationAddress;
|
||
USHORT UdpMulticastSourcePort;
|
||
ULONG UdpMulticastSourceAddress;
|
||
#endif
|
||
|
||
|
||
USHORT
|
||
UdpAssignUnicastPort (
|
||
VOID
|
||
)
|
||
{
|
||
if ( UdpNextPort == 0 ) {
|
||
UdpNextPort = (ArcGetRelativeTime() & 0x7fff) | 0x8000;
|
||
} else if ( ++UdpNextPort > 0xffff ) {
|
||
UdpNextPort = 0x8000;
|
||
}
|
||
|
||
UdpUnicastDestinationPort = SWAP_WORD( UdpNextPort );
|
||
|
||
#if 0
|
||
UdpMulticastDestinationPort = 0;
|
||
#endif
|
||
|
||
RomSetReceiveStatus(
|
||
UdpUnicastDestinationPort
|
||
#if 0
|
||
,
|
||
UdpMulticastDestinationPort,
|
||
UdpMulticastDestinationAddress,
|
||
UdpMulticastSourcePort,
|
||
UdpMulticastSourceAddress
|
||
#endif
|
||
);
|
||
|
||
return (USHORT)UdpUnicastDestinationPort;
|
||
|
||
} // UdpAssignUnicastPort
|
||
|
||
|
||
#if 0
|
||
VOID
|
||
UdpSetMulticastPort (
|
||
IN USHORT DestinationPort,
|
||
IN ULONG DestinationAddress,
|
||
IN USHORT SourcePort,
|
||
IN ULONG SourceAddress
|
||
)
|
||
{
|
||
UdpMulticastDestinationPort = DestinationPort;
|
||
UdpMulticastDestinationAddress = DestinationAddress;
|
||
UdpMulticastSourcePort = SourcePort;
|
||
UdpMulticastSourceAddress = SourceAddress;
|
||
|
||
RomSetReceiveStatus(
|
||
UdpUnicastDestinationPort,
|
||
UdpMulticastDestinationPort,
|
||
UdpMulticastDestinationAddress,
|
||
UdpMulticastSourcePort,
|
||
UdpMulticastSourceAddress
|
||
);
|
||
|
||
return;
|
||
|
||
} // UdpSetMulticastPort
|
||
#endif
|
||
|
||
|
||
ULONG
|
||
UdpReceive (
|
||
IN PVOID Buffer,
|
||
IN ULONG BufferLength,
|
||
OUT PULONG RemoteHost,
|
||
OUT PUSHORT RemotePort,
|
||
IN ULONG Timeout
|
||
)
|
||
|
||
//
|
||
// Read in packet from the specified socket. The host and port
|
||
// the packet comes from is filled in fhost and fport.
|
||
// The data is put in buffer buf, which should have size len. If no packet
|
||
// arrives in tmo seconds, then 0 is returned.
|
||
// Otherwise it returns the size of the packet read.
|
||
//
|
||
|
||
{
|
||
return RomReceiveUdpPacket( Buffer, BufferLength, Timeout, RemoteHost, RemotePort );
|
||
|
||
} // UdpReceive
|
||
|
||
|
||
ULONG
|
||
UdpSend (
|
||
IN PVOID Buffer,
|
||
IN ULONG BufferLength,
|
||
IN ULONG RemoteHost,
|
||
IN USHORT RemotePort
|
||
)
|
||
|
||
//
|
||
// writes a packet to the specified socket. The host and port the packet
|
||
// should go to should be in fhost and fport
|
||
// The data should be put in buffer buf, and should have size len.
|
||
// It usually returns the number of characters sent, or -1 on failure.
|
||
//
|
||
|
||
{
|
||
return RomSendUdpPacket( Buffer, BufferLength, RemoteHost, RemotePort );
|
||
|
||
} // UdpSend
|
||
|