tcpmisc.h:
- Correct wrongly sized struct IPAddrEntry.
dhcp: dhclient.c and dispatch.c
- remove lots of #if 0
- remove instances of script_go and associated stuff
- write stub check_arp pending ARP api functions being implemented
- introduced S_STATIC state for adapters
dhcp: api.c:
- Do add_protocol and send_discover when telling an adapter to lease.
- Do remove_protocol when we make an adapter static.
dhcp: adapter.c:
- Add infrastructure for finding the adapter key in the registry
- Check for IP address settings and apply as static if set, otherwise
dynamic
tcpip: *info and lan:
- Set info types to DEBUG_INFO and DEBUG_DATALINK everywhere
tcpip: lan:
- Remove kernel IP configuration.
bootdata:
- Added dhcp service and make it start.
- Removed static IP address settings from the default configuration
- Removed old JS bootcode
Modified: trunk/reactos/bootdata/hivesft.inf
Modified: trunk/reactos/bootdata/hivesys.inf
Modified: trunk/reactos/bootdata/packages/reactos.dff
Modified: trunk/reactos/drivers/lib/ip/network/loopback.c
Modified: trunk/reactos/drivers/net/tcpip/datalink/lan.c
Modified: trunk/reactos/drivers/net/tcpip/include/debug.h
Modified: trunk/reactos/drivers/net/tcpip/tcpip/iinfo.c
Modified: trunk/reactos/drivers/net/tcpip/tcpip/info.c
Modified: trunk/reactos/drivers/net/tcpip/tcpip/ninfo.c
Modified: trunk/reactos/subsys/system/dhcp/Makefile
Modified: trunk/reactos/subsys/system/dhcp/adapter.c
Modified: trunk/reactos/subsys/system/dhcp/api.c
Modified: trunk/reactos/subsys/system/dhcp/dhclient.c
Modified: trunk/reactos/subsys/system/dhcp/dispatch.c
Modified: trunk/reactos/subsys/system/dhcp/include/dhcpd.h
Modified: trunk/reactos/subsys/system/dhcp/include/rosdhcp.h
_____
Modified: trunk/reactos/bootdata/hivesft.inf
--- trunk/reactos/bootdata/hivesft.inf 2005-04-22 09:19:18 UTC (rev
14736)
+++ trunk/reactos/bootdata/hivesft.inf 2005-04-22 09:45:17 UTC (rev
14737)
@@ -725,8 +725,8 @@
0x00,0x00,0x0a,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x
00,0x00
-;HKLM,"SOFTWARE\ReactOS\Windows
NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\system32\cm
d.exe"
-HKLM,"SOFTWARE\ReactOS\Windows
NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\explorer.ex
e"
+HKLM,"SOFTWARE\ReactOS\Windows
NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\system32\cm
d.exe"
+;HKLM,"SOFTWARE\ReactOS\Windows
NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\explorer.ex
e"
HKLM,"SOFTWARE\ReactOS\Windows
NT\CurrentVersion\Winlogon","StartServices",0x00010001,0x00000001
HKLM,"SOFTWARE\ReactOS\Windows
NT\CurrentVersion\Winlogon","StartGUI",0x00010001,0x00000000
HKLM,"SOFTWARE\ReactOS\Windows
NT\CurrentVersion\Winlogon","Userinit",0x00020000,"%SystemRoot%\system32
\userinit.exe"
_____
Modified: trunk/reactos/bootdata/hivesys.inf
--- trunk/reactos/bootdata/hivesys.inf 2005-04-22 09:19:18 UTC (rev
14736)
+++ trunk/reactos/bootdata/hivesys.inf 2005-04-22 09:45:17 UTC (rev
14737)
@@ -293,9 +293,9 @@
HKLM,"SYSTEM\CurrentControlSet\Services\3c90x1\Linkage","Route",0x000100
00,"3c90x1"
HKLM,"SYSTEM\CurrentControlSet\Services\3c90x1\Parameters","SlotNumber",
0x00000000,"10"
HKLM,"SYSTEM\CurrentControlSet\Services\3c90x1\Parameters","BusNumber",0
x00000000,"0"
-HKLM,"SYSTEM\CurrentControlSet\Services\3c90x1\Parameters\Tcpip","Defau
ltGateway",0x00010000,"10.0.0.1"
-HKLM,"SYSTEM\CurrentControlSet\Services\3c90x1\Parameters\Tcpip","IPAdd
ress",0x00010000,"10.0.0.100"
-HKLM,"SYSTEM\CurrentControlSet\Services\3c90x1\Parameters\Tcpip","Subne
tMask",0x00010000,"255.255.255.0"
+HKLM,"SYSTEM\CurrentControlSet\Services\3c90x1\Parameters\Tcpip","Defau
ltGateway",0x00010000,"0.0.0.0"
+HKLM,"SYSTEM\CurrentControlSet\Services\3c90x1\Parameters\Tcpip","IPAdd
ress",0x00010000,"0.0.0.0"
+HKLM,"SYSTEM\CurrentControlSet\Services\3c90x1\Parameters\Tcpip","Subne
tMask",0x00010000,"0.0.0.0"
; Afd driver
HKLM,"SYSTEM\CurrentControlSet\Services\Afd","ErrorControl",0x00010001,0
x00000001
@@ -446,6 +446,13 @@
HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","Start",0x00010001,0x0
0000002
HKLM,"SYSTEM\CurrentControlSet\Services\EventLog","Type",0x00010001,0x00
000010
+; DHCP client service
+HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","ErrorControl",0x00010001
,0x00000000
+HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","Group",0x00000000,"Netwo
rk"
+HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","ImagePath",0x00020000,"%
SystemRoot%\system32\dhcp.exe"
+HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","Start",0x00010001,0x0000
0002
+HKLM,"SYSTEM\CurrentControlSet\Services\DHCP","Type",0x00010001,0x00000
010
+
; Floppy driver
HKLM,"SYSTEM\CurrentControlSet\Services\Floppy","ErrorControl",0x0001000
1,0x00000000
HKLM,"SYSTEM\CurrentControlSet\Services\Floppy","Group",0x00000000,"Prim
ary Disk"
@@ -572,9 +579,9 @@
HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08
002BE10318}\0001","Port",0x00000000,"280"
HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08
002BE10318}\0001","Irq",0x00000000,"9"
HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08
002BE10318}\0001","NetworkAddress",0x00000000,"001122334455"
-HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Parameters\Tcpip","Defa
ultGateway",0x00010000,"10.0.0.1"
-HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Parameters\Tcpip","IPAd
dress",0x00010000,"10.0.0.100"
-HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Parameters\Tcpip","Subn
etMask",0x00010000,"255.255.255.0"
+HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Parameters\Tcpip","Defa
ultGateway",0x00010000,"0.0.0.0"
+HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Parameters\Tcpip","IPAd
dress",0x00010000,"0.0.0.0"
+HKLM,"SYSTEM\CurrentControlSet\Services\Ne20001\Parameters\Tcpip","Subn
etMask",0x00010000,"0.0.0.0"
; one day this will happen automatically; until then we need this since
ndis5 drivers
; rely on the fact that their resources are handed to them by ndis, so
we have to find
@@ -663,9 +670,9 @@
HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08
002BE10318}\0000","BusNumber",0x00000000,"0"
HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-
08002BE10318}\{RANDOMCFGGUIDFOR_PCNET1}",,0x00000000,"Network Adapters"
HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-
08002BE10318}\{RANDOMCFGGUIDFOR_PCNET1}\Connection","Name",0x00000000,"A
MD PCNet (static Registry entry)"
-HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters\Tcpip","Defau
ltGateway",0x00010000,"10.0.0.1"
-HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters\Tcpip","IPAdd
ress",0x00010000,"10.0.0.100"
-HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters\Tcpip","Subne
tMask",0x00010000,"255.255.255.0"
+HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters\Tcpip","Defau
ltGateway",0x00010000,"0.0.0.0"
+HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters\Tcpip","IPAdd
ress",0x00010000,"0.0.0.0"
+HKLM,"SYSTEM\CurrentControlSet\Services\PCNet1\Parameters\Tcpip","Subne
tMask",0x00010000,"0.0.0.0"
; Named Pipe filesystem driver
HKLM,"SYSTEM\CurrentControlSet\Services\Npfs","ErrorControl",0x00010001,
0x00000000
@@ -867,100 +874,4 @@
HKLM,"SYSTEM\Setup","SetupType",0x00010001,0x00000001
HKLM,"SYSTEM\Setup","SystemPartition",0x00000000,"\Device\Harddisk0\Part
ition1"
HKLM,"SYSTEM\Setup","SystemSetupInProgress",0x00010001,0x00000000
-
-; ----------------------------- KJS Init ----------------------------
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","kjsinit",0x00010000,\
-"function init(v) { var rk =
'\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Kdb';
eval(System.regread(rk,v)); } for( i = 1; i <= 45; i++ ) { init((new
Number(i)).toString()); }"
-
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","1",0x00010000,\
-"function write(x) { System.print(x); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","2",0x00010000,\
-"function regs(n) { return System.regs(n); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","3",0x00010000,\
-"function debugebp() { return regs(0); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","4",0x00010000,\
-"function debugeip() { return regs(1); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","5",0x00010000,\
-"function tf_argmark() { return regs(2); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","6",0x00010000,\
-"function tf_pointer() { return regs(3); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","7",0x00010000,\
-"function tf_tempcs() { return regs(4); } "
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","8",0x00010000,\
-"function tf_tempeip() { return regs(5); } "
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","9",0x00010000,\
-"function dr0() { return regs(6); } "
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","10",0x00010000,\
-"function dr1() { return regs(7); } "
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","11",0x00010000,\
-"function dr2() { return regs(8); } "
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","12",0x00010000,\
-"function dr3() { return regs(9); } "
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","13",0x00010000,\
-"function dr6() { return regs(10); } "
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","14",0x00010000,\
-"function dr7() { return regs(11); } "
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","15",0x00010000,\
-"function gs() { return regs(12) & 0xffff; }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","16",0x00010000,\
-"function es() { return regs(13) & 0xffff; }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","17",0x00010000,\
-"function ds() { return regs(14) & 0xffff; }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","18",0x00010000,\
-"function edx() { return regs(15); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","19",0x00010000,\
-"function ecx() { return regs(16); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","20",0x00010000,\
-"function eax() { return regs(17); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","21",0x00010000,\
-"function tf_pmode() { return regs(18); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","22",0x00010000,\
-"function tf_exl() { return regs(19); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","23",0x00010000,\
-"function fs() { return regs(20) & 0xffff; }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","24",0x00010000,\
-"function edi() { return regs(21); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","25",0x00010000,\
-"function esi() { return regs(22); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","26",0x00010000,\
-"function ebx() { return regs(23); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","27",0x00010000,\
-"function ebp() { return regs(24); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","28",0x00010000,\
-"function error_code() { return regs(25); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","29",0x00010000,\
-"function eip() { return regs(26); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","30",0x00010000,\
-"function cs() { return regs(27) & 0xffff; }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","31",0x00010000,\
-"function eflags() { return regs(28); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","32",0x00010000,\
-"function esp() { return regs(29); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","33",0x00010000,\
-"function ss() { return regs(30) & 0xffff; }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","34",0x00010000,\
-"function v86_es() { return regs(31) & 0xffff; }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","35",0x00010000,\
-"function v86_ds() { return regs(32) & 0xffff; }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","36",0x00010000,\
-"function v86_fs() { return regs(33) & 0xffff; }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","37",0x00010000,\
-"function v86_gs() { return regs(34) & 0xffff; }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","38",0x00010000,\
-"function peekl(a) { return System.mread(4,a); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","39",0x00010000,\
-"function pokel(a,b) { return System.mwrite(4,a,b); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","40",0x00010000,\
-"function peekw(a) { return System.mread(2,a); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","41",0x00010000,\
-"function pokew(a,b) { return System.mwrite(2,a,b); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","42",0x00010000,\
-"function peek(a) { return System.mread(1,a); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","43",0x00010000,\
-"function poke(a,b) { return System.mwrite(1,a,b); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","44",0x00010000,\
-"function regread(x,y) { return System.regread(x,y); }"
-HKLM,"SYSTEM\CurrentControlSet\Control\Kdb","45",0x00010000,\
-"write('JS Registry Init Complete. Welcome to ReactOS kernel
scripting');"
-
; EOF
_____
Modified: trunk/reactos/bootdata/packages/reactos.dff
--- trunk/reactos/bootdata/packages/reactos.dff 2005-04-22 09:19:18 UTC
(rev 14736)
+++ trunk/reactos/bootdata/packages/reactos.dff 2005-04-22 09:45:17 UTC
(rev 14737)
@@ -167,6 +167,7 @@
subsys\system\vmwinst\vmwinst.exe 1
subsys\system\winlogon\winlogon.exe 1
subsys\system\winefile\winefile.exe 1
+subsys\system\dhcp\dhcp.exe 1
services\eventlog\eventlog.exe 1
services\rpcss\rpcss.exe 1
services\umpnpmgr\umpnpmgr.exe 1
_____
Modified: trunk/reactos/drivers/lib/ip/network/loopback.c
--- trunk/reactos/drivers/lib/ip/network/loopback.c 2005-04-22
09:19:18 UTC (rev 14736)
+++ trunk/reactos/drivers/lib/ip/network/loopback.c 2005-04-22
09:45:17 UTC (rev 14737)
@@ -189,6 +189,10 @@
Loopback = IPCreateInterface(&BindInfo);
+ Loopback->Name.Buffer = L"Loopback";
+ Loopback->Name.MaximumLength = Loopback->Name.Length =
+ wcslen(Loopback->Name.Buffer) * sizeof(WCHAR);
+
AddrInitIPv4(&Loopback->Unicast, LOOPBACK_ADDRESS_IPv4);
AddrInitIPv4(&Loopback->Netmask, LOOPBACK_ADDRMASK_IPv4);
_____
Modified: trunk/reactos/drivers/net/tcpip/datalink/lan.c
--- trunk/reactos/drivers/net/tcpip/datalink/lan.c 2005-04-22
09:19:18 UTC (rev 14736)
+++ trunk/reactos/drivers/net/tcpip/datalink/lan.c 2005-04-22
09:45:17 UTC (rev 14737)
@@ -366,6 +366,8 @@
PLAN_ADAPTER Adapter = (PLAN_ADAPTER)BindingContext;
KIRQL OldIrql;
+ TI_DbgPrint(DEBUG_DATALINK,("called\n"));
+
TcpipAcquireSpinLock( &LanWorkLock, &OldIrql );
WQItem = ExAllocatePool( NonPagedPool, sizeof(LAN_WQ_ITEM) );
@@ -408,6 +410,8 @@
{
ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+ TI_DbgPrint(DEBUG_DATALINK,("called\n"));
+
TransferDataCompleteCalled++;
ASSERT(TransferDataCompleteCalled <= TransferDataCalled);
@@ -736,59 +740,6 @@
return Status;
}
-static NTSTATUS ReadIPAddressFromRegistry( HANDLE RegHandle,
- PWCHAR RegistryValue,
- PIP_ADDRESS Address ) {
- UNICODE_STRING ValueName;
- UNICODE_STRING UnicodeAddress;
- NTSTATUS Status;
- ULONG ResultLength;
- UCHAR buf[1024];
- PKEY_VALUE_PARTIAL_INFORMATION Information =
(PKEY_VALUE_PARTIAL_INFORMATION)buf;
- ANSI_STRING AnsiAddress;
- ULONG AnsiLen;
-
- RtlInitUnicodeString(&ValueName, RegistryValue);
- Status =
- ZwQueryValueKey(RegHandle,
- &ValueName,
- KeyValuePartialInformation,
- Information,
- sizeof(buf),
- &ResultLength);
-
- if (!NT_SUCCESS(Status))
- return Status;
- /* IP address is stored as a REG_MULTI_SZ - we only pay attention
to the first one though */
- TI_DbgPrint(MIN_TRACE, ("Information DataLength: 0x%x\n",
Information->DataLength));
-
- UnicodeAddress.Buffer = (PWCHAR)&Information->Data;
- UnicodeAddress.Length = Information->DataLength;
- UnicodeAddress.MaximumLength = Information->DataLength;
-
- AnsiLen = RtlUnicodeStringToAnsiSize(&UnicodeAddress);
- if(!AnsiLen)
- return STATUS_NO_MEMORY;
-
- AnsiAddress.Buffer = exAllocatePoolWithTag(PagedPool, AnsiLen,
0x01020304);
- if(!AnsiAddress.Buffer)
- return STATUS_NO_MEMORY;
-
- AnsiAddress.Length = AnsiLen;
- AnsiAddress.MaximumLength = AnsiLen;
-
- Status = RtlUnicodeStringToAnsiString(&AnsiAddress,
&UnicodeAddress, FALSE);
- if (!NT_SUCCESS(Status)) {
- exFreePool(AnsiAddress.Buffer);
- return STATUS_UNSUCCESSFUL;
- }
-
- AnsiAddress.Buffer[AnsiAddress.Length] = 0;
- AddrInitIPv4(Address, inet_addr(AnsiAddress.Buffer));
-
- return STATUS_SUCCESS;
-}
-
static NTSTATUS ReadStringFromRegistry( HANDLE RegHandle,
PWCHAR RegistryValue,
PUNICODE_STRING String ) {
@@ -1001,7 +952,7 @@
PIP_INTERFACE IF;
NDIS_STATUS NdisStatus;
LLIP_BIND_INFO BindInfo;
- IP_ADDRESS DefaultGateway, DefaultMask = { 0 };
+ IP_ADDRESS DefaultMask = { 0 };
ULONG Lookahead = LOOKAHEAD_SIZE;
NTSTATUS Status;
HANDLE RegHandle = 0;
@@ -1055,20 +1006,10 @@
TI_DbgPrint(DEBUG_DATALINK,("Adapter Name: %wZ\n", &IF->Name));
}
- if(NT_SUCCESS(Status))
- Status = ReadIPAddressFromRegistry( RegHandle,
L"DefaultGateway",
- &DefaultGateway );
- if(!NT_SUCCESS(Status)) {
- Status = STATUS_SUCCESS;
- RtlZeroMemory( &DefaultGateway, sizeof(DefaultGateway) );
- }
+ DefaultMask.Type = IP_ADDRESS_V4;
- if(NT_SUCCESS(Status))
- Status = ReadIPAddressFromRegistry( RegHandle, L"IPAddress",
- &IF->Unicast );
- if(NT_SUCCESS(Status))
- Status = ReadIPAddressFromRegistry( RegHandle, L"SubnetMask",
- &IF->Netmask );
+ IF->Unicast = DefaultMask;
+ IF->Netmask = DefaultMask;
IF->Broadcast.Type = IP_ADDRESS_V4;
IF->Broadcast.Address.IPv4Address =
@@ -1077,33 +1018,6 @@
TI_DbgPrint(DEBUG_DATALINK,("BCAST(IF) %s\n",
A2S(&IF->Broadcast)));
- if(NT_SUCCESS(Status)) {
- /* It's ok to fail some of the above. We'll just use DHCP. */
- TI_DbgPrint
- (DEBUG_DATALINK,
- ("--> Our IP address on this interface: '%s'\n",
- A2S(&IF->Unicast)));
-
- TI_DbgPrint
- (DEBUG_DATALINK,
- ("--> Our net mask on this interface: '%s'\n",
- A2S(&IF->Netmask)));
-
- if( DefaultGateway.Address.IPv4Address ) {
- TI_DbgPrint
- (DEBUG_DATALINK,
- ("--> Our gateway is: '%s'\n",
- A2S(&DefaultGateway)));
-
- /* Create a default route */
- RouterCreateRoute( &DefaultMask, /* Zero */
- &DefaultMask, /* Zero */
- &DefaultGateway,
- IF,
- 1 );
- }
- }
-
/* Get maximum link speed */
NdisStatus = NDISCall(Adapter,
NdisRequestQueryInformation,
_____
Modified: trunk/reactos/drivers/net/tcpip/include/debug.h
--- trunk/reactos/drivers/net/tcpip/include/debug.h 2005-04-22
09:19:18 UTC (rev 14736)
+++ trunk/reactos/drivers/net/tcpip/include/debug.h 2005-04-22
09:45:17 UTC (rev 14737)
@@ -32,6 +32,7 @@
#define DEBUG_NCACHE 0x00400000
#define DEBUG_CPOINT 0x00800000
#define DEBUG_LOCK 0x01000000
+#define DEBUG_INFO 0x02000000
#define DEBUG_ULTRA 0xFFFFFFFF
#ifdef DBG
_____
Modified: trunk/reactos/drivers/net/tcpip/tcpip/iinfo.c
--- trunk/reactos/drivers/net/tcpip/tcpip/iinfo.c 2005-04-22
09:19:18 UTC (rev 14736)
+++ trunk/reactos/drivers/net/tcpip/tcpip/iinfo.c 2005-04-22
09:45:17 UTC (rev 14737)
@@ -21,7 +21,7 @@
ULONG Size;
UINT DescrLenMax = MAX_IFDESCR_LEN - 1;
- TI_DbgPrint(MAX_TRACE,
+ TI_DbgPrint(DEBUG_INFO,
("Getting IFEntry MIB (IF %08x LA %08x) (%04x:%d)\n",
Interface, IF, ID->tei_entity, ID->tei_instance));
@@ -38,7 +38,7 @@
OutData->Type = Interface ==
Loopback ? MIB_IF_TYPE_LOOPBACK : MIB_IF_TYPE_ETHERNET;
OutData->Mtu = Interface->MTU;
- TI_DbgPrint(MAX_TRACE,
+ TI_DbgPrint(DEBUG_INFO,
("Getting interface speed\n"));
OutData->PhysAddrLen = Interface->AddressLength;
OutData->AdminStatus = MIB_IF_ADMIN_STATUS_UP;
@@ -53,27 +53,28 @@
if( IF ) {
GetInterfaceSpeed( Interface, (PUINT)&OutData->Speed );
- TI_DbgPrint(MAX_TRACE,
+ TI_DbgPrint(DEBUG_INFO,
("IF Speed = %d * 100bps\n", OutData->Speed));
memcpy(OutData->PhysAddr,Interface->Address,Interface->AddressLength);
- TI_DbgPrint(MAX_TRACE, ("Got HWAddr\n"));
- GetInterfaceName( Interface, IFDescr, MAX_IFDESCR_LEN - 1 );
- DescrLenMax = strlen( IFDescr ) + 1;
+ TI_DbgPrint(DEBUG_INFO, ("Got HWAddr\n"));
}
- IFDescr[DescrLenMax] = 0; /* Terminate ifdescr string */
+ GetInterfaceName( Interface, IFDescr, MAX_IFDESCR_LEN - 1 );
+ DescrLenMax = strlen( IFDescr ) + 1;
- TI_DbgPrint(MAX_TRACE, ("Copied in name %s\n", IFDescr));
+ TI_DbgPrint(DEBUG_INFO, ("Copied in name %s\n", IFDescr));
OutData->DescrLen = DescrLenMax;
IFDescr += DescrLenMax;
Size = IFDescr - (PCHAR)OutData + 1;
- TI_DbgPrint(MAX_TRACE, ("Finished IFEntry MIB (%04x:%d) size %d\n",
+ TI_DbgPrint(DEBUG_INFO, ("Finished IFEntry MIB (%04x:%d) size
%d\n",
ID->tei_entity, ID->tei_instance, Size));
Status = InfoCopyOut( (PCHAR)OutData, Size, Buffer, BufferSize );
ExFreePool( OutData );
+ TI_DbgPrint(DEBUG_INFO,("Returning %x\n", Status));
+
return Status;
}
@@ -104,7 +105,7 @@
TDIEntityID *id,
PCHAR Buffer,
UINT BufferSize ) {
- TI_DbgPrint(MAX_TRACE, ("Got Request: Class %x Type %x Id %x,
EntityID %x:%x\n",
+ TI_DbgPrint(DEBUG_INFO, ("Got Request: Class %x Type %x Id %x,
EntityID %x:%x\n",
InfoClass, InfoId, id->tei_entity, id->tei_instance));
return TDI_INVALID_REQUEST;
}
_____
Modified: trunk/reactos/drivers/net/tcpip/tcpip/info.c
--- trunk/reactos/drivers/net/tcpip/tcpip/info.c 2005-04-22
09:19:18 UTC (rev 14736)
+++ trunk/reactos/drivers/net/tcpip/tcpip/info.c 2005-04-22
09:45:17 UTC (rev 14737)
@@ -28,7 +28,7 @@
KIRQL OldIrql;
UINT Count = 0, i;
- TI_DbgPrint(MAX_TRACE,
+ TI_DbgPrint(DEBUG_INFO,
("Inserting interface %08x (%d entities already)\n",
Interface, EntityCount));
@@ -38,7 +38,7 @@
for( i = 0; i < EntityCount; i++ )
if( EntityList[i].tei_entity == IF_ENTITY ) {
Count++;
- TI_DbgPrint(MAX_TRACE, ("Entity %d is an IF. Found %d\n",
+ TI_DbgPrint(DEBUG_INFO, ("Entity %d is an IF. Found %d\n",
i, Count));
}
@@ -80,7 +80,7 @@
UINT Count, Size, BufSize = *BufferSize;
KIRQL OldIrql;
- TI_DbgPrint(MAX_TRACE,("About to copy %d TDIEntityIDs to user\n",
+ TI_DbgPrint(DEBUG_INFO,("About to copy %d TDIEntityIDs to user\n",
EntityCount));
TcpipAcquireSpinLock(&EntityListLock, &OldIrql);
@@ -134,7 +134,7 @@
BOOL FoundEntity = FALSE;
InfoRequest_f InfoRequest = NULL;
- TI_DbgPrint(MAX_TRACE,
+ TI_DbgPrint(DEBUG_INFO,
("InfoEx Req: %x %x %x!%04x:%d\n",
ID->toi_class,
ID->toi_type,
@@ -148,7 +148,7 @@
if ((ID->toi_class != INFO_CLASS_GENERIC) ||
(ID->toi_type != INFO_TYPE_PROVIDER) ||
(ID->toi_id != ENTITY_LIST_ID)) {
- TI_DbgPrint(MAX_TRACE,("Invalid parameter\n"));
+ TI_DbgPrint(DEBUG_INFO,("Invalid parameter\n"));
Status = TDI_INVALID_PARAMETER;
} else
Status = InfoTdiQueryListEntities(Buffer, BufferSize);
@@ -168,7 +168,7 @@
TcpipReleaseSpinLock( &EntityListLock, OldIrql );
if( FoundEntity ) {
- TI_DbgPrint(MAX_TRACE,
+ TI_DbgPrint(DEBUG_INFO,
("Calling Entity %d (%04x:%d) InfoEx
(%x,%x,%x)\n",
i, ID->toi_entity.tei_entity,
ID->toi_entity.tei_instance,
@@ -183,7 +183,7 @@
}
}
- TI_DbgPrint(MAX_TRACE,("Status: %08x\n", Status));
+ TI_DbgPrint(DEBUG_INFO,("Status: %08x\n", Status));
return Status;
}
_____
Modified: trunk/reactos/drivers/net/tcpip/tcpip/ninfo.c
--- trunk/reactos/drivers/net/tcpip/tcpip/ninfo.c 2005-04-22
09:19:18 UTC (rev 14736)
+++ trunk/reactos/drivers/net/tcpip/tcpip/ninfo.c 2005-04-22
09:45:17 UTC (rev 14737)
@@ -25,7 +25,7 @@
ExAllocatePool( NonPagedPool, sizeof( IPADDR_ENTRY ) * IfCount
);
PIPADDR_ENTRY IpCurrent = IpAddress;
- TI_DbgPrint(MAX_TRACE, ("Called.\n"));
+ TI_DbgPrint(DEBUG_INFO, ("Called.\n"));
TcpipAcquireSpinLock(&InterfaceListLock, &OldIrql);
@@ -56,7 +56,7 @@
ExFreePool( IpAddress );
- TI_DbgPrint(MAX_TRACE, ("Returning %08x\n", Status));
+ TI_DbgPrint(DEBUG_INFO, ("Returning %08x\n", Status));
return Status;
}
@@ -73,7 +73,7 @@
PIPROUTE_ENTRY RouteEntries = ExAllocatePool( NonPagedPool, Size ),
RtCurrent = RouteEntries;
- TI_DbgPrint(MAX_TRACE, ("Called, routes = %d, RCache = %08x\n",
+ TI_DbgPrint(DEBUG_INFO, ("Called, routes = %d, RCache = %08x\n",
RtCount, RCache));
if( !RCache || !RouteEntries ) {
@@ -106,7 +106,7 @@
RtCurrent->Type = TDI_ADDRESS_TYPE_IP;
TI_DbgPrint
- (MAX_TRACE,
+ (DEBUG_INFO,
("%d: NA %08x NM %08x GW %08x MT %x\n",
RtCurrent - RouteEntries,
RtCurrent->Dest,
@@ -132,7 +132,7 @@
ExFreePool( RouteEntries );
ExFreePool( RCache );
- TI_DbgPrint(MAX_TRACE, ("Returning %08x\n", Status));
+ TI_DbgPrint(DEBUG_INFO, ("Returning %08x\n", Status));
return Status;
}
@@ -144,7 +144,7 @@
UINT RouteCount = CountFIBs( NULL );
TDI_STATUS Status = TDI_INVALID_REQUEST;
- TI_DbgPrint(MAX_TRACE, ("Called.\n"));
+ TI_DbgPrint(DEBUG_INFO, ("Called.\n"));
RtlZeroMemory(&SnmpInfo, sizeof(IPSNMP_INFO));
@@ -155,7 +155,7 @@
Status = InfoCopyOut( (PCHAR)&SnmpInfo, sizeof(SnmpInfo),
Buffer, BufferSize );
- TI_DbgPrint(MAX_TRACE, ("Returning %08x\n", Status));
+ TI_DbgPrint(DEBUG_INFO, ("Returning %08x\n", Status));
return Status;
}
@@ -169,7 +169,7 @@
PUINT BufferSize ) {
TDI_STATUS Status = TDI_INVALID_REQUEST;
- TI_DbgPrint(MAX_TRACE, ("Called.\n"));
+ TI_DbgPrint(DEBUG_INFO, ("Called.\n"));
switch( InfoClass ) {
case INFO_CLASS_GENERIC:
@@ -200,7 +200,7 @@
}
}
- TI_DbgPrint(MAX_TRACE, ("Returning %08x\n", Status));
+ TI_DbgPrint(DEBUG_INFO, ("Returning %08x\n", Status));
return Status;
}
@@ -218,7 +218,7 @@
IP_ADDRESS Router;
PNEIGHBOR_CACHE_ENTRY NCE;
- TI_DbgPrint(MID_TRACE,("Called\n"));
+ TI_DbgPrint(DEBUG_INFO,("Called\n"));
OskitDumpBuffer( (OSK_PCHAR)Buffer, BufferSize );
@@ -232,7 +232,7 @@
AddrInitIPv4( &Router, Route->Gw );
if( Route->Type == IP_ROUTE_TYPE_ADD ) { /* Add the route */
- TI_DbgPrint(MID_TRACE,("Adding route (%s)\n",
A2S(&Address)));
+ TI_DbgPrint(DEBUG_INFO,("Adding route (%s)\n",
A2S(&Address)));
/* Find the existing route this belongs to */
NCE = RouterGetRoute( &Router );
/* Really add the route */
@@ -243,12 +243,12 @@
else
Status = STATUS_UNSUCCESSFUL;
} else if( Route->Type == IP_ROUTE_TYPE_DEL ) {
- TI_DbgPrint(MID_TRACE,("Removing route (%s)\n",
A2S(&Address)));
+ TI_DbgPrint(DEBUG_INFO,("Removing route (%s)\n",
A2S(&Address)));
Status = RouterRemoveRoute( &Address, &Router );
} else Status = TDI_INVALID_REQUEST;
}
- TI_DbgPrint(MID_TRACE,("Returning %x\n", Status));
+ TI_DbgPrint(DEBUG_INFO,("Returning %x\n", Status));
return Status;
}
_____
Modified: trunk/reactos/subsys/system/dhcp/Makefile
--- trunk/reactos/subsys/system/dhcp/Makefile 2005-04-22 09:19:18 UTC
(rev 14736)
+++ trunk/reactos/subsys/system/dhcp/Makefile 2005-04-22 09:45:17 UTC
(rev 14737)
@@ -16,6 +16,8 @@
TARGET_SDKLIBS = iphlpapi.a ws2_32.a ntdll.a
+TARGET_INSTALLDIR = system32
+
TARGET_RC_SRCS = dhcp.rc
TARGET_RC_BINSRC =
_____
Modified: trunk/reactos/subsys/system/dhcp/adapter.c
--- trunk/reactos/subsys/system/dhcp/adapter.c 2005-04-22 09:19:18 UTC
(rev 14736)
+++ trunk/reactos/subsys/system/dhcp/adapter.c 2005-04-22 09:45:17 UTC
(rev 14737)
@@ -5,34 +5,212 @@
static WSADATA wsd;
extern struct interface_info *ifi;
-DWORD GetAddress( PDHCP_ADAPTER Adapter ) {
- PMIB_IPADDRTABLE AddressTable = NULL;
- ULONG i, Size = 0, NumAddressRows;
- DWORD Error = GetIpAddrTable( AddressTable, &Size, FALSE );
+PCHAR *GetSubkeyNames( PCHAR MainKeyName, PCHAR Append ) {
+ int i = 0;
+ DWORD Error;
+ HKEY MainKey;
+ PCHAR *Out, OutKeyName;
+ DWORD CharTotal = 0, ThisKey, AppendLen = 1 + strlen(Append);
+ DWORD MaxSubKeyLen = 0, MaxSubKeys = 0;
- while( Error == ERROR_INSUFFICIENT_BUFFER ) {
- free( AddressTable );
- AddressTable = malloc( Size );
- if( AddressTable )
- Error = GetIpAddrTable( AddressTable, &Size, FALSE );
+ Error = RegOpenKey( HKEY_LOCAL_MACHINE, MainKeyName, &MainKey );
+
+ if( Error ) return NULL;
+
+ Error = RegQueryInfoKey
+ ( MainKey,
+ NULL, NULL, NULL,
+ &MaxSubKeys, &MaxSubKeyLen,
+ NULL, NULL, NULL, NULL, NULL, NULL );
+
+ DH_DbgPrint(MID_TRACE,("MaxSubKeys: %d, MaxSubKeyLen %d\n",
+ MaxSubKeys, MaxSubKeyLen));
+
+ CharTotal = (sizeof(PCHAR) + MaxSubKeyLen + AppendLen) *
(MaxSubKeys + 1);
+
+ DH_DbgPrint(MID_TRACE,("AppendLen: %d, CharTotal: %d\n",
+ AppendLen, CharTotal));
+
+ Out = malloc( CharTotal );
+ OutKeyName = ((PCHAR)&Out[MaxSubKeys+1]);
+
+ if( !Out ) { RegCloseKey( MainKey ); return NULL; }
+
+ i = 0;
+ do {
+ Out[i] = OutKeyName;
+ Error = RegEnumKey( MainKey, i, OutKeyName, MaxSubKeyLen );
+ if( !Error ) {
+ strcat( OutKeyName, Append );
+ DH_DbgPrint(MID_TRACE,("[%d]: %s\n", i, OutKeyName));
+ OutKeyName += strlen(OutKeyName) + 1;
+ i++;
+ } else Out[i] = 0;
+ } while( Error == ERROR_SUCCESS );
+
+ RegCloseKey( MainKey );
+
+ return Out;
+}
+
+PCHAR RegReadString( HKEY Root, PCHAR Subkey, PCHAR Value ) {
+ PCHAR SubOut = NULL;
+ DWORD SubOutLen = 0, Error = 0;
+ HKEY ValueKey = NULL;
+
+ DH_DbgPrint(MID_TRACE,("Looking in %x:%s:%s\n", Root, Subkey, Value
));
+
+ if( Subkey && strlen(Subkey) ) {
+ if( RegOpenKey( Root, Subkey, &ValueKey ) != ERROR_SUCCESS )
+ goto regerror;
+ } else ValueKey = Root;
+
+ DH_DbgPrint(MID_TRACE,("Got Key %x\n", ValueKey));
+
+ if( (Error = RegQueryValueEx( ValueKey, Value, NULL, NULL,
+ SubOut, &SubOutLen )) !=
ERROR_SUCCESS )
+ goto regerror;
+
+ DH_DbgPrint(MID_TRACE,("Value %s has size %d\n", Value,
SubOutLen));
+
+ if( !(SubOut = malloc(SubOutLen)) )
+ goto regerror;
+
+ if( (Error = RegQueryValueEx( ValueKey, Value, NULL, NULL,
+ SubOut, &SubOutLen )) !=
ERROR_SUCCESS )
+ goto regerror;
+
+ DH_DbgPrint(MID_TRACE,("Value %s is %s\n", Value, SubOut));
+
+ goto cleanup;
+
+regerror:
+ if( SubOut ) free( SubOut );
+cleanup:
+ if( ValueKey && ValueKey != Root ) {
+ DH_DbgPrint(MID_TRACE,("Closing key %x\n", ValueKey));
+ RegCloseKey( ValueKey );
}
- if( Error != ERROR_SUCCESS ) {
- free( AddressTable );
- return Error;
+
+ DH_DbgPrint(MID_TRACE,("Returning %x with error %d\n", SubOut,
Error));
+
+ return SubOut;
+}
+
+HKEY FindAdapterKey( PDHCP_ADAPTER Adapter ) {
+ int i = 0;
+ PCHAR EnumKeyName =
+ "SYSTEM\\CurrentControlSet\\Control\\Class\\"
+ "{4D36E972-E325-11CE-BFC1-08002BE10318}";
+ PCHAR TargetKeyNameStart =
+ "SYSTEM\\CurrentControlSet\\Services\\";
+ PCHAR TargetKeyNameEnd = "\\Parameters\\Tcpip";
+ PCHAR TargetKeyName = NULL;
+ PCHAR *EnumKeysLinkage = GetSubkeyNames( EnumKeyName, "\\Linkage"
);
+ PCHAR *EnumKeysTop = GetSubkeyNames( EnumKeyName, "" );
+ PCHAR RootDevice = NULL, DriverDesc = NULL;
+ HKEY EnumKey, OutKey = NULL;
+ DWORD Error = ERROR_SUCCESS;
+
+ if( !EnumKeysLinkage || !EnumKeysTop ) goto cleanup;
+
+ Error = RegOpenKey( HKEY_LOCAL_MACHINE, EnumKeyName, &EnumKey );
+
+ if( Error ) goto cleanup;
+
+ for( i = 0; EnumKeysLinkage[i]; i++ ) {
+ RootDevice = RegReadString
+ ( EnumKey, EnumKeysLinkage[i], "RootDevice" );
+ DriverDesc = RegReadString
+ ( EnumKey, EnumKeysTop[i], "DriverDesc" );
+
+ if( DriverDesc &&
+ !strcmp( DriverDesc, Adapter->DhclientInfo.name ) ) {
+ TargetKeyName =
+ malloc( strlen( TargetKeyNameStart ) +
+ strlen( RootDevice ) +
+ strlen( TargetKeyNameEnd ) + 1 );
+ if( !TargetKeyName ) goto cleanup;
+ sprintf( TargetKeyName, "%s%s%s",
+ TargetKeyNameStart, RootDevice, TargetKeyNameEnd
);
+ Error = RegOpenKey( HKEY_LOCAL_MACHINE, TargetKeyName,
&OutKey );
+ break;
+ } else {
+ free( RootDevice ); RootDevice = 0;
+ free( DriverDesc ); DriverDesc = 0;
+ }
}
- NumAddressRows = Size / sizeof(MIB_IPADDRTABLE);
- for( i = 0; i < AddressTable->dwNumEntries; i++ ) {
- DH_DbgPrint(MID_TRACE,
- ("Finding address for adapter %d: (%d -> %x)\n",
- Adapter->IfMib.dwIndex,
- AddressTable->table[i].dwIndex,
- AddressTable->table[i].dwAddr));
- if( Adapter->IfMib.dwIndex == AddressTable->table[i].dwIndex )
{
- memcpy( &Adapter->IfAddr, &AddressTable->table[i],
- sizeof( MIB_IPADDRROW ) );
+cleanup:
+ if( RootDevice ) free( RootDevice );
+ if( DriverDesc ) free( DriverDesc );
+ if( EnumKeysLinkage ) free( EnumKeysLinkage );
+ if( EnumKeysTop ) free( EnumKeysTop );
+ if( TargetKeyName ) free( TargetKeyName );
+
+ return OutKey;
+}
+
+BOOL PrepareAdapterForService( PDHCP_ADAPTER Adapter ) {
+ HKEY AdapterKey = NULL;
+ PCHAR IPAddress = NULL, Netmask = NULL, DefaultGateway = NULL;
+ NTSTATUS Status = STATUS_SUCCESS;
+ DWORD Error = ERROR_SUCCESS;
+ MIB_IPFORWARDROW DefGatewayRow;
+
+ Adapter->DhclientState.config = &Adapter->DhclientConfig;
+ strncpy(Adapter->DhclientInfo.name, Adapter->IfMib.bDescr,
+ sizeof(Adapter->DhclientInfo.name));
+
+ AdapterKey = FindAdapterKey( Adapter );
+ if( AdapterKey )
+ IPAddress = RegReadString( AdapterKey, NULL, "IPAddress" );
+
+ if( IPAddress && strcmp( IPAddress, "0.0.0.0" ) ) {
+ /* Non-automatic case */
+ DH_DbgPrint
+ (MID_TRACE,("Adapter Name: [%s] (Bind Status %x) (static
%s)\n",
+ Adapter->DhclientInfo.name,
+ Adapter->BindStatus,
+ IPAddress));
+
+ Adapter->DhclientState.state = S_STATIC;
+
+ Netmask = RegReadString( AdapterKey, NULL, "Subnetmask" );
+ if( !Netmask ) Netmask = "255.255.255.0";
+
+ Status = AddIPAddress( inet_addr( IPAddress ),
+ inet_addr( Netmask ),
+ Adapter->IfMib.dwIndex,
+ &Adapter->NteContext,
+ &Adapter->NteInstance );
+
+ DefaultGateway = RegReadString( AdapterKey, NULL,
"DefaultGateway" );
+
+ if( DefaultGateway ) {
+ DefGatewayRow.dwForwardDest = 0;
+ DefGatewayRow.dwForwardMask = 0;
+ DefGatewayRow.dwForwardMetric1 = 1;
+ DefGatewayRow.dwForwardNextHop = inet_addr(DefaultGateway);
+ Error = CreateIpForwardEntry( &DefGatewayRow );
+ if( Error )
+ warning("Failed to set default gateway %s: %d\n",
+ DefaultGateway, Error);
}
+
+ if( DefaultGateway ) free( DefaultGateway );
+ if( Netmask ) free( Netmask );
+ } else {
+ /* Automatic case */
+ DH_DbgPrint
+ (MID_TRACE,("Adapter Name: [%s] (Bind Status %x)
(dynamic)\n",
+ Adapter->DhclientInfo.name,
+ Adapter->BindStatus));
}
+
+ if( IPAddress ) free( IPAddress );
+
+ return TRUE;
}
/*
@@ -66,20 +244,23 @@
Table->table[i].dwIndex));
Adapter = calloc( sizeof( DHCP_ADAPTER ) +
Table->table[i].dwMtu, 1 );
- if( Adapter && Table->table[i].dwType ) {
+ if( Adapter && Table->table[i].dwType == MIB_IF_TYPE_ETHERNET )
{
memcpy( &Adapter->IfMib, &Table->table[i],
sizeof(Adapter->IfMib) );
- GetAddress( Adapter );
- InsertTailList( &AdapterList, &Adapter->ListEntry );
- Adapter->DhclientInfo.next = ifi;
Adapter->DhclientInfo.client = &Adapter->DhclientState;
Adapter->DhclientInfo.rbuf = Adapter->recv_buf;
Adapter->DhclientInfo.rbuf_max = Table->table[i].dwMtu;
Adapter->DhclientInfo.rbuf_len =
Adapter->DhclientInfo.rbuf_offset = 0;
+ memcpy(Adapter->DhclientInfo.hw_address.haddr,
+ Adapter->IfMib.bPhysAddr,
+ Adapter->IfMib.dwPhysAddrLen);
+ Adapter->DhclientInfo.hw_address.hlen =
+ Adapter->IfMib.dwPhysAddrLen;
+
if( DhcpSocket == INVALID_SOCKET ) {
DhcpSocket =
- Adapter->DhclientInfo.rfdesc =
+ Adapter->DhclientInfo.rfdesc =
Adapter->DhclientInfo.wfdesc =
socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
Adapter->ListenAddr.sin_family = AF_INET;
@@ -93,7 +274,7 @@
Adapter->DhclientInfo.rfdesc =
Adapter->DhclientInfo.wfdesc = DhcpSocket;
}
- Adapter->DhclientState.config = &Adapter->DhclientConfig;
+
Adapter->DhclientConfig.timeout = DHCP_PANIC_TIMEOUT;
Adapter->DhclientConfig.initial_interval =
DHCP_DISCOVER_INTERVAL;
Adapter->DhclientConfig.retry_interval =
DHCP_DISCOVER_INTERVAL;
@@ -102,13 +283,17 @@
Adapter->DhclientConfig.backoff_cutoff = DHCP_BACKOFF_MAX;
Adapter->DhclientState.interval =
Adapter->DhclientConfig.retry_interval;
- strncpy(Adapter->DhclientInfo.name, Adapter->IfMib.bDescr,
- sizeof(Adapter->DhclientInfo.name));
- DH_DbgPrint(MID_TRACE,("Adapter Name: [%s] (Bind Status
%x)\n",
- Adapter->DhclientInfo.name,
- Adapter->BindStatus));
- ifi = &Adapter->DhclientInfo;
- }
+
+ if( PrepareAdapterForService( Adapter ) ) {
+ Adapter->DhclientInfo.next = ifi;
+ ifi = &Adapter->DhclientInfo;
+ InsertTailList( &AdapterList, &Adapter->ListEntry );
+ } else { free( Adapter ); Adapter = 0; }
+ } else { free( Adapter ); Adapter = 0; }
+
+ if( !Adapter )
+ DH_DbgPrint(MID_TRACE,("Adapter %d was rejected\n",
+ Table->table[i].dwIndex));
}
DH_DbgPrint(MID_TRACE,("done with AdapterInit\n"));
_____
Modified: trunk/reactos/subsys/system/dhcp/api.c
--- trunk/reactos/subsys/system/dhcp/api.c 2005-04-22 09:19:18 UTC
(rev 14736)
+++ trunk/reactos/subsys/system/dhcp/api.c 2005-04-22 09:45:17 UTC
(rev 14737)
@@ -38,8 +38,11 @@
Reply.Reply = Adapter ? 1 : 0;
if( Adapter ) {
- Adapter->DhclientState.state = S_REBOOTING;
- send_discover( &Adapter->DhclientInfo );
+ add_protocol( Adapter->DhclientInfo.name,
+ Adapter->DhclientInfo.rfdesc, got_one,
+ &Adapter->DhclientInfo );
+ Adapter->DhclientInfo.client->state = S_INIT;
+ state_reboot(&Adapter->DhclientInfo);
}
ApiUnlock();
@@ -77,6 +80,7 @@
if( Adapter ) {
DeleteIPAddress( Adapter->NteContext );
+ remove_protocol( find_protocol_by_adapter(
&Adapter->DhclientInfo ) );
}
ApiUnlock();
@@ -101,6 +105,7 @@
Adapter->DhclientState.state = S_BOUND;
+ send_discover( &Adapter->DhclientInfo );
state_bound( &Adapter->DhclientInfo );
ApiUnlock();
@@ -121,7 +126,8 @@
if( Adapter ) {
DeleteIPAddress( Adapter->NteContext );
- Adapter->DhclientState.state = S_BOUND;
+ Adapter->DhclientState.state = S_STATIC;
+ remove_protocol( find_protocol_by_adapter(
&Adapter->DhclientInfo ) );
Status = AddIPAddress( Req->Body.StaticRefreshParams.IPAddress,
Req->Body.StaticRefreshParams.Netmask,
Req->AdapterIndex,
_____
Modified: trunk/reactos/subsys/system/dhcp/dhclient.c
--- trunk/reactos/subsys/system/dhcp/dhclient.c 2005-04-22 09:19:18 UTC
(rev 14736)
+++ trunk/reactos/subsys/system/dhcp/dhclient.c 2005-04-22 09:45:17 UTC
(rev 14737)
@@ -108,6 +108,7 @@
int res_hnok(const char *dn);
char *option_as_string(unsigned int code, unsigned char
*data, int len);
int fork_privchld(int, int);
+int check_arp( struct interface_info *ip, struct
client_lease *lp );
#define ROUNDUP(a) \
((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) :
sizeof(long))
@@ -115,143 +116,11 @@
time_t scripttime;
-#if 0
-
-int
-findproto(char *cp, int n)
-{
- struct sockaddr *sa;
- int i;
-
- if (n == 0)
- return -1;
- for (i = 1; i; i <<= 1) {
- if (i & n) {
[truncated at 1000 lines; 674 more skipped]