static int ofl_msg_print_stats_request(struct ofl_msg_stats_request_header *msg, FILE *stream, struct ofl_exp *exp, char *errbuf) { if (msg->type == OFPST_EXPERIMENTER) { if (exp != NULL && exp->stats != NULL && exp->stats->req_to_string != NULL) { char *c = exp->stats->req_to_string(msg); fputs(c, stream); free(c); return 0; } else { if (errbuf != NULL) { snprintf(errbuf, OFL_ERRBUF_SIZE, "Trying to print EXPERIMENTER stats request, but no callback was given."); return -1; } } } fprintf(stream, "{type=\""); ofl_stats_type_print(stream, msg->type); fprintf(stream, "\", flags=\"0x%"PRIx32"\"", msg->flags); switch (msg->type) { case OFPST_DESC: { break; } case OFPST_FLOW: case OFPST_AGGREGATE: { ofl_msg_print_stats_request_flow((struct ofl_msg_stats_request_flow *)msg, stream, exp); break; } case OFPST_TABLE: { break; } case OFPST_PORT: { ofl_msg_print_stats_request_port((struct ofl_msg_stats_request_port *)msg, stream); break; } case OFPST_QUEUE: { ofl_msg_print_stats_request_queue((struct ofl_msg_stats_request_queue *)msg, stream); break; } case OFPST_GROUP: { ofl_msg_print_stats_request_group((struct ofl_msg_stats_request_group *)msg, stream); break; } case OFPST_GROUP_DESC: { break; } case OFPST_EXPERIMENTER: { ofl_msg_print_stats_request_experimenter((struct ofl_msg_stats_request_experimenter *)msg, stream); break; } } fprintf(stream, "}"); return 0; }
static void ofl_msg_print_multipart_request(struct ofl_msg_multipart_request_header *msg, FILE *stream, struct ofl_exp *exp) { if (msg->type == OFPMP_EXPERIMENTER) { if (exp != NULL && exp->stats != NULL && exp->stats->req_to_string != NULL) { char *c = exp->stats->req_to_string(msg); fputs(c, stream); free(c); return; } else { OFL_LOG_WARN(LOG_MODULE, "Trying to print EXPERIMENTER stats request, but no callback was given."); } } fprintf(stream, "{type=\""); ofl_stats_type_print(stream, msg->type); fprintf(stream, "\", flags=\"0x%"PRIx32"\"", msg->flags); switch (msg->type) { case OFPMP_DESC: { break; } case OFPMP_FLOW: case OFPMP_AGGREGATE: { ofl_msg_print_stats_request_flow((struct ofl_msg_multipart_request_flow *)msg, stream, exp); break; } case OFPMP_TABLE: { break; } case OFPMP_TABLE_FEATURES: { ofl_msg_print_table_features_request((struct ofl_msg_multipart_request_table_features*)msg, stream); break; } case OFPMP_PORT_STATS: { ofl_msg_print_stats_request_port((struct ofl_msg_multipart_request_port *)msg, stream); break; } case OFPMP_QUEUE: { ofl_msg_print_stats_request_queue((struct ofl_msg_multipart_request_queue *)msg, stream); break; } case OFPMP_GROUP: { ofl_msg_print_stats_request_group((struct ofl_msg_multipart_request_group *)msg, stream); break; } case OFPMP_GROUP_DESC: { break; } case OFPMP_GROUP_FEATURES:{ break; } case OFPMP_METER: case OFPMP_METER_CONFIG:{ ofl_msg_print_meter_stats_request((struct ofl_msg_multipart_meter_request*)msg, stream); break; } case OFPMP_METER_FEATURES:{ break; } case OFPMP_PORT_DESC:{ break; } //TIME_EXTENTION_EXP(open) case OFPMP_BUNDLE_FEATURES:{ ofl_msg_print_bundle_features_req((struct ofl_msg_multipart_request_bundle_features*)msg, stream); break; } //TIME_EXTENTION_EXP(close) case OFPMP_EXPERIMENTER: { ofl_msg_print_stats_request_experimenter((struct ofl_msg_multipart_request_experimenter *)msg, stream); break; } } fprintf(stream, "}"); }