Import SnpDxe, Tcp4Dxe, Udp4Dxe and MnpDxe.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3416 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
117
MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Io.c
Normal file
117
MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Io.c
Normal file
@@ -0,0 +1,117 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2005 - 2006, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
Module Name:
|
||||
|
||||
Tcp4Io.c
|
||||
|
||||
Abstract:
|
||||
|
||||
I/O interfaces between TCP and IpIo.
|
||||
|
||||
|
||||
**/
|
||||
|
||||
|
||||
#include "Tcp4Main.h"
|
||||
|
||||
|
||||
/**
|
||||
Packet receive callback function provided to IP_IO, used to call
|
||||
the proper function to handle the packet received by IP.
|
||||
|
||||
@param Status Status of the received packet.
|
||||
@param IcmpErr ICMP error number.
|
||||
@param NetSession Pointer to the net session of this packet.
|
||||
@param Pkt Pointer to the recieved packet.
|
||||
@param Context Pointer to the context configured in IpIoOpen(), not used
|
||||
now.
|
||||
|
||||
@return None
|
||||
|
||||
**/
|
||||
VOID
|
||||
Tcp4RxCallback (
|
||||
IN EFI_STATUS Status,
|
||||
IN ICMP_ERROR IcmpErr,
|
||||
IN EFI_NET_SESSION_DATA *NetSession,
|
||||
IN NET_BUF *Pkt,
|
||||
IN VOID *Context OPTIONAL
|
||||
)
|
||||
{
|
||||
if (EFI_SUCCESS == Status) {
|
||||
TcpInput (Pkt, NetSession->Source, NetSession->Dest);
|
||||
} else {
|
||||
TcpIcmpInput (Pkt, IcmpErr, NetSession->Source, NetSession->Dest);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Send the segment to IP via IpIo function.
|
||||
|
||||
@param Tcb Pointer to the TCP_CB of this TCP instance.
|
||||
@param Nbuf Pointer to the TCP segment to be sent.
|
||||
@param Src Source address of the TCP segment.
|
||||
@param Dest Destination address of the TCP segment.
|
||||
|
||||
@retval 0 The segment was sent out successfully.
|
||||
@retval -1 The segment was failed to send.
|
||||
|
||||
**/
|
||||
INTN
|
||||
TcpSendIpPacket (
|
||||
IN TCP_CB *Tcb,
|
||||
IN NET_BUF *Nbuf,
|
||||
IN UINT32 Src,
|
||||
IN UINT32 Dest
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
IP_IO *IpIo;
|
||||
IP_IO_OVERRIDE Override;
|
||||
SOCKET *Sock;
|
||||
VOID *IpSender;
|
||||
TCP4_PROTO_DATA *TcpProto;
|
||||
|
||||
if (NULL == Tcb) {
|
||||
|
||||
IpIo = NULL;
|
||||
IpSender = IpIoFindSender (&IpIo, Src);
|
||||
|
||||
if (IpSender == NULL) {
|
||||
TCP4_DEBUG_WARN (("TcpSendIpPacket: No appropriate IpSender.\n"));
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
|
||||
Sock = Tcb->Sk;
|
||||
TcpProto = (TCP4_PROTO_DATA *) Sock->ProtoReserved;
|
||||
IpIo = TcpProto->TcpService->IpIo;
|
||||
IpSender = Tcb->IpInfo;
|
||||
}
|
||||
|
||||
Override.TypeOfService = 0;
|
||||
Override.TimeToLive = 255;
|
||||
Override.DoNotFragment = FALSE;
|
||||
Override.Protocol = EFI_IP_PROTO_TCP;
|
||||
EFI_IP4 (Override.GatewayAddress) = 0;
|
||||
EFI_IP4 (Override.SourceAddress) = Src;
|
||||
|
||||
Status = IpIoSend (IpIo, Nbuf, IpSender, NULL, NULL, Dest, &Override);
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
TCP4_DEBUG_ERROR (("TcpSendIpPacket: return %r error\n", Status));
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user