All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Florian Weimer <fweimer@redhat.com>
Cc: Neil Horman <nhorman@tuxdriver.com>,
	netfilter-devel@vger.kernel.org,
	Hushan Jia <hushan.jia@gmail.com>
Subject: Re: [PATCH] libmnl: Add filtering support to library as a convienience
Date: Fri, 19 Apr 2013 04:20:02 +0200	[thread overview]
Message-ID: <20130419022002.GA5882@localhost> (raw)
In-Reply-To: <5152B9FF.7050705@redhat.com>

On Wed, Mar 27, 2013 at 10:21:03AM +0100, Florian Weimer wrote:
[...]
> From 2a6246b9158df6c4ef1000a5a92b599a1f393f7f Mon Sep 17 00:00:00 2001
> From: Florian Weimer <fweimer@redhat.com>
> Date: Wed, 27 Mar 2013 10:10:01 +0100
> Subject: [PATCH 1/2] Functions which modify state should not take const
>  arguments
> 
> Sending and receiving packets and changing socket options
> modify the internal socket state, which was not reflected in the
> prototype.  mnl_socket_get_fd provides access to the underlying
> file descriptor, which indirectly allows modification.
> 
> Signed-off-by: Florian Weimer <fweimer@redhat.com>
> ---
>  include/libmnl/libmnl.h | 8 ++++----
>  src/socket.c            | 8 ++++----
>  2 files changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/include/libmnl/libmnl.h b/include/libmnl/libmnl.h
> index a647fd9..5145ba5 100644
> --- a/include/libmnl/libmnl.h
> +++ b/include/libmnl/libmnl.h
> @@ -29,11 +29,11 @@ struct mnl_socket;
>  extern struct mnl_socket *mnl_socket_open(int type);
>  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);
> +extern int mnl_socket_get_fd(struct mnl_socket *nl);
>  extern unsigned int mnl_socket_get_portid(const struct mnl_socket *nl);
> -extern ssize_t mnl_socket_sendto(const struct mnl_socket *nl, const void *req, size_t siz);
> -extern ssize_t mnl_socket_recvfrom(const struct mnl_socket *nl, void *buf, size_t siz);
> -extern int mnl_socket_setsockopt(const struct mnl_socket *nl, int type, void *buf, socklen_t len);
> +extern ssize_t mnl_socket_sendto(struct mnl_socket *nl, const void *req, size_t siz);
> +extern ssize_t mnl_socket_recvfrom(struct mnl_socket *nl, void *buf, size_t siz);
> +extern int mnl_socket_setsockopt(struct mnl_socket *nl, int type, void *buf, socklen_t len);
>  extern int mnl_socket_getsockopt(const struct mnl_socket *nl, int type, void *buf, socklen_t *len);
>  
>  /*
> diff --git a/src/socket.c b/src/socket.c
> index 6d54563..c77af91 100644
> --- a/src/socket.c
> +++ b/src/socket.c
> @@ -82,7 +82,7 @@ struct mnl_socket {
>   *
>   * This function returns the file descriptor of a given netlink socket.
>   */
> -int mnl_socket_get_fd(const struct mnl_socket *nl)
> +int mnl_socket_get_fd(struct mnl_socket *nl)
>  {
>  	return nl->fd;
>  }
> @@ -178,7 +178,7 @@ EXPORT_SYMBOL(mnl_socket_bind);
>   * returns the number of bytes sent.
>   */
>  ssize_t
> -mnl_socket_sendto(const struct mnl_socket *nl, const void *buf, size_t len)
> +mnl_socket_sendto(struct mnl_socket *nl, const void *buf, size_t len)
>  {
>  	static const struct sockaddr_nl snl = {
>  		.nl_family = AF_NETLINK
> @@ -203,7 +203,7 @@ EXPORT_SYMBOL(mnl_socket_sendto);
>   * message without truncating it.
>   */
>  ssize_t
> -mnl_socket_recvfrom(const struct mnl_socket *nl, void *buf, size_t bufsiz)
> +mnl_socket_recvfrom(struct mnl_socket *nl, void *buf, size_t bufsiz)
>  {
>  	ssize_t ret;
>  	struct sockaddr_nl addr;
> @@ -276,7 +276,7 @@ EXPORT_SYMBOL(mnl_socket_close);
>   *
>   * On error, this function returns -1 and errno is appropriately set.
>   */
> -int mnl_socket_setsockopt(const struct mnl_socket *nl, int type,
> +int mnl_socket_setsockopt(struct mnl_socket *nl, int type,
>  			  void *buf, socklen_t len)
>  {
>  	return setsockopt(nl->fd, SOL_NETLINK, type, buf, len);
> -- 
> 1.8.1.4
> 

> From 7da5a365c9908972726243b12b91666352c1ee31 Mon Sep 17 00:00:00 2001
> From: Florian Weimer <fweimer@redhat.com>
> Date: Wed, 27 Mar 2013 10:19:35 +0100
> Subject: [PATCH 2/2] mnl_socket_peer_address: Add function to retrieve the
>  sender address
> 
> This allows callers of mnl_socket_recvfrom to examine the address,
> for instance, to give special treatment to messages sent by the kernel.
> 
> Signed-off-by: Florian Weimer <fweimer@redhat.com>
> ---
>  include/libmnl/libmnl.h |  1 +
>  src/libmnl.map          |  4 ++++
>  src/socket.c            | 24 ++++++++++++++++++++----
>  3 files changed, 25 insertions(+), 4 deletions(-)
> 
> diff --git a/include/libmnl/libmnl.h b/include/libmnl/libmnl.h
> index 5145ba5..74995fa 100644
> --- a/include/libmnl/libmnl.h
> +++ b/include/libmnl/libmnl.h
> @@ -33,6 +33,7 @@ extern int mnl_socket_get_fd(struct mnl_socket *nl);
>  extern unsigned int mnl_socket_get_portid(const struct mnl_socket *nl);
>  extern ssize_t mnl_socket_sendto(struct mnl_socket *nl, const void *req, size_t siz);
>  extern ssize_t mnl_socket_recvfrom(struct mnl_socket *nl, void *buf, size_t siz);
> +extern struct sockaddr_nl *mnl_socket_peer_address(struct mnl_socket *nl);
>  extern int mnl_socket_setsockopt(struct mnl_socket *nl, int type, void *buf, socklen_t len);
>  extern int mnl_socket_getsockopt(const struct mnl_socket *nl, int type, void *buf, socklen_t *len);
>  
> diff --git a/src/libmnl.map b/src/libmnl.map
> index dbc332e..626ea87 100644
> --- a/src/libmnl.map
> +++ b/src/libmnl.map
> @@ -69,6 +69,10 @@ global:
>  local: *;
>  };
>  
> +LIBMNL_1.0.3 {
> +  mnl_socket_peer_address;
> +};
> +
>  LIBMNL_1.1 {
>    mnl_attr_parse_payload;
>  } LIBMNL_1.0;
> diff --git a/src/socket.c b/src/socket.c
> index c77af91..1d956a0 100644
> --- a/src/socket.c
> +++ b/src/socket.c
> @@ -8,6 +8,7 @@
>   */
>  
>  #include <libmnl/libmnl.h>
> +#include <string.h>
>  #include <sys/types.h>
>  #include <sys/socket.h>
>  #include <stdlib.h>
> @@ -69,6 +70,7 @@
>  struct mnl_socket {
>  	int 			fd;
>  	struct sockaddr_nl	addr;
> +	struct sockaddr_nl	peer;
>  };
>  
>  /**
> @@ -206,14 +208,13 @@ ssize_t
>  mnl_socket_recvfrom(struct mnl_socket *nl, void *buf, size_t bufsiz)

I prefer if you send me a patch to add a new recvfrom function (with
new name) that allows you to pass the sockaddr_nl:

mnl_socket_recvfrom_addr

I prefer not to deconstify all those functions and not to increase the
size of mnl_socket.

  reply	other threads:[~2013-04-19  2:20 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-26 14:20 [PATCH] libmnl: Add filtering support to library as a convienience Neil Horman
2013-03-26 20:50 ` Pablo Neira Ayuso
2013-03-27  9:21   ` Florian Weimer
2013-04-19  2:20     ` Pablo Neira Ayuso [this message]
2013-03-27 12:55   ` Neil Horman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130419022002.GA5882@localhost \
    --to=pablo@netfilter.org \
    --cc=fweimer@redhat.com \
    --cc=hushan.jia@gmail.com \
    --cc=netfilter-devel@vger.kernel.org \
    --cc=nhorman@tuxdriver.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.