2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-22 09:58:01 +00:00
ovs/include/openvswitch/ofp-meter.h
Ben Pfaff fe2c69f49c ofp-print: Move significant formatting code into more specific .c files.
Signed-off-by: Ben Pfaff <blp@ovn.org>
Acked-by: Justin Pettit <jpettit@ovn.org>
2018-06-18 15:25:44 -07:00

136 lines
4.6 KiB
C

/*
* Copyright (c) 2008-2017 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef OPENVSWITCH_OFP_METER_H
#define OPENVSWITCH_OFP_METER_H 1
#include "openflow/openflow.h"
#include "openvswitch/ofp-protocol.h"
struct ofpbuf;
struct ovs_list;
#ifdef __cplusplus
extern "C" {
#endif
/* Type for meter_id in ofproto provider interface, UINT32_MAX if invalid. */
typedef struct { uint32_t uint32; } ofproto_meter_id;
void ofputil_format_meter_id(struct ds *s, uint32_t meter_id, char separator);
/* Meter band configuration for all supported band types. */
struct ofputil_meter_band {
uint16_t type;
uint8_t prec_level; /* Non-zero if type == OFPMBT_DSCP_REMARK. */
uint32_t rate;
uint32_t burst_size;
};
void ofputil_format_meter_band(struct ds *, enum ofp13_meter_flags,
const struct ofputil_meter_band *);
struct ofputil_meter_band_stats {
uint64_t packet_count;
uint64_t byte_count;
};
struct ofputil_meter_config {
uint32_t meter_id;
uint16_t flags;
uint16_t n_bands;
struct ofputil_meter_band *bands;
};
void ofputil_append_meter_config(struct ovs_list *replies,
const struct ofputil_meter_config *);
int ofputil_decode_meter_config(struct ofpbuf *,
struct ofputil_meter_config *,
struct ofpbuf *bands);
void ofputil_format_meter_config(struct ds *,
const struct ofputil_meter_config *);
struct ofputil_meter_mod {
uint16_t command;
struct ofputil_meter_config meter;
};
enum ofperr ofputil_decode_meter_mod(const struct ofp_header *,
struct ofputil_meter_mod *,
struct ofpbuf *bands);
struct ofpbuf *ofputil_encode_meter_mod(enum ofp_version,
const struct ofputil_meter_mod *);
char *parse_ofp_meter_mod_str(struct ofputil_meter_mod *, const char *string,
int command,
enum ofputil_protocol *usable_protocols)
OVS_WARN_UNUSED_RESULT;
void ofputil_format_meter_mod(struct ds *, const struct ofputil_meter_mod *);
struct ofputil_meter_stats {
uint32_t meter_id;
uint32_t flow_count;
uint64_t packet_in_count;
uint64_t byte_in_count;
uint32_t duration_sec;
uint32_t duration_nsec;
uint16_t n_bands;
struct ofputil_meter_band_stats *bands;
};
void ofputil_append_meter_stats(struct ovs_list *replies,
const struct ofputil_meter_stats *);
int ofputil_decode_meter_stats(struct ofpbuf *,
struct ofputil_meter_stats *,
struct ofpbuf *bands);
void ofputil_format_meter_stats(struct ds *,
const struct ofputil_meter_stats *);
struct ofputil_meter_features {
uint32_t max_meters; /* Maximum number of meters. */
uint32_t band_types; /* Can support max 32 band types. */
uint32_t capabilities; /* Supported flags. */
uint8_t max_bands;
uint8_t max_color;
};
void ofputil_decode_meter_features(const struct ofp_header *,
struct ofputil_meter_features *);
struct ofpbuf *ofputil_encode_meter_features_reply(const struct
ofputil_meter_features *,
const struct ofp_header *
request);
void ofputil_format_meter_features(struct ds *,
const struct ofputil_meter_features *);
enum ofputil_meter_request_type {
OFPUTIL_METER_FEATURES,
OFPUTIL_METER_CONFIG,
OFPUTIL_METER_STATS
};
struct ofpbuf *ofputil_encode_meter_request(enum ofp_version,
enum ofputil_meter_request_type,
uint32_t meter_id);
void ofputil_decode_meter_request(const struct ofp_header *,
uint32_t *meter_id);
#ifdef __cplusplus
}
#endif
#endif /* ofp-meter.h */