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
15 PNDIS_PACKET NdisPacket
,
20 * FUNCTION: Transmits a packet
22 * Context = Pointer to context information (NULL)
23 * NdisPacket = Pointer to NDIS packet to send
24 * Offset = Offset in packet where packet data starts
25 * LinkAddress = Pointer to link address
26 * Type = LAN protocol type (unused)
31 TI_DbgPrint(MAX_TRACE
, ("Called (NdisPacket = %x)\n", NdisPacket
));
33 IPPacket
.NdisPacket
= NdisPacket
;
35 IPReceive(Context
, &IPPacket
);
36 TI_DbgPrint(MAX_TRACE
, ("Finished receive\n"));
37 ASSERT_KM_POINTER(Packet
);
38 ASSERT_KM_POINTER(PC(Packet
));
39 ASSERT_KM_POINTER(PC(Packet
)->DLComplete
);
40 PC(NdisPacket
)->DLComplete(Context
, NdisPacket
, NDIS_STATUS_SUCCESS
);
41 TI_DbgPrint(MAX_TRACE
, ("Done\n"));
44 NDIS_STATUS
LoopRegisterAdapter(
45 PNDIS_STRING AdapterName
,
46 PLAN_ADAPTER
*Adapter
)
48 * FUNCTION: Registers loopback adapter with the network layer
50 * AdapterName = Unused
59 Status
= NDIS_STATUS_SUCCESS
;
61 TI_DbgPrint(MID_TRACE
, ("Called.\n"));
63 Address
= AddrBuildIPv4(LOOPBACK_ADDRESS_IPv4
);
66 LLIP_BIND_INFO BindInfo
;
68 /* Bind the adapter to network (IP) layer */
69 BindInfo
.Context
= NULL
;
70 BindInfo
.HeaderSize
= 0;
71 BindInfo
.MinFrameSize
= 0;
73 BindInfo
.Address
= NULL
;
74 BindInfo
.AddressLength
= 0;
75 BindInfo
.Transmit
= LoopTransmit
;
77 Loopback
= IPCreateInterface(&BindInfo
);
79 if ((Loopback
!= NULL
) && (IPCreateNTE(Loopback
, Address
, 8)))
81 /* Reference the interface for the NTE. The reference for
82 the address is just passed on to the NTE */
83 ReferenceObject(Loopback
);
85 IPRegisterInterface(Loopback
);
89 Status
= NDIS_STATUS_RESOURCES
;
94 Status
= NDIS_STATUS_RESOURCES
;
97 if (!NT_SUCCESS(Status
))
99 LoopUnregisterAdapter(NULL
);
102 TI_DbgPrint(MAX_TRACE
, ("Leaving.\n"));
108 NDIS_STATUS
LoopUnregisterAdapter(
109 PLAN_ADAPTER Adapter
)
111 * FUNCTION: Unregisters loopback adapter with the network layer
115 * Status of operation
117 * Does not care wether we have registered loopback adapter
120 TI_DbgPrint(MID_TRACE
, ("Called.\n"));
122 if (Loopback
!= NULL
)
124 IPUnregisterInterface(Loopback
);
125 IPDestroyInterface(Loopback
);
129 TI_DbgPrint(MAX_TRACE
, ("Leaving.\n"));
131 return NDIS_STATUS_SUCCESS
;