refactor: move packet_ldbc_hash to packet.cpp
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "log.h"
|
||||
#include "tuple.h"
|
||||
#include "uthash.h"
|
||||
#include "packet_helper.h"
|
||||
#include "packet_private.h"
|
||||
|
||||
@@ -455,7 +456,7 @@ int packet_get_outermost_tuple6(const struct packet *pkt, struct tuple6 *tuple)
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* layer layer
|
||||
* layer uitls
|
||||
******************************************************************************/
|
||||
|
||||
int packet_get_layer_count(const struct packet *pkt)
|
||||
@@ -692,6 +693,128 @@ int packet_get_tunnel_by_idx(const struct packet *pkt, int idx, struct tunnel *o
|
||||
return -1;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* load balance uitls
|
||||
******************************************************************************/
|
||||
|
||||
uint64_t packet_ldbc_hash(const struct packet *pkt, enum packet_load_balance_method method, enum packet_direction direction)
|
||||
{
|
||||
uint64_t temp = 0;
|
||||
uint64_t hash_value = 1;
|
||||
|
||||
int inner_addr_len = 0;
|
||||
int outer_addr_len = 0;
|
||||
const char *inner_src_addr = NULL;
|
||||
const char *inner_dst_addr = NULL;
|
||||
const char *outer_src_addr = NULL;
|
||||
const char *outer_dst_addr = NULL;
|
||||
|
||||
struct tuple2 inner_addr;
|
||||
struct tuple2 outer_addr;
|
||||
|
||||
if (pkt == NULL)
|
||||
{
|
||||
return hash_value;
|
||||
}
|
||||
|
||||
if (packet_get_innermost_tuple2(pkt, &inner_addr) == -1)
|
||||
{
|
||||
return hash_value;
|
||||
}
|
||||
|
||||
if (packet_get_outermost_tuple2(pkt, &outer_addr) == -1)
|
||||
{
|
||||
return hash_value;
|
||||
}
|
||||
|
||||
if (inner_addr.addr_family == AF_INET)
|
||||
{
|
||||
inner_src_addr = (const char *)&inner_addr.src_addr.v4;
|
||||
inner_dst_addr = (const char *)&inner_addr.dst_addr.v4;
|
||||
inner_addr_len = sizeof(struct in_addr);
|
||||
}
|
||||
else
|
||||
{
|
||||
inner_src_addr = (const char *)&inner_addr.src_addr.v6;
|
||||
inner_dst_addr = (const char *)&inner_addr.dst_addr.v6;
|
||||
inner_addr_len = sizeof(struct in6_addr);
|
||||
}
|
||||
|
||||
if (outer_addr.addr_family == AF_INET)
|
||||
{
|
||||
outer_src_addr = (const char *)&outer_addr.src_addr.v4;
|
||||
outer_dst_addr = (const char *)&outer_addr.dst_addr.v4;
|
||||
outer_addr_len = sizeof(struct in_addr);
|
||||
}
|
||||
else
|
||||
{
|
||||
outer_src_addr = (const char *)&outer_addr.src_addr.v6;
|
||||
outer_dst_addr = (const char *)&outer_addr.dst_addr.v6;
|
||||
outer_addr_len = sizeof(struct in6_addr);
|
||||
}
|
||||
|
||||
switch (method)
|
||||
{
|
||||
case PKT_LDBC_METH_OUTERMOST_INT_IP:
|
||||
if (direction == PACKET_DIRECTION_INCOMING)
|
||||
{
|
||||
// direction 1: E2I
|
||||
HASH_VALUE(outer_dst_addr, outer_addr_len, hash_value);
|
||||
}
|
||||
else
|
||||
{
|
||||
// direction 0: I2E
|
||||
HASH_VALUE(outer_src_addr, outer_addr_len, hash_value);
|
||||
}
|
||||
break;
|
||||
case PKT_LDBC_METH_OUTERMOST_EXT_IP:
|
||||
if (direction == PACKET_DIRECTION_INCOMING)
|
||||
{
|
||||
// direction 1: E2I
|
||||
HASH_VALUE(outer_src_addr, outer_addr_len, hash_value);
|
||||
}
|
||||
else
|
||||
{
|
||||
// direction 0: I2E
|
||||
HASH_VALUE(outer_dst_addr, outer_addr_len, hash_value);
|
||||
}
|
||||
break;
|
||||
case PKT_LDBC_METH_OUTERMOST_INT_EXT_IP:
|
||||
HASH_VALUE(outer_src_addr, outer_addr_len, hash_value);
|
||||
HASH_VALUE(outer_dst_addr, outer_addr_len, temp);
|
||||
hash_value = hash_value ^ temp;
|
||||
break;
|
||||
case PKT_LDBC_METH_INNERMOST_INT_IP:
|
||||
if (direction == PACKET_DIRECTION_INCOMING)
|
||||
{
|
||||
// direction 1: E2I
|
||||
HASH_VALUE(inner_dst_addr, inner_addr_len, hash_value);
|
||||
}
|
||||
else
|
||||
{
|
||||
// direction 0: I2E
|
||||
HASH_VALUE(inner_src_addr, inner_addr_len, hash_value);
|
||||
}
|
||||
break;
|
||||
case PKT_LDBC_METH_INNERMOST_EXT_IP:
|
||||
if (direction == PACKET_DIRECTION_INCOMING)
|
||||
{
|
||||
// direction 1: E2I
|
||||
HASH_VALUE(inner_src_addr, inner_addr_len, hash_value);
|
||||
}
|
||||
else
|
||||
{
|
||||
// direction 0: I2E
|
||||
HASH_VALUE(inner_dst_addr, inner_addr_len, hash_value);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return hash_value;
|
||||
}
|
||||
|
||||
return hash_value;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* other uitls
|
||||
******************************************************************************/
|
||||
|
||||
Reference in New Issue
Block a user