/* * A {AggregateStatsRequest} object instance to request aggregate statistics. * @overload initialize(options={}) * @example * AggregateStatsRequest.new( * :match => Match * ) * * @param [Hash] options * the options to create a message with. * * @option options [Match] :match * a {Match} object to match flow fields with this request. * This option is mandatory. * * @option options [Number] :table_id * a table id to match and restrict returned results. * A value of 0xff would return all tables and is set to if not specified. * * @option options [Number] :out_port * a value of +OFPP_NONE+ would match all flow entries and is set to if not * specified. * * @raise [ArgumentError] if option[:match] is not specified. * * @return [AggregateStatsRequest] * an object that encapsulates the +OFPT_STATS_REQUEST(OFPST_AGGREGATE)+ OpenFlow message. */ static VALUE aggregate_stats_request_init( VALUE self, VALUE options ) { buffer *message; Data_Get_Struct( self, buffer, message ); subclass_stats_request_init( self, options ); ( ( struct ofp_header * ) ( message->data ) )->xid = htonl( get_stats_request_num2uint( self, "@transaction_id" ) ); struct ofp_stats_request *stats_request; stats_request = ( struct ofp_stats_request * ) message->data; struct ofp_aggregate_stats_request *aggregate_stats_request; aggregate_stats_request = ( struct ofp_aggregate_stats_request * ) stats_request->body; stats_request->flags = htons ( get_stats_request_num2uint16( self, "@flags" ) ); struct ofp_match m = get_stats_request_match( self ); hton_match( &aggregate_stats_request->match, &m ) ; aggregate_stats_request->table_id = get_stats_request_table_id( self ); aggregate_stats_request->out_port = htons( get_stats_request_num2uint16( self, "@out_port" ) ); return self; }
/* * A {FlowStatsRequest} object instance to request flow statistics. * * @overload initialize(options={}) * @example * FlowStatsRequest.new( :match => Match ) * FlowStatsRequest.new( :match => Match, :table_id => 1 ) * FlowStatsRequest.new( :match => Match, :table_id => 1, :out_port => 2 ) * * @param [Hash] options * the options to create a message with. * * @option options [Match] :match * a {Match} object to match flow fields with this request. * This option is mandatory. * * @option options [Number] :table_id * a table id to match and restrict returned results. * A value of 0xff would return all tables and is set to if not specified. * * @option options [Number] :out_port * a value of +OFPP_NONE+ would match all flow entries and is set to if not * specified. * * @raise [ArgumentError] if option match is not specified. * @raise [TypeError] if option match is not a Trema::Match object. * * @return [FlowStatsRequest] * an object that encapsulates the +OFPT_STATS_REQUEST(OFPST_FLOW)+ OpenFlow message. */ static VALUE flow_stats_request_init( VALUE self, VALUE options ) { buffer *message; Data_Get_Struct( self, buffer, message ); subclass_stats_request_init( self, options ); ( ( struct ofp_header * ) ( message->data ) )->xid = htonl( get_stats_request_num2uint( self, "@transaction_id" ) ); struct ofp_stats_request *stats_request; stats_request = ( struct ofp_stats_request * ) message->data; struct ofp_flow_stats_request *flow_stats_request; flow_stats_request = ( struct ofp_flow_stats_request * ) stats_request->body; stats_request->flags = htons ( get_stats_request_num2uint16( self, "@flags" ) ); const struct ofp_match *match; Data_Get_Struct( rb_iv_get( self, "@match" ), struct ofp_match, match ); hton_match( &flow_stats_request->match, match ); flow_stats_request->table_id = get_stats_request_table_id( self ); flow_stats_request->out_port = htons( get_stats_request_num2uint16( self, "@out_port" ) ); return self; }