@@ -61,6 +61,8 @@ static const char *conf_file_default = MCTPD_CONF_FILE_DEFAULT;
6161
6262static const mctp_eid_t eid_alloc_min = 0x08 ;
6363static const mctp_eid_t eid_alloc_max = 0xfe ;
64+ static const uint8_t MCTP_TYPE_VENDOR_PCIE = 0x7e ;
65+ static const uint8_t MCTP_TYPE_VENDOR_IANA = 0x7f ;
6466
6567// arbitrary sanity
6668static size_t MAX_PEER_SIZE = 1000000 ;
@@ -981,6 +983,7 @@ static int handle_control_get_message_type_support(
981983{
982984 struct mctp_ctrl_resp_get_msg_type_support * resp = NULL ;
983985 struct mctp_ctrl_cmd_get_msg_type_support * req = NULL ;
986+ bool pcie_support = false, iana_support = false;
984987 size_t i , resp_len , type_count ;
985988 uint8_t * resp_buf , * msg_types ;
986989 int rc ;
@@ -992,6 +995,21 @@ static int handle_control_get_message_type_support(
992995
993996 req = (void * )buf ;
994997 type_count = ctx -> num_supported_msg_types ;
998+ for (i = 0 ; i < ctx -> num_supported_msg_types ; i ++ ) {
999+ pcie_support |= (ctx -> supported_msg_types [i ].msg_type ==
1000+ MCTP_TYPE_VENDOR_PCIE );
1001+ iana_support |= (ctx -> supported_msg_types [i ].msg_type ==
1002+ MCTP_TYPE_VENDOR_IANA );
1003+ }
1004+
1005+ for (i = 0 ; i < ctx -> num_supported_vdm_types ; i ++ ) {
1006+ pcie_support |= ctx -> supported_vdm_types [i ].format ==
1007+ VID_FORMAT_PCIE ;
1008+ iana_support |= ctx -> supported_vdm_types [i ].format ==
1009+ VID_FORMAT_IANA ;
1010+ }
1011+ type_count += (pcie_support + iana_support );
1012+
9951013 // Allocate extra space for the message types
9961014 resp_len = sizeof (* resp ) + type_count ;
9971015 resp_buf = malloc (resp_len );
@@ -1004,13 +1022,19 @@ static int handle_control_get_message_type_support(
10041022 mctp_ctrl_msg_hdr_init_resp (& resp -> ctrl_hdr , req -> ctrl_hdr );
10051023 resp -> completion_code = MCTP_CTRL_CC_SUCCESS ;
10061024
1007- resp -> msg_type_count = type_count ;
10081025 // Append message types after msg_type_count
10091026 msg_types = (uint8_t * )(resp + 1 );
1010- for (i = 0 ; i < type_count ; i ++ ) {
1027+ for (i = 0 ; i < ctx -> num_supported_msg_types ; i ++ ) {
10111028 msg_types [i ] = ctx -> supported_msg_types [i ].msg_type ;
10121029 }
1030+ if (pcie_support ) {
1031+ msg_types [i ++ ] = MCTP_TYPE_VENDOR_PCIE ;
1032+ }
1033+ if (iana_support ) {
1034+ msg_types [i ++ ] = MCTP_TYPE_VENDOR_IANA ;
1035+ }
10131036
1037+ resp -> msg_type_count = type_count ;
10141038 rc = reply_message (ctx , sd , resp , resp_len , addr );
10151039 free (resp_buf );
10161040
0 commit comments