summaryrefslogtreecommitdiffstats
path: root/workspace/customdhcpcd
diff options
context:
space:
mode:
Diffstat (limited to 'workspace/customdhcpcd')
-rw-r--r--workspace/customdhcpcd/src/client.c11
-rw-r--r--workspace/customdhcpcd/src/dhcpcd.c17
-rw-r--r--workspace/customdhcpcd/src/logwriter.c36
-rw-r--r--workspace/customdhcpcd/src/logwriter.h3
4 files changed, 61 insertions, 6 deletions
diff --git a/workspace/customdhcpcd/src/client.c b/workspace/customdhcpcd/src/client.c
index 8ce2721..24c8680 100644
--- a/workspace/customdhcpcd/src/client.c
+++ b/workspace/customdhcpcd/src/client.c
@@ -60,6 +60,9 @@
#include "signal.h"
#include "socket.h"
+#include "logwriter.h"
+#include "status.h"
+
#ifdef ENABLE_DUID
# include "duid.h"
#endif
@@ -453,6 +456,7 @@ static bool _send_message (state_t *state, int type, const options_t *options)
state->last_type = type;
state->last_sent = uptime ();
+ logSendToQt(type);
retval = send_message (state->interface, state->dhcp, state->xid,
type, options);
return (retval == -1 ? false : true);
@@ -596,8 +600,9 @@ static bool handle_signal (int sig, state_t *state, const options_t *options)
if (! IN_LINKLOCAL (ntohl (state->dhcp->address.s_addr))) {
do_socket (state, SOCKET_OPEN);
state->xid = (uint32_t) random ();
- if ((open_socket (state->interface, false)) >= 0)
+ if ((open_socket (state->interface, false)) >= 0) {
_send_message (state, DHCP_RELEASE, options);
+ }
do_socket (state, SOCKET_CLOSED);
}
unlink (state->interface->infofile);
@@ -847,6 +852,9 @@ static int handle_dhcp (state_t *state, int type, const options_t *options)
logger (LOG_ERR, "%d not an ACK or OFFER", type);
return (0);
}
+
+ /* if we are here, than we received an ACK and can go on with configuration */
+ logToQt(STAT_OK, DHCP_ACK, "");
switch (state->state) {
case STATE_RENEW_REQUESTED:
@@ -1064,6 +1072,7 @@ int dhcp_run (const options_t *options, int *pidfd)
if (! options)
return (-1);
+ /*read_interface : defined in interface.c*/
iface = read_interface (options->interface, options->metric);
if (! iface)
goto eexit;
diff --git a/workspace/customdhcpcd/src/dhcpcd.c b/workspace/customdhcpcd/src/dhcpcd.c
index 97a685a..fca0bd4 100644
--- a/workspace/customdhcpcd/src/dhcpcd.c
+++ b/workspace/customdhcpcd/src/dhcpcd.c
@@ -51,6 +51,9 @@ const char copyright[] = "Copyright (c) 2006-2008 Roy Marples";
#include "socket.h"
#include "version.h"
+#include "logwriter.h"
+#include "status.h"
+
static int doversion = 0;
static int dohelp = 0;
#define EXTRA_OPTS
@@ -198,10 +201,17 @@ int nd_main(char *ifname)
#endif
*/
+ /* initializations for the ipc connection to qt*/
+ setSocketName("");
+ setInterfaceName(ifname);
+ initQtLoggerSocket();
+
+
if (strlen (ifname) > IF_NAMESIZE) {
logger (LOG_ERR,
"`%s' too long for an interface name (max=%d)",
ifname, IF_NAMESIZE);
+ logToQt(STAT_ERROR,-1,"interface name is too long");
goto abort;
} else {
strlcpy (options->interface, ifname,
@@ -223,12 +233,14 @@ int nd_main(char *ifname)
if (IN_LINKLOCAL (ntohl (options->request_address.s_addr))) {
logger (LOG_ERR,
"you are not allowed to request a link local address");
+ logToQt(STAT_ERROR, -1, "you are not allowed to request a link local address");
goto abort;
}
- if (geteuid ())
+ if (geteuid ()) {
logger (LOG_WARNING, PACKAGE " will not work correctly unless"
" run as root");
+ }
prefix = xmalloc (sizeof (char) * (IF_NAMESIZE + 3));
snprintf (prefix, IF_NAMESIZE, "%s: ", options->interface);
@@ -339,6 +351,7 @@ int nd_main(char *ifname)
/* Massage our filters per platform */
setup_packet_filters ();
+ /*dhcp_run : defined in client.c*/
if (dhcp_run (options, &pidfd) == 0)
retval = EXIT_SUCCESS;
@@ -358,7 +371,7 @@ abort:
#endif
logger (LOG_INFO, "exiting");
-
+ logToQt(STAT_INFO, -1, "exiting due abort");
exit (retval);
/* NOTREACHED */
}
diff --git a/workspace/customdhcpcd/src/logwriter.c b/workspace/customdhcpcd/src/logwriter.c
index 5bba4ad..5f51a7e 100644
--- a/workspace/customdhcpcd/src/logwriter.c
+++ b/workspace/customdhcpcd/src/logwriter.c
@@ -8,8 +8,8 @@
#include <string.h>
#include <syslog.h>
-
#include "common.h"
+#include "dhcp.h"
/*sockets for the logger and the qt-reader */
int sockfd, ns;
@@ -43,6 +43,38 @@ void closeQtLoggerSocket (){
close(sockfd);
}
+void logSendToQt(int type) {
+ switch(type) {
+ case DHCP_DISCOVER:
+ logToQt(STAT_OK, DHCP_DISCOVER, "");
+ break;
+ case DHCP_OFFER:
+ logToQt(STAT_OK, DHCP_OFFER, "");
+ break;
+ case DHCP_REQUEST:
+ logToQt(STAT_OK, DHCP_REQUEST, "");
+ break;
+ case DHCP_DECLINE:
+ logToQt(STAT_OK, DHCP_DECLINE, "");
+ break;
+ case DHCP_ACK:
+ logToQt(STAT_OK, DHCP_ACK, "");
+ break;
+ case DHCP_NAK:
+ logToQt(STAT_OK, DHCP_NAK, "");
+ break;
+ case DHCP_RELEASE:
+ logToQt(STAT_OK, DHCP_RELEASE, "");
+ break;
+ case DHCP_INFORM:
+ logToQt(STAT_OK, DHCP_INFORM, "");
+ break;
+ default :
+ break;
+ }
+}
+
+/*
void logToQt(char * status, char * substatus, char * msg) {
char * m = malloc(strlen(interfaceName) + strlen(status) + strlen(substatus) + strlen(msg) +4 );
strcpy(m,interfaceName);
@@ -56,7 +88,7 @@ void logToQt(char * status, char * substatus, char * msg) {
free(m);
}
-
+*/
void logToQt(int status, int substatus, char * msg) {
char * st = (char *) malloc(sizeof(int)*4+1);
char * sst = (char *) malloc(sizeof(int)*4+1);
diff --git a/workspace/customdhcpcd/src/logwriter.h b/workspace/customdhcpcd/src/logwriter.h
index 7248fed..5ee7b84 100644
--- a/workspace/customdhcpcd/src/logwriter.h
+++ b/workspace/customdhcpcd/src/logwriter.h
@@ -15,7 +15,8 @@ void setSocketName(char * sn);
void setInterfaceName(char * in);
void initQtLoggerSocket ();
void closeQtLoggerSocket ();
-void logToQt(char * status, char * substatus, char * msg);
+void logSendToQt(int type);
+//void logToQt(char * status, char * substatus, char * msg);
void logToQt(int status, int substatus, char * msg);
void sendToQt ();