/*
- * Copyright (c) 2010 Nicira Networks.
+ * Copyright (c) 2010, 2011 Nicira Networks.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <config.h>
#include "multipath.h"
+#include <arpa/inet.h>
#include <inttypes.h>
#include <sys/types.h>
#include <netinet/in.h>
return hash % n_links;
case NX_MP_ALG_HASH_THRESHOLD:
- return hash / (UINT32_MAX / n_links);
+ if (n_links == 1) {
+ return 0;
+ }
+ return hash / (UINT32_MAX / n_links + 1);
case NX_MP_ALG_HRW:
return (n_links <= 64
{
const char *fields, *algorithm;
- switch ((enum nx_mp_fields) ntohs(mp->fields)) {
+ uint16_t mp_fields = ntohs(mp->fields);
+ uint16_t mp_algorithm = ntohs(mp->algorithm);
+
+ switch ((enum nx_mp_fields) mp_fields) {
case NX_MP_FIELDS_ETH_SRC:
fields = "eth_src";
break;
fields = "<unknown>";
}
- switch ((enum nx_mp_algorithm) ntohs(mp->algorithm)) {
+ switch ((enum nx_mp_algorithm) mp_algorithm) {
case NX_MP_ALG_MODULO_N:
algorithm = "modulo_n";
break;