From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> This reworks privacy options so the limited discoverable is only available when controller mode is set to dual. --- src/btd.h | 1 + src/main.c | 22 ++++++++++++++++++---- src/main.conf | 25 ++++++++++++++++++++----- 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/src/btd.h b/src/btd.h index f83591f8f..ff9f082f1 100644 --- a/src/btd.h +++ b/src/btd.h @@ -103,6 +103,7 @@ struct btd_opts { uint32_t discovto; uint32_t tmpto; uint8_t privacy; + bool device_privacy; struct btd_defaults defaults; diff --git a/src/main.c b/src/main.c index 2835c81b2..dd954e1ab 100644 --- a/src/main.c +++ b/src/main.c @@ -666,13 +666,27 @@ static void parse_config(GKeyFile *config) } else { DBG("privacy=%s", str); - if (!strcmp(str, "network") || !strcmp(str, "on")) + if (!strcmp(str, "network") || !strcmp(str, "on")) { btd_opts.privacy = 0x01; - if (!strcmp(str, "device") || !strcmp(str, "limited")) + } else if (!strcmp(str, "device")) { + btd_opts.privacy = 0x01; + btd_opts.device_privacy = true; + } else if (!strcmp(str, "limited-network")) { + if (btd_opts.mode != BT_MODE_DUAL) { + DBG("Invalid privacy option: %s", str); + btd_opts.privacy = 0x00; + } + btd_opts.privacy = 0x01; + } else if (!strcmp(str, "limited-device")) { + if (btd_opts.mode != BT_MODE_DUAL) { + DBG("Invalid privacy option: %s", str); + btd_opts.privacy = 0x00; + } btd_opts.privacy = 0x02; - else if (!strcmp(str, "off")) + btd_opts.device_privacy = true; + } else if (!strcmp(str, "off")) { btd_opts.privacy = 0x00; - else { + } else { DBG("Invalid privacy option: %s", str); btd_opts.privacy = 0x00; } diff --git a/src/main.conf b/src/main.conf index 4019ea903..c82d7e648 100644 --- a/src/main.conf +++ b/src/main.conf @@ -67,14 +67,29 @@ # Default privacy setting. # Enables use of private address. -# Possible values: "off", "network/on", "device/limited" -# "network/on": a device will only accept advertising packets from peer devices -# that contain private addresses. It may not be compatible with some legacy -# devices since it requires the use of RPA(s) all the time. -# "device/limited": A device in device privacy mode is only concerned about the +# Possible values for LE mode: "off", "network/on", "device" +# Possible values for Dual mode: "off", "network/on", "device", +# "limited-network", "limited-device" +# +# - off: Local privacy disabled. +# +# - network/on: A device will only accept advertising packets from peer +# devices that contain private addresses. It may not be compatible with some +# legacy devices since it requires the use of RPA(s) all the time. +# +# - device: A device in device privacy mode is only concerned about the # privacy of the device and will accept advertising packets from peer devices # that contain their Identity Address as well as ones that contain a private # address, even if the peer device has distributed its IRK in the past. + +# - limited-network: Apply Limited Discoverable Mode to advertising, which +# follows the same policy as to BR/EDR that publishes the identity address when +# discoverable, and Network Privacy Mode for scanning. +# +# - limited-device: Apply Limited Discoverable Mode to advertising, which +# follows the same policy as to BR/EDR that publishes the identity address when +# discoverable, and Device Privacy Mode for scanning. +# # Defaults to "off" #Privacy = off -- 2.31.1