Project import
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..876bd85 --- /dev/null +++ b/Makefile
@@ -0,0 +1,123 @@ +# +# Copyright (c) 2010-2011 Nest, Inc. +# All rights reserved. +# +# This document is the property of Nest. It is considered +# confidential and proprietary information. +# +# This document may not be reproduced or transmitted in any form, +# in whole or in part, without the express written permission of +# Nest. +# +# Description: +# This file is for iw, a library and set of utilities for +# manipulating Linux nl80211-based wireless network interfaces. +# + +BuildConfigSpecialized := No +BuildProductSpecialized := Yes + +include pre.mak + +PackageRoot := ./$(IwPackageName) +PackageExtension := tar.bz2 +PackageSeparator := +PackageVersion := + +PackagePatchArgs := -p1 + +PackageArchive := $(IwPackageName)/$(IwPackageName).$(PackageExtension) +PackageSourceDir := $(IwPackageName)/$(IwPackageName)$(PackageSeparator)$(PackageVersion) +PackagePatchDir := $(IwPackageName)/$(IwPackageName).patches + +PackageBuildMakefile = $(call GenerateBuildPaths,Makefile) + +LicenseSourceFile := COPYING +LicenseSourcePath := $(addprefix $(PackageSourceDir)/,$(LicenseSourceFile)) + +CleanPaths += $(PackageLicenseFile) + +NetlinkDir := sw/tps/libnl +NetlinkIncDir := $(call GenerateResultPaths,$(NetlinkDir),usr/include) +NetlinkLibDir := $(call GenerateResultPaths,$(NetlinkDir),usr/lib) + +all: $(PackageDefaultGoal) + +# Generate the package license contents. + +$(LicenseSourcePath): source + +$(PackageLicenseFile): $(LicenseSourcePath) + $(copy-result) + +# Extract the source from the archive and apply patches, if any. + +$(PackageSourceDir): $(PackageArchive) $(PackagePatchPaths) + $(call expand-archive,$(PackageArchive),$(PackageRoot)) + $(Verbose)touch $@ + $(call patch-directory,$(PackageSourceDir),$(PackagePatchArgs),$(PackagePatchPaths)) + +# Prepare the sources. + +.PHONY: source +source: | $(PackageSourceDir) + +# Patch the sources, if necessary. + +.PHONY: patch +patch: source + +# Generate the package build makefile. + +$(PackageBuildMakefile): | $(PackageSourceDir) $(BuildDirectory) + $(call create-links,$(CURDIR)/$(PackageSourceDir),$(BuildDirectory)) + +# Configure the source for building. + +.PHONY: configure +configure: source $(PackageBuildMakefile) + +# Build the source. +# +# We have to unset MAKEFLAGS since they confuse the package build otherwise. + +.PHONY: build +build: configure | $(BuildDirectory) + $(Verbose)unset MAKEFLAGS && \ + $(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \ + CC="$(CC)" CXX="$(CXX)" AR=$(AR) NM=$(NM) RANLIB=$(RANLIB) STRIP=$(STRIP) \ + INSTALL="$(INSTALL) $(INSTALLFLAGS)" \ + NLLIBNAME="libnl-2.0" \ + NLCFLAGS="$(call ToolGenerateIncludeArgument,$(NetlinkIncDir))" \ + NLLDFLAGS="-L$(NetlinkLibDir)" \ + all + +# Stage the build to a temporary installation area. +# +# We have to unset MAKEFLAGS since they confuse the package build otherwise. + +.PHONY: stage stage-default stage-headers +stage: stage-default stage-headers + +stage-default: build | $(ResultDirectory) + $(Verbose)unset MAKEFLAGS && \ + $(MAKE) $(JOBSFLAG) -C $(BuildDirectory) \ + NLLIBNAME="libnl-2.0" \ + DESTDIR=$(ResultDirectory) \ + install + +ResultHeaderDir = $(ResultDirectory)/usr/include +SourceHeaderPaths = $(wildcard $(BuildDirectory)/*.h) + +$(ResultHeaderDir): + $(create-directory) + +stage-headers: build | $(ResultHeaderDir) + install --mode=0664 $(SourceHeaderPaths) $(ResultHeaderDir) + +clean: + $(Verbose)$(RM) $(RMFLAGS) -r $(PackageSourceDir) + $(Verbose)$(RM) $(RMFLAGS) -r $(BuildDirectory) + $(Verbose)$(RM) $(RMFLAGS) -r $(ResultDirectory) + +include post.mak
diff --git a/iw.url b/iw.url new file mode 100644 index 0000000..a3891cc --- /dev/null +++ b/iw.url
@@ -0,0 +1 @@ +git://git.sipsolutions.net/iw.git
diff --git a/iw.version b/iw.version new file mode 100644 index 0000000..ea3f0d7 --- /dev/null +++ b/iw.version
@@ -0,0 +1 @@ +0.9.22
diff --git a/iw_0.9.22/iw_0.9.22.patches/iw-50.description b/iw_0.9.22/iw_0.9.22.patches/iw-50.description new file mode 100644 index 0000000..ec9fb0f --- /dev/null +++ b/iw_0.9.22/iw_0.9.22.patches/iw-50.description
@@ -0,0 +1,3 @@ +This patch synchronizes the version script with the like script from the rfkill package and eliminates the GIT repository label version +checking because it will invariably fail when the package is included as a subtree or submodule of a larger GIT repository. +
diff --git a/iw_0.9.22/iw_0.9.22.patches/iw-50.patch b/iw_0.9.22/iw_0.9.22.patches/iw-50.patch new file mode 100644 index 0000000..fa623cc --- /dev/null +++ b/iw_0.9.22/iw_0.9.22.patches/iw-50.patch
@@ -0,0 +1,33 @@ +diff -aruN a/version.sh b/version.sh +--- a/version.sh 2011-11-04 03:53:29.000000000 -0700 ++++ b/version.sh 2011-12-15 14:17:51.000000000 -0800 +@@ -1,20 +1,17 @@ + #!/bin/sh + + VERSION="0.9.22" +-OUT="$1" +- +-if head=`git rev-parse --verify HEAD 2>/dev/null`; then +- git update-index --refresh --unmerged > /dev/null +- descr=$(git describe) + +- # on git builds check that the version number above +- # is correct... +- [ "${descr%%-*}" = "v$VERSION" ] || exit 2 ++SUFFIX= ++if test "x$1" = x--suffix; then ++ shift ++ SUFFIX="-$1" ++ shift ++fi ++OUT="$1" + +- v="${descr#v}" +- if git diff-index --name-only HEAD | read dummy ; then +- v="$v"-dirty +- fi ++if test "x$SUFFIX" != 'x'; then ++ v="$VERSION$SUFFIX" + else + v="$VERSION" + fi
diff --git a/iw_0.9.22/iw_0.9.22.patches/iw-51.description b/iw_0.9.22/iw_0.9.22.patches/iw-51.description new file mode 100644 index 0000000..7edbcbe --- /dev/null +++ b/iw_0.9.22/iw_0.9.22.patches/iw-51.description
@@ -0,0 +1 @@ +This patch allows the package builder to specify the libnl version being built against externally to pkg-config.
diff --git a/iw_0.9.22/iw_0.9.22.patches/iw-51.patch b/iw_0.9.22/iw_0.9.22.patches/iw-51.patch new file mode 100644 index 0000000..05d300f --- /dev/null +++ b/iw_0.9.22/iw_0.9.22.patches/iw-51.patch
@@ -0,0 +1,57 @@ +diff -aruN iw-0.9.22/Makefile iw-0.9.22.N/Makefile +--- iw-0.9.22/Makefile 2013-06-07 18:36:50.000000000 -0700 ++++ iw-0.9.22.N/Makefile 2013-06-10 12:09:36.006767045 -0700 +@@ -22,6 +22,31 @@ + OBJS += sections.o + ALL = iw + ++ifdef NLLIBNAME ++ ++NLLIBS = -lnl ++ ++ifeq ($(NLLIBNAME),libnl-1) ++NL1FOUND := Y ++endif ++ ++ifeq ($(NLLIBNAME),libnl-2.0) ++NL2FOUND := Y ++endif ++ ++ifdef NLCFLAGS ++CFLAGS += $(NLCFLAGS) ++endif ++ ++ifdef NLLDFLAGS ++LDFLAGS += $(NLLDFLAGS) ++endif ++ ++ifdef NLLIBS ++LIBS += $(NLLIBS) ++endif ++ ++else + NL1FOUND := $(shell $(PKG_CONFIG) --atleast-version=1 libnl-1 && echo Y) + NL2FOUND := $(shell $(PKG_CONFIG) --atleast-version=2 libnl-2.0 && echo Y) + +@@ -30,8 +55,6 @@ + endif + + ifeq ($(NL2FOUND),Y) +-CFLAGS += -DCONFIG_LIBNL20 +-LIBS += -lnl-genl + NLLIBNAME = libnl-2.0 + endif + +@@ -41,6 +64,12 @@ + + LIBS += $(shell $(PKG_CONFIG) --libs $(NLLIBNAME)) + CFLAGS += $(shell $(PKG_CONFIG) --cflags $(NLLIBNAME)) ++endif ++ ++ifeq ($(NL2FOUND),Y) ++CFLAGS += -DCONFIG_LIBNL20 ++LIBS += -lnl-genl ++endif + + ifeq ($(V),1) + Q=
diff --git a/iw_0.9.22/iw_0.9.22.patches/iw-52.description b/iw_0.9.22/iw_0.9.22.patches/iw-52.description new file mode 100644 index 0000000..7157b47 --- /dev/null +++ b/iw_0.9.22/iw_0.9.22.patches/iw-52.description
@@ -0,0 +1 @@ +This patch adds the ability to add/delete/start/stop device side tcp keep alives using iw
diff --git a/iw_0.9.22/iw_0.9.22.patches/iw-52.patch b/iw_0.9.22/iw_0.9.22.patches/iw-52.patch new file mode 100644 index 0000000..6a4e7dd --- /dev/null +++ b/iw_0.9.22/iw_0.9.22.patches/iw-52.patch
@@ -0,0 +1,397 @@ +diff -aruN iw_0.9.22/keepalive.c iw_0.9.22.N/keepalive.c +--- iw_0.9.22/keepalive.c 1969-12-31 16:00:00.000000000 -0800 ++++ iw_0.9.22.N/keepalive.c 2015-03-27 17:02:09.738162006 -0700 +@@ -0,0 +1,287 @@ ++#include <net/if.h> ++#include <errno.h> ++#include <string.h> ++#include <stdlib.h> ++ ++#include <netlink/genl/genl.h> ++#include <netlink/genl/family.h> ++#include <netlink/genl/ctrl.h> ++#include <netlink/msg.h> ++#include <netlink/attr.h> ++ ++#include "nl80211.h" ++#include "iw.h" ++ ++typedef uint8_t u8; ++typedef uint16_t u16; ++typedef uint32_t u32; ++ ++#define CFG80211_KEEP_ALIVE_PAYLOAD_MAX_LENGTH 64 ++ ++struct cfg80211_keepalive_request { ++ u32 interval; ++ u8 cmd; /* 0: ADD; 1: DEL: 2: START; 3: STOP */ ++ u8 index; ++ u8 trig; ++ u8 dst_macaddr[ETH_ALEN]; ++ u8 payload_len; ++ u8 payload[CFG80211_KEEP_ALIVE_PAYLOAD_MAX_LENGTH]; ++}; ++ ++struct cfg80211_keepalive_request keepalive_req; ++ ++SECTION(keepalive); ++ ++static void keepalive_hex_dump(char *title, u8 *buf, size_t len) ++{ ++ int i; ++ ++ printf("%s - hexdump(len=%lu):", title, (unsigned long) len); ++ ++ for (i = 0; i < len; i++) ++ printf(" %02x", buf[i]); ++ printf("\n"); ++} ++ ++static int nl80211_parse_klv_req(const char *s) ++{ ++ long i; ++ char *endp; ++ ++ i = strtol(s, &endp, 10); ++ ++ if(endp == s) ++ return -1; ++ return i; ++} ++ ++static int nl80211_str2hex(u8 *src, u8 *dst, int src_len) ++{ ++ int i, bytecount=0; ++ ++ if (src_len & 0x01) ++ return -2; ++ ++ for (i=0; i<src_len; i++, src++) { ++ if (i != 0 && i%2 == 0) { ++ dst++; ++ bytecount++; ++ } else { ++ *dst <<= 4; ++ } ++ ++ if ((*src >= '0') && (*src <= '9')) ++ *dst += *src - '0'; ++ else if ((*src >= 'A') && (*src <= 'F')) ++ *dst += *src - 'A' + 10; ++ else if ((*src >= 'a') && (*src <= 'f')) ++ *dst += *src - 'a' + 10; ++ else { ++ return -1; ++ } ++ } ++ ++ bytecount++; ++ ++ return bytecount; ++} ++ ++static int build_klv_req(struct nl_msg *msg, int klv_cmd, u8 index, int interval, u8 trig, u8 *dst_macaddr, u8 payload_len, u8 *payload) ++{ ++ int ret = -1; ++ ++ if (!msg) ++ return -1; ++ ++ NLA_PUT_U32(msg, NL80211_ATTR_KLV_TYPE, klv_cmd); ++ NLA_PUT_U32(msg, NL80211_ATTR_KLV_INDEX, index); ++ ++ if (klv_cmd == 0 || klv_cmd == 1) { ++ ++ NLA_PUT_U32(msg, NL80211_ATTR_KLV_INTVL, interval); ++ NLA_PUT_U32 (msg, NL80211_ATTR_KLV_TRIG, trig); ++ ++ if (payload != NULL) { ++ if (dst_macaddr) { ++ keepalive_hex_dump("nl80211 klv_dstmac: ", dst_macaddr, ETH_ALEN); ++ NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, dst_macaddr); ++ } ++ ++ keepalive_hex_dump("nl80211 klv_payload: ", payload, payload_len); ++ NLA_PUT(msg, NL80211_ATTR_KLV_PAYLOAD, payload_len, payload); ++ } ++ } ++ ++ ret = 0; ++ ++ nla_put_failure: ++ return ret; ++} ++ ++static int nl80211_change_klv_req(char **cmdptr, int cmdtype, struct nl_msg *msg) ++{ ++ u8 index = 1, trig_type = 1, payload_len = 0; ++ u8 dst_macaddr[ETH_ALEN]; ++ u32 interval_ms = 10; ++ u8 *payload=NULL; ++ int val; ++ u8 dst_payload[64]; ++ ++ switch(cmdtype) { ++ case 0: /* KLV-ADD */ ++ val = nl80211_parse_klv_req(*cmdptr++); ++ /* valid index # is [1, 3]. Index #0 is reserved for driver internal use */ ++ if (val <= 0 || val > 3) { ++ printf("invalid index (%d)\n", val); ++ return -1; ++ } ++ index = val; ++ ++ val = nl80211_parse_klv_req(*cmdptr++); ++ /* limit klv interval to [10 ms, 50000 ms] */ ++ if (val < 1000 || val > 55000) { ++ printf("Keeplalive interval is out of range.\n"); ++ return -1; ++ } ++ interval_ms = val; ++ ++ val = nl80211_parse_klv_req(*cmdptr++); ++ /* valid trig type is limited to 0 or 1 */ ++ if (val < 0 || val > 1) { ++ printf("Invalid keepalive trigger type.\n"); ++ return -1; ++ } ++ trig_type = val; ++ ++ memset(dst_macaddr, 0, ETH_ALEN); ++ if (nl80211_str2hex((u8 *)(*cmdptr++), dst_macaddr, 2*ETH_ALEN) <= 0) { ++ printf("Invalid mac address\n"); ++ return -1; ++ } ++ ++ val = strlen(*cmdptr); /* klv payload length must be <= 64 bytes */ ++ if (val > 128) { ++ printf("Payload is too long\n"); ++ return -1; ++ } ++ ++ memset(dst_payload, 0, 64); ++ if ((payload_len=nl80211_str2hex((u8 *)(*cmdptr), dst_payload, val)) < 0) { ++ printf("Keepalive payload is invalid\n"); ++ return -1; ++ } ++ ++ break; ++ ++ case 1: /* KLV-DEL */ ++ index = nl80211_parse_klv_req(cmdptr[0]); ++ printf("index = %d\n", index); ++ /* index #0 is reserved for driver internal klv type */ ++ if (index <= 0 || index > 3) { ++ return -1; ++ } ++ ++ interval_ms = 10000; ++ break; ++ ++ case 2: /* KLV-START */ ++ case 3: /* KLV-STOP */ ++ break; ++ ++ case 4: /* KLV-SHOW */ ++ printf("Not supported\n"); ++ val = 0; ++ return val; ++ ++ default: ++ return -1; ++ } ++ ++ val = build_klv_req(msg, cmdtype, index, interval_ms, trig_type, &dst_macaddr[0], payload_len, dst_payload); ++ ++ return val; ++} ++ ++static int handle_keepalive_add(struct nl80211_state *state, struct nl_cb *cb, ++ struct nl_msg *msg, int argc, char **argv) ++{ ++ int ret; ++ ++ if (argc != 5) { ++ printf("Command parameters incorrect.\n"); ++ return -1; ++ } ++ ++ ret = nl80211_change_klv_req(argv, 0, msg); ++ printf("ret is %d\n", ret); ++ return ret; ++} ++ ++static int handle_keepalive_delete(struct nl80211_state *state, struct nl_cb *cb, ++ struct nl_msg *msg, int argc, char **argv) ++{ ++ int ret; ++ ++ if (argc != 1) { ++ printf("Command parameters incorrect.\n"); ++ return -1; ++ } ++ ++ ret = nl80211_change_klv_req(argv, 1, msg); ++ return ret; ++} ++ ++static int handle_keepalive_start(struct nl80211_state *state, struct nl_cb *cb, ++ struct nl_msg *msg, int argc, char **argv) ++{ ++ int ret; ++ ret = nl80211_change_klv_req(argv, 2, msg); ++ return ret; ++} ++ ++static int handle_keepalive_stop(struct nl80211_state *state, struct nl_cb *cb, ++ struct nl_msg *msg, int argc, char **argv) ++{ ++ int ret; ++ ret = nl80211_change_klv_req(argv, 3, msg); ++ return ret; ++} ++ ++static int print_keepalive_handler(struct nl_msg *msg, void *arg) ++{ ++ int *ret = arg; ++ if (arg != NULL) ++ *ret = 0; ++ return 0; ++} ++ ++static int handle_keepalive_show(struct nl80211_state *state, struct nl_cb *cb, ++ struct nl_msg *msg, int argc, char **argv) ++{ ++ int ret; ++ ++ printf("handle_keepalive_show\n"); ++ nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, ++ print_keepalive_handler, &ret); ++ ++ return 0; ++} ++ ++COMMAND(keepalive, add, "<index> <interval> <trigger_type> <dst_macaddr> <payload>", ++ NL80211_CMD_SET_KEEPALIVE, 0, CIB_NETDEV, handle_keepalive_add, ++ "Configure keep alive feature"); ++ ++COMMAND(keepalive, del, "<index>", ++ NL80211_CMD_SET_KEEPALIVE, 0, CIB_NETDEV, handle_keepalive_delete, ++ "Configure keep alive feature"); ++ ++COMMAND(keepalive, start, "", ++ NL80211_CMD_SET_KEEPALIVE, 0, CIB_NETDEV, handle_keepalive_start, ++ "Configure keep alive feature"); ++ ++COMMAND(keepalive, stop, "", ++ NL80211_CMD_SET_KEEPALIVE, 0, CIB_NETDEV, handle_keepalive_stop, ++ "Configure keep alive feature"); ++ ++COMMAND(keepalive, show, "", NL80211_CMD_GET_KEEPALIVE, 0, CIB_NETDEV, handle_keepalive_show, ++ "Show keepalive status."); +diff -aruN iw_0.9.22/Makefile iw_0.9.22.N/Makefile +--- iw_0.9.22/Makefile 2015-03-27 17:09:36.094185681 -0700 ++++ iw_0.9.22.N/Makefile 2015-03-27 17:02:09.738162006 -0700 +@@ -18,7 +18,7 @@ + interface.o ibss.o station.o survey.o util.o \ + mesh.o mpath.o scan.o reg.o version.o \ + reason.o status.o connect.o link.o offch.o ps.o cqm.o \ +- bitrate.o wowlan.o roc.o ++ bitrate.o wowlan.o roc.o keepalive.o + OBJS += sections.o + ALL = iw + +diff -aruN iw_0.9.22/nl80211.h iw_0.9.22.N/nl80211.h +--- iw_0.9.22/nl80211.h 2013-06-07 18:36:50.000000000 -0700 ++++ iw_0.9.22.N/nl80211.h 2015-03-27 17:06:38.766176275 -0700 +@@ -616,6 +616,8 @@ + + NL80211_CMD_SET_REKEY_OFFLOAD, + ++ NL80211_CMD_GET_KEEPALIVE, ++ NL80211_CMD_SET_KEEPALIVE, + /* add new commands above here */ + + /* used to define NL80211_CMD_MAX below */ +@@ -1217,6 +1219,81 @@ + NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS, + NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN, + ++ NL80211_ATTR_SCAN_SUPP_RATES, ++ ++ NL80211_ATTR_HIDDEN_SSID, ++ ++ NL80211_ATTR_IE_PROBE_RESP, ++ NL80211_ATTR_IE_ASSOC_RESP, ++ ++ NL80211_ATTR_STA_WME, ++ NL80211_ATTR_SUPPORT_AP_UAPSD, ++ ++ NL80211_ATTR_ROAM_SUPPORT, ++ ++ NL80211_ATTR_SCHED_SCAN_MATCH, ++ NL80211_ATTR_MAX_MATCH_SETS, ++ ++ NL80211_ATTR_PMKSA_CANDIDATE, ++ ++ NL80211_ATTR_TX_NO_CCK_RATE, ++ ++ NL80211_ATTR_TDLS_ACTION, ++ NL80211_ATTR_TDLS_DIALOG_TOKEN, ++ NL80211_ATTR_TDLS_OPERATION, ++ NL80211_ATTR_TDLS_SUPPORT, ++ NL80211_ATTR_TDLS_EXTERNAL_SETUP, ++ ++ NL80211_ATTR_DEVICE_AP_SME, ++ ++ NL80211_ATTR_DONT_WAIT_FOR_ACK, ++ ++ NL80211_ATTR_FEATURE_FLAGS, ++ ++ NL80211_ATTR_PROBE_RESP_OFFLOAD, ++ ++ NL80211_ATTR_PROBE_RESP, ++ ++ NL80211_ATTR_DFS_REGION, ++ ++ NL80211_ATTR_DISABLE_HT, ++ NL80211_ATTR_HT_CAPABILITY_MASK, ++ ++ NL80211_ATTR_NOACK_MAP, ++ ++ NL80211_ATTR_INACTIVITY_TIMEOUT, ++ ++ NL80211_ATTR_RX_SIGNAL_DBM, ++ ++ NL80211_ATTR_BG_SCAN_PERIOD, ++ ++ NL80211_ATTR_WDEV, ++ ++ NL80211_ATTR_USER_REG_HINT_TYPE, ++ ++ /* leave some room for new attributes in nl80211 updates */ ++ NL80211_ATTR_IM_SCAN_RESULT = NL80211_ATTR_BG_SCAN_PERIOD + 10, ++ NL80211_ATTR_IM_SCAN_RESULT_MIN_RSSI, ++ ++ NL80211_ATTR_SCAN_MIN_DWELL, ++ NL80211_ATTR_SCAN_MAX_DWELL, ++ NL80211_ATTR_SCAN_NUM_PROBE, ++ ++ NL80211_ATTR_SCHED_SCAN_SHORT_INTERVAL, ++ NL80211_ATTR_SCHED_SCAN_NUM_SHORT_INTERVALS, ++ ++ NL80211_ATTR_ROAMING_DISABLED, ++ NL80211_ATTR_CH_SWITCH_COUNT, ++ NL80211_ATTR_CH_SWITCH_BLOCK_TX, ++ NL80211_ATTR_CH_SWITCH_POST_BLOCK_TX, ++ ++ NL80211_ATTR_KLVDATA, ++ NL80211_ATTR_KLV_TYPE, ++ NL80211_ATTR_KLV_INTVL, ++ NL80211_ATTR_KLV_INDEX, ++ NL80211_ATTR_KLV_TRIG, ++ NL80211_ATTR_KLV_PAYLOAD, ++ + /* add attributes here, update the policy in nl80211.c */ + + __NL80211_ATTR_AFTER_LAST,
diff --git a/iw_0.9.22/iw_0.9.22.patches/iw-54.description b/iw_0.9.22/iw_0.9.22.patches/iw-54.description new file mode 100644 index 0000000..3a401f0 --- /dev/null +++ b/iw_0.9.22/iw_0.9.22.patches/iw-54.description
@@ -0,0 +1 @@ +Add the enums for drop action for wow filters. iw latest version still does not define these enumerations. These defines are taken from nl80211.h sitting in compat-wireless directory.
diff --git a/iw_0.9.22/iw_0.9.22.patches/iw-54.patch b/iw_0.9.22/iw_0.9.22.patches/iw-54.patch new file mode 100644 index 0000000..451e280 --- /dev/null +++ b/iw_0.9.22/iw_0.9.22.patches/iw-54.patch
@@ -0,0 +1,35 @@ +diff --git a/nl80211.h b/nl80211.h +index 7ba71e4..3ef44f1 100644 +--- a/nl80211.h ++++ b/nl80211.h +@@ -2222,12 +2222,30 @@ enum nl80211_wowlan_packet_pattern_attr { + __NL80211_WOWLAN_PKTPAT_INVALID, + NL80211_WOWLAN_PKTPAT_MASK, + NL80211_WOWLAN_PKTPAT_PATTERN, ++ NL80211_WOWLAN_PKTPAT_ACTION = NL80211_WOWLAN_PKTPAT_PATTERN + 10, + + NUM_NL80211_WOWLAN_PKTPAT, + MAX_NL80211_WOWLAN_PKTPAT = NUM_NL80211_WOWLAN_PKTPAT - 1, + }; + + /** ++ * enum nl80211_wowlan_action - WoWLAN packet pattern action ++ * @NL80211_WOWLAN_ACTION_ALLOW: this pattern should wake up the host ++ * and the packet should be forwarded to the host unless this packet ++ * matches a DROP rule. ++ * @NL80211_WOWLAN_ACTION_DROP: a packet containing this pattern shouldn't ++ * wake up the host. ++ */ ++enum nl80211_wowlan_action { ++ NL80211_WOWLAN_ACTION_ALLOW, ++ NL80211_WOWLAN_ACTION_DROP, ++ ++ /* keep last */ ++ NUM_NL80211_WOWLAN_ACTION, ++ MAX_NL80211_WOWLAN_ACTION = NUM_NL80211_WOWLAN_ACTION - 1, ++}; ++ ++/** + * struct nl80211_wowlan_pattern_support - pattern support information + * @max_patterns: maximum number of patterns supported + * @min_pattern_len: minimum length of each pattern
diff --git a/iw_0.9.22/iw_0.9.22.tar.bz2 b/iw_0.9.22/iw_0.9.22.tar.bz2 new file mode 100644 index 0000000..dcb1533 --- /dev/null +++ b/iw_0.9.22/iw_0.9.22.tar.bz2 Binary files differ
diff --git a/iw_3.10/iw_3.10.patches/iw-50.description b/iw_3.10/iw_3.10.patches/iw-50.description new file mode 100644 index 0000000..ec9fb0f --- /dev/null +++ b/iw_3.10/iw_3.10.patches/iw-50.description
@@ -0,0 +1,3 @@ +This patch synchronizes the version script with the like script from the rfkill package and eliminates the GIT repository label version +checking because it will invariably fail when the package is included as a subtree or submodule of a larger GIT repository. +
diff --git a/iw_3.10/iw_3.10.patches/iw-50.patch b/iw_3.10/iw_3.10.patches/iw-50.patch new file mode 100644 index 0000000..364439b --- /dev/null +++ b/iw_3.10/iw_3.10.patches/iw-50.patch
@@ -0,0 +1,33 @@ +diff -aruN iw-3.10/version.sh iw-3.10.n/version.sh +--- iw-3.10/version.sh 2013-05-02 00:29:10.000000000 -0700 ++++ iw-3.10.n/version.sh 2015-03-24 12:24:03.355548918 -0700 +@@ -1,20 +1,17 @@ + #!/bin/sh + + VERSION="3.10" +-OUT="$1" +- +-if head=`git rev-parse --verify HEAD 2>/dev/null`; then +- git update-index --refresh --unmerged > /dev/null +- descr=$(git describe) + +- # on git builds check that the version number above +- # is correct... +- [ "${descr%%-*}" = "v$VERSION" ] || exit 2 ++SUFFIX= ++if test "x$1" = x--suffix; then ++ shift ++ SUFFIX="-$1" ++ shift ++fi ++OUT="$1" + +- v="${descr#v}" +- if git diff-index --name-only HEAD | read dummy ; then +- v="$v"-dirty +- fi ++if test "x$SUFFIX" != 'x'; then ++ v="$VERSION$SUFFIX" + else + v="$VERSION" + fi
diff --git a/iw_3.10/iw_3.10.patches/iw-51.description b/iw_3.10/iw_3.10.patches/iw-51.description new file mode 100644 index 0000000..7edbcbe --- /dev/null +++ b/iw_3.10/iw_3.10.patches/iw-51.description
@@ -0,0 +1 @@ +This patch allows the package builder to specify the libnl version being built against externally to pkg-config.
diff --git a/iw_3.10/iw_3.10.patches/iw-51.patch b/iw_3.10/iw_3.10.patches/iw-51.patch new file mode 100644 index 0000000..471d120 --- /dev/null +++ b/iw_3.10/iw_3.10.patches/iw-51.patch
@@ -0,0 +1,82 @@ +diff -aruN iw-3.10/Makefile iw-3.10.n/Makefile +--- iw-3.10/Makefile 2013-05-02 00:29:10.000000000 -0700 ++++ iw-3.10.n/Makefile 2015-03-24 12:35:45.731563338 -0700 +@@ -25,6 +25,31 @@ + + ALL = iw + ++ifdef NLLIBNAME ++ ++NLLIBS = -lnl ++ ++ifeq ($(NLLIBNAME),libnl-1) ++NL1FOUND := Y ++endif ++ ++ifeq ($(NLLIBNAME),libnl-2.0) ++NL2FOUND := Y ++endif ++ ++ifdef NLCFLAGS ++CFLAGS += $(NLCFLAGS) ++endif ++ ++ifdef NLLDFLAGS ++LDFLAGS += $(NLLDFLAGS) ++endif ++ ++ifdef NLLIBS ++LIBS += $(NLLIBS) ++endif ++ ++else + ifeq ($(NO_PKG_CONFIG),) + NL3xFOUND := $(shell $(PKG_CONFIG) --atleast-version=3.2 libnl-3.0 && echo Y) + ifneq ($(NL3xFOUND),Y) +@@ -39,14 +64,13 @@ + endif + endif + endif ++endif + + ifeq ($(NL1FOUND),Y) + NLLIBNAME = libnl-1 + endif + + ifeq ($(NL2FOUND),Y) +-CFLAGS += -DCONFIG_LIBNL20 +-LIBS += -lnl-genl + NLLIBNAME = libnl-2.0 + endif + +@@ -80,6 +104,11 @@ + CFLAGS += $(shell $(PKG_CONFIG) --cflags $(NLLIBNAME)) + endif # NO_PKG_CONFIG + ++ifeq ($(NL2FOUND),Y) ++CFLAGS += -DCONFIG_LIBNL20 ++LIBS += -lnl-genl ++endif ++ + ifeq ($(V),1) + Q= + NQ=true +@@ -88,7 +117,17 @@ + NQ=echo + endif + +-all: $(ALL) ++all: version_check $(ALL) ++ ++version_check: ++ifeq ($(NL2FOUND),Y) ++else ++ifeq ($(NL1FOUND),Y) ++else ++ $(error No libnl found) ++endif ++endif ++ + + VERSION_OBJS := $(filter-out version.o, $(OBJS)) +
diff --git a/iw_3.10/iw_3.10.patches/iw-52.description b/iw_3.10/iw_3.10.patches/iw-52.description new file mode 100644 index 0000000..7157b47 --- /dev/null +++ b/iw_3.10/iw_3.10.patches/iw-52.description
@@ -0,0 +1 @@ +This patch adds the ability to add/delete/start/stop device side tcp keep alives using iw
diff --git a/iw_3.10/iw_3.10.patches/iw-52.patch b/iw_3.10/iw_3.10.patches/iw-52.patch new file mode 100644 index 0000000..dc07013 --- /dev/null +++ b/iw_3.10/iw_3.10.patches/iw-52.patch
@@ -0,0 +1,329 @@ +diff -aruN iw-3.10/keepalive.c iw-3.10.n/keepalive.c +--- iw-3.10/keepalive.c 1969-12-31 16:00:00.000000000 -0800 ++++ iw-3.10.n/keepalive.c 2015-03-24 12:39:02.019567368 -0700 +@@ -0,0 +1,286 @@ ++#include <net/if.h> ++#include <errno.h> ++#include <string.h> ++#include <stdlib.h> ++ ++#include <netlink/genl/genl.h> ++#include <netlink/genl/family.h> ++#include <netlink/genl/ctrl.h> ++#include <netlink/msg.h> ++#include <netlink/attr.h> ++ ++#include "nl80211.h" ++#include "iw.h" ++ ++typedef uint8_t u8; ++typedef uint16_t u16; ++typedef uint32_t u32; ++ ++#define CFG80211_KEEP_ALIVE_PAYLOAD_MAX_LENGTH 64 ++ ++struct cfg80211_keepalive_request { ++ u32 interval; ++ u8 cmd; /* 0: ADD; 1: DEL: 2: START; 3: STOP */ ++ u8 index; ++ u8 trig; ++ u8 dst_macaddr[ETH_ALEN]; ++ u8 payload_len; ++ u8 payload[CFG80211_KEEP_ALIVE_PAYLOAD_MAX_LENGTH]; ++}; ++ ++struct cfg80211_keepalive_request keepalive_req; ++ ++SECTION(keepalive); ++ ++static void keepalive_hex_dump(char *title, u8 *buf, size_t len) ++{ ++ int i; ++ ++ printf("%s - hexdump(len=%lu):", title, (unsigned long) len); ++ ++ for (i = 0; i < len; i++) ++ printf(" %02x", buf[i]); ++ printf("\n"); ++} ++ ++static int nl80211_parse_klv_req(const char *s) ++{ ++ long i; ++ char *endp; ++ ++ i = strtol(s, &endp, 10); ++ ++ if(endp == s) ++ return -1; ++ return i; ++} ++ ++static int nl80211_str2hex(u8 *src, u8 *dst, int src_len) ++{ ++ int i, bytecount=0; ++ ++ if (src_len & 0x01) ++ return -2; ++ ++ for (i=0; i<src_len; i++, src++) { ++ if (i != 0 && i%2 == 0) { ++ dst++; ++ bytecount++; ++ } else { ++ *dst <<= 4; ++ } ++ ++ if ((*src >= '0') && (*src <= '9')) ++ *dst += *src - '0'; ++ else if ((*src >= 'A') && (*src <= 'F')) ++ *dst += *src - 'A' + 10; ++ else if ((*src >= 'a') && (*src <= 'f')) ++ *dst += *src - 'a' + 10; ++ else { ++ return -1; ++ } ++ } ++ ++ bytecount++; ++ ++ return bytecount; ++} ++ ++static int build_klv_req(struct nl_msg *msg, int klv_cmd, u8 index, int interval, u8 trig, u8 *dst_macaddr, u8 payload_len, u8 *payload) ++{ ++ int ret = -1; ++ ++ if (!msg) ++ return -1; ++ ++ NLA_PUT_U32(msg, NL80211_ATTR_KLV_TYPE, klv_cmd); ++ NLA_PUT_U32(msg, NL80211_ATTR_KLV_INDEX, index); ++ ++ if (klv_cmd == 0 || klv_cmd == 1) { ++ ++ NLA_PUT_U32(msg, NL80211_ATTR_KLV_INTVL, interval); ++ NLA_PUT_U32 (msg, NL80211_ATTR_KLV_TRIG, trig); ++ ++ if (payload != NULL) { ++ if (dst_macaddr) { ++ keepalive_hex_dump("nl80211 klv_dstmac: ", dst_macaddr, ETH_ALEN); ++ NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, dst_macaddr); ++ } ++ ++ keepalive_hex_dump("nl80211 klv_payload: ", payload, payload_len); ++ NLA_PUT(msg, NL80211_ATTR_KLV_PAYLOAD, payload_len, payload); ++ } ++ } ++ ++ ret = 0; ++ ++ nla_put_failure: ++ return ret; ++} ++ ++static int nl80211_change_klv_req(char **cmdptr, int cmdtype, struct nl_msg *msg) ++{ ++ u8 index = 1, trig_type = 1, payload_len = 0; ++ u8 dst_macaddr[ETH_ALEN]; ++ u32 interval_ms = 10; ++ int val; ++ u8 dst_payload[64]; ++ ++ switch(cmdtype) { ++ case 0: /* KLV-ADD */ ++ val = nl80211_parse_klv_req(*cmdptr++); ++ /* valid index # is [1, 3]. Index #0 is reserved for driver internal use */ ++ if (val <= 0 || val > 3) { ++ printf("invalid index (%d)\n", val); ++ return -1; ++ } ++ index = val; ++ ++ val = nl80211_parse_klv_req(*cmdptr++); ++ /* limit klv interval to [10 ms, 50000 ms] */ ++ if (val < 1000 || val > 55000) { ++ printf("Keeplalive interval is out of range.\n"); ++ return -1; ++ } ++ interval_ms = val; ++ ++ val = nl80211_parse_klv_req(*cmdptr++); ++ /* valid trig type is limited to 0 or 1 */ ++ if (val < 0 || val > 1) { ++ printf("Invalid keepalive trigger type.\n"); ++ return -1; ++ } ++ trig_type = val; ++ ++ memset(dst_macaddr, 0, ETH_ALEN); ++ if (nl80211_str2hex((u8 *)(*cmdptr++), dst_macaddr, 2*ETH_ALEN) <= 0) { ++ printf("Invalid mac address\n"); ++ return -1; ++ } ++ ++ val = strlen(*cmdptr); /* klv payload length must be <= 64 bytes */ ++ if (val > 128) { ++ printf("Payload is too long\n"); ++ return -1; ++ } ++ ++ memset(dst_payload, 0, 64); ++ if ((payload_len=nl80211_str2hex((u8 *)(*cmdptr), dst_payload, val)) < 0) { ++ printf("Keepalive payload is invalid\n"); ++ return -1; ++ } ++ ++ break; ++ ++ case 1: /* KLV-DEL */ ++ index = nl80211_parse_klv_req(cmdptr[0]); ++ printf("index = %d\n", index); ++ /* index #0 is reserved for driver internal klv type */ ++ if (index <= 0 || index > 3) { ++ return -1; ++ } ++ ++ interval_ms = 10000; ++ break; ++ ++ case 2: /* KLV-START */ ++ case 3: /* KLV-STOP */ ++ break; ++ ++ case 4: /* KLV-SHOW */ ++ printf("Not supported\n"); ++ val = 0; ++ return val; ++ ++ default: ++ return -1; ++ } ++ ++ val = build_klv_req(msg, cmdtype, index, interval_ms, trig_type, &dst_macaddr[0], payload_len, dst_payload); ++ ++ return val; ++} ++ ++static int handle_keepalive_add(struct nl80211_state *state, struct nl_cb *cb, ++ struct nl_msg *msg, int argc, char **argv, enum id_input id) ++{ ++ int ret; ++ ++ if (argc != 5) { ++ printf("Command parameters incorrect.\n"); ++ return -1; ++ } ++ ++ ret = nl80211_change_klv_req(argv, 0, msg); ++ printf("ret is %d\n", ret); ++ return ret; ++} ++ ++static int handle_keepalive_delete(struct nl80211_state *state, struct nl_cb *cb, ++ struct nl_msg *msg, int argc, char **argv, enum id_input id) ++{ ++ int ret; ++ ++ if (argc != 1) { ++ printf("Command parameters incorrect.\n"); ++ return -1; ++ } ++ ++ ret = nl80211_change_klv_req(argv, 1, msg); ++ return ret; ++} ++ ++static int handle_keepalive_start(struct nl80211_state *state, struct nl_cb *cb, ++ struct nl_msg *msg, int argc, char **argv, enum id_input id) ++{ ++ int ret; ++ ret = nl80211_change_klv_req(argv, 2, msg); ++ return ret; ++} ++ ++static int handle_keepalive_stop(struct nl80211_state *state, struct nl_cb *cb, ++ struct nl_msg *msg, int argc, char **argv, enum id_input id) ++{ ++ int ret; ++ ret = nl80211_change_klv_req(argv, 3, msg); ++ return ret; ++} ++ ++static int print_keepalive_handler(struct nl_msg *msg, void *arg) ++{ ++ int *ret = arg; ++ if (arg != NULL) ++ *ret = 0; ++ return 0; ++} ++ ++static int handle_keepalive_show(struct nl80211_state *state, struct nl_cb *cb, ++ struct nl_msg *msg, int argc, char **argv, enum id_input id) ++{ ++ int ret; ++ ++ printf("handle_keepalive_show\n"); ++ nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, ++ print_keepalive_handler, &ret); ++ ++ return 0; ++} ++ ++COMMAND(keepalive, add, "<index> <interval> <trigger_type> <dst_macaddr> <payload>", ++ NL80211_CMD_SET_KEEPALIVE, 0, CIB_NETDEV, handle_keepalive_add, ++ "Configure keep alive feature"); ++ ++COMMAND(keepalive, del, "<index>", ++ NL80211_CMD_SET_KEEPALIVE, 0, CIB_NETDEV, handle_keepalive_delete, ++ "Configure keep alive feature"); ++ ++COMMAND(keepalive, start, "", ++ NL80211_CMD_SET_KEEPALIVE, 0, CIB_NETDEV, handle_keepalive_start, ++ "Configure keep alive feature"); ++ ++COMMAND(keepalive, stop, "", ++ NL80211_CMD_SET_KEEPALIVE, 0, CIB_NETDEV, handle_keepalive_stop, ++ "Configure keep alive feature"); ++ ++COMMAND(keepalive, show, "", NL80211_CMD_GET_KEEPALIVE, 0, CIB_NETDEV, handle_keepalive_show, ++ "Show keepalive status."); +diff -aruN iw-3.10/Makefile iw-3.10.n/Makefile +--- iw-3.10/Makefile 2015-03-24 12:38:14.411566390 -0700 ++++ iw-3.10.n/Makefile 2015-03-24 12:39:23.491567809 -0700 +@@ -16,7 +16,7 @@ + interface.o ibss.o station.o survey.o util.o \ + mesh.o mpath.o scan.o reg.o version.o \ + reason.o status.o connect.o link.o offch.o ps.o cqm.o \ +- bitrate.o wowlan.o roc.o p2p.o ++ bitrate.o wowlan.o roc.o p2p.o keepalive.o + OBJS += sections.o + + OBJS-$(HWSIM) += hwsim.o +diff -aruN iw-3.10/nl80211.h iw-3.10.n/nl80211.h +--- iw-3.10/nl80211.h 2013-05-02 00:29:10.000000000 -0700 ++++ iw-3.10.n/nl80211.h 2015-03-24 12:43:33.115572934 -0700 +@@ -772,6 +772,9 @@ + + NL80211_CMD_SET_REKEY_OFFLOAD, + ++ NL80211_CMD_GET_KEEPALIVE, ++ NL80211_CMD_SET_KEEPALIVE, ++ + NL80211_CMD_PMKSA_CANDIDATE, + + NL80211_CMD_TDLS_OPER, +@@ -1727,6 +1730,13 @@ + NL80211_ATTR_CRIT_PROT_ID, + NL80211_ATTR_MAX_CRIT_PROT_DURATION, + ++ NL80211_ATTR_KLVDATA, ++ NL80211_ATTR_KLV_TYPE, ++ NL80211_ATTR_KLV_INTVL, ++ NL80211_ATTR_KLV_INDEX, ++ NL80211_ATTR_KLV_TRIG, ++ NL80211_ATTR_KLV_PAYLOAD, ++ + /* add attributes here, update the policy in nl80211.c */ + + __NL80211_ATTR_AFTER_LAST,
diff --git a/iw_3.10/iw_3.10.patches/iw-53.description b/iw_3.10/iw_3.10.patches/iw-53.description new file mode 100644 index 0000000..3a401f0 --- /dev/null +++ b/iw_3.10/iw_3.10.patches/iw-53.description
@@ -0,0 +1 @@ +Add the enums for drop action for wow filters. iw latest version still does not define these enumerations. These defines are taken from nl80211.h sitting in compat-wireless directory.
diff --git a/iw_3.10/iw_3.10.patches/iw-53.patch b/iw_3.10/iw_3.10.patches/iw-53.patch new file mode 100644 index 0000000..c1009bf --- /dev/null +++ b/iw_3.10/iw_3.10.patches/iw-53.patch
@@ -0,0 +1,36 @@ +diff --git a/nl80211.h b/nl80211.h +index 7ba71e4..3ef44f1 100644 +--- a/nl80211.h ++++ b/nl80211.h +@@ -2222,12 +2222,30 @@ enum nl80211_wowlan_packet_pattern_attr { + __NL80211_WOWLAN_PKTPAT_INVALID, + NL80211_WOWLAN_PKTPAT_MASK, + NL80211_WOWLAN_PKTPAT_PATTERN, + NL80211_WOWLAN_PKTPAT_OFFSET, ++ NL80211_WOWLAN_PKTPAT_ACTION = NL80211_WOWLAN_PKTPAT_OFFSET + 10, + + NUM_NL80211_WOWLAN_PKTPAT, + MAX_NL80211_WOWLAN_PKTPAT = NUM_NL80211_WOWLAN_PKTPAT - 1, + }; + + /** ++ * enum nl80211_wowlan_action - WoWLAN packet pattern action ++ * @NL80211_WOWLAN_ACTION_ALLOW: this pattern should wake up the host ++ * and the packet should be forwarded to the host unless this packet ++ * matches a DROP rule. ++ * @NL80211_WOWLAN_ACTION_DROP: a packet containing this pattern shouldn't ++ * wake up the host. ++ */ ++enum nl80211_wowlan_action { ++ NL80211_WOWLAN_ACTION_ALLOW, ++ NL80211_WOWLAN_ACTION_DROP, ++ ++ /* keep last */ ++ NUM_NL80211_WOWLAN_ACTION, ++ MAX_NL80211_WOWLAN_ACTION = NUM_NL80211_WOWLAN_ACTION - 1, ++}; ++ ++/** + * struct nl80211_wowlan_pattern_support - pattern support information + * @max_patterns: maximum number of patterns supported + * @min_pattern_len: minimum length of each pattern
diff --git a/iw_3.10/iw_3.10.tar.bz2 b/iw_3.10/iw_3.10.tar.bz2 new file mode 100644 index 0000000..686eea5 --- /dev/null +++ b/iw_3.10/iw_3.10.tar.bz2 Binary files differ
diff --git a/iw_3.10/iw_3.10.version b/iw_3.10/iw_3.10.version new file mode 100644 index 0000000..14ab818 --- /dev/null +++ b/iw_3.10/iw_3.10.version
@@ -0,0 +1 @@ +fe424b2465118eca166b2e901b5a378bf9582fb0