[pkg-wpa-devel] r1274 - in /iw/trunk: .gitmodules Makefile debian/changelog genl.c info.c interface.c iw.c iw.h mesh.c nl80211.h version.sh

kelmo-guest at users.alioth.debian.org kelmo-guest at users.alioth.debian.org
Sun Oct 26 17:24:54 UTC 2008


Author: kelmo-guest
Date: Sun Oct 26 17:24:54 2008
New Revision: 1274

URL: http://svn.debian.org/wsvn/pkg-wpa/?sc=1&rev=1274
Log:
import new upstream version 0.9.6

Added:
    iw/trunk/genl.c
      - copied unchanged from r1273, iw/branches/upstream/current/genl.c
    iw/trunk/mesh.c
      - copied unchanged from r1273, iw/branches/upstream/current/mesh.c
Removed:
    iw/trunk/.gitmodules
Modified:
    iw/trunk/Makefile
    iw/trunk/debian/changelog
    iw/trunk/info.c
    iw/trunk/interface.c
    iw/trunk/iw.c
    iw/trunk/iw.h
    iw/trunk/nl80211.h
    iw/trunk/version.sh

Modified: iw/trunk/Makefile
URL: http://svn.debian.org/wsvn/pkg-wpa/iw/trunk/Makefile?rev=1274&op=diff
==============================================================================
--- iw/trunk/Makefile (original)
+++ iw/trunk/Makefile Sun Oct 26 17:24:54 2008
@@ -11,7 +11,7 @@
 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
+OBJS = iw.o info.o phy.o interface.o station.o util.o mpath.o reg.o mesh.o genl.o
 ALL = iw
 
 ifeq ($(V),1)

