Add keyless topics with small payloads to ddsperf

Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
Erik Boasson 2019-11-15 11:51:13 +01:00 committed by eboasson
parent c603fdd4ed
commit 210fa7e78f
2 changed files with 48 additions and 14 deletions

View file

@ -53,7 +53,9 @@ enum topicsel {
KS, /* KeyedSeq type: seq#, key, sequence-of-octet */ KS, /* KeyedSeq type: seq#, key, sequence-of-octet */
K32, /* Keyed32 type: seq#, key, array-of-24-octet (sizeof = 32) */ K32, /* Keyed32 type: seq#, key, array-of-24-octet (sizeof = 32) */
K256, /* Keyed256 type: seq#, key, array-of-248-octet (sizeof = 256) */ K256, /* Keyed256 type: seq#, key, array-of-248-octet (sizeof = 256) */
OU /* OneULong type: seq# */ OU, /* OneULong type: seq# */
UK16, /* Unkeyed16, type: seq#, array-of-12-octet (sizeof = 16) */
UK1024/* Unkeyed1024, type: seq#, array-of-1020-octet (sizeof = 1024) */
}; };
enum submode { enum submode {
@ -317,6 +319,8 @@ union data {
Keyed32 k32; Keyed32 k32;
Keyed256 k256; Keyed256 k256;
OneULong ou; OneULong ou;
Unkeyed16 uk16;
Unkeyed1024 uk1024;
}; };
static void verrorx (int exitcode, const char *fmt, va_list ap) static void verrorx (int exitcode, const char *fmt, va_list ap)
@ -529,6 +533,14 @@ static void *init_sample (union data *data, uint32_t seq)
case OU: case OU:
data->ou.seq = seq; data->ou.seq = seq;
break; break;
case UK16:
data->uk16.seq = seq;
memset (data->uk16.baggage, 0xee, sizeof (data->uk16.baggage));
break;
case UK1024:
data->uk1024.seq = seq;
memset (data->uk1024.baggage, 0xee, sizeof (data->uk1024.baggage));
break;
} }
return baggage; return baggage;
} }
@ -791,10 +803,12 @@ static uint32_t topic_payload_size (enum topicsel tp, uint32_t bgsize)
uint32_t size = 0; uint32_t size = 0;
switch (tp) switch (tp)
{ {
case KS: size = 12 + bgsize; break; case KS: size = 12 + bgsize; break;
case K32: size = 32; break; case K32: size = 32; break;
case K256: size = 256; break; case K256: size = 256; break;
case OU: size = 4; break; case OU: size = 4; break;
case UK16: size = 16; break;
case UK1024: size = 1024; break;
} }
return size; return size;
} }
@ -814,13 +828,15 @@ static bool process_data (dds_entity_t rd, struct subthread_arg *arg)
uint32_t seq = 0, keyval = 0, size = 0; uint32_t seq = 0, keyval = 0, size = 0;
switch (topicsel) switch (topicsel)
{ {
case KS: { case KS: {
KeyedSeq *d = (KeyedSeq *) mseq[i]; keyval = d->keyval; seq = d->seq; size = topic_payload_size (topicsel, d->baggage._length); KeyedSeq *d = mseq[i]; keyval = d->keyval; seq = d->seq; size = topic_payload_size (topicsel, d->baggage._length);
break; break;
} }
case K32: { Keyed32 *d = (Keyed32 *) mseq[i]; keyval = d->keyval; seq = d->seq; size = topic_payload_size (topicsel, 0); } break; case K32: { Keyed32 *d = mseq[i]; keyval = d->keyval; seq = d->seq; size = topic_payload_size (topicsel, 0); } break;
case K256: { Keyed256 *d = (Keyed256 *) mseq[i]; keyval = d->keyval; seq = d->seq; size = topic_payload_size (topicsel, 0); } break; case K256: { Keyed256 *d = mseq[i]; keyval = d->keyval; seq = d->seq; size = topic_payload_size (topicsel, 0); } break;
case OU: { OneULong *d = (OneULong *) mseq[i]; keyval = 0; seq = d->seq; size = topic_payload_size (topicsel, 0); } break; case OU: { OneULong *d = mseq[i]; keyval = 0; seq = d->seq; size = topic_payload_size (topicsel, 0); } break;
case UK16: { Unkeyed16 *d = mseq[i]; keyval = 0; seq = d->seq; size = topic_payload_size (topicsel, 0); } break;
case UK1024: { Unkeyed1024 *d = mseq[i]; keyval = 0; seq = d->seq; size = topic_payload_size (topicsel, 0); } break;
} }
(void) check_eseq (&eseq_admin, seq, keyval, size, iseq[i].publication_handle); (void) check_eseq (&eseq_admin, seq, keyval, size, iseq[i].publication_handle);
if (iseq[i].source_timestamp & 1) if (iseq[i].source_timestamp & 1)
@ -1883,6 +1899,8 @@ int main (int argc, char *argv[])
else if (strcmp (optarg, "K32") == 0) topicsel = K32; else if (strcmp (optarg, "K32") == 0) topicsel = K32;
else if (strcmp (optarg, "K256") == 0) topicsel = K256; else if (strcmp (optarg, "K256") == 0) topicsel = K256;
else if (strcmp (optarg, "OU") == 0) topicsel = OU; else if (strcmp (optarg, "OU") == 0) topicsel = OU;
else if (strcmp (optarg, "UK16") == 0) topicsel = UK16;
else if (strcmp (optarg, "UK1024") == 0) topicsel = UK1024;
else error3 ("%s: unknown topic\n", optarg); else error3 ("%s: unknown topic\n", optarg);
break; break;
case 'M': maxwait = atof (optarg); if (maxwait <= 0) maxwait = HUGE_VAL; break; case 'M': maxwait = atof (optarg); if (maxwait <= 0) maxwait = HUGE_VAL; break;
@ -1970,10 +1988,12 @@ int main (int argc, char *argv[])
const dds_topic_descriptor_t *tp_desc = NULL; const dds_topic_descriptor_t *tp_desc = NULL;
switch (topicsel) switch (topicsel)
{ {
case KS: tp_suf = "KS"; tp_desc = &KeyedSeq_desc; break; case KS: tp_suf = "KS"; tp_desc = &KeyedSeq_desc; break;
case K32: tp_suf = "K32"; tp_desc = &Keyed32_desc; break; case K32: tp_suf = "K32"; tp_desc = &Keyed32_desc; break;
case K256: tp_suf = "K256"; tp_desc = &Keyed256_desc; break; case K256: tp_suf = "K256"; tp_desc = &Keyed256_desc; break;
case OU: tp_suf = "OU"; tp_desc = &OneULong_desc; break; case OU: tp_suf = "OU"; tp_desc = &OneULong_desc; break;
case UK16: tp_suf = "UK16"; tp_desc = &Unkeyed16_desc; break;
case UK1024: tp_suf = "UK1024"; tp_desc = &Unkeyed1024_desc; break;
} }
snprintf (tpname_data, sizeof (tpname_data), "DDSPerf%cData%s", reliable ? 'R' : 'U', tp_suf); snprintf (tpname_data, sizeof (tpname_data), "DDSPerf%cData%s", reliable ? 'R' : 'U', tp_suf);
snprintf (tpname_ping, sizeof (tpname_ping), "DDSPerf%cPing%s", reliable ? 'R' : 'U', tp_suf); snprintf (tpname_ping, sizeof (tpname_ping), "DDSPerf%cPing%s", reliable ? 'R' : 'U', tp_suf);

View file

@ -4,6 +4,20 @@ struct OneULong
}; };
#pragma keylist OneULong #pragma keylist OneULong
struct Unkeyed16
{
unsigned long seq;
octet baggage[12];
};
#pragma keylist Unkeyed16
struct Unkeyed1024
{
unsigned long seq;
octet baggage[1020];
};
#pragma keylist Unkeyed1024
struct Keyed32 struct Keyed32
{ {
unsigned long seq; unsigned long seq;