summaryrefslogtreecommitdiff
path: root/cleopatre/devkit/plcd
diff options
context:
space:
mode:
Diffstat (limited to 'cleopatre/devkit/plcd')
-rw-r--r--cleopatre/devkit/plcd/Makefile2
-rw-r--r--cleopatre/devkit/plcd/inc/plcd.h3
-rw-r--r--cleopatre/devkit/plcd/src/plcd_main.c21
3 files changed, 23 insertions, 3 deletions
diff --git a/cleopatre/devkit/plcd/Makefile b/cleopatre/devkit/plcd/Makefile
index 3f6caf028e..116691d883 100644
--- a/cleopatre/devkit/plcd/Makefile
+++ b/cleopatre/devkit/plcd/Makefile
@@ -10,7 +10,7 @@ LINUX_DIR=../../linux-2.6.25.10-spc300
VERSION=$(shell git describe --always 2>/dev/null)
INC=-I$(INCPATH) -I$(LIBMME_DIR)/inc -I$(LIBSPID_DIR)/inc -I../../include \
- -I$(LINUX_DIR)/include
+ -I$(LINUX_DIR)/include -I$(LINUX_DIR)/include/asm-arm/arch-spc300
CC=arm-linux-gcc
CFLAGS+= $(INC) -Os -MMD -DVERSION=\"$(VERSION)\"
diff --git a/cleopatre/devkit/plcd/inc/plcd.h b/cleopatre/devkit/plcd/inc/plcd.h
index d21e9bc8b6..d8830c8d5d 100644
--- a/cleopatre/devkit/plcd/inc/plcd.h
+++ b/cleopatre/devkit/plcd/inc/plcd.h
@@ -62,6 +62,9 @@
#define PLCD_EVENT_REFRESH_TIMEOUT_MS 1000
#define PLCD_INIT_RETRIES 10
+/* Interface name */
+#define PLC_IFNAME "plc0"
+
typedef enum
{
MME_DRV_STATUS_ASSOC_UNASSOCIATED = 0,
diff --git a/cleopatre/devkit/plcd/src/plcd_main.c b/cleopatre/devkit/plcd/src/plcd_main.c
index 3acd59f929..eb7248f457 100644
--- a/cleopatre/devkit/plcd/src/plcd_main.c
+++ b/cleopatre/devkit/plcd/src/plcd_main.c
@@ -23,6 +23,11 @@
#include <syslog.h>
#include <sys/types.h>
#include <unistd.h> /* for getpid() */
+#include <net/if.h>
+#include <sys/ioctl.h>
+#include <errno.h>
+
+#include "ioctl.h"
#include "libmme.h"
#include "libspid.h"
@@ -32,7 +37,6 @@
# include "plcd_utests.h"
#endif /* __UTESTS__ */
-
static spc300_nvram_t g_nvram;
volatile sig_atomic_t is_process_signal_needed;
@@ -93,6 +97,9 @@ plcd_init (plcd_ctx_t *ctx)
{
char is_cco_preferred_str[LIBSPID_BOOLEAN_STR_MAX_LEN] = {0};
char was_cco_str[LIBSPID_BOOLEAN_STR_MAX_LEN] = {0};
+ struct plcdrv_setpid user_data = {0};
+ struct ifreq ifr = {0};
+ pid_t pid = getpid ();
PLCD_ASSERT (NULL != ctx);
@@ -133,7 +140,7 @@ plcd_init (plcd_ctx_t *ctx)
}
memset (&ctx->plcd_addr, 0, sizeof (ctx->plcd_addr));
ctx->plcd_addr.nl_family = AF_NETLINK;
- ctx->plcd_addr.nl_pid = getpid(); /* self pid */
+ ctx->plcd_addr.nl_pid = pid; /* self pid */
ctx->plcd_addr.nl_groups = 0; /* not in mcast group */
if (0 > bind (ctx->plc_sock, (struct sockaddr *) &ctx->plcd_addr,
sizeof (ctx->plcd_addr)))
@@ -142,6 +149,16 @@ plcd_init (plcd_ctx_t *ctx)
return -1;
}
+ /* Set plcd pid for reception on drv netlink */
+ user_data.nl = NETLINK_PLC_DRV;
+ user_data.pid = pid;
+ ifr.ifr_data = (void *) &user_data;
+ strncpy (ifr.ifr_name, (char*) PLC_IFNAME, IFNAMSIZ);
+ if (0 > (ioctl (ctx->plc_sock, PLCDRV_IOCTL_SETPID, &ifr)))
+ {
+ syslog (LOG_WARNING, "cannot call ioctl SETPID (%s)", strerror (errno));
+ }
+
/* get NVRAM data */
ctx->nvram = &g_nvram;
#ifdef __UTESTS__