projects
/
openvswitch
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vlog: Fix typo in VLOG_IS_ERR_ENABLED macro definition.
[openvswitch]
/
ofproto
/
ofproto.c
diff --git
a/ofproto/ofproto.c
b/ofproto/ofproto.c
index ff5cb0149ee43db7b3a45858bb01590868bf3438..201488de47a8b4500cc9a491dfe7a2a2c6ef501d 100644
(file)
--- a/
ofproto/ofproto.c
+++ b/
ofproto/ofproto.c
@@
-33,13
+33,13
@@
#include "ofp-print.h"
#include "ofp-util.h"
#include "ofpbuf.h"
#include "ofp-print.h"
#include "ofp-util.h"
#include "ofpbuf.h"
+#include "ofproto-provider.h"
#include "openflow/nicira-ext.h"
#include "openflow/openflow.h"
#include "packets.h"
#include "pinsched.h"
#include "pktbuf.h"
#include "poll-loop.h"
#include "openflow/nicira-ext.h"
#include "openflow/openflow.h"
#include "packets.h"
#include "pinsched.h"
#include "pktbuf.h"
#include "poll-loop.h"
-#include "private.h"
#include "shash.h"
#include "sset.h"
#include "timeval.h"
#include "shash.h"
#include "sset.h"
#include "timeval.h"
@@
-845,16
+845,7
@@
ofproto_get_ofproto_controller_info(const struct ofproto *ofproto,
void
ofproto_free_ofproto_controller_info(struct shash *info)
{
void
ofproto_free_ofproto_controller_info(struct shash *info)
{
- struct shash_node *node;
-
- SHASH_FOR_EACH (node, info) {
- struct ofproto_controller_info *cinfo = node->data;
- while (cinfo->pairs.n) {
- free((char *) cinfo->pairs.values[--cinfo->pairs.n]);
- }
- free(cinfo);
- }
- shash_destroy(info);
+ connmgr_free_controller_info(info);
}
/* Makes a deep copy of 'old' into 'port'. */
}
/* Makes a deep copy of 'old' into 'port'. */
@@
-1378,8
+1369,8
@@
ofproto_rule_destroy__(struct rule *rule)
/* This function allows an ofproto implementation to destroy any rules that
* remain when its ->destruct() function is called. The caller must have
* already uninitialized any derived members of 'rule' (step 5 described in the
/* This function allows an ofproto implementation to destroy any rules that
* remain when its ->destruct() function is called. The caller must have
* already uninitialized any derived members of 'rule' (step 5 described in the
- * large comment in ofproto/
private.h titled "Life Cycle"). This function
- * implements steps 6 and 7.
+ * large comment in ofproto/
ofproto-provider.h titled "Life Cycle").
+ *
This function
implements steps 6 and 7.
*
* This function should only be called from an ofproto implementation's
* ->destruct() function. It is not suitable elsewhere. */
*
* This function should only be called from an ofproto implementation's
* ->destruct() function. It is not suitable elsewhere. */
@@
-1398,13
+1389,12
@@
static bool
rule_has_out_port(const struct rule *rule, uint16_t out_port)
{
const union ofp_action *oa;
rule_has_out_port(const struct rule *rule, uint16_t out_port)
{
const union ofp_action *oa;
- s
truct actions_iterator i
;
+ s
ize_t left
;
if (out_port == OFPP_NONE) {
return true;
}
if (out_port == OFPP_NONE) {
return true;
}
- for (oa = actions_first(&i, rule->actions, rule->n_actions); oa;
- oa = actions_next(&i)) {
+ OFPUTIL_ACTION_FOR_EACH_UNSAFE (oa, left, rule->actions, rule->n_actions) {
if (action_outputs_to_port(oa, htons(out_port))) {
return true;
}
if (action_outputs_to_port(oa, htons(out_port))) {
return true;
}
@@
-1921,7
+1911,6
@@
static void
flow_stats_ds(struct rule *rule, struct ds *results)
{
uint64_t packet_count, byte_count;
flow_stats_ds(struct rule *rule, struct ds *results)
{
uint64_t packet_count, byte_count;
- size_t act_len = sizeof *rule->actions * rule->n_actions;
rule->ofproto->ofproto_class->rule_get_stats(rule,
&packet_count, &byte_count);
rule->ofproto->ofproto_class->rule_get_stats(rule,
&packet_count, &byte_count);
@@
-1936,8
+1925,8
@@
flow_stats_ds(struct rule *rule, struct ds *results)
ds_put_format(results, "n_bytes=%"PRIu64", ", byte_count);
cls_rule_format(&rule->cr, results);
ds_put_char(results, ',');
ds_put_format(results, "n_bytes=%"PRIu64", ", byte_count);
cls_rule_format(&rule->cr, results);
ds_put_char(results, ',');
- if (
act_len
> 0) {
- ofp_print_actions(results,
&rule->actions->header, act_len
);
+ if (
rule->n_actions
> 0) {
+ ofp_print_actions(results,
rule->actions, rule->n_actions
);
} else {
ds_put_cstr(results, "drop");
}
} else {
ds_put_cstr(results, "drop");
}
@@
-1990,6
+1979,7
@@
handle_aggregate_stats_request(struct ofconn *ofconn,
struct ofproto *ofproto = ofconn_get_ofproto(ofconn);
struct flow_stats_request request;
struct ofputil_aggregate_stats stats;
struct ofproto *ofproto = ofconn_get_ofproto(ofconn);
struct flow_stats_request request;
struct ofputil_aggregate_stats stats;
+ bool unknown_packets, unknown_bytes;
struct ofpbuf *reply;
struct list rules;
struct rule *rule;
struct ofpbuf *reply;
struct list rules;
struct rule *rule;
@@
-2007,6
+1997,7
@@
handle_aggregate_stats_request(struct ofconn *ofconn,
}
memset(&stats, 0, sizeof stats);
}
memset(&stats, 0, sizeof stats);
+ unknown_packets = unknown_bytes = false;
LIST_FOR_EACH (rule, ofproto_node, &rules) {
uint64_t packet_count;
uint64_t byte_count;
LIST_FOR_EACH (rule, ofproto_node, &rules) {
uint64_t packet_count;
uint64_t byte_count;
@@
-2014,10
+2005,26
@@
handle_aggregate_stats_request(struct ofconn *ofconn,
ofproto->ofproto_class->rule_get_stats(rule, &packet_count,
&byte_count);
ofproto->ofproto_class->rule_get_stats(rule, &packet_count,
&byte_count);
- stats.packet_count += packet_count;
- stats.byte_count += byte_count;
+ if (packet_count == UINT64_MAX) {
+ unknown_packets = true;
+ } else {
+ stats.packet_count += packet_count;
+ }
+
+ if (byte_count == UINT64_MAX) {
+ unknown_bytes = true;
+ } else {
+ stats.byte_count += byte_count;
+ }
+
stats.flow_count++;
}
stats.flow_count++;
}
+ if (unknown_packets) {
+ stats.packet_count = UINT64_MAX;
+ }
+ if (unknown_bytes) {
+ stats.byte_count = UINT64_MAX;
+ }
reply = ofputil_encode_aggregate_stats_reply(&stats, osm);
ofconn_send_reply(ofconn, reply);
reply = ofputil_encode_aggregate_stats_reply(&stats, osm);
ofconn_send_reply(ofconn, reply);
@@
-2621,7
+2628,7
@@
handle_openflow__(struct ofconn *ofconn, const struct ofpbuf *msg)
case OFPUTIL_OFPST_QUEUE_REQUEST:
return handle_queue_stats_request(ofconn, msg->data);
case OFPUTIL_OFPST_QUEUE_REQUEST:
return handle_queue_stats_request(ofconn, msg->data);
- case OFPUTIL_INVALID:
+ case OFPUTIL_
MSG_
INVALID:
case OFPUTIL_OFPT_HELLO:
case OFPUTIL_OFPT_ERROR:
case OFPUTIL_OFPT_FEATURES_REPLY:
case OFPUTIL_OFPT_HELLO:
case OFPUTIL_OFPT_ERROR:
case OFPUTIL_OFPT_FEATURES_REPLY:
@@
-2793,8
+2800,8
@@
ofoperation_destroy(struct ofoperation *op)
* If 'op' is a "delete flow" operation, 'error' must be 0. That is, flow
* deletions are not allowed to fail.
*
* If 'op' is a "delete flow" operation, 'error' must be 0. That is, flow
* deletions are not allowed to fail.
*
- * Please see the large comment in ofproto/
private.h titled "Asynchronous
- * Operation Support" for more information. */
+ * Please see the large comment in ofproto/
ofproto-provider.h titled
+ *
"Asynchronous
Operation Support" for more information. */
void
ofoperation_complete(struct ofoperation *op, int error)
{
void
ofoperation_complete(struct ofoperation *op, int error)
{