summaryrefslogtreecommitdiff
path: root/lib/multipath.c
diff options
context:
space:
mode:
authorEthan Jackson <ethan@nicira.com>2011-08-10 13:09:18 -0700
committerEthan Jackson <ethan@nicira.com>2011-08-12 15:06:53 -0700
commitce523f65fc0f283269f6a697b152c089fb0a22ee (patch)
treef62bb3fb59a5a3423fc5473274dffff59d1407e5 /lib/multipath.c
parent58a89177ab00d6a1c1b13479f8fd8e3a7b0aca6c (diff)
downloadopenvswitch-ce523f65fc0f283269f6a697b152c089fb0a22ee.tar.gz
nx-match: Update register check functions.
This patch simplifies the API of nxm_dst_check() and adds a new function nxm_src_check() for checking source fields.
Diffstat (limited to 'lib/multipath.c')
-rw-r--r--lib/multipath.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/multipath.c b/lib/multipath.c
index 96845563b..e85829a06 100644
--- a/lib/multipath.c
+++ b/lib/multipath.c
@@ -38,9 +38,11 @@ multipath_check(const struct nx_action_multipath *mp, const struct flow *flow)
{
uint32_t n_links = ntohs(mp->max_link) + 1;
size_t min_n_bits = log_2_floor(n_links) + 1;
+ int ofs = nxm_decode_ofs(mp->ofs_nbits);
+ int n_bits = nxm_decode_n_bits(mp->ofs_nbits);
int error;
- error = nxm_dst_check(mp->dst, mp->ofs_nbits, min_n_bits, flow);
+ error = nxm_dst_check(mp->dst, ofs, n_bits, flow);
if (error) {
return error;
}
@@ -53,6 +55,9 @@ multipath_check(const struct nx_action_multipath *mp, const struct flow *flow)
&& mp->algorithm != htons(NX_MP_ALG_ITER_HASH)) {
VLOG_WARN_RL(&rl, "unsupported algorithm %"PRIu16,
ntohs(mp->algorithm));
+ } else if (n_bits < min_n_bits) {
+ VLOG_WARN_RL(&rl, "multipath action requires at least %zu bits for "
+ "%"PRIu32" links", min_n_bits, n_links);
} else {
return 0;
}