diff mbox series

[BlueZ,v3,3/7] main.conf: Add CSIP profile configurable options

Message ID 20221122101232.45320-4-sathish.narasimman@intel.com (mailing list archive)
State New, archived
Headers show
Series Csip - Client role | expand

Checks

Context Check Description
tedd_an/pre-ci_am success Success
tedd_an/CheckPatch warning WARNING:STATIC_CONST_CHAR_ARRAY: static const char * array should probably be static const char * const #119: FILE: src/main.c:152: +static const char *csip_options[] = { /github/workspace/src/src/13052136.patch total: 0 errors, 1 warnings, 199 lines checked NOTE: For some of the reported defects, checkpatch may be able to mechanically convert to the typical style using --fix or --fix-inplace. /github/workspace/src/src/13052136.patch has style problems, please review. NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO NOTE: If any of the errors are false positives, please report them to the maintainer, see CHECKPATCH in MAINTAINERS.
tedd_an/GitLint success Gitlint PASS
tedd_an/IncrementalBuild success Incremental Build PASS

Commit Message

Sathish Narasimman Nov. 22, 2022, 10:12 a.m. UTC
This introduces option to configure main.conf that can be used to
configure co-ordinated set identification profile.
---
 src/btd.h     |   9 ++++
 src/main.c    | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++
 src/main.conf |  24 +++++++++++
 3 files changed, 146 insertions(+)

Comments

Luiz Augusto von Dentz Nov. 22, 2022, 8:13 p.m. UTC | #1
Hi Sathish,