Modified: iw/trunk/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-wpa/iw/trunk/debian/changelog?rev=1274&op=diff
==============================================================================
--- iw/trunk/debian/changelog (original)
+++ iw/trunk/debian/changelog Sun Oct 26 17:24:54 2008
@@ -1,5 +1,5 @@
-iw (0.9.5-1) experimental; urgency=low
+iw (0.9.6-1) experimental; urgency=low
 
   * Initial release. (Closes: #499537)
 
- -- Kel Modderman <kel at otaku42.de>  Mon, 27 Oct 2008 03:20:27 +1000
+ -- Kel Modderman <kel at otaku42.de>  Mon, 27 Oct 2008 03:24:00 +1000

Modified: iw/trunk/info.c
URL: http://svn.debian.org/wsvn/pkg-wpa/iw/trunk/info.c?rev=1274&op=diff
==============================================================================
--- iw/trunk/info.c (original)
+++ iw/trunk/info.c Sun Oct 26 17:24:54 2008
@@ -66,6 +66,74 @@
 		nla_parse(tb_band, NL80211_BAND_ATTR_MAX, nla_data(nl_band),
 			  nla_len(nl_band), NULL);
 
+#ifdef NL80211_BAND_ATTR_HT_CAPA
+		if (tb_band[NL80211_BAND_ATTR_HT_CAPA]) {
+			unsigned short cap = nla_get_u16(tb_band[NL80211_BAND_ATTR_HT_CAPA]);
+#define PCOM(fmt, args...) do { printf("\t\t\t * " fmt "\n", ##args); } while (0)
+#define PBCOM(bit, args...) if (cap & (bit)) PCOM(args)
+			printf("\t\tHT capabilities: 0x%.4x\n", cap);
+			PBCOM(0x0001, "LPDC coding");
+			if (cap & 0x0002)
+				PCOM("20/40 MHz operation");
+			else
+				PCOM("20 MHz operation");
+			switch ((cap & 0x000c) >> 2) {
+			case 0:
+				PCOM("static SM PS");
+				break;
+			case 1:
+				PCOM("dynamic SM PS");
+				break;
+			case 2:
+				PCOM("reserved SM PS");
+				break;
+			case 3:
+				PCOM("SM PS disabled");
+				break;
+			}
+			PBCOM(0x0010, "HT-greenfield");
+			PBCOM(0x0020, "20 MHz short GI");
+			PBCOM(0x0040, "40 MHz short GI");
+			PBCOM(0x0080, "TX STBC");
+			if (cap & 0x300)
+				PCOM("RX STBC %d streams", (cap & 0x0300) >> 8);
+			PBCOM(0x0400, "HT-delayed block-ack");
+			PCOM("max A-MSDU len %d", 0xeff + ((cap & 0x0800) << 1));
+			PBCOM(0x1000, "DSSS/CCK 40 MHz");
+			PBCOM(0x2000, "PSMP support");
+			PBCOM(0x4000, "40 MHz intolerant");
+			PBCOM(0x8000, "L-SIG TXOP protection support");
+		}
+		if (tb_band[NL80211_BAND_ATTR_HT_AMPDU_FACTOR]) {
+			unsigned char factor = nla_get_u8(tb_band[NL80211_BAND_ATTR_HT_AMPDU_FACTOR]);
+			printf("\t\tHT A-MPDU factor: 0x%.4x (%d bytes)\n", factor, (1<<(13+factor))-1);
+		}
+		if (tb_band[NL80211_BAND_ATTR_HT_AMPDU_DENSITY]) {
+			unsigned char dens = nla_get_u8(tb_band[NL80211_BAND_ATTR_HT_AMPDU_DENSITY]);
+			printf("\t\tHT A-MPDU density: 0x%.4x (", dens);
+			switch (dens) {
+			case 0:
+				printf("no restriction)\n");
+				break;
+			case 1:
+				printf("1/4 usec)\n");
+				break;
+			case 2:
+				printf("1/2 usec)\n");
+				break;
+			default:
+				printf("%d usec)\n", 1<<(dens - 3));
+			}
+		}
+		if (tb_band[NL80211_BAND_ATTR_HT_MCS_SET] &&
+		    nla_len(tb_band[NL80211_BAND_ATTR_HT_MCS_SET]) == 16) {
+			unsigned char *mcs = nla_data(tb_band[NL80211_BAND_ATTR_HT_MCS_SET]);
+			printf("\t\tHT MCS set: %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x\n",
+				mcs[0], mcs[1], mcs[2], mcs[3], mcs[4], mcs[5], mcs[6], mcs[7],
+				mcs[8], mcs[9], mcs[10], mcs[11], mcs[12], mcs[13], mcs[14], mcs[15]);
+		}
+#endif
+
 		printf("\t\tFrequencies:\n");
 
 		nla_for_each_nested(nl_freq, tb_band[NL80211_BAND_ATTR_FREQS], rem_freq) {

Modified: iw/trunk/interface.c
URL: http://svn.debian.org/wsvn/pkg-wpa/iw/trunk/interface.c?rev=1274&op=diff
==============================================================================
--- iw/trunk/interface.c (original)
+++ iw/trunk/interface.c Sun Oct 26 17:24:54 2008
@@ -12,7 +12,7 @@
 #include "iw.h"
 
 static char *mntr_flags[NL80211_MNTR_FLAG_MAX + 1] = {
-	NULL,
+	"none",
 	"fcsfail",
 	"plcpfail",
 	"control",
@@ -20,6 +20,56 @@
 	"cook",
 };
 
+static int parse_mntr_flags(int *_argc, char ***_argv,
+			    struct nl_msg *msg)
+{
+	struct nl_msg *flags;
+	int err = -ENOBUFS;
+	enum nl80211_mntr_flags flag;
+	int argc = *_argc;
+	char **argv = *_argv;
+
+	flags = nlmsg_alloc();
+	if (!flags)
+		return -ENOMEM;
+
+	while (argc) {
+		int ok = 0;
+		for (flag = __NL80211_MNTR_FLAG_INVALID;
+		     flag < NL80211_MNTR_FLAG_MAX; flag++) {
+			if (strcmp(*argv, mntr_flags[flag]) == 0) {
+				ok = 1;
+				/*
+				 * This shouldn't be adding "flag" if that is
+				 * zero, but due to a problem in the kernel's
+				 * nl80211 code (using NLA_NESTED policy) it
+				 * will reject an empty nested attribute but
+				 * not one that contains an invalid attribute
+				 */
+				NLA_PUT_FLAG(flags, flag);
+				break;
+			}
+		}
+		if (!ok) {
+			err = -EINVAL;
+			goto out;
+		}
+		argc--;
+		argv++;
+	}
+
+	nla_put_nested(msg, NL80211_ATTR_MNTR_FLAGS, flags);
+	err = 0;
+ nla_put_failure:
+ out:
+	nlmsg_free(flags);
+
+	*_argc = argc;
+	*_argv = argv;
+
+	return err;
+}
+
 /* return 0 if not found, 1 if ok, -1 on error */
 static int get_if_type(int *argc, char ***argv, enum nl80211_iftype *type)
 {
@@ -86,16 +136,25 @@
 		return 1;
 
 	if (argc) {
-		if (strcmp(argv[0], "mesh_id") != 0)
+		if (strcmp(argv[0], "mesh_id") == 0) {
+			argc--;
+			argv++;
+
+			if (!argc)
+				return 1;
+			mesh_id = argv[0];
+			argc--;
+			argv++;
+		} else if (strcmp(argv[0], "flags") == 0) {
+			argc--;
+			argv++;
+			if (parse_mntr_flags(&argc, &argv, msg)) {
+				fprintf(stderr, "flags error\n");
+				return 2;
+			}
+		} else {
 			return 1;
-		argc--;
-		argv++;
-
-		if (!argc)
-			return 1;
-		mesh_id = argv[0];
-		argc--;
-		argv++;
+		}
 	}
 
 	if (argc)
@@ -111,9 +170,9 @@
  nla_put_failure:
 	return -ENOBUFS;
 }
-COMMAND(interface, add, "<name> type <type> [mesh_id <meshid>]",
+COMMAND(interface, add, "<name> type <type> [mesh_id <meshid>] [flags ...]",
 	NL80211_CMD_NEW_INTERFACE, 0, CIB_PHY, handle_interface_add);
-COMMAND(interface, add, "<name> type <type> [mesh_id <meshid>]",
+COMMAND(interface, add, "<name> type <type> [mesh_id <meshid>] [flags ...]",
 	NL80211_CMD_NEW_INTERFACE, 0, CIB_NETDEV, handle_interface_add);
 
 static int handle_interface_del(struct nl_cb *cb,
@@ -156,49 +215,25 @@
 				struct nl_msg *msg,
 				int argc, char **argv)
 {
-	enum nl80211_mntr_flags flag;
-	struct nl_msg *flags;
-	int err;
-
 	if (!argc)
 		return 1;
 
-	flags = nlmsg_alloc();
-	if (!flags) {
+	NLA_PUT_U32(msg, NL80211_ATTR_IFTYPE, NL80211_IFTYPE_MONITOR);
+
+	switch (parse_mntr_flags(&argc, &argv, msg)) {
+	case 0:
+		return 0;
+	case -ENOMEM:
 		fprintf(stderr, "failed to allocate flags\n");
 		return 2;
-	}
-
-	NLA_PUT_U32(msg, NL80211_ATTR_IFTYPE, NL80211_IFTYPE_MONITOR);
-
-	while (argc) {
-		int ok = 0;
-		for (flag = __NL80211_MNTR_FLAG_INVALID + 1;
-		     flag < NL80211_MNTR_FLAG_MAX; flag++) {
-			if (strcmp(*argv, mntr_flags[flag]) == 0) {
-				ok = 1;
-				NLA_PUT_FLAG(flags, flag);
-				break;
-			}
-		}
-		if (!ok) {
-			fprintf(stderr, "unknown flag %s\n", *argv);
-			err = 2;
-			goto out;
-		}
-		argc--;
-		argv++;
-	}
-
-	nla_put_nested(msg, NL80211_ATTR_MNTR_FLAGS, flags);
-
-	err = 0;
-	goto out;
- nla_put_failure:
-	err = -ENOBUFS;
- out:
-	nlmsg_free(flags);
-	return err;
+	case -EINVAL:
+		fprintf(stderr, "unknown flag %s\n", *argv);
+		return 2;
+	default:
+		return 2;
+	}
+ nla_put_failure:
+	return -ENOBUFS;
 }
 COMMAND(set, monitor, "<flag> [...]",
 	NL80211_CMD_SET_INTERFACE, 0, CIB_NETDEV, handle_interface_set);

Modified: iw/trunk/iw.c
URL: http://svn.debian.org/wsvn/pkg-wpa/iw/trunk/iw.c?rev=1274&op=diff
==============================================================================
--- iw/trunk/iw.c (original)
+++ iw/trunk/iw.c Sun Oct 26 17:24:54 2008
@@ -85,6 +85,8 @@
 	fprintf(stderr, "\t--debug\t\tenable netlink debugging\n");
 	fprintf(stderr, "\t--version\tshow version\n");
 	fprintf(stderr, "Commands:\n");
+	fprintf(stderr, "\thelp\n");
+	fprintf(stderr, "\tevent\n");
 	for (cmd = &__start___cmd; cmd < &__stop___cmd;
 	     cmd = (struct cmd *)((char *)cmd + cmd_size)) {
 		if (!cmd->handler || cmd->hidden)
@@ -141,6 +143,8 @@
 
 static int finish_handler(struct nl_msg *msg, void *arg)
 {
+	int *ret = arg;
+	*ret = 0;
 	return NL_SKIP;
 }
 
@@ -248,11 +252,14 @@
 	if (err < 0)
 		goto out;
 
+	err = 1;
+
 	nl_cb_err(cb, NL_CB_CUSTOM, error_handler, &err);
-	nl_cb_set(cb, NL_CB_FINISH, NL_CB_CUSTOM, finish_handler, NULL);
+	nl_cb_set(cb, NL_CB_FINISH, NL_CB_CUSTOM, finish_handler, &err);
 	nl_cb_set(cb, NL_CB_ACK, NL_CB_CUSTOM, ack_handler, &err);
 
-	nl_recvmsgs(state->nl_handle, cb);
+	while (err > 0)
+		nl_recvmsgs(state->nl_handle, cb);
  out:
 	nl_cb_put(cb);
  out_free_msg:
@@ -263,6 +270,62 @@
 	return 2;
 }
 
+static int no_seq_check(struct nl_msg *msg, void *arg)
+{
+	return NL_OK;
+}
+
+static int print_event(struct nl_msg *msg, void *arg)
+{
+	struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
+	struct nlattr *tb[NL80211_ATTR_MAX + 1];
+
+	nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
+		  genlmsg_attrlen(gnlh, 0), NULL);
+                          
+	switch (gnlh->cmd) {
+	case NL80211_CMD_NEW_WIPHY: {
+		printf("wiphy rename: phy #%d to %s\n",
+		       nla_get_u32(tb[NL80211_ATTR_WIPHY]),
+		       nla_get_string(tb[NL80211_ATTR_WIPHY_NAME]));
+		break;
+	}
+	}
+
+	return NL_SKIP;
+}
+
+static int listen_events(struct nl80211_state *state,
+			 int argc, char **argv)
+{
+	int mcid, ret;
+	struct nl_cb *cb = nl_cb_alloc(debug ? NL_CB_DEBUG : NL_CB_DEFAULT);
+
+	if (!cb) {
+		fprintf(stderr, "failed to allocate netlink callbacks\n");
+		return -ENOMEM;
+	}
+
+	mcid = nl_get_multicast_id(state->nl_handle, "nl80211", "config");
+	if (mcid < 0)
+		return mcid;
+
+	ret = nl_socket_add_membership(state->nl_handle, mcid);
+	if (ret)
+		return ret;
+	
+	/* no sequence checking for multicast messages */
+	nl_cb_set(cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, no_seq_check, NULL);
+	nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, print_event, NULL);
+
+	while (1)
+		nl_recvmsgs(state->nl_handle, cb);
+
+	nl_cb_put(cb);
+
+	return 0;
+}
+
 int main(int argc, char **argv)
 {
 	struct nl80211_state nlstate;
@@ -296,7 +359,9 @@
 	if (err)
 		return 1;
 
-	if (strcmp(*argv, "dev") == 0) {
+	if (strcmp(*argv, "event") == 0) {
+		err = listen_events(&nlstate, argc, argv);
+	} else if (strcmp(*argv, "dev") == 0) {
 		argc--;
 		argv++;
 		err = handle_cmd(&nlstate, CIB_NETDEV, argc, argv);

Modified: iw/trunk/iw.h
URL: http://svn.debian.org/wsvn/pkg-wpa/iw/trunk/iw.h?rev=1274&op=diff
==============================================================================
--- iw/trunk/iw.h (original)
+++ iw/trunk/iw.h Sun Oct 26 17:24:54 2008
@@ -58,4 +58,6 @@
 
 const char *iftype_name(enum nl80211_iftype iftype);
 
+int nl_get_multicast_id(struct nl_handle *handle, const char *family, const char *group);
+
 #endif /* __IW_H */

Modified: iw/trunk/nl80211.h
URL: http://svn.debian.org/wsvn/pkg-wpa/iw/trunk/nl80211.h?rev=1274&op=diff
==============================================================================
--- iw/trunk/nl80211.h (original)
+++ iw/trunk/nl80211.h Sun Oct 26 17:24:54 2008
@@ -106,6 +106,12 @@
  * 	to the the specified ISO/IEC 3166-1 alpha2 country code. The core will
  * 	store this as a valid request and then query userspace for it.
  *
+ * @NL80211_CMD_GET_MESH_PARAMS: Get mesh networking properties for the
+ *	interface identified by %NL80211_ATTR_IFINDEX
+ *
+ * @NL80211_CMD_SET_MESH_PARAMS: Set mesh networking properties for the
+ *      interface identified by %NL80211_ATTR_IFINDEX
+ *
  * @NL80211_CMD_MAX: highest used command number
  * @__NL80211_CMD_AFTER_LAST: internal use
  */
@@ -147,6 +153,9 @@
 
 	NL80211_CMD_SET_REG,
 	NL80211_CMD_REQ_SET_REG,
+
+	NL80211_CMD_GET_MESH_PARAMS,
+	NL80211_CMD_SET_MESH_PARAMS,
 
 	/* add new commands above here */
 
@@ -296,6 +305,8 @@
 	NL80211_ATTR_REG_ALPHA2,
 	NL80211_ATTR_REG_RULES,
 
+	NL80211_ATTR_MESH_PARAMS,
+
 	/* add attributes here, update the policy in nl80211.c */
 
 	__NL80211_ATTR_AFTER_LAST,
@@ -452,16 +463,28 @@
  *	an array of nested frequency attributes
  * @NL80211_BAND_ATTR_RATES: supported bitrates in this band,
  *	an array of nested bitrate attributes
+ * @NL80211_BAND_ATTR_HT_MCS_SET: 16-byte attribute containing the MCS set as
+ *	defined in 802.11n
+ * @NL80211_BAND_ATTR_HT_CAPA: HT capabilities, as in the HT information IE
+ * @NL80211_BAND_ATTR_HT_AMPDU_FACTOR: A-MPDU factor, as in 11n
+ * @NL80211_BAND_ATTR_HT_AMPDU_DENSITY: A-MPDU density, as in 11n
  */
 enum nl80211_band_attr {
 	__NL80211_BAND_ATTR_INVALID,
 	NL80211_BAND_ATTR_FREQS,
 	NL80211_BAND_ATTR_RATES,
 
+	NL80211_BAND_ATTR_HT_MCS_SET,
+	NL80211_BAND_ATTR_HT_CAPA,
+	NL80211_BAND_ATTR_HT_AMPDU_FACTOR,
+	NL80211_BAND_ATTR_HT_AMPDU_DENSITY,
+
 	/* keep last */
 	__NL80211_BAND_ATTR_AFTER_LAST,
 	NL80211_BAND_ATTR_MAX = __NL80211_BAND_ATTR_AFTER_LAST - 1
 };
+
+#define NL80211_BAND_ATTR_HT_CAPA NL80211_BAND_ATTR_HT_CAPA
 
 /**
  * enum nl80211_frequency_attr - frequency attributes
@@ -594,4 +617,79 @@
 	NL80211_MNTR_FLAG_MAX = __NL80211_MNTR_FLAG_AFTER_LAST - 1
 };
 
+/**
+ * enum nl80211_meshconf_params - mesh configuration parameters
+ *
+ * Mesh configuration parameters
+ *
+ * @__NL80211_MESHCONF_INVALID: internal use
+ *
+ * @NL80211_MESHCONF_RETRY_TIMEOUT: specifies the initial retry timeout in
+ * millisecond units, used by the Peer Link Open message
+ *
+ * @NL80211_MESHCONF_CONFIRM_TIMEOUT: specifies the inital confirm timeout, in
+ * millisecond units, used by the peer link management to close a peer link
+ *
+ * @NL80211_MESHCONF_HOLDING_TIMEOUT: specifies the holding timeout, in
+ * millisecond units
+ *
+ * @NL80211_MESHCONF_MAX_PEER_LINKS: maximum number of peer links allowed
+ * on this mesh interface
+ *
+ * @NL80211_MESHCONF_MAX_RETRIES: specifies the maximum number of peer link
+ * open retries that can be sent to establish a new peer link instance in a
+ * mesh
+ *
+ * @NL80211_MESHCONF_TTL: specifies the value of TTL field set at a source mesh
+ * point.
+ *
+ * @NL80211_MESHCONF_AUTO_OPEN_PLINKS: whether we should automatically
+ * open peer links when we detect compatible mesh peers.
+ *
+ * @NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES: the number of action frames
+ * containing a PREQ that an MP can send to a particular destination (path
+ * target)
+ *
+ * @NL80211_MESHCONF_PATH_REFRESH_TIME: how frequently to refresh mesh paths
+ * (in milliseconds)
+ *
+ * @NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT: minimum length of time to wait
+ * until giving up on a path discovery (in milliseconds)
+ *
+ * @NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT: The time (in TUs) for which mesh
+ * points receiving a PREQ shall consider the forwarding information from the
+ * root to be valid. (TU = time unit)
+ *
+ * @NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL: The minimum interval of time (in
+ * TUs) during which an MP can send only one action frame containing a PREQ
+ * reference element
+ *
+ * @NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME: The interval of time (in TUs)
+ * that it takes for an HWMP information element to propagate across the mesh
+ *
+ * @NL80211_MESHCONF_ATTR_MAX: highest possible mesh configuration attribute
+ *
+ * @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use
+ */
+enum nl80211_meshconf_params {
+	__NL80211_MESHCONF_INVALID,
+	NL80211_MESHCONF_RETRY_TIMEOUT,
+	NL80211_MESHCONF_CONFIRM_TIMEOUT,
+	NL80211_MESHCONF_HOLDING_TIMEOUT,
+	NL80211_MESHCONF_MAX_PEER_LINKS,
+	NL80211_MESHCONF_MAX_RETRIES,
+	NL80211_MESHCONF_TTL,
+	NL80211_MESHCONF_AUTO_OPEN_PLINKS,
+	NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES,
+	NL80211_MESHCONF_PATH_REFRESH_TIME,
+	NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT,
+	NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT,
+	NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL,
+	NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME,
+
+	/* keep last */
+	__NL80211_MESHCONF_ATTR_AFTER_LAST,
+	NL80211_MESHCONF_ATTR_MAX = __NL80211_MESHCONF_ATTR_AFTER_LAST - 1
+};
+
 #endif /* __LINUX_NL80211_H */

Modified: iw/trunk/version.sh
URL: http://svn.debian.org/wsvn/pkg-wpa/iw/trunk/version.sh?rev=1274&op=diff
==============================================================================
--- iw/trunk/version.sh (original)
+++ iw/trunk/version.sh Sun Oct 26 17:24:54 2008
@@ -1,8 +1,8 @@
 #!/bin/sh
 
-VERSION="0.9.5"
+VERSION="0.9.6"
+OUT="version.h"
 
-(
 if head=`git rev-parse --verify HEAD 2>/dev/null`; then
 	git update-index --refresh --unmerged > /dev/null
 	descr=$(git describe)
@@ -11,13 +11,12 @@
 	# is correct...
 	[ "${descr%%-*}" = "v$VERSION" ] || exit 2
 	
-	echo -n '#define IW_VERSION "'
-	echo -n "${descr#v}"
+	echo -n '#define IW_VERSION "' > "$OUT"
+	echo -n "${descr#v}" >> "$OUT"
 	if git diff-index --name-only HEAD | read dummy ; then
-		echo -n "-dirty"
+		echo -n "-dirty" >> "$OUT"
 	fi
-	echo '"'
+	echo '"' >> "$OUT"
 else
-echo "#define IW_VERSION \"$VERSION-nogit\""
+echo "#define IW_VERSION \"$VERSION-nogit\"" > "$OUT"
 fi
-) > version.h




More information about the Pkg-wpa-devel mailing list