NTSTATUS LpxTdiSendDataGram_LSTrans( IN PFILE_OBJECT AddressFileObject, PTA_LSTRANS_ADDRESS RemoteAddress, IN PUCHAR SendBuffer, IN ULONG SendLength, IN ULONG Flags, OUT PLONG Result, IN OUT PVOID CompletionContext ) { UNREFERENCED_PARAMETER(CompletionContext); return LpxTdiSendDataGram(AddressFileObject, (PLPX_ADDRESS)RemoteAddress->Address[0].Address, SendBuffer, SendLength, Flags, Result); }
// // send a packet. // NTSTATUS LfsSendDatagram( IN PLFSDG_Socket socket, IN PLFSDG_PKT pkt, PLPX_ADDRESS LpxRemoteAddress ) { NTSTATUS ntStatus ; ULONG result ; ULONG idx_addr ; // // send a packet // for(idx_addr = 0 ; idx_addr < socket->SocketCnt ; idx_addr ++ ) { ntStatus = LpxTdiSendDataGram( socket->Sockets[idx_addr].AddressFile, LpxRemoteAddress, (PUCHAR)&pkt->RawHeadDG, pkt->PacketSize, 0, &result ) ; if(STATUS_PENDING == ntStatus) { SPY_LOG_PRINT( LFS_DEBUG_LFS_TRACE, ( "[LFS] LfsSendDatagram: outgoing packet is pending.\n")) ; } else if(!NT_SUCCESS(ntStatus)) { SPY_LOG_PRINT( LFS_DEBUG_LFS_TRACE, ( "[LFS] LfsSendDatagram: sending failed.\n")) ; } else if(result != pkt->PacketSize) { SPY_LOG_PRINT( LFS_DEBUG_LFS_TRACE, ( "[LFS] LfsSendDatagram: unexpected data length sent. len:%lu\n", result)) ; } // // patch02172004 // Some NICs don't support loop-back for broadcast packet. // set Source address here. if(NT_SUCCESS(ntStatus)) { RtlCopyMemory(&pkt->SourceAddr, &socket->Sockets[idx_addr].NICAddr, sizeof(LPX_ADDRESS)) ; } } return STATUS_SUCCESS ; }
// // send a packet. // NTSTATUS xixfs_SendDatagram( IN PLFSDG_Socket socket, IN PXIXFSDG_PKT pkt, PLPX_ADDRESS LpxRemoteAddress ) { NTSTATUS ntStatus ; ULONG result ; ULONG idx_addr ; PAGED_CODE(); DebugTrace(DEBUG_LEVEL_TRACE, DEBUG_TARGET_HOSTCOM, ("Enter xixfs_SendDatagram \n")); // // send a packet // for(idx_addr = 0 ; idx_addr < socket->SocketCnt ; idx_addr ++ ) { RtlCopyMemory(&pkt->SourceAddr, &socket->Sockets[idx_addr].NICAddr, sizeof(LPX_ADDRESS)) ; DebugTrace(DEBUG_LEVEL_INFO, DEBUG_TARGET_HOSTCOM, ( "[LFS] xixfs_SendDatagram: Souce address: [0x%02X:%02X:%02X:%02X:%02X:%02X] : Port (%ld)\n", pkt->SourceAddr.Node[0],pkt->SourceAddr.Node[1],pkt->SourceAddr.Node[2], pkt->SourceAddr.Node[3],pkt->SourceAddr.Node[4],pkt->SourceAddr.Node[5], NTOHS(pkt->SourceAddr.Port)) ); DebugTrace(DEBUG_LEVEL_INFO, DEBUG_TARGET_HOSTCOM, ( "[LFS] xixfs_SendDatagram: Dest address: [0x%02X:%02X:%02X:%02X:%02X:%02X] : Port (%ld)\n", LpxRemoteAddress->Node[0],LpxRemoteAddress->Node[1],LpxRemoteAddress->Node[2], LpxRemoteAddress->Node[3],LpxRemoteAddress->Node[4],LpxRemoteAddress->Node[5], NTOHS(LpxRemoteAddress->Port) )); ntStatus = LpxTdiSendDataGram( socket->Sockets[idx_addr].AddressFile, LpxRemoteAddress, (PUCHAR)&pkt->RawHeadDG, pkt->PacketSize, 0, &result ) ; if(STATUS_PENDING == ntStatus) { DebugTrace(DEBUG_LEVEL_INFO, DEBUG_TARGET_HOSTCOM, ( "[COM] xixfs_SendDatagram: outgoing packet is pending.\n")) ; } else if(!NT_SUCCESS(ntStatus)) { DebugTrace(DEBUG_LEVEL_INFO, DEBUG_TARGET_HOSTCOM, ( "[COM] xixfs_SendDatagram: sending failed.\n")) ; } else if(result != pkt->PacketSize) { DebugTrace(DEBUG_LEVEL_INFO, DEBUG_TARGET_HOSTCOM, ( "[COM] xixfs_SendDatagram: unexpected data length sent. len:%lu\n", result)) ; } // // patch02172004 // Some NICs don't support loop-back for broadcast packet. // set Source address here. //if(NT_SUCCESS(ntStatus)) { DebugTrace(DEBUG_LEVEL_INFO, DEBUG_TARGET_HOSTCOM, ( "[COM] xixfs_SendDatagram: Sending OK. \n")) ; // RtlCopyMemory(&pkt->SourceAddr, &socket->Sockets[idx_addr].NICAddr, sizeof(LPX_ADDRESS)) ; //} } DebugTrace(DEBUG_LEVEL_TRACE, DEBUG_TARGET_HOSTCOM, ("Exit xixfs_SendDatagram \n")); return STATUS_SUCCESS ; }