[ros-diffs] [cgutman] 41763: - Don't use a global interface_info struct - This should allow for multiple NIC support but it's currently broken because GetIfTable returns invalid information for NICs after the first one which prevents DHCP initialization for those adapters
cgutman at svn.reactos.org
cgutman at svn.reactos.org
Sat Jul 4 05:36:21 CEST 2009
Author: cgutman
Date: Sat Jul 4 07:36:19 2009
New Revision: 41763
URL: http://svn.reactos.org/svn/reactos?rev=41763&view=rev
Log:
- Don't use a global interface_info struct
- This should allow for multiple NIC support but it's currently broken because GetIfTable returns invalid information for NICs after the first one which prevents DHCP initialization for those adapters
Modified:
trunk/reactos/base/services/dhcp/adapter.c
trunk/reactos/base/services/dhcp/dhclient.c
trunk/reactos/base/services/dhcp/include/dhcpd.h
trunk/reactos/base/services/dhcp/include/rosdhcp.h
trunk/reactos/base/services/dhcp/util.c
Modified: trunk/reactos/base/services/dhcp/adapter.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/dhcp/adapter.c?rev=41763&r1=41762&r2=41763&view=diff
==============================================================================
--- trunk/reactos/base/services/dhcp/adapter.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/dhcp/adapter.c [iso-8859-1] Sat Jul 4 07:36:19 2009
@@ -3,7 +3,6 @@
static SOCKET DhcpSocket = INVALID_SOCKET;
static LIST_ENTRY AdapterList;
static WSADATA wsd;
-extern struct interface_info *ifi;
PCHAR *GetSubkeyNames( PCHAR MainKeyName, PCHAR Append ) {
int i = 0;
@@ -215,6 +214,7 @@
PMIB_IFTABLE Table = (PMIB_IFTABLE) malloc(sizeof(MIB_IFTABLE));
DWORD Error, Size, i;
PDHCP_ADAPTER Adapter = NULL;
+ struct interface_info *ifi = NULL;
WSAStartup(0x0101,&wsd);
Modified: trunk/reactos/base/services/dhcp/dhclient.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/dhcp/dhclient.c?rev=41763&r1=41762&r2=41763&view=diff
==============================================================================
--- trunk/reactos/base/services/dhcp/dhclient.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/dhcp/dhclient.c [iso-8859-1] Sat Jul 4 07:36:19 2009
@@ -100,8 +100,6 @@
int unknown_ok = 1;
int routefd;
-struct interface_info *ifi = NULL;
-
void usage(void);
int check_option(struct client_lease *l, int option);
int ipv4addrs(char * buf);
@@ -135,6 +133,7 @@
main(int argc, char *argv[])
{
int i = 0;
+ PDHCP_ADAPTER Adapter;
ApiInit();
AdapterInit();
PipeInit();
@@ -150,32 +149,29 @@
DH_DbgPrint(MID_TRACE,("DHCP Service Started\n"));
- read_client_conf();
-
- if (!interface_link_status(ifi->name)) {
- DH_DbgPrint(MID_TRACE,("%s: no link ", ifi->name));
- Sleep(1000);
- while (!interface_link_status(ifi->name)) {
- DH_DbgPrint(MID_TRACE,("."));
- if (++i > 10) {
- DH_DbgPrint(MID_TRACE,("Giving up for now on adapter [%s]\n", ifi->name));
- }
- Sleep(1000);
- }
- DH_DbgPrint(MID_TRACE,("Got link on [%s]\n", ifi->name));
- }
-
- DH_DbgPrint(MID_TRACE,("Discover Interfaces\n"));
-
- /* If no adapters were found, just idle for now ... If any show up,
- * then we'll start it later */
- if( ifi ) {
- /* set up the interface */
- discover_interfaces(ifi);
-
- DH_DbgPrint
- (MID_TRACE,
- ("Setting init state and restarting interface %p\n",ifi));
+ for (Adapter = AdapterGetFirst();
+ Adapter != NULL;
+ Adapter = AdapterGetNext(Adapter))
+ {
+ read_client_conf(&Adapter->DhclientInfo);
+
+ if (!interface_link_status(Adapter->DhclientInfo.name)) {
+ DH_DbgPrint(MID_TRACE,("%s: no link ", Adapter->DhclientInfo.name));
+ Sleep(1000);
+ while (!interface_link_status(Adapter->DhclientInfo.name)) {
+ DH_DbgPrint(MID_TRACE,("."));
+ if (++i > 10) {
+ DH_DbgPrint(MID_TRACE,("Giving up for now on adapter [%s]\n", Adapter->DhclientInfo.name));
+ }
+ Sleep(1000);
+ }
+ DH_DbgPrint(MID_TRACE,("Got link on [%s]\n", Adapter->DhclientInfo.name));
+ }
+
+ DH_DbgPrint(MID_TRACE,("Discover Interfaces\n"));
+
+ /* set up the interface */
+ discover_interfaces(&Adapter->DhclientInfo);
}
bootp_packet_handler = do_packet;
@@ -1556,7 +1552,7 @@
FILE *leaseFile;
void
-rewrite_client_leases(void)
+rewrite_client_leases(struct interface_info *ifi)
{
struct client_lease *lp;
@@ -1587,7 +1583,7 @@
if (!rewrite) {
if (leases_written++ > 20) {
- rewrite_client_leases();
+ rewrite_client_leases(ip);
leases_written = 0;
}
}
@@ -1674,19 +1670,16 @@
}
void
-priv_script_init(char *reason, char *medium)
-{
- struct interface_info *ip = ifi;
-
+priv_script_init(struct interface_info *ip, char *reason, char *medium)
+{
if (ip) {
// XXX Do we need to do anything?
}
}
void
-priv_script_write_params(char *prefix, struct client_lease *lease)
-{
- struct interface_info *ip = ifi;
+priv_script_write_params(struct interface_info *ip, char *prefix, struct client_lease *lease)
+{
u_int8_t dbuf[1500];
int i, len = 0;
Modified: trunk/reactos/base/services/dhcp/include/dhcpd.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/dhcp/include/dhcpd.h?rev=41763&r1=41762&r2=41763&view=diff
==============================================================================
--- trunk/reactos/base/services/dhcp/include/dhcpd.h [iso-8859-1] (original)
+++ trunk/reactos/base/services/dhcp/include/dhcpd.h [iso-8859-1] Sat Jul 4 07:36:19 2009
@@ -426,11 +426,11 @@
void make_decline(struct interface_info *, struct client_lease *);
void free_client_lease(struct client_lease *);
-void rewrite_client_leases(void);
+void rewrite_client_leases(struct interface_info *);
void write_client_lease(struct interface_info *, struct client_lease *, int);
-void priv_script_init(char *, char *);
-void priv_script_write_params(char *, struct client_lease *);
+void priv_script_init(struct interface_info *, char *, char *);
+void priv_script_write_params(struct interface_info *, char *, struct client_lease *);
int priv_script_go(void);
void script_init(char *, struct string_list *);
@@ -466,7 +466,7 @@
int, struct hardware *);
/* clparse.c */
-int read_client_conf(void);
+int read_client_conf(struct interface_info *);
void read_client_leases(void);
void parse_client_statement(FILE *, struct interface_info *,
struct client_config *);
Modified: trunk/reactos/base/services/dhcp/include/rosdhcp.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/dhcp/include/rosdhcp.h?rev=41763&r1=41762&r2=41763&view=diff
==============================================================================
--- trunk/reactos/base/services/dhcp/include/rosdhcp.h [iso-8859-1] (original)
+++ trunk/reactos/base/services/dhcp/include/rosdhcp.h [iso-8859-1] Sat Jul 4 07:36:19 2009
@@ -72,6 +72,8 @@
void AdapterInit(VOID);
HANDLE PipeInit(VOID);
+extern PDHCP_ADAPTER AdapterGetFirst();
+extern PDHCP_ADAPTER AdapterGetNext(PDHCP_ADAPTER);
extern PDHCP_ADAPTER AdapterFindIndex( unsigned int AdapterIndex );
extern PDHCP_ADAPTER AdapterFindInfo( struct interface_info *info );
extern VOID ApiInit();
Modified: trunk/reactos/base/services/dhcp/util.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/dhcp/util.c?rev=41763&r1=41762&r2=41763&view=diff
==============================================================================
--- trunk/reactos/base/services/dhcp/util.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/dhcp/util.c [iso-8859-1] Sat Jul 4 07:36:19 2009
@@ -3,8 +3,6 @@
#define NDEBUG
#include <reactos/debug.h>
-
-extern struct interface_info *ifi;
char *piaddr( struct iaddr addr ) {
struct sockaddr_in sa;
@@ -96,7 +94,7 @@
void *dmalloc( int size, char *name ) { return malloc( size ); }
-int read_client_conf(void) {
+int read_client_conf(struct interface_info *ifi) {
/* What a strange dance */
struct client_config *config;
char ComputerName [MAX_COMPUTERNAME_LENGTH + 1];
More information about the Ros-diffs
mailing list