linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: pat-lkml <pat-lkml@erley.org>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: Pavel Roskin <proski@gnu.org>,
	linux-wireless <linux-wireless@vger.kernel.org>
Subject: Re: Userspace tools: Roadmap?
Date: Fri, 12 Dec 2008 18:36:59 -0500	[thread overview]
Message-ID: <4942F59B.1060605@erley.org> (raw)
In-Reply-To: <1229121535.3565.4.camel@johannes.berg>

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);



  reply	other threads:[~2008-12-12 23:37 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 [this message]
2008-12-12 23:42                       ` pat-lkml
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=4942F59B.1060605@erley.org \
    --to=pat-lkml@erley.org \
    --cc=johannes@sipsolutions.net \
    --cc=linux-wireless@vger.kernel.org \
    --cc=proski@gnu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).