On Tue, Nov 22, 2022 at 2:17 AM Sathish Narasimman
<sathish.narasimman@intel.com> wrote:
>
> This introduces option to configure main.conf that can be used to
> configure co-ordinated set identification profile.
> ---
>  src/btd.h     |   9 ++++
>  src/main.c    | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  src/main.conf |  24 +++++++++++
>  3 files changed, 146 insertions(+)
>
> diff --git a/src/btd.h b/src/btd.h
> index 42cffcde43ca..a3683a098689 100644
> --- a/src/btd.h
> +++ b/src/btd.h
> @@ -92,6 +92,13 @@ struct btd_defaults {
>         struct btd_le_defaults le;
>  };
>
> +struct btd_csis {
> +       uint8_t sirk_type;
> +       uint8_t sirk_val[16];
> +       uint8_t cs_size;
> +       uint8_t cs_rank;
> +};
> +
>  struct btd_avdtp_opts {
>         uint8_t  session_mode;
>         uint8_t  stream_mode;
> @@ -142,6 +149,8 @@ struct btd_opts {
>         enum jw_repairing_t jw_repairing;
>
>         struct btd_advmon_opts  advmon;
> +
> +       struct btd_csis csis_defaults;
>  };
>
>  extern struct btd_opts btd_opts;
> diff --git a/src/main.c b/src/main.c
> index 99d9c508ff91..abb422961f78 100644
> --- a/src/main.c
> +++ b/src/main.c
> @@ -60,6 +60,9 @@
>  #define DEFAULT_TEMPORARY_TIMEOUT         30 /* 30 seconds */
>  #define DEFAULT_NAME_REQUEST_RETRY_DELAY 300 /* 5 minutes */
>
> +/*CSIP Profile - Server */
> +#define DEFAULT_SIRK "761FAE703ED681F0C50B34155B6434FB"
> +
>  #define SHUTDOWN_GRACE_SECONDS 10
>
>  struct btd_opts btd_opts;
> @@ -146,6 +149,14 @@ static const char *gatt_options[] = {
>         NULL
>  };
>
> +static const char *csip_options[] = {
> +       "CsisSirkType",
> +       "CsisSirkValue",
> +       "CsisSize",
> +       "CsisRank",
> +       NULL
> +};
> +
>  static const char *avdtp_options[] = {
>         "SessionMode",
>         "StreamMode",
> @@ -166,11 +177,55 @@ static const struct group_table {
>         { "LE",         le_options },
>         { "Policy",     policy_options },
>         { "GATT",       gatt_options },
> +       { "CSIP",       csip_options },
>         { "AVDTP",      avdtp_options },
>         { "AdvMon",     advmon_options },
>         { }
>  };
>
> +#ifndef MIN
> +#define MIN(x, y) ((x) < (y) ? (x) : (y))
> +#endif
> +
> +static int8_t check_sirk_alpha_numeric(char *str)
> +{
> +       int8_t val = 0;
> +       char *s = str;
> +
> +       if (strlen(s) != 32) /* 32 Bytes of Alpha numeric string */
> +               return 0;
> +
> +       for ( ; *s; s++) {
> +               if (((*s >= '0') & (*s <= '9'))
> +                       || ((*s >= 'a') && (*s <= 'z'))
> +                       || ((*s >= 'A') && (*s <= 'Z'))) {
> +                       val = 1;
> +               } else {
> +                       val = 0;
> +                       break;
> +               }
> +       }
> +
> +       return val;
> +}
> +
> +static size_t hex2bin(const char *hexstr, uint8_t *buf, size_t buflen)
> +{
> +       size_t i, len;
> +
> +       if (!hexstr)
> +               return 0;
> +
> +       len = MIN((strlen(hexstr) / 2), buflen);
> +       memset(buf, 0, len);
> +
> +       for (i = 0; i < len; i++) {
> +               if (sscanf(hexstr + (i * 2), "%02hhX", &buf[i]) != 1)
> +                       continue;
> +       }
> +
> +       return len;
> +}
>
>  GKeyFile *btd_get_main_conf(void)
>  {
> @@ -939,6 +994,58 @@ static void parse_config(GKeyFile *config)
>                 btd_opts.gatt_channels = val;
>         }
>
> +       val = g_key_file_get_integer(config, "CSIP", "CsisSirkType", &err);
> +       if (err) {
> +               DBG("%s", err->message);
> +               g_clear_error(&err);
> +       } else {
> +               val = MIN(val, 2);
> +               val = MAX(val, 1);
> +               DBG("Csis Type: %u", val);
> +               btd_opts.csis_defaults.cs_size = val;
> +       }
> +
> +       str = g_key_file_get_string(config, "CSIP", "CsisSirkValue", &err);
> +       if (err) {
> +               DBG("%s", err->message);
> +               g_clear_error(&err);
> +       } else {
> +               DBG("Csis Sirk: %s", str);
> +
> +               if (!check_sirk_alpha_numeric(str)) {
> +                       DBG("SIRK is not apha numeric Value");
> +                       return;
> +               }
> +
> +               btd_opts.csis_defaults.sirk_type = 1; /* Plain Text - Type*/
> +               hex2bin(str, btd_opts.csis_defaults.sirk_val,
> +                       sizeof(btd_opts.csis_defaults.sirk_val));
> +
> +               g_free(str);
> +       }
> +
> +       val = g_key_file_get_integer(config, "CSIP", "CsisSize", &err);
> +       if (err) {
> +               DBG("%s", err->message);
> +               g_clear_error(&err);
> +       } else {
> +               val = MIN(val, 0xFF);
> +               val = MAX(val, 0);
> +               DBG("Csis Size: %u", val);
> +               btd_opts.csis_defaults.cs_size = val;
> +       }
> +
> +       val = g_key_file_get_integer(config, "CSIP", "CsisRank", &err);
> +       if (err) {
> +               DBG("%s", err->message);
> +               g_clear_error(&err);
> +       } else {
> +               val = MIN(val, 0xFF);
> +               val = MAX(val, 0);
> +               DBG("Csis Rank: %u", val);
> +               btd_opts.csis_defaults.cs_rank = val;
> +       }
> +
>         str = g_key_file_get_string(config, "AVDTP", "SessionMode", &err);
>         if (err) {
>                 DBG("%s", err->message);
> @@ -1014,6 +1121,12 @@ static void init_defaults(void)
>         btd_opts.defaults.br.scan_type = 0xFFFF;
>         btd_opts.defaults.le.enable_advmon_interleave_scan = 0xFF;
>
> +       btd_opts.csis_defaults.sirk_type = 1;
> +       hex2bin(DEFAULT_SIRK, btd_opts.csis_defaults.sirk_val,
> +                       sizeof(btd_opts.csis_defaults.sirk_val));
> +       btd_opts.csis_defaults.cs_size = 1;
> +       btd_opts.csis_defaults.cs_rank = 1;
> +
>         if (sscanf(VERSION, "%hhu.%hhu", &major, &minor) != 2)
>                 return;
>
> diff --git a/src/main.conf b/src/main.conf
> index f187c9aaa482..5378472ef0d4 100644
> --- a/src/main.conf
> +++ b/src/main.conf
> @@ -258,6 +258,30 @@
>  # Default to 3
>  #Channels = 3
>
> +[CSIP]

Let's use Set as a group name.

> +# CSIP - Co-ordinated Set Identification Profile
> +# SIRK Types which determines the value type for CsisSirkValue
> +# Possible values:
> +# 1 - Plain text
> +# 2 - encrypted
> +#CsisSirkType = 1

Let's not use the type directly here so perhaps something like
KeyType=plaintext,encrypted, etc, and it is important to say what is
the default value.

> +
> +# CSIP - Co-ordinated Set Identification Profile
> +# SIRK - Set Identification resolution key which is common for all the
> +# sets. They SIRK key is used to identify its sets. This can be any
> +# 128 bit value.
> +# Possible Values:
> +# 16 byte hexadecimal value
> +#CsisSirkValue = 861FAE703ED681F0C50B34155B6434FB

Let's use Key instead, since this would belong to [Set] group that is
enough to disambiguate.

> +
> +#CSIP - Size
> +#Total no of sets belongs to this Profile
> +#CsisSize = 1

Size

> +#CSIP - Rank
> +#Rank for the device
> +#CsisRank = 1

Rank

>  [AVDTP]
>  # AVDTP L2CAP Signalling Channel Mode.
>  # Possible values:
> --
> 2.25.1
>


--
Luiz Augusto von Dentz
Luiz Augusto von Dentz Nov. 23, 2022, 12:07 a.m. UTC | #2
Hi Sathish,

On Tue, Nov 22, 2022 at 12:13 PM Luiz Augusto von Dentz
<luiz.dentz@gmail.com> wrote:
>
> Hi Sathish,
>
>
> On Tue, Nov 22, 2022 at 2:17 AM Sathish Narasimman
> <sathish.narasimman@intel.com> wrote:
> >
> > This introduces option to configure main.conf that can be used to
> > configure co-ordinated set identification profile.
> > ---
> >  src/btd.h     |   9 ++++
> >  src/main.c    | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++
> >  src/main.conf |  24 +++++++++++
> >  3 files changed, 146 insertions(+)
> >
> > diff --git a/src/btd.h b/src/btd.h
> > index 42cffcde43ca..a3683a098689 100644
> > --- a/src/btd.h
> > +++ b/src/btd.h
> > @@ -92,6 +92,13 @@ struct btd_defaults {
> >         struct btd_le_defaults le;
> >  };
> >
> > +struct btd_csis {
> > +       uint8_t sirk_type;
> > +       uint8_t sirk_val[16];
> > +       uint8_t cs_size;
> > +       uint8_t cs_rank;
> > +};
> > +
> >  struct btd_avdtp_opts {
> >         uint8_t  session_mode;
> >         uint8_t  stream_mode;
> > @@ -142,6 +149,8 @@ struct btd_opts {
> >         enum jw_repairing_t jw_repairing;
> >
> >         struct btd_advmon_opts  advmon;
> > +
> > +       struct btd_csis csis_defaults;
> >  };
> >
> >  extern struct btd_opts btd_opts;
> > diff --git a/src/main.c b/src/main.c
> > index 99d9c508ff91..abb422961f78 100644
> > --- a/src/main.c
> > +++ b/src/main.c
> > @@ -60,6 +60,9 @@
> >  #define DEFAULT_TEMPORARY_TIMEOUT         30 /* 30 seconds */
> >  #define DEFAULT_NAME_REQUEST_RETRY_DELAY 300 /* 5 minutes */
> >
> > +/*CSIP Profile - Server */
> > +#define DEFAULT_SIRK "761FAE703ED681F0C50B34155B6434FB"
> > +
> >  #define SHUTDOWN_GRACE_SECONDS 10
> >
> >  struct btd_opts btd_opts;
> > @@ -146,6 +149,14 @@ static const char *gatt_options[] = {
> >         NULL
> >  };
> >
> > +static const char *csip_options[] = {
> > +       "CsisSirkType",
> > +       "CsisSirkValue",
> > +       "CsisSize",
> > +       "CsisRank",
> > +       NULL
> > +};
> > +
> >  static const char *avdtp_options[] = {
> >         "SessionMode",
> >         "StreamMode",
> > @@ -166,11 +177,55 @@ static const struct group_table {
> >         { "LE",         le_options },
> >         { "Policy",     policy_options },
> >         { "GATT",       gatt_options },
> > +       { "CSIP",       csip_options },
> >         { "AVDTP",      avdtp_options },
> >         { "AdvMon",     advmon_options },
> >         { }
> >  };
> >
> > +#ifndef MIN
> > +#define MIN(x, y) ((x) < (y) ? (x) : (y))
> > +#endif
> > +
> > +static int8_t check_sirk_alpha_numeric(char *str)
> > +{
> > +       int8_t val = 0;
> > +       char *s = str;
> > +
> > +       if (strlen(s) != 32) /* 32 Bytes of Alpha numeric string */
> > +               return 0;
> > +
> > +       for ( ; *s; s++) {
> > +               if (((*s >= '0') & (*s <= '9'))
> > +                       || ((*s >= 'a') && (*s <= 'z'))
> > +                       || ((*s >= 'A') && (*s <= 'Z'))) {
> > +                       val = 1;
> > +               } else {
> > +                       val = 0;
> > +                       break;
> > +               }
> > +       }
> > +
> > +       return val;
> > +}
> > +
> > +static size_t hex2bin(const char *hexstr, uint8_t *buf, size_t buflen)
> > +{
> > +       size_t i, len;
> > +
> > +       if (!hexstr)
> > +               return 0;
> > +
> > +       len = MIN((strlen(hexstr) / 2), buflen);
> > +       memset(buf, 0, len);
> > +
> > +       for (i = 0; i < len; i++) {
> > +               if (sscanf(hexstr + (i * 2), "%02hhX", &buf[i]) != 1)
> > +                       continue;
> > +       }
> > +
> > +       return len;
> > +}
> >
> >  GKeyFile *btd_get_main_conf(void)
> >  {
> > @@ -939,6 +994,58 @@ static void parse_config(GKeyFile *config)
> >                 btd_opts.gatt_channels = val;
> >         }
> >
> > +       val = g_key_file_get_integer(config, "CSIP", "CsisSirkType", &err);
> > +       if (err) {
> > +               DBG("%s", err->message);
> > +               g_clear_error(&err);
> > +       } else {
> > +               val = MIN(val, 2);
> > +               val = MAX(val, 1);
> > +               DBG("Csis Type: %u", val);
> > +               btd_opts.csis_defaults.cs_size = val;
> > +       }
> > +
> > +       str = g_key_file_get_string(config, "CSIP", "CsisSirkValue", &err);
> > +       if (err) {
> > +               DBG("%s", err->message);
> > +               g_clear_error(&err);
> > +       } else {
> > +               DBG("Csis Sirk: %s", str);
> > +
> > +               if (!check_sirk_alpha_numeric(str)) {
> > +                       DBG("SIRK is not apha numeric Value");
> > +                       return;
> > +               }
> > +
> > +               btd_opts.csis_defaults.sirk_type = 1; /* Plain Text - Type*/
> > +               hex2bin(str, btd_opts.csis_defaults.sirk_val,
> > +                       sizeof(btd_opts.csis_defaults.sirk_val));
> > +
> > +               g_free(str);
> > +       }
> > +
> > +       val = g_key_file_get_integer(config, "CSIP", "CsisSize", &err);
> > +       if (err) {
> > +               DBG("%s", err->message);
> > +               g_clear_error(&err);
> > +       } else {
> > +               val = MIN(val, 0xFF);
> > +               val = MAX(val, 0);
> > +               DBG("Csis Size: %u", val);
> > +               btd_opts.csis_defaults.cs_size = val;
> > +       }
> > +
> > +       val = g_key_file_get_integer(config, "CSIP", "CsisRank", &err);
> > +       if (err) {
> > +               DBG("%s", err->message);
> > +               g_clear_error(&err);
> > +       } else {
> > +               val = MIN(val, 0xFF);
> > +               val = MAX(val, 0);
> > +               DBG("Csis Rank: %u", val);
> > +               btd_opts.csis_defaults.cs_rank = val;
> > +       }
> > +
> >         str = g_key_file_get_string(config, "AVDTP", "SessionMode", &err);
> >         if (err) {
> >                 DBG("%s", err->message);
> > @@ -1014,6 +1121,12 @@ static void init_defaults(void)
> >         btd_opts.defaults.br.scan_type = 0xFFFF;
> >         btd_opts.defaults.le.enable_advmon_interleave_scan = 0xFF;
> >
> > +       btd_opts.csis_defaults.sirk_type = 1;
> > +       hex2bin(DEFAULT_SIRK, btd_opts.csis_defaults.sirk_val,
> > +                       sizeof(btd_opts.csis_defaults.sirk_val));
> > +       btd_opts.csis_defaults.cs_size = 1;
> > +       btd_opts.csis_defaults.cs_rank = 1;
> > +
> >         if (sscanf(VERSION, "%hhu.%hhu", &major, &minor) != 2)
> >                 return;
> >
> > diff --git a/src/main.conf b/src/main.conf
> > index f187c9aaa482..5378472ef0d4 100644
> > --- a/src/main.conf
> > +++ b/src/main.conf
> > @@ -258,6 +258,30 @@
> >  # Default to 3
> >  #Channels = 3
> >
> > +[CSIP]
>
> Let's use Set as a group name.
>
> > +# CSIP - Co-ordinated Set Identification Profile
> > +# SIRK Types which determines the value type for CsisSirkValue
> > +# Possible values:
> > +# 1 - Plain text
> > +# 2 - encrypted
> > +#CsisSirkType = 1
>
> Let's not use the type directly here so perhaps something like
> KeyType=plaintext,encrypted, etc, and it is important to say what is
> the default value.

Actually this doesn't make much sense, we can't really enter the key
in encrypt format since that has to be encrypted with device's LTK,
perhaps we should just have EncryptKey=y/n.

> > +
> > +# CSIP - Co-ordinated Set Identification Profile
> > +# SIRK - Set Identification resolution key which is common for all the
> > +# sets. They SIRK key is used to identify its sets. This can be any
> > +# 128 bit value.
> > +# Possible Values:
> > +# 16 byte hexadecimal value
> > +#CsisSirkValue = 861FAE703ED681F0C50B34155B6434FB
>
> Let's use Key instead, since this would belong to [Set] group that is
> enough to disambiguate.
>
> > +
> > +#CSIP - Size
> > +#Total no of sets belongs to this Profile
> > +#CsisSize = 1
>
> Size
>
> > +#CSIP - Rank
> > +#Rank for the device
> > +#CsisRank = 1
>
> Rank
>
> >  [AVDTP]
> >  # AVDTP L2CAP Signalling Channel Mode.
> >  # Possible values:
> > --
> > 2.25.1
> >
>
>
> --
> Luiz Augusto von Dentz
diff mbox series

Patch

diff --git a/src/btd.h b/src/btd.h
index 42cffcde43ca..a3683a098689 100644
--- a/src/btd.h
+++ b/src/btd.h
@@ -92,6 +92,13 @@  struct btd_defaults {
 	struct btd_le_defaults le;
 };
 
+struct btd_csis {
+	uint8_t sirk_type;
+	uint8_t sirk_val[16];
+	uint8_t cs_size;
+	uint8_t cs_rank;
+};
+
 struct btd_avdtp_opts {
 	uint8_t  session_mode;
 	uint8_t  stream_mode;
@@ -142,6 +149,8 @@  struct btd_opts {
 	enum jw_repairing_t jw_repairing;
 
 	struct btd_advmon_opts	advmon;
+
+	struct btd_csis csis_defaults;
 };
 
 extern struct btd_opts btd_opts;
diff --git a/src/main.c b/src/main.c
index 99d9c508ff91..abb422961f78 100644
--- a/src/main.c
+++ b/src/main.c
@@ -60,6 +60,9 @@ 
 #define DEFAULT_TEMPORARY_TIMEOUT         30 /* 30 seconds */
 #define DEFAULT_NAME_REQUEST_RETRY_DELAY 300 /* 5 minutes */
 
+/*CSIP Profile - Server */
+#define DEFAULT_SIRK "761FAE703ED681F0C50B34155B6434FB"
+
 #define SHUTDOWN_GRACE_SECONDS 10
 
 struct btd_opts btd_opts;
@@ -146,6 +149,14 @@  static const char *gatt_options[] = {
 	NULL
 };
 
+static const char *csip_options[] = {
+	"CsisSirkType",
+	"CsisSirkValue",
+	"CsisSize",
+	"CsisRank",
+	NULL
+};
+
 static const char *avdtp_options[] = {
 	"SessionMode",
 	"StreamMode",
@@ -166,11 +177,55 @@  static const struct group_table {
 	{ "LE",		le_options },
 	{ "Policy",	policy_options },
 	{ "GATT",	gatt_options },
+	{ "CSIP",	csip_options },
 	{ "AVDTP",	avdtp_options },
 	{ "AdvMon",	advmon_options },
 	{ }
 };
 
+#ifndef MIN
+#define MIN(x, y) ((x) < (y) ? (x) : (y))
+#endif
+
+static int8_t check_sirk_alpha_numeric(char *str)
+{
+	int8_t val = 0;
+	char *s = str;
+
+	if (strlen(s) != 32) /* 32 Bytes of Alpha numeric string */
+		return 0;
+
+	for ( ; *s; s++) {
+		if (((*s >= '0') & (*s <= '9'))
+			|| ((*s >= 'a') && (*s <= 'z'))
+			|| ((*s >= 'A') && (*s <= 'Z'))) {
+			val = 1;
+		} else {
+			val = 0;
+			break;
+		}
+	}
+
+	return val;
+}
+
+static size_t hex2bin(const char *hexstr, uint8_t *buf, size_t buflen)
+{
+	size_t i, len;
+
+	if (!hexstr)
+		return 0;
+
+	len = MIN((strlen(hexstr) / 2), buflen);
+	memset(buf, 0, len);
+
+	for (i = 0; i < len; i++) {
+		if (sscanf(hexstr + (i * 2), "%02hhX", &buf[i]) != 1)
+			continue;
+	}
+
+	return len;
+}
 
 GKeyFile *btd_get_main_conf(void)
 {
@@ -939,6 +994,58 @@  static void parse_config(GKeyFile *config)
 		btd_opts.gatt_channels = val;
 	}
 
+	val = g_key_file_get_integer(config, "CSIP", "CsisSirkType", &err);
+	if (err) {
+		DBG("%s", err->message);
+		g_clear_error(&err);
+	} else {
+		val = MIN(val, 2);
+		val = MAX(val, 1);
+		DBG("Csis Type: %u", val);
+		btd_opts.csis_defaults.cs_size = val;
+	}
+
+	str = g_key_file_get_string(config, "CSIP", "CsisSirkValue", &err);
+	if (err) {
+		DBG("%s", err->message);
+		g_clear_error(&err);
+	} else {
+		DBG("Csis Sirk: %s", str);
+
+		if (!check_sirk_alpha_numeric(str)) {
+			DBG("SIRK is not apha numeric Value");
+			return;
+		}
+
+		btd_opts.csis_defaults.sirk_type = 1; /* Plain Text - Type*/
+		hex2bin(str, btd_opts.csis_defaults.sirk_val,
+			sizeof(btd_opts.csis_defaults.sirk_val));
+
+		g_free(str);
+	}
+
+	val = g_key_file_get_integer(config, "CSIP", "CsisSize", &err);
+	if (err) {
+		DBG("%s", err->message);
+		g_clear_error(&err);
+	} else {
+		val = MIN(val, 0xFF);
+		val = MAX(val, 0);
+		DBG("Csis Size: %u", val);
+		btd_opts.csis_defaults.cs_size = val;
+	}
+
+	val = g_key_file_get_integer(config, "CSIP", "CsisRank", &err);
+	if (err) {
+		DBG("%s", err->message);
+		g_clear_error(&err);
+	} else {
+		val = MIN(val, 0xFF);
+		val = MAX(val, 0);
+		DBG("Csis Rank: %u", val);
+		btd_opts.csis_defaults.cs_rank = val;
+	}
+
 	str = g_key_file_get_string(config, "AVDTP", "SessionMode", &err);
 	if (err) {
 		DBG("%s", err->message);
@@ -1014,6 +1121,12 @@  static void init_defaults(void)
 	btd_opts.defaults.br.scan_type = 0xFFFF;
 	btd_opts.defaults.le.enable_advmon_interleave_scan = 0xFF;
 
+	btd_opts.csis_defaults.sirk_type = 1;
+	hex2bin(DEFAULT_SIRK, btd_opts.csis_defaults.sirk_val,
+			sizeof(btd_opts.csis_defaults.sirk_val));
+	btd_opts.csis_defaults.cs_size = 1;
+	btd_opts.csis_defaults.cs_rank = 1;
+
 	if (sscanf(VERSION, "%hhu.%hhu", &major, &minor) != 2)
 		return;
 
diff --git a/src/main.conf b/src/main.conf
index f187c9aaa482..5378472ef0d4 100644
--- a/src/main.conf
+++ b/src/main.conf
@@ -258,6 +258,30 @@ 
 # Default to 3
 #Channels = 3
 
+[CSIP]
+# CSIP - Co-ordinated Set Identification Profile
+# SIRK Types which determines the value type for CsisSirkValue
+# Possible values:
+# 1 - Plain text
+# 2 - encrypted
+#CsisSirkType = 1
+
+# CSIP - Co-ordinated Set Identification Profile
+# SIRK - Set Identification resolution key which is common for all the
+# sets. They SIRK key is used to identify its sets. This can be any
+# 128 bit value.
+# Possible Values:
+# 16 byte hexadecimal value
+#CsisSirkValue = 861FAE703ED681F0C50B34155B6434FB
+
+#CSIP - Size
+#Total no of sets belongs to this Profile
+#CsisSize = 1
+
+#CSIP - Rank
+#Rank for the device
+#CsisRank = 1
+
 [AVDTP]
 # AVDTP L2CAP Signalling Channel Mode.
 # Possible values: