cinfo->is_connected = rconn_is_connected(rconn);
cinfo->role = ofconn->role;
- cinfo->pairs.n = 0;
-
+ smap_init(&cinfo->pairs);
if (last_error) {
- cinfo->pairs.keys[cinfo->pairs.n] = "last_error";
- cinfo->pairs.values[cinfo->pairs.n++]
- = xstrdup(ovs_retval_to_string(last_error));
+ smap_add(&cinfo->pairs, "last_error",
+ ovs_retval_to_string(last_error));
}
- cinfo->pairs.keys[cinfo->pairs.n] = "state";
- cinfo->pairs.values[cinfo->pairs.n++]
- = xstrdup(rconn_get_state(rconn));
+ smap_add(&cinfo->pairs, "state", rconn_get_state(rconn));
if (last_connection != TIME_MIN) {
- cinfo->pairs.keys[cinfo->pairs.n] = "sec_since_connect";
- cinfo->pairs.values[cinfo->pairs.n++]
- = xasprintf("%ld", (long int) (now - last_connection));
+ smap_add_format(&cinfo->pairs, "sec_since_connect",
+ "%ld", (long int) (now - last_connection));
}
if (last_disconnect != TIME_MIN) {
- cinfo->pairs.keys[cinfo->pairs.n] = "sec_since_disconnect";
- cinfo->pairs.values[cinfo->pairs.n++]
- = xasprintf("%ld", (long int) (now - last_disconnect));
+ smap_add_format(&cinfo->pairs, "sec_since_disconnect",
+ "%ld", (long int) (now - last_disconnect));
}
}
}
SHASH_FOR_EACH (node, info) {
struct ofproto_controller_info *cinfo = node->data;
- while (cinfo->pairs.n) {
- free(CONST_CAST(char *, cinfo->pairs.values[--cinfo->pairs.n]));
- }
+ smap_destroy(&cinfo->pairs);
free(cinfo);
}
shash_destroy(info);
shash_find_data(&info, cfg->target);
if (cinfo) {
- struct smap smap = SMAP_INITIALIZER(&smap);
- const char **values = cinfo->pairs.values;
- const char **keys = cinfo->pairs.keys;
- size_t i;
-
- for (i = 0; i < cinfo->pairs.n; i++) {
- smap_add(&smap, keys[i], values[i]);
- }
-
ovsrec_controller_set_is_connected(cfg, cinfo->is_connected);
ovsrec_controller_set_role(cfg, ofp12_controller_role_to_str(
cinfo->role));
- ovsrec_controller_set_status(cfg, &smap);
- smap_destroy(&smap);
+ ovsrec_controller_set_status(cfg, &cinfo->pairs);
} else {
ovsrec_controller_set_is_connected(cfg, false);
ovsrec_controller_set_role(cfg, NULL);