Message ID | 20201030163529.v6.5.I756c1fecc03bcc0cd94400b4992cd7e743f4b3e2@changeid (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v6,1/5] Bluetooth: Interleave with allowlist scan | expand |
Hi Howard, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on bluetooth-next/master] [also build test WARNING on net-next/master net/master v5.10-rc1 next-20201030] [cannot apply to bluetooth/master sparc-next/master] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Howard-Chung/Bluetooth-Interleave-with-allowlist-scan/20201030-171045 base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git master config: x86_64-randconfig-s022-20201030 (attached as .config) compiler: gcc-9 (Debian 9.3.0-15) 9.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.3-68-g49c98aa3-dirty # https://github.com/0day-ci/linux/commit/20ec572cf329be621588cca7150ec51d702fdfac git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Howard-Chung/Bluetooth-Interleave-with-allowlist-scan/20201030-171045 git checkout 20ec572cf329be621588cca7150ec51d702fdfac # save the attached .config to linux build tree make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> "sparse warnings: (new ones prefixed by >>)" >> net/bluetooth/mgmt_config.c:315:63: sparse: sparse: cast to restricted __le16 vim +315 net/bluetooth/mgmt_config.c 127 128 int set_def_system_config(struct sock *sk, struct hci_dev *hdev, void *data, 129 u16 data_len) 130 { 131 u16 buffer_left = data_len; 132 u8 *buffer = data; 133 134 if (buffer_left < sizeof(struct mgmt_tlv)) { 135 return mgmt_cmd_status(sk, hdev->id, 136 MGMT_OP_SET_DEF_SYSTEM_CONFIG, 137 MGMT_STATUS_INVALID_PARAMS); 138 } 139 140 /* First pass to validate the tlv */ 141 while (buffer_left >= sizeof(struct mgmt_tlv)) { 142 const u8 len = TO_TLV(buffer)->length; 143 u8 exp_type_len; 144 const u16 exp_len = sizeof(struct mgmt_tlv) + 145 len; 146 const u16 type = le16_to_cpu(TO_TLV(buffer)->type); 147 148 if (buffer_left < exp_len) { 149 bt_dev_warn(hdev, "invalid len left %d, exp >= %d", 150 buffer_left, exp_len); 151 152 return mgmt_cmd_status(sk, hdev->id, 153 MGMT_OP_SET_DEF_SYSTEM_CONFIG, 154 MGMT_STATUS_INVALID_PARAMS); 155 } 156 157 /* Please see mgmt-api.txt for documentation of these values */ 158 switch (type) { 159 case 0x0000: 160 case 0x0001: 161 case 0x0002: 162 case 0x0003: 163 case 0x0004: 164 case 0x0005: 165 case 0x0006: 166 case 0x0007: 167 case 0x0008: 168 case 0x0009: 169 case 0x000a: 170 case 0x000b: 171 case 0x000c: 172 case 0x000d: 173 case 0x000e: 174 case 0x000f: 175 case 0x0010: 176 case 0x0011: 177 case 0x0012: 178 case 0x0013: 179 case 0x0014: 180 case 0x0015: 181 case 0x0016: 182 case 0x0017: 183 case 0x0018: 184 case 0x0019: 185 case 0x001a: 186 case 0x001b: 187 case 0x001d: 188 case 0x001e: 189 exp_type_len = sizeof(u16); 190 break; 191 case 0x001f: 192 exp_type_len = sizeof(u8); 193 break; 194 default: 195 exp_type_len = 0; 196 bt_dev_warn(hdev, "unsupported parameter %u", type); 197 break; 198 } 199 200 if (exp_type_len && len != exp_type_len) { 201 bt_dev_warn(hdev, "invalid length %d, exp %zu for type %d", 202 len, exp_type_len, type); 203 204 return mgmt_cmd_status(sk, hdev->id, 205 MGMT_OP_SET_DEF_SYSTEM_CONFIG, 206 MGMT_STATUS_INVALID_PARAMS); 207 } 208 209 buffer_left -= exp_len; 210 buffer += exp_len; 211 } 212 213 buffer_left = data_len; 214 buffer = data; 215 while (buffer_left >= sizeof(struct mgmt_tlv)) { 216 const u8 len = TO_TLV(buffer)->length; 217 const u16 exp_len = sizeof(struct mgmt_tlv) + 218 len; 219 const u16 type = le16_to_cpu(TO_TLV(buffer)->type); 220 221 switch (type) { 222 case 0x0000: 223 hdev->def_page_scan_type = TLV_GET_LE16(buffer); 224 break; 225 case 0x0001: 226 hdev->def_page_scan_int = TLV_GET_LE16(buffer); 227 break; 228 case 0x0002: 229 hdev->def_page_scan_window = TLV_GET_LE16(buffer); 230 break; 231 case 0x0003: 232 hdev->def_inq_scan_type = TLV_GET_LE16(buffer); 233 break; 234 case 0x0004: 235 hdev->def_inq_scan_int = TLV_GET_LE16(buffer); 236 break; 237 case 0x0005: 238 hdev->def_inq_scan_window = TLV_GET_LE16(buffer); 239 break; 240 case 0x0006: 241 hdev->def_br_lsto = TLV_GET_LE16(buffer); 242 break; 243 case 0x0007: 244 hdev->def_page_timeout = TLV_GET_LE16(buffer); 245 break; 246 case 0x0008: 247 hdev->sniff_min_interval = TLV_GET_LE16(buffer); 248 break; 249 case 0x0009: 250 hdev->sniff_max_interval = TLV_GET_LE16(buffer); 251 break; 252 case 0x000a: 253 hdev->le_adv_min_interval = TLV_GET_LE16(buffer); 254 break; 255 case 0x000b: 256 hdev->le_adv_max_interval = TLV_GET_LE16(buffer); 257 break; 258 case 0x000c: 259 hdev->def_multi_adv_rotation_duration = 260 TLV_GET_LE16(buffer); 261 break; 262 case 0x000d: 263 hdev->le_scan_interval = TLV_GET_LE16(buffer); 264 break; 265 case 0x000e: 266 hdev->le_scan_window = TLV_GET_LE16(buffer); 267 break; 268 case 0x000f: 269 hdev->le_scan_int_suspend = TLV_GET_LE16(buffer); 270 break; 271 case 0x0010: 272 hdev->le_scan_window_suspend = TLV_GET_LE16(buffer); 273 break; 274 case 0x0011: 275 hdev->le_scan_int_discovery = TLV_GET_LE16(buffer); 276 break; 277 case 0x00012: 278 hdev->le_scan_window_discovery = TLV_GET_LE16(buffer); 279 break; 280 case 0x00013: 281 hdev->le_scan_int_adv_monitor = TLV_GET_LE16(buffer); 282 break; 283 case 0x00014: 284 hdev->le_scan_window_adv_monitor = TLV_GET_LE16(buffer); 285 break; 286 case 0x00015: 287 hdev->le_scan_int_connect = TLV_GET_LE16(buffer); 288 break; 289 case 0x00016: 290 hdev->le_scan_window_connect = TLV_GET_LE16(buffer); 291 break; 292 case 0x00017: 293 hdev->le_conn_min_interval = TLV_GET_LE16(buffer); 294 break; 295 case 0x00018: 296 hdev->le_conn_max_interval = TLV_GET_LE16(buffer); 297 break; 298 case 0x00019: 299 hdev->le_conn_latency = TLV_GET_LE16(buffer); 300 break; 301 case 0x0001a: 302 hdev->le_supv_timeout = TLV_GET_LE16(buffer); 303 break; 304 case 0x0001b: 305 hdev->def_le_autoconnect_timeout = 306 msecs_to_jiffies(TLV_GET_LE16(buffer)); 307 break; 308 case 0x0001d: 309 hdev->advmon_allowlist_duration = TLV_GET_LE16(buffer); 310 break; 311 case 0x0001e: 312 hdev->advmon_no_filter_duration = TLV_GET_LE16(buffer); 313 break; 314 case 0x0001f: > 315 hdev->enable_advmon_interleave_scan = TLV_GET_LE8(buffer); 316 break; 317 default: 318 bt_dev_warn(hdev, "unsupported parameter %u", type); 319 break; 320 } 321 322 buffer_left -= exp_len; 323 buffer += exp_len; 324 } 325 326 return mgmt_cmd_complete(sk, hdev->id, 327 MGMT_OP_SET_DEF_SYSTEM_CONFIG, 0, NULL, 0); 328 } 329 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Hi Howard, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on bluetooth-next/master] [also build test WARNING on net-next/master net/master v5.10-rc1 next-20201030] [cannot apply to bluetooth/master sparc-next/master] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Howard-Chung/Bluetooth-Interleave-with-allowlist-scan/20201030-171045 base: https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git master config: arm64-randconfig-r016-20201030 (attached as .config) compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project fa5a13276764a2657b3571fa3c57b07ee5d2d661) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm64 cross compiling tool for clang build # apt-get install binutils-aarch64-linux-gnu # https://github.com/0day-ci/linux/commit/20ec572cf329be621588cca7150ec51d702fdfac git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Howard-Chung/Bluetooth-Interleave-with-allowlist-scan/20201030-171045 git checkout 20ec572cf329be621588cca7150ec51d702fdfac # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> net/bluetooth/mgmt_config.c:202:14: warning: format specifies type 'size_t' (aka 'unsigned long') but the argument has type 'u8' (aka 'unsigned char') [-Wformat] len, exp_type_len, type); ^~~~~~~~~~~~ include/net/bluetooth/bluetooth.h:186:38: note: expanded from macro 'bt_dev_warn' BT_WARN("%s: " fmt, (hdev)->name, ##__VA_ARGS__) ~~~ ^~~~~~~~~~~ include/net/bluetooth/bluetooth.h:174:47: note: expanded from macro 'BT_WARN' #define BT_WARN(fmt, ...) bt_warn(fmt "\n", ##__VA_ARGS__) ~~~ ^~~~~~~~~~~ 1 warning generated. vim +202 net/bluetooth/mgmt_config.c 127 128 int set_def_system_config(struct sock *sk, struct hci_dev *hdev, void *data, 129 u16 data_len) 130 { 131 u16 buffer_left = data_len; 132 u8 *buffer = data; 133 134 if (buffer_left < sizeof(struct mgmt_tlv)) { 135 return mgmt_cmd_status(sk, hdev->id, 136 MGMT_OP_SET_DEF_SYSTEM_CONFIG, 137 MGMT_STATUS_INVALID_PARAMS); 138 } 139 140 /* First pass to validate the tlv */ 141 while (buffer_left >= sizeof(struct mgmt_tlv)) { 142 const u8 len = TO_TLV(buffer)->length; 143 u8 exp_type_len; 144 const u16 exp_len = sizeof(struct mgmt_tlv) + 145 len; 146 const u16 type = le16_to_cpu(TO_TLV(buffer)->type); 147 148 if (buffer_left < exp_len) { 149 bt_dev_warn(hdev, "invalid len left %d, exp >= %d", 150 buffer_left, exp_len); 151 152 return mgmt_cmd_status(sk, hdev->id, 153 MGMT_OP_SET_DEF_SYSTEM_CONFIG, 154 MGMT_STATUS_INVALID_PARAMS); 155 } 156 157 /* Please see mgmt-api.txt for documentation of these values */ 158 switch (type) { 159 case 0x0000: 160 case 0x0001: 161 case 0x0002: 162 case 0x0003: 163 case 0x0004: 164 case 0x0005: 165 case 0x0006: 166 case 0x0007: 167 case 0x0008: 168 case 0x0009: 169 case 0x000a: 170 case 0x000b: 171 case 0x000c: 172 case 0x000d: 173 case 0x000e: 174 case 0x000f: 175 case 0x0010: 176 case 0x0011: 177 case 0x0012: 178 case 0x0013: 179 case 0x0014: 180 case 0x0015: 181 case 0x0016: 182 case 0x0017: 183 case 0x0018: 184 case 0x0019: 185 case 0x001a: 186 case 0x001b: 187 case 0x001d: 188 case 0x001e: 189 exp_type_len = sizeof(u16); 190 break; 191 case 0x001f: 192 exp_type_len = sizeof(u8); 193 break; 194 default: 195 exp_type_len = 0; 196 bt_dev_warn(hdev, "unsupported parameter %u", type); 197 break; 198 } 199 200 if (exp_type_len && len != exp_type_len) { 201 bt_dev_warn(hdev, "invalid length %d, exp %zu for type %d", > 202 len, exp_type_len, type); 203 204 return mgmt_cmd_status(sk, hdev->id, 205 MGMT_OP_SET_DEF_SYSTEM_CONFIG, 206 MGMT_STATUS_INVALID_PARAMS); 207 } 208 209 buffer_left -= exp_len; 210 buffer += exp_len; 211 } 212 213 buffer_left = data_len; 214 buffer = data; 215 while (buffer_left >= sizeof(struct mgmt_tlv)) { 216 const u8 len = TO_TLV(buffer)->length; 217 const u16 exp_len = sizeof(struct mgmt_tlv) + 218 len; 219 const u16 type = le16_to_cpu(TO_TLV(buffer)->type); 220 221 switch (type) { 222 case 0x0000: 223 hdev->def_page_scan_type = TLV_GET_LE16(buffer); 224 break; 225 case 0x0001: 226 hdev->def_page_scan_int = TLV_GET_LE16(buffer); 227 break; 228 case 0x0002: 229 hdev->def_page_scan_window = TLV_GET_LE16(buffer); 230 break; 231 case 0x0003: 232 hdev->def_inq_scan_type = TLV_GET_LE16(buffer); 233 break; 234 case 0x0004: 235 hdev->def_inq_scan_int = TLV_GET_LE16(buffer); 236 break; 237 case 0x0005: 238 hdev->def_inq_scan_window = TLV_GET_LE16(buffer); 239 break; 240 case 0x0006: 241 hdev->def_br_lsto = TLV_GET_LE16(buffer); 242 break; 243 case 0x0007: 244 hdev->def_page_timeout = TLV_GET_LE16(buffer); 245 break; 246 case 0x0008: 247 hdev->sniff_min_interval = TLV_GET_LE16(buffer); 248 break; 249 case 0x0009: 250 hdev->sniff_max_interval = TLV_GET_LE16(buffer); 251 break; 252 case 0x000a: 253 hdev->le_adv_min_interval = TLV_GET_LE16(buffer); 254 break; 255 case 0x000b: 256 hdev->le_adv_max_interval = TLV_GET_LE16(buffer); 257 break; 258 case 0x000c: 259 hdev->def_multi_adv_rotation_duration = 260 TLV_GET_LE16(buffer); 261 break; 262 case 0x000d: 263 hdev->le_scan_interval = TLV_GET_LE16(buffer); 264 break; 265 case 0x000e: 266 hdev->le_scan_window = TLV_GET_LE16(buffer); 267 break; 268 case 0x000f: 269 hdev->le_scan_int_suspend = TLV_GET_LE16(buffer); 270 break; 271 case 0x0010: 272 hdev->le_scan_window_suspend = TLV_GET_LE16(buffer); 273 break; 274 case 0x0011: 275 hdev->le_scan_int_discovery = TLV_GET_LE16(buffer); 276 break; 277 case 0x00012: 278 hdev->le_scan_window_discovery = TLV_GET_LE16(buffer); 279 break; 280 case 0x00013: 281 hdev->le_scan_int_adv_monitor = TLV_GET_LE16(buffer); 282 break; 283 case 0x00014: 284 hdev->le_scan_window_adv_monitor = TLV_GET_LE16(buffer); 285 break; 286 case 0x00015: 287 hdev->le_scan_int_connect = TLV_GET_LE16(buffer); 288 break; 289 case 0x00016: 290 hdev->le_scan_window_connect = TLV_GET_LE16(buffer); 291 break; 292 case 0x00017: 293 hdev->le_conn_min_interval = TLV_GET_LE16(buffer); 294 break; 295 case 0x00018: 296 hdev->le_conn_max_interval = TLV_GET_LE16(buffer); 297 break; 298 case 0x00019: 299 hdev->le_conn_latency = TLV_GET_LE16(buffer); 300 break; 301 case 0x0001a: 302 hdev->le_supv_timeout = TLV_GET_LE16(buffer); 303 break; 304 case 0x0001b: 305 hdev->def_le_autoconnect_timeout = 306 msecs_to_jiffies(TLV_GET_LE16(buffer)); 307 break; 308 case 0x0001d: 309 hdev->advmon_allowlist_duration = TLV_GET_LE16(buffer); 310 break; 311 case 0x0001e: 312 hdev->advmon_no_filter_duration = TLV_GET_LE16(buffer); 313 break; 314 case 0x0001f: 315 hdev->enable_advmon_interleave_scan = TLV_GET_LE8(buffer); 316 break; 317 default: 318 bt_dev_warn(hdev, "unsupported parameter %u", type); 319 break; 320 } 321 322 buffer_left -= exp_len; 323 buffer += exp_len; 324 } 325 326 return mgmt_cmd_complete(sk, hdev->id, 327 MGMT_OP_SET_DEF_SYSTEM_CONFIG, 0, NULL, 0); 328 } 329 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index cfede18709d8f..63c6d656564a1 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h @@ -363,6 +363,7 @@ struct hci_dev { __u32 clock; __u16 advmon_allowlist_duration; __u16 advmon_no_filter_duration; + __u8 enable_advmon_interleave_scan; __u16 devid_source; __u16 devid_vendor; diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 65b7b74baba4c..b7cb7bfe250bd 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -3595,6 +3595,7 @@ struct hci_dev *hci_alloc_dev(void) /* The default values will be chosen in the future */ hdev->advmon_allowlist_duration = 300; hdev->advmon_no_filter_duration = 500; + hdev->enable_advmon_interleave_scan = 0x00; /* Default to disable */ hdev->sniff_max_interval = 800; hdev->sniff_min_interval = 80; diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c index 396960ef54a13..85948c73c72b3 100644 --- a/net/bluetooth/hci_request.c +++ b/net/bluetooth/hci_request.c @@ -1059,7 +1059,8 @@ void hci_req_add_le_passive_scan(struct hci_request *req) &own_addr_type)) return; - if (__hci_update_interleaved_scan(hdev)) + if (hdev->enable_advmon_interleave_scan && + __hci_update_interleaved_scan(hdev)) return; bt_dev_dbg(hdev, "interleave state %d", hdev->interleave_scan_state); diff --git a/net/bluetooth/mgmt_config.c b/net/bluetooth/mgmt_config.c index b735e59c7fd51..a6a6f0338be2e 100644 --- a/net/bluetooth/mgmt_config.c +++ b/net/bluetooth/mgmt_config.c @@ -17,12 +17,24 @@ __le16 value; \ } __packed _param_name_ +#define HDEV_PARAM_U8(_param_name_) \ + struct {\ + struct mgmt_tlv entry; \ + __u8 value; \ + } __packed _param_name_ + #define TLV_SET_U16(_param_code_, _param_name_) \ { \ { cpu_to_le16(_param_code_), sizeof(__u16) }, \ cpu_to_le16(hdev->_param_name_) \ } +#define TLV_SET_U8(_param_code_, _param_name_) \ + { \ + { cpu_to_le16(_param_code_), sizeof(__u8) }, \ + hdev->_param_name_ \ + } + #define TLV_SET_U16_JIFFIES_TO_MSECS(_param_code_, _param_name_) \ { \ { cpu_to_le16(_param_code_), sizeof(__u16) }, \ @@ -65,6 +77,7 @@ int read_def_system_config(struct sock *sk, struct hci_dev *hdev, void *data, HDEV_PARAM_U16(def_le_autoconnect_timeout); HDEV_PARAM_U16(advmon_allowlist_duration); HDEV_PARAM_U16(advmon_no_filter_duration); + HDEV_PARAM_U8(enable_advmon_interleave_scan); } __packed rp = { TLV_SET_U16(0x0000, def_page_scan_type), TLV_SET_U16(0x0001, def_page_scan_int), @@ -97,6 +110,7 @@ int read_def_system_config(struct sock *sk, struct hci_dev *hdev, void *data, def_le_autoconnect_timeout), TLV_SET_U16(0x001d, advmon_allowlist_duration), TLV_SET_U16(0x001e, advmon_no_filter_duration), + TLV_SET_U8(0x001f, enable_advmon_interleave_scan), }; bt_dev_dbg(hdev, "sock %p", sk); @@ -109,6 +123,7 @@ int read_def_system_config(struct sock *sk, struct hci_dev *hdev, void *data, #define TO_TLV(x) ((struct mgmt_tlv *)(x)) #define TLV_GET_LE16(tlv) le16_to_cpu(*((__le16 *)(TO_TLV(tlv)->value))) +#define TLV_GET_LE8(tlv) le16_to_cpu(*((__u8 *)(TO_TLV(tlv)->value))) int set_def_system_config(struct sock *sk, struct hci_dev *hdev, void *data, u16 data_len) @@ -125,6 +140,7 @@ int set_def_system_config(struct sock *sk, struct hci_dev *hdev, void *data, /* First pass to validate the tlv */ while (buffer_left >= sizeof(struct mgmt_tlv)) { const u8 len = TO_TLV(buffer)->length; + u8 exp_type_len; const u16 exp_len = sizeof(struct mgmt_tlv) + len; const u16 type = le16_to_cpu(TO_TLV(buffer)->type); @@ -170,20 +186,26 @@ int set_def_system_config(struct sock *sk, struct hci_dev *hdev, void *data, case 0x001b: case 0x001d: case 0x001e: - if (len != sizeof(u16)) { - bt_dev_warn(hdev, "invalid length %d, exp %zu for type %d", - len, sizeof(u16), type); - - return mgmt_cmd_status(sk, hdev->id, - MGMT_OP_SET_DEF_SYSTEM_CONFIG, - MGMT_STATUS_INVALID_PARAMS); - } + exp_type_len = sizeof(u16); + break; + case 0x001f: + exp_type_len = sizeof(u8); break; default: + exp_type_len = 0; bt_dev_warn(hdev, "unsupported parameter %u", type); break; } + if (exp_type_len && len != exp_type_len) { + bt_dev_warn(hdev, "invalid length %d, exp %zu for type %d", + len, exp_type_len, type); + + return mgmt_cmd_status(sk, hdev->id, + MGMT_OP_SET_DEF_SYSTEM_CONFIG, + MGMT_STATUS_INVALID_PARAMS); + } + buffer_left -= exp_len; buffer += exp_len; } @@ -289,6 +311,9 @@ int set_def_system_config(struct sock *sk, struct hci_dev *hdev, void *data, case 0x0001e: hdev->advmon_no_filter_duration = TLV_GET_LE16(buffer); break; + case 0x0001f: + hdev->enable_advmon_interleave_scan = TLV_GET_LE8(buffer); + break; default: bt_dev_warn(hdev, "unsupported parameter %u", type); break;