/*++ 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