Update of /cvsroot/dhcp-agent/dhcp-agent
In directory usw-pr-cvs1:/tmp/cvs-serv23971
Modified Files:
dhcp-net.c dhcp-client-control.c dhcp-client-states.c
dhcp-agent.h
Log Message:
fixed up interface handling so we now only down interface upon release -- and we don't reinitialize IP if the interface is up and running.
Index: dhcp-net.c
===================================================================
RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-net.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** dhcp-net.c 18 May 2002 18:10:09 -0000 1.17
--- dhcp-net.c 19 May 2002 00:34:22 -0000 1.18
***************
*** 109,121 ****
{
/* are we using a fake address? */
! if(net->fake_hw_addr == NULL) {
! return(eth_get(net->eth, addr));
! } else {
memcpy(addr, net->fake_hw_addr->data, ETH_ADDR_LEN);
return 0;
}
}
! /* get real interface address skipping fake if its available. */
int rawnet_get_real_hw_addr(rawnet_t *net, eth_addr_t *addr)
{
--- 109,121 ----
{
/* are we using a fake address? */
! if(net->fake_hw_addr != NULL) {
memcpy(addr, net->fake_hw_addr->data, ETH_ADDR_LEN);
return 0;
+ } else {
+ return(eth_get(net->eth, addr));
}
}
! /* get real interface address skipping fake even if its available. */
int rawnet_get_real_hw_addr(rawnet_t *net, eth_addr_t *addr)
{
***************
*** 245,252 ****
}
! /* We need to bring the interface up,
! * even if its not initialized properly. */
!
! rawnet_interface_up(net, 0, 0xffffff, -1);
/* get pcap handler */
--- 245,251 ----
}
! /* Is the interface up? */
! if(!interface_is_up(net->intf_handle))
! rawnet_interface_up(net, 0, 0xffffff, -1); /* then bring it up with dum values. */
/* get pcap handler */
Index: dhcp-client-control.c
===================================================================
RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-client-control.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** dhcp-client-control.c 18 May 2002 18:10:09 -0000 1.15
--- dhcp-client-control.c 19 May 2002 00:34:22 -0000 1.16
***************
*** 225,226 ****
--- 225,242 ----
xfree(dc);
}
+
+ /* Utility routines to bring down interface.
+ * we need this because we have to be explicit
+ * about it. We can't do this at the time we
+ * destroy the control object -- for example
+ * we destroy the control object through forks
+ * to clean out our environment but we don't want
+ * to down the interface (necessarily) then.
+ * this routine just makes it explicit so we call
+ * it when we mean it. */
+
+ void dhcp_client_interface_down(dhcp_client_control_t *dc)
+ {
+ rawnet_interface_down(dc->rawnet);
+ return;
+ }
Index: dhcp-client-states.c
===================================================================
RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-client-states.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -C2 -d -r1.19 -r1.20
*** dhcp-client-states.c 18 May 2002 18:10:09 -0000 1.19
--- dhcp-client-states.c 19 May 2002 00:34:22 -0000 1.20
***************
*** 349,352 ****
--- 349,355 ----
client_broadcast_unarp(dc);
+
+ /* since we're releasing the lease we should down the interface */
+ dhcp_client_interface_down(dc);
return 0; /* called from do_shutdown() so no real state returned */
Index: dhcp-agent.h
===================================================================
RCS file: /cvsroot/dhcp-agent/dhcp-agent/dhcp-agent.h,v
retrieving revision 1.32
retrieving revision 1.33
diff -C2 -d -r1.32 -r1.33
*** dhcp-agent.h 18 May 2002 18:10:09 -0000 1.32
--- dhcp-agent.h 19 May 2002 00:34:22 -0000 1.33
***************
*** 849,852 ****
--- 849,853 ----
char *fake_hw_addr);
extern dhcp_client_control_t *create_dhcp_client_control_dummy(char *interface);
+ extern void dhcp_client_interface_down(dhcp_client_control_t *dc);
/* dhcp client conf */
|