lkml.org 
[lkml]   [2020]   [Jun]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 5/7] Bluetooth: Notify adv monitor added event
    Date
    This notifies management sockets on MGMT_EV_ADV_MONITOR_ADDED event.

    The following test was performed.
    - Start two btmgmt consoles, issue a btmgmt advmon-add command on one
    console and observe a MGMT_EV_ADV_MONITOR_ADDED event on the other

    Signed-off-by: Miao-chen Chou <mcchou@chromium.org>
    ---

    Changes in v2: None

    net/bluetooth/mgmt.c | 18 +++++++++++++++++-
    1 file changed, 17 insertions(+), 1 deletion(-)

    diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
    index a43a1e6d17cf9..59a806f11a494 100644
    --- a/net/bluetooth/mgmt.c
    +++ b/net/bluetooth/mgmt.c
    @@ -155,6 +155,7 @@ static const u16 mgmt_events[] = {
    MGMT_EV_EXT_INFO_CHANGED,
    MGMT_EV_PHY_CONFIGURATION_CHANGED,
    MGMT_EV_EXP_FEATURE_CHANGED,
    + MGMT_EV_ADV_MONITOR_ADDED,
    };

    static const u16 mgmt_untrusted_commands[] = {
    @@ -3853,6 +3854,16 @@ static int set_exp_feature(struct sock *sk, struct hci_dev *hdev,
    MGMT_STATUS_NOT_SUPPORTED);
    }

    +static void mgmt_adv_monitor_added(struct sock *sk, struct hci_dev *hdev,
    + u16 handle)
    +{
    + struct mgmt_ev_adv_monitor_added ev;
    +
    + ev.monitor_handle = handle;
    +
    + mgmt_event(MGMT_EV_ADV_MONITOR_ADDED, hdev, &ev, sizeof(ev), sk);
    +}
    +
    static int read_adv_monitor_features(struct sock *sk, struct hci_dev *hdev,
    void *data, u16 len)
    {
    @@ -3905,8 +3916,8 @@ static int add_adv_patterns_monitor(struct sock *sk, struct hci_dev *hdev,
    struct mgmt_rp_add_adv_patterns_monitor rp;
    struct adv_monitor *m = NULL;
    struct adv_pattern *p = NULL;
    + unsigned int mp_cnt = 0, prev_adv_monitors_cnt;
    __u8 cp_ofst = 0, cp_len = 0;
    - unsigned int mp_cnt = 0;
    int err, i;

    BT_DBG("request for %s", hdev->name);
    @@ -3970,6 +3981,8 @@ static int add_adv_patterns_monitor(struct sock *sk, struct hci_dev *hdev,

    hci_dev_lock(hdev);

    + prev_adv_monitors_cnt = hdev->adv_monitors_cnt;
    +
    err = hci_add_adv_monitor(hdev, m);
    if (err) {
    if (err == -ENOSPC) {
    @@ -3980,6 +3993,9 @@ static int add_adv_patterns_monitor(struct sock *sk, struct hci_dev *hdev,
    goto unlock;
    }

    + if (hdev->adv_monitors_cnt > prev_adv_monitors_cnt)
    + mgmt_adv_monitor_added(sk, hdev, m->handle);
    +
    hci_dev_unlock(hdev);

    rp.monitor_handle = m->handle;
    --
    2.26.2
    \
     
     \ /
      Last update: 2020-06-04 01:04    [W:3.560 / U:0.140 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site