2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS TCP/IP protocol driver
4 * FILE: datalink/loopback.c
5 * PURPOSE: Loopback adapter
6 * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
8 * CSH 01/08-2000 Created
13 PIP_INTERFACE Loopback
= NULL
;
17 PNDIS_PACKET NdisPacket
,
22 * FUNCTION: Transmits a packet
24 * Context = Pointer to context information (NULL)
25 * NdisPacket = Pointer to NDIS packet to send
26 * Offset = Offset in packet where packet data starts
27 * LinkAddress = Pointer to link address
28 * Type = LAN protocol type (unused)
33 TI_DbgPrint(MAX_TRACE
, ("Called (NdisPacket = %x)\n", NdisPacket
));
35 IPPacket
.NdisPacket
= NdisPacket
;
36 IPPacket
.HeaderSize
= 0;
37 GetDataPtr( NdisPacket
, 0, (PCHAR
*)&IPPacket
.Header
, &IPPacket
.TotalSize
);
39 TI_DbgPrint(MAX_TRACE
,
40 ("Doing receive (complete: %x, context %x, packet %x)\n",
41 PC(NdisPacket
)->DLComplete
, Context
, NdisPacket
));
42 IPReceive(Context
, &IPPacket
);
43 TI_DbgPrint(MAX_TRACE
,
44 ("Finished receive (complete: %x, context %x, packet %x)\n",
45 PC(NdisPacket
)->DLComplete
, Context
, NdisPacket
));
46 PC(NdisPacket
)->DLComplete(Context
, NdisPacket
, NDIS_STATUS_SUCCESS
);
47 TI_DbgPrint(MAX_TRACE
, ("Done\n"));
50 NDIS_STATUS
LoopRegisterAdapter(
51 PNDIS_STRING AdapterName
,
52 PLAN_ADAPTER
*Adapter
)
54 * FUNCTION: Registers loopback adapter with the network layer
56 * AdapterName = Unused
65 Status
= NDIS_STATUS_SUCCESS
;
67 TI_DbgPrint(MID_TRACE
, ("Called.\n"));
69 Address
= AddrBuildIPv4(LOOPBACK_ADDRESS_IPv4
);
72 LLIP_BIND_INFO BindInfo
;
74 /* Bind the adapter to network (IP) layer */
75 BindInfo
.Context
= NULL
;
76 BindInfo
.HeaderSize
= 0;
77 BindInfo
.MinFrameSize
= 0;
79 BindInfo
.Address
= NULL
;
80 BindInfo
.AddressLength
= 0;
81 BindInfo
.Transmit
= LoopTransmit
;
83 Loopback
= IPCreateInterface(&BindInfo
);
85 if ((Loopback
!= NULL
) && (IPCreateNTE(Loopback
, Address
, 8)))
87 IPRegisterInterface(Loopback
);
91 Status
= NDIS_STATUS_RESOURCES
;
96 Status
= NDIS_STATUS_RESOURCES
;
99 if (!NT_SUCCESS(Status
))
101 LoopUnregisterAdapter(NULL
);
104 TI_DbgPrint(MAX_TRACE
, ("Leaving.\n"));
110 NDIS_STATUS
LoopUnregisterAdapter(
111 PLAN_ADAPTER Adapter
)
113 * FUNCTION: Unregisters loopback adapter with the network layer
117 * Status of operation
119 * Does not care wether we have registered loopback adapter
122 TI_DbgPrint(MID_TRACE
, ("Called.\n"));
124 if (Loopback
!= NULL
)
126 IPUnregisterInterface(Loopback
);
127 IPDestroyInterface(Loopback
);
131 TI_DbgPrint(MAX_TRACE
, ("Leaving.\n"));
133 return NDIS_STATUS_SUCCESS
;