static void ofl_msg_print_stats_reply(struct ofl_msg_stats_reply_header *msg, FILE *stream, struct ofl_exp *exp) { if (msg->type == OFPST_EXPERIMENTER) { if (exp != NULL && exp->stats != NULL && exp->stats->reply_to_string != NULL) { char *c = exp->stats->reply_to_string(msg); fputs(c, stream); free(c); return; } else { OFL_LOG_WARN(LOG_MODULE, "Trying to print EXPERIMENTER stats reply, 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 (OFPST_DESC): { ofl_msg_print_stats_reply_desc((struct ofl_msg_stats_reply_desc *)msg, stream); break; } case (OFPST_FLOW): { ofl_msg_print_stats_reply_flow((struct ofl_msg_stats_reply_flow *)msg, stream, exp); break; } case OFPST_AGGREGATE: { ofl_msg_print_stats_reply_aggregate((struct ofl_msg_stats_reply_aggregate *)msg, stream); break; } case (OFPST_TABLE): { ofl_msg_print_stats_reply_table((struct ofl_msg_stats_reply_table *)msg, stream); break; } case OFPST_PORT: { ofl_msg_print_stats_reply_port((struct ofl_msg_stats_reply_port *)msg, stream); break; } case OFPST_QUEUE: { ofl_msg_print_stats_reply_queue((struct ofl_msg_stats_reply_queue *)msg, stream); break; } case (OFPST_GROUP): { ofl_msg_print_stats_reply_group((struct ofl_msg_stats_reply_group *)msg, stream); break; } case OFPST_GROUP_DESC: { ofl_msg_print_stats_reply_group_desc((struct ofl_msg_stats_reply_group_desc *)msg, stream, exp); break; } case OFPST_EXPERIMENTER: { ofl_msg_print_stats_reply_experimenter((struct ofl_msg_stats_reply_experimenter *)msg, stream); break; } } fprintf(stream, "}"); }
char * ofl_stats_type_to_string(uint16_t type) { char *str; size_t str_size; FILE *stream = open_memstream(&str, &str_size); ofl_stats_type_print(stream, type); fclose(stream); return str; }
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_reply(struct ofl_msg_multipart_reply_header *msg, FILE *stream, struct ofl_exp *exp) { if (msg->type == OFPMP_EXPERIMENTER) { if (exp != NULL && exp->stats != NULL && exp->stats->reply_to_string != NULL) { char *c = exp->stats->reply_to_string(msg); fputs(c, stream); free(c); return; } else { OFL_LOG_WARN(LOG_MODULE, "Trying to print EXPERIMENTER stats reply, 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): { ofl_msg_print_stats_reply_desc((struct ofl_msg_reply_desc *)msg, stream); break; } case (OFPMP_FLOW): { ofl_msg_print_stats_reply_flow((struct ofl_msg_multipart_reply_flow *)msg, stream, exp); break; } case OFPMP_AGGREGATE: { ofl_msg_print_stats_reply_aggregate((struct ofl_msg_multipart_reply_aggregate *)msg, stream); break; } case (OFPMP_TABLE): { ofl_msg_print_stats_reply_table((struct ofl_msg_multipart_reply_table *)msg, stream); break; } case (OFPMP_TABLE_FEATURES):{ ofl_msg_print_table_features_reply((struct ofl_msg_multipart_reply_table_features*)msg, stream); break; } case OFPMP_PORT_STATS: { ofl_msg_print_stats_reply_port((struct ofl_msg_multipart_reply_port *)msg, stream); break; } case OFPMP_QUEUE: { ofl_msg_print_stats_reply_queue((struct ofl_msg_multipart_reply_queue *)msg, stream); break; } case (OFPMP_GROUP): { ofl_msg_print_stats_reply_group((struct ofl_msg_multipart_reply_group *)msg, stream); break; } case OFPMP_GROUP_DESC: { ofl_msg_print_stats_reply_group_desc((struct ofl_msg_multipart_reply_group_desc *)msg, stream, exp); break; } case OFPMP_GROUP_FEATURES:{ ofl_msg_print_stats_reply_group_features((struct ofl_msg_multipart_reply_group_features *)msg, stream); break; } case OFPMP_METER:{ ofl_msg_print_stats_reply_meter((struct ofl_msg_multipart_reply_meter*)msg, stream); break; } case OFPMP_METER_CONFIG:{ ofl_msg_print_stats_reply_meter_conf((struct ofl_msg_multipart_reply_meter_conf*)msg, stream); break; } case OFPMP_METER_FEATURES:{ ofl_msg_print_reply_meter_features((struct ofl_msg_multipart_reply_meter_features*)msg, stream); break; } case OFPMP_PORT_DESC:{ ofl_msg_print_port_desc_reply((struct ofl_msg_multipart_reply_port_desc*)msg, stream); break; } //TIME_EXTENTION_EXP(open) case OFPMP_BUNDLE_FEATURES:{ ofl_msg_print_bundle_features_reply((struct ofl_msg_multipart_relpy_bundle_features*)msg, stream); break; } //TIME_EXTENTION_EXP(close) case OFPMP_EXPERIMENTER: { ofl_msg_print_stats_reply_experimenter((struct ofl_msg_multipart_reply_experimenter *)msg, stream); break; } } fprintf(stream, "}"); }
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, exp); fputs(c, stream); free(c); fprintf(stream, "}"); 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; } case OFPMP_EXPERIMENTER: { ofl_msg_print_stats_request_experimenter((struct ofl_msg_multipart_request_experimenter *)msg, stream); break; } } fprintf(stream, "}"); }