aboutsummaryrefslogtreecommitdiff
path: root/dataservices/sockev/src
diff options
context:
space:
mode:
authorLuca Stefani <luca020400@lineageos.org>2017-08-24 22:24:29 +0200
committerdd3boh <dade.garberi@gmail.com>2017-09-17 14:13:47 +0200
commit66c36e2cb752b01a8c7fbe45e32ccc1681fb9d4b (patch)
treeabb6d0f255601442e21e1caea3ccb5c6a7b077d4 /dataservices/sockev/src
parent7d3687801d2c4b503807698e34a5a3dd881bfce4 (diff)
msm8996-common: Import marlin dataservices
Change-Id: I9d2e47585ac93bbdf28e275e9ec0c669b9f8be3e Signed-off-by: Marco Zanin (B--B) <mrczn.bb@gmail.com>
Diffstat (limited to 'dataservices/sockev/src')
-rw-r--r--dataservices/sockev/src/Android.mk17
-rw-r--r--dataservices/sockev/src/sockev_cli.c96
2 files changed, 113 insertions, 0 deletions
diff --git a/dataservices/sockev/src/Android.mk b/dataservices/sockev/src/Android.mk
new file mode 100644
index 0000000..27af310
--- /dev/null
+++ b/dataservices/sockev/src/Android.mk
@@ -0,0 +1,17 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := sockev_cli.c
+LOCAL_CFLAGS := -Wall -Werror
+
+ifeq ($(TARGET_COMPILE_WITH_MSM_KERNEL),true)
+LOCAL_C_INCLUDES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
+LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+endif
+
+LOCAL_CLANG := true
+LOCAL_MODULE := sockev
+LOCAL_MODULE_TAGS := optional
+
+include $(BUILD_EXECUTABLE)
diff --git a/dataservices/sockev/src/sockev_cli.c b/dataservices/sockev/src/sockev_cli.c
new file mode 100644
index 0000000..2bd2710
--- /dev/null
+++ b/dataservices/sockev/src/sockev_cli.c
@@ -0,0 +1,96 @@
+/******************************************************************************
+ S O C K E V _ C L I . C
+Copyright (c) 2013, The Linux Foundation. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of The Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+******************************************************************************/
+
+/******************************************************************************
+ @file sockev_cli.c
+ @brief command line test utility to receive sockev netlink messages.
+******************************************************************************/
+
+#include <sys/socket.h>
+#include <linux/netlink.h>
+#include <linux/sockev.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <string.h>
+
+#define SOCKEVCLI_ERROR -1
+
+int main(void)
+{
+ int skfd, rc;
+ socklen_t addrlen;
+ struct sockaddr_nl my_addr, src_addr;
+ struct nlmsghdr *nlh = NULL;
+ struct sknlsockevmsg *msg;
+
+ nlh = (struct nlmsghdr *)
+ malloc(NLMSG_SPACE(sizeof(struct sknlsockevmsg) + 16));
+ if (!nlh) {
+ fprintf(stderr, "malloc() failed\n");
+ return SOCKEVCLI_ERROR;
+ }
+
+ skfd = socket(AF_NETLINK, SOCK_RAW, NETLINK_SOCKEV);
+ if (skfd < 0) {
+ fprintf(stderr, "nl_open_sock: socket failed\n");
+ return SOCKEVCLI_ERROR;
+ }
+
+ memset(&my_addr, 0, sizeof(struct sockaddr_nl));
+
+ my_addr.nl_family = AF_NETLINK;
+ my_addr.nl_pid = getpid();
+ my_addr.nl_groups = SKNLGRP_SOCKEV;
+
+ rc = bind(skfd, (struct sockaddr *)&my_addr,
+ sizeof(struct sockaddr_nl));
+ if (rc < 0) {
+ fprintf(stderr, "nl_open_sock: bind failed\n");
+ close(skfd);
+ return SOCKEVCLI_ERROR;
+ }
+
+ while (1) {
+ recvfrom(skfd, nlh, sizeof(struct sknlsockevmsg) + 16, 0,
+ (struct sockaddr *)&src_addr, &addrlen);
+ msg = NLMSG_DATA(nlh);
+ printf("----------------------------\n");
+ printf("pid:\t%d\n", msg->pid);
+ printf("event:\t%s\n", msg->event);
+ printf("skfamily:\t0x%04X\n", msg->skfamily);
+ printf("skstate:\t%03d\n", msg->skstate);
+ printf("skprotocol:\t%03d\n", msg->skprotocol);
+ printf("sktype:\t0x%04X\n", msg->sktype);
+ printf("skflags:\t0x%016llX\n", msg->skflags);
+ }
+
+ return 0;
+}
+