From: pat-lkml <pat-lkml@erley.org>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: linux-wireless <linux-wireless@vger.kernel.org>
Subject: Re: Userspace tools: Roadmap?
Date: Fri, 12 Dec 2008 18:42:22 -0500 [thread overview]
Message-ID: <4942F6DE.5010004@erley.org> (raw)
In-Reply-To: <4942F59B.1060605@erley.org>
Crap, please ignore, attached the wrong patch.
pat-lkml wrote:
> This converts iw to use libnl-2, and adds compatibility with libnl-1.
> There is not currently a good way to detect the libnl version during
> compilation, as the versioning in the netlink/version.h is defined as a
> string "2.0" rather than a major and a minor number, so we must detect
> it in the Makefile.
>
> Signed-off-by: Pat Erley <pat-lkml@erley.org>
>
> ---
>
> I'm still not very familiar with Makefile magic, so if there's a better
> way to do what I'm doing in the Makefile, just let me know. Also, I'm
> preparing a similar patch for crda.
>
> ---
>
> diff --git a/Makefile b/Makefile
> index df59b51..a87e9a0 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -10,14 +10,28 @@ MKDIR ?= mkdir -p
> INSTALL ?= install
> CC ?= "gcc"
>
> -CFLAGS += -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs
> -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration
> `pkg-config --cflags libnl-1`
> +CFLAGS += -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs
> -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration
> CFLAGS += -O2 -g
> -LDFLAGS += `pkg-config --libs libnl-1`
> -NLVERSION = 1.0
>
> OBJS = iw.o info.o phy.o interface.o station.o util.o mpath.o reg.o
> mesh.o genl.o
> ALL = iw
>
> +NL1FOUND := $(shell pkg-config --atleast-version=1 libnl-1 && echo Y)
> +NL2FOUND := $(shell pkg-config --atleast-version=2 libnl-2.0 && echo Y)
> +
> +ifeq ($(NL1FOUND),Y)
> +NLLIBNAME = libnl-1
> +endif
> +
> +ifeq ($(NL2FOUND),Y)
> +CFLAGS += -DCONFIG_LIBNL20
> +LIBS += -lnl-genl
> +NLLIBNAME = libnl-2.0
> +endif
> +
> +LDFLAGS += `pkg-config --libs $(NLLIBNAME)`
> +CFLAGS += `pkg-config --cflags $(NLLIBNAME)`
> +
> ifeq ($(V),1)
> Q=
> NQ=true
> @@ -29,8 +43,15 @@ endif
> all: version_check $(ALL)
>
> version_check:
> - @if ! pkg-config --atleast-version=$(NLVERSION) libnl-1; then echo
> "You need at least libnl version $(NLVERSION)"; exit 1; fi
> -
> +ifeq ($(NL2FOUND),Y)
> + @echo "Found libnl-2.0"
> +else
> +ifeq ($(NL1FOUND),Y)
> + @echo "Found libnl-1"
> +else
> + $(error No libnl found)
> +endif
> +endif
>
> version.h: version.sh
> @$(NQ) ' GEN version.h'
> @@ -42,7 +63,7 @@ version.h: version.sh
>
> iw: $(OBJS)
> @$(NQ) ' CC ' iw
> - $(Q)$(CC) $(LDFLAGS) $(OBJS) -o iw
> + $(Q)$(CC) $(LDFLAGS) $(OBJS) $(LIBS) -o iw
>
> check:
> $(Q)$(MAKE) all CC="REAL_CC=$(CC) CHECK=\"sparse -Wall\" cgcc"
> diff --git a/iw.c b/iw.c
> index afae643..03ffbb9 100644
> --- a/iw.c
> +++ b/iw.c
> @@ -23,13 +23,24 @@
> #include "iw.h"
> #include "version.h"
>
> +#ifndef CONFIG_LIBNL20
> +/* libnl 2.0 compatibility code */
> +
> +#define nl_socket_alloc(_h) nl_handle_alloc(_h)
> +#define nl_socket_free(_h) nl_handle_destroy(_h)
> +#define compat_genl_ctrl_alloc_cache(_nl_handle, _nl_cache) \
> + return (_nl_cache = genl_ctrl_alloc_cache(_nl_handle)) == null
> +
> +#define genl_ctrl_alloc_cache(_h) compat_genl_ctrl_alloc_cache(_h)
> +#endif /* CONFIG_LIBNL20 */
> +
> static int debug = 0;
>
> static int nl80211_init(struct nl80211_state *state)
> {
> int err;
>
> - state->nl_handle = nl_handle_alloc();
> + state->nl_handle = nl_socket_alloc();
> if (!state->nl_handle) {
> fprintf(stderr, "Failed to allocate netlink handle.\n");
> return -ENOMEM;
> @@ -41,8 +52,7 @@ static int nl80211_init(struct nl80211_state *state)
> goto out_handle_destroy;
> }
>
> - state->nl_cache = genl_ctrl_alloc_cache(state->nl_handle);
> - if (!state->nl_cache) {
> + if (genl_ctrl_alloc_cache(state->nl_handle, &(state->nl_cache))) {
> fprintf(stderr, "Failed to allocate generic netlink cache.\n");
> err = -ENOMEM;
> goto out_handle_destroy;
> @@ -60,7 +70,7 @@ static int nl80211_init(struct nl80211_state *state)
> out_cache_free:
> nl_cache_free(state->nl_cache);
> out_handle_destroy:
> - nl_handle_destroy(state->nl_handle);
> + nl_socket_free(state->nl_handle);
> return err;
> }
>
> @@ -68,7 +78,7 @@ static void nl80211_cleanup(struct nl80211_state *state)
> {
> genl_family_put(state->nl80211);
> nl_cache_free(state->nl_cache);
> - nl_handle_destroy(state->nl_handle);
> + nl_socket_free(state->nl_handle);
> }
>
> __COMMAND(NULL, NULL, NULL, 0, 0, 0, CIB_NONE, NULL);
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2008-12-12 23:42 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-07 23:29 Userspace tools: Roadmap? Dan E
2008-12-08 7:02 ` Rami Rosen
2008-12-08 8:13 ` Johannes Berg
2008-12-08 23:18 ` Dan E
2008-12-08 23:26 ` Johannes Berg
2008-12-08 23:52 ` pat-lkml
2008-12-09 0:02 ` Johannes Berg
2008-12-09 0:08 ` pat-lkml
2008-12-12 4:58 ` pat-lkml
2008-12-12 16:24 ` Pavel Roskin
2008-12-12 21:58 ` Johannes Berg
2008-12-12 22:37 ` pat-lkml
2008-12-12 22:38 ` Johannes Berg
2008-12-12 23:36 ` pat-lkml
2008-12-12 23:42 ` pat-lkml [this message]
2008-12-12 23:50 ` Johannes Berg
2008-12-12 23:48 ` pat-lkml
2008-12-13 0:05 ` Johannes Berg
2008-12-13 0:10 ` pat-lkml
2008-12-13 0:10 ` Johannes Berg
2008-12-09 0:43 ` Dan E
2008-12-09 0:51 ` Johannes Berg
2008-12-09 1:01 ` Dan E
2008-12-09 1:05 ` Johannes Berg
2009-01-15 7:52 ` David Shwatrz
2009-01-15 9:35 ` Johannes Berg
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=4942F6DE.5010004@erley.org \
--to=pat-lkml@erley.org \
--cc=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
/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.