Ejemplo n.º 1
0
int
ofl_msg_print(FILE *stream, struct ofl_msg_header *msg, struct ofl_exp *exp, char *errbuf) {
    ofl_message_type_print(stream, msg->type);

    switch (msg->type) {
        case OFPT_HELLO: { return 0; }
        case OFPT_ERROR: { ofl_msg_print_error((struct ofl_msg_error *)msg, stream); return 0; }
        case OFPT_ECHO_REQUEST:
        case OFPT_ECHO_REPLY: { ofl_msg_print_echo((struct ofl_msg_echo *)msg, stream); return 0; }
        case OFPT_EXPERIMENTER: {
            if (exp == NULL || exp->msg == NULL || exp->msg->to_string == NULL) {
                ofl_msg_print_experimenter((struct ofl_msg_experimenter *)msg, stream);
                //TODO error?
                return 0;
            } else {
                //TODO ret value ?
                char *c = exp->msg->to_string((struct ofl_msg_experimenter *)msg);
                fprintf(stream, "%s", c);
                free(c);
                return 0;
            }
        }

        /* Switch configuration messages. */
        case OFPT_FEATURES_REQUEST: { return 0; }
        case OFPT_FEATURES_REPLY: { ofl_msg_print_features_reply((struct ofl_msg_features_reply *)msg, stream); return 0; }
        case OFPT_GET_CONFIG_REQUEST: { return 0; }
        case OFPT_GET_CONFIG_REPLY: { ofl_msg_print_get_config_reply((struct ofl_msg_get_config_reply *)msg, stream); return 0; }
        case OFPT_SET_CONFIG: { ofl_msg_print_set_config((struct ofl_msg_set_config *)msg, stream); return 0; }

        /* Asynchronous messages. */
        case OFPT_PACKET_IN: { ofl_msg_print_packet_in((struct ofl_msg_packet_in *)msg, stream); return 0; }
        case OFPT_FLOW_REMOVED: { ofl_msg_print_flow_removed((struct ofl_msg_flow_removed *)msg, stream, exp); return 0; }
        case OFPT_PORT_STATUS: { ofl_msg_print_port_status((struct ofl_msg_port_status *)msg, stream); return 0; }

        /* Controller command messages. */
        case OFPT_PACKET_OUT: { ofl_msg_print_packet_out((struct ofl_msg_packet_out *)msg, stream, exp); return 0; }
        case OFPT_FLOW_MOD: { ofl_msg_print_flow_mod((struct ofl_msg_flow_mod *)msg, stream, exp); return 0; }
        case OFPT_GROUP_MOD: { ofl_msg_print_group_mod((struct ofl_msg_group_mod *)msg, stream, exp); return 0; }
        case OFPT_PORT_MOD: { ofl_msg_print_port_mod((struct ofl_msg_port_mod *)msg, stream); return 0; }
        case OFPT_TABLE_MOD: { ofl_msg_print_table_mod((struct ofl_msg_table_mod *)msg, stream); return 0; }

        /* Statistics messages. */
        case OFPT_STATS_REQUEST: { return ofl_msg_print_stats_request((struct ofl_msg_stats_request_header *)msg, stream, exp, errbuf); }
        case OFPT_STATS_REPLY: { return ofl_msg_print_stats_reply((struct ofl_msg_stats_reply_header *)msg, stream, exp, errbuf); }

        /* Barrier messages. */
        case OFPT_BARRIER_REQUEST: { return 0; }
        case OFPT_BARRIER_REPLY: { return 0; }

        /* Queue Configuration messages. */
        case OFPT_QUEUE_GET_CONFIG_REQUEST: { ofl_msg_print_queue_get_config_request((struct ofl_msg_queue_get_config_request *)msg, stream); return 0; }
        case OFPT_QUEUE_GET_CONFIG_REPLY: { ofl_msg_print_queue_get_config_reply((struct ofl_msg_queue_get_config_reply *)msg, stream); return 0; }
    }
    return -1;
}
void
ofl_msg_print(FILE *stream, struct ofl_msg_header *msg, struct ofl_exp *exp) {
    ofl_message_type_print(stream, msg->type);

    switch (msg->type) {
        case OFPT_HELLO: { return; }
        case OFPT_ERROR: { ofl_msg_print_error((struct ofl_msg_error *)msg, stream); return; }
        case OFPT_ECHO_REQUEST:
        case OFPT_ECHO_REPLY: { ofl_msg_print_echo((struct ofl_msg_echo *)msg, stream); return; }
        case OFPT_EXPERIMENTER: {
            if (exp == NULL || exp->msg == NULL || exp->msg->to_string == NULL) {
                ofl_msg_print_experimenter((struct ofl_msg_experimenter *)msg, stream);
            } else {
                char *c = exp->msg->to_string((struct ofl_msg_experimenter *)msg);
                fprintf(stream, "%s", c);
                free(c);
            }
            return;
        }

        /* Switch configuration messages. */
        case OFPT_FEATURES_REQUEST: { return; }
        case OFPT_FEATURES_REPLY: { ofl_msg_print_features_reply((struct ofl_msg_features_reply *)msg, stream); return; }
        case OFPT_GET_CONFIG_REQUEST: { return; }
        case OFPT_GET_CONFIG_REPLY: { ofl_msg_print_get_config_reply((struct ofl_msg_get_config_reply *)msg, stream); return; }
        case OFPT_SET_CONFIG: { ofl_msg_print_set_config((struct ofl_msg_set_config *)msg, stream); return; }

        /* Asynchronous messages. */
        case OFPT_PACKET_IN: { ofl_msg_print_packet_in((struct ofl_msg_packet_in *)msg, stream); return; }
        case OFPT_FLOW_REMOVED: { ofl_msg_print_flow_removed((struct ofl_msg_flow_removed *)msg, stream, exp); return; }
        case OFPT_PORT_STATUS: { ofl_msg_print_port_status((struct ofl_msg_port_status *)msg, stream); return; }

        /* Controller command messages. */
        case OFPT_PACKET_OUT: { ofl_msg_print_packet_out((struct ofl_msg_packet_out *)msg, stream, exp); return; }
        case OFPT_FLOW_MOD: { ofl_msg_print_flow_mod((struct ofl_msg_flow_mod *)msg, stream, exp); return; }
        case OFPT_GROUP_MOD: { ofl_msg_print_group_mod((struct ofl_msg_group_mod *)msg, stream, exp); return; }
        case OFPT_PORT_MOD: { ofl_msg_print_port_mod((struct ofl_msg_port_mod *)msg, stream); return; }
        case OFPT_TABLE_MOD: { ofl_msg_print_table_mod((struct ofl_msg_table_mod *)msg, stream); return; }

        /* Statistics messages. */
        case OFPT_MULTIPART_REQUEST: { ofl_msg_print_multipart_request((struct ofl_msg_multipart_request_header *)msg, stream, exp); return; }
        case OFPT_MULTIPART_REPLY: { ofl_msg_print_multipart_reply((struct ofl_msg_multipart_reply_header *)msg, stream, exp); return; }

        /* Barrier messages. */
        case OFPT_BARRIER_REQUEST: { return; }
        case OFPT_BARRIER_REPLY: { return; }

        /*Role messages */
        case OFPT_ROLE_REQUEST:
        case OFPT_ROLE_REPLY:{
            ofl_msg_print_role_msg((struct ofl_msg_role_request*)msg, stream);        
        }
        /* Queue Configuration messages. */
        case OFPT_QUEUE_GET_CONFIG_REQUEST: { ofl_msg_print_queue_get_config_request((struct ofl_msg_queue_get_config_request *)msg, stream); return; }
        case OFPT_QUEUE_GET_CONFIG_REPLY: { ofl_msg_print_queue_get_config_reply((struct ofl_msg_queue_get_config_reply *)msg, stream); return; }
		
		/* Asynchronous message configuration. */
		case OFPT_GET_ASYNC_REQUEST:{return;}
        case OFPT_GET_ASYNC_REPLY:
        case OFPT_SET_ASYNC:{ofl_msg_print_async((struct ofl_msg_async_config*)msg, stream); return;}		
		
		case OFPT_METER_MOD: {ofl_msg_print_meter_mod((struct ofl_msg_meter_mod*)msg, stream); return;}
			    	
        /* Bundle messages. */
        case OFPT_BUNDLE_CONTROL: { ofl_msg_print_bundle_control((struct ofl_msg_bundle_control *)msg, stream); return; }
        case OFPT_BUNDLE_ADD_MESSAGE: { ofl_msg_print_bundle_add_msg((struct ofl_msg_bundle_add_msg *)msg, stream); return; }
    }
}