This patch defines a new function mnl_socket_fdopen() which creates a struct mnl_socket object from a pre-existing netlink socket obtained from other process. Now I think of the socket is obtained from child process via send/recvmsg(). Signed-off-by: Ken-ichirou MATSUZAWA <chamas@xxxxxxxxxxxxx> --- include/libmnl/libmnl.h | 1 + src/libmnl.map | 1 + src/socket.c | 20 ++++++++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/include/libmnl/libmnl.h b/include/libmnl/libmnl.h index 223709c..0de6678 100644 --- a/include/libmnl/libmnl.h +++ b/include/libmnl/libmnl.h @@ -22,6 +22,7 @@ extern "C" { struct mnl_socket; extern struct mnl_socket *mnl_socket_open(int type); +extern struct mnl_socket *mnl_socket_fdopen(int fd); extern int mnl_socket_bind(struct mnl_socket *nl, unsigned int groups, pid_t pid); extern int mnl_socket_close(struct mnl_socket *nl); extern int mnl_socket_get_fd(const struct mnl_socket *nl); diff --git a/src/libmnl.map b/src/libmnl.map index dbc332e..1ea8b8e 100644 --- a/src/libmnl.map +++ b/src/libmnl.map @@ -71,4 +71,5 @@ local: *; LIBMNL_1.1 { mnl_attr_parse_payload; + mnl_socket_fdopen; } LIBMNL_1.0; diff --git a/src/socket.c b/src/socket.c index 676a08a..bb9db18 100644 --- a/src/socket.c +++ b/src/socket.c @@ -129,6 +129,26 @@ struct mnl_socket *mnl_socket_open(int bus) EXPORT_SYMBOL(mnl_socket_open); /** + * mnl_socket_fdopen - associates a mnl_socket object with netlink socket. + * \param fd pre-existing netlink socket, obtained from other process. + * + * On error, it returns NULL and errno is appropriately set. Otherwise, it + * returns a valid pointer to the mnl_socket structure. + */ +struct mnl_socket *mnl_socket_fdopen(int fd) +{ + struct mnl_socket *nl; + + nl = calloc(sizeof(struct mnl_socket), 1); + if (nl == NULL) + return NULL; + + nl->fd = fd; + return nl; +} +EXPORT_SYMBOL(mnl_socket_fdopen); + +/** * mnl_socket_bind - bind netlink socket * \param nl netlink socket obtained via mnl_socket_open() * \param groups the group of message you're interested in -- 2.1.0 -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html