lagopus_result_t ofp_features_capabilities_convert(uint64_t ds_capabilities, uint32_t *features_capabilities) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; size_t i; if (features_capabilities != NULL) { /* set capabilities. */ *features_capabilities = 0; for (i = 0; i < capabilities_size; i++) { features_reply_features_capability_set( ds_capabilities, i, features_capabilities); } ret = LAGOPUS_RESULT_OK; } else { ret = LAGOPUS_RESULT_INVALID_ARGS; } return ret; }
static lagopus_result_t features_reply_features_get(struct channel *channel, struct ofp_switch_features *features) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; datastore_bridge_info_t info; size_t i; /* set ids/reserved. */ features->datapath_id = channel_dpid_get(channel); features->auxiliary_id = channel_auxiliary_id_get(channel); features->reserved = 0; if ((ret = ofp_bridgeq_mgr_info_get(features->datapath_id, &info)) != LAGOPUS_RESULT_OK) { lagopus_msg_warning("FAILED (%s).\n", lagopus_error_get_string(ret)); goto done; } /* set max. */ features->n_buffers = info.max_buffered_packets; features->n_tables = info.max_tables; /* set capabilities. */ features->capabilities = 0; for (i = 0; i < capabilities_size; i++) { if ((ret = features_reply_features_capability_set( info.capabilities, i, &features->capabilities)) != LAGOPUS_RESULT_OK) { lagopus_msg_warning("FAILED (%s).\n", lagopus_error_get_string(ret)); goto done; } } done: return ret; }