ReactOS 0.4.15-dev-7131-ge4d03f4
if.c
Go to the documentation of this file.
1
2#include "precomp.h"
3
4#include "lwip/pbuf.h"
5#include "lwip/netifapi.h"
6#include "lwip/ip.h"
7#include "lwip/api.h"
8#include "lwip/tcpip.h"
9
11TCPSendDataCallback(struct netif *netif, struct pbuf *p, struct ip_addr *dest)
12{
13 NDIS_STATUS NdisStatus;
20
21 /* The caller frees the pbuf struct */
22
23 if (((*(u8_t*)p->payload) & 0xF0) == 0x40)
24 {
25 Header = p->payload;
26
28 LocalAddress.Address.IPv4Address = Header->SrcAddr;
29
31 RemoteAddress.Address.IPv4Address = Header->DstAddr;
32 }
33 else
34 {
35 return ERR_IF;
36 }
37
39
41 {
42 return ERR_RTE;
43 }
44
45 NdisStatus = AllocatePacketWithBuffer(&Packet.NdisPacket, NULL, p->tot_len);
46 if (NdisStatus != NDIS_STATUS_SUCCESS)
47 {
48 return ERR_MEM;
49 }
50
51 GetDataPtr(Packet.NdisPacket, 0, (PCHAR*)&Packet.Header, &Packet.TotalSize);
52 Packet.MappedHeader = TRUE;
53
54 ASSERT(Packet.TotalSize == p->tot_len);
55
56 TotalLength = p->tot_len;
57 Length = 0;
58 while (Length < TotalLength)
59 {
60 ASSERT(p->len <= TotalLength - Length);
61 ASSERT(p->tot_len == TotalLength - Length);
62 RtlCopyMemory((PCHAR)Packet.Header + Length, p->payload, p->len);
63 Length += p->len;
64 p = p->next;
65 }
67
68 Packet.HeaderSize = sizeof(IPv4_HEADER);
69 Packet.TotalSize = TotalLength;
70 Packet.SrcAddr = LocalAddress;
71 Packet.DstAddr = RemoteAddress;
72
73 NdisStatus = IPSendDatagram(&Packet, NCE);
74 if (!NT_SUCCESS(NdisStatus))
75 return ERR_RTE;
76
77 return 0;
78}
79
80VOID
82{
83#if 0
84 ULONG OperationalStatus;
85
86 GetInterfaceConnectionStatus(IF, &OperationalStatus);
87
88 if (OperationalStatus == MIB_IF_OPER_STATUS_OPERATIONAL)
90 else
92#endif
93}
94
97{
99
102
104 netif->mtu = IF->MTU;
105
106 netif->name[0] = 'e';
107 netif->name[1] = 'n';
108
110
112
114
115 return 0;
116}
117
118VOID
120{
121 struct ip_addr ipaddr;
122 struct ip_addr netmask;
123 struct ip_addr gw;
124
125 gw.addr = 0;
126 ipaddr.addr = 0;
127 netmask.addr = 0;
128
130 &ipaddr,
131 &netmask,
132 &gw,
133 IF,
136}
137
138VOID
140{
142}
143
144VOID
146{
147 struct ip_addr ipaddr;
148 struct ip_addr netmask;
149 struct ip_addr gw;
150
151 gw.addr = 0;
152
155 (PULONG)&ipaddr.addr);
156
159 (PULONG)&netmask.addr);
160
161 netif_set_addr(IF->TCPContext, &ipaddr, &netmask, &gw);
162
163 if (ipaddr.addr != 0)
164 {
167 }
168 else
169 {
171 }
172}
Definition: Header.h:9
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define IP_ADDRESS_V4
Definition: ip.h:32
#define ADE_UNICAST
Definition: ip.h:110
#define ADE_ADDRMASK
Definition: ip.h:112
PIP_PACKET IPInitializePacket(PIP_PACKET IPPacket, ULONG Type)
Definition: ip.c:92
PNEIGHBOR_CACHE_ENTRY RouteGetRouteToDestination(PIP_ADDRESS Destination)
Definition: router.c:300
VOID TCPUnregisterInterface(PIP_INTERFACE IF)
Definition: if.c:139
VOID TCPUpdateInterfaceIPInformation(PIP_INTERFACE IF)
Definition: if.c:145
VOID TCPUpdateInterfaceLinkStatus(PIP_INTERFACE IF)
Definition: if.c:81
err_t TCPSendDataCallback(struct netif *netif, struct pbuf *p, struct ip_addr *dest)
Definition: if.c:11
err_t TCPInterfaceInit(struct netif *netif)
Definition: if.c:96
VOID TCPRegisterInterface(PIP_INTERFACE IF)
Definition: if.c:119
unsigned char u8_t
Definition: cc.h:23
#define ERR_MEM
Definition: err.h:53
#define ERR_RTE
Definition: err.h:56
s8_t err_t
Definition: err.h:47
#define ERR_IF
Definition: err.h:72
GLfloat GLfloat p
Definition: glext.h:8902
#define MIB_IF_OPER_STATUS_OPERATIONAL
Definition: ipifcons.h:251
void GetDataPtr(PNDIS_PACKET Packet, UINT Offset, PCHAR *DataOut, PUINT Size)
Definition: routines.c:65
#define AllocatePacketWithBuffer(x, y, z)
Definition: memtrack.h:7
#define ASSERT(a)
Definition: mode.c:44
static char * dest
Definition: rtl.c:135
_In_ NDIS_HANDLE _In_ PNDIS_PACKET Packet
Definition: ndis.h:1549
#define NDIS_STATUS_SUCCESS
Definition: ndis.h:346
void netif_set_link_down(struct netif *netif)
Definition: netif.c:574
void netif_set_addr(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask, ip_addr_t *gw)
Definition: netif.c:221
struct netif * netif_add(struct netif *netif, ip_addr_t *ipaddr, ip_addr_t *netmask, ip_addr_t *gw, void *state, netif_init_fn init, netif_input_fn input)
Definition: netif.c:139
void netif_set_down(struct netif *netif)
Definition: netif.c:490
void netif_remove(struct netif *netif)
Definition: netif.c:235
void netif_set_default(struct netif *netif)
Definition: netif.c:430
void netif_set_link_up(struct netif *netif)
Definition: netif.c:535
void netif_set_up(struct netif *netif)
Definition: netif.c:453
#define NETIF_FLAG_BROADCAST
Definition: netif.h:72
NTSTATUS GetInterfaceIPv4Address(PIP_INTERFACE Interface, ULONG Type, PULONG Address)
Definition: interface.c:19
VOID GetInterfaceConnectionStatus(PIP_INTERFACE Interface, PULONG OperStatus)
Definition: interface.c:254
int NDIS_STATUS
Definition: ntddndis.h:475
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
Definition: ip.h:23
Definition: neighbor.h:28
PUCHAR Address
Definition: ip.h:165
UINT AddressLength
Definition: ip.h:166
UINT MTU
Definition: ip.h:157
PVOID TCPContext
Definition: ip.h:169
Definition: ip.h:77
u32_t addr
Definition: ip_addr.h:45
Definition: netif.h:136
u8_t flags
Definition: netif.h:192
char name[2]
Definition: netif.h:194
void * state
Definition: netif.h:172
netif_output_fn output
Definition: netif.h:151
u8_t hwaddr[NETIF_MAX_HWADDR_LEN]
Definition: netif.h:190
u16_t mtu
Definition: netif.h:186
u8_t hwaddr_len
Definition: netif.h:188
Definition: pbuf.h:79
err_t tcpip_input(struct pbuf *p, struct netif *inp)
Definition: tcpip.c:162
NTSTATUS IPSendDatagram(PIP_PACKET IPPacket, PNEIGHBOR_CACHE_ENTRY NCE)
Definition: transmit.c:223
uint32_t * PULONG
Definition: typedefs.h:59
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
uint32_t ULONG
Definition: typedefs.h:59
char * PCHAR
Definition: typedefs.h:51
_In_ ULONG TotalLength
Definition: usbdlib.h:158
_Must_inspect_result_ _In_ ULONG _In_ PSOCKADDR LocalAddress
Definition: wsk.h:171
_Must_inspect_result_ _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR RemoteAddress
Definition: wsk.h:172