mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 06:15:47 +00:00
ofproto-dpif: Implement self-check of flow translations.
One of the major tasks of ofproto-dpif is to translate OpenFlow actions into "ODP" datapath actions. These translations are essentially a cache that requires revalidation when certain state changes occur. For best performance it's important to revalidate flows only when necessary, so from time to time Open vSwitch has gotten this wrong, which meant that stale flows could persist in the kernel and cause surprising behavior. This commit implements a simple "self check": every trip through the Open vSwitch main loop randomly chooses one flow entry and checks that its actions have been correctly translated. If not, Open vSwitch logs the details of the problem. This should help find problems more quickly in the future. Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009, 2010, 2011 Nicira Networks.
|
||||
* Copyright (c) 2009, 2010, 2011, 2012 Nicira Networks.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -1687,6 +1687,24 @@ odp_flow_key_to_flow(const struct nlattr *key, size_t key_len,
|
||||
expected_attrs, flow, key, key_len);
|
||||
}
|
||||
|
||||
/* Returns 'fitness' as a string, for use in debug messages. */
|
||||
const char *
|
||||
odp_key_fitness_to_string(enum odp_key_fitness fitness)
|
||||
{
|
||||
switch (fitness) {
|
||||
case ODP_FIT_PERFECT:
|
||||
return "OK";
|
||||
case ODP_FIT_TOO_MUCH:
|
||||
return "too_much";
|
||||
case ODP_FIT_TOO_LITTLE:
|
||||
return "too_little";
|
||||
case ODP_FIT_ERROR:
|
||||
return "error";
|
||||
default:
|
||||
return "<unknown>";
|
||||
}
|
||||
}
|
||||
|
||||
/* Appends an OVS_ACTION_ATTR_USERSPACE action to 'odp_actions' that specifies
|
||||
* Netlink PID 'pid'. If 'cookie' is nonnull, adds a userdata attribute whose
|
||||
* contents contains 'cookie' and returns the offset within 'odp_actions' of
|
||||
|
Reference in New Issue
Block a user