Bluetooth: Add hdev->short_name for EIR generation
authorJohan Hedberg <johan.hedberg@intel.com>
Wed, 22 Feb 2012 17:19:09 +0000 (19:19 +0200)
committerJohan Hedberg <johan.hedberg@intel.com>
Thu, 23 Feb 2012 11:07:00 +0000 (13:07 +0200)
It's possible to provide a short name through the mgmt interface and
this name can be used for EIR generation when the full name doesn't fit
there. This patch adds the preliminary tracking of the provided short
name.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
include/net/bluetooth/hci_core.h
include/net/bluetooth/mgmt.h
net/bluetooth/mgmt.c

index 24dd770d442b7ec40b16da087cf04cc83742192c..3fcc7f0d08c38f1406d7663cd2ed606c6bff6d16 100644 (file)
@@ -129,6 +129,8 @@ struct le_scan_params {
        int timeout;
 };
 
+#define HCI_MAX_SHORT_NAME_LENGTH      10
+
 #define NUM_REASSEMBLY 4
 struct hci_dev {
        struct list_head list;
@@ -141,6 +143,7 @@ struct hci_dev {
        __u8            dev_type;
        bdaddr_t        bdaddr;
        __u8            dev_name[HCI_MAX_NAME_LENGTH];
+       __u8            short_name[HCI_MAX_SHORT_NAME_LENGTH];
        __u8            eir[HCI_MAX_EIR_LENGTH];
        __u8            dev_class[3];
        __u8            major_class;
index ac59cdd0fa1b7c89e26cf9921116e6fe7e32e7d4..495668c77fb656e4339b5ad6c0f728beb4b66986 100644 (file)
@@ -75,7 +75,7 @@ struct mgmt_rp_read_index_list {
 /* Reserve one extra byte for names in management messages so that they
  * are always guaranteed to be nul-terminated */
 #define MGMT_MAX_NAME_LENGTH           (HCI_MAX_NAME_LENGTH + 1)
-#define MGMT_MAX_SHORT_NAME_LENGTH     (10 + 1)
+#define MGMT_MAX_SHORT_NAME_LENGTH     (HCI_MAX_SHORT_NAME_LENGTH + 1)
 
 #define MGMT_SETTING_POWERED           0x00000001
 #define MGMT_SETTING_CONNECTABLE       0x00000002
index 16bddd22713f1882bb75327a24101137a58532fb..3f6a2df9d15001ffdda17c5072538f27daa83841 100644 (file)
@@ -2273,6 +2273,9 @@ static int set_local_name(struct sock *sk, u16 index, void *data,
                goto failed;
        }
 
+       memcpy(hdev->short_name, mgmt_cp->short_name,
+                                               sizeof(hdev->short_name));
+
        memcpy(hci_cp.name, mgmt_cp->name, sizeof(hci_cp.name));
        err = hci_send_cmd(hdev, HCI_OP_WRITE_LOCAL_NAME, sizeof(hci_cp),
                                                                &hci_cp);