[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