+static void msg_opt_add(struct nmrp_msg *msg, uint16_t type, void *data,
+ uint16_t len)
+{
+ uint32_t i = 0;
+ struct nmrp_opt *opt = msg->opts;
+
+ if (len + NMRP_OPT_HDR_LEN > NMRP_MAX_OPT_SIZE
+ || msg->num_opts == NMRP_MAX_OPT_NUM) {
+ fprintf(stderr, "Invalid option - this is a bug.\n");
+ }
+
+ for (; i != msg->num_opts; ++i) {
+ opt = (struct nmrp_opt*)(((char*)opt) + msg->len);
+ }
+
+ opt->len = NMRP_OPT_HDR_LEN + len;
+ opt->type = type;
+
+ if (len) {
+ memcpy(&opt->val, data, len);
+ }
+
+ ++msg->num_opts;
+
+ return true;
+}
+