colo: Consolidate the duplicate code chunk into a routine

Consolidate the code that extract the ip address(src,dst) and
port number(src,dst) of the packet into a separate routine
extract_ip_and_port() since the same chunk of code is called
from two place.

Cc: Zhang Chen <zhangckid@gmail.com>
Cc: Li Zhijian <lizhijian@cn.fujitsu.com>
Cc: Jason Wang <jasowang@redhat.com>
Signed-off-by: Mao Zhongyi <maozy.fnst@cn.fujitsu.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
Mao Zhongyi 2017-10-13 14:32:09 +08:00 committed by Jason Wang
parent 3463218c6c
commit 8fa5ad6dfb
2 changed files with 11 additions and 8 deletions

View File

@ -82,6 +82,14 @@ int parse_packet_early(Packet *pkt)
return 0; return 0;
} }
void extract_ip_and_port(uint32_t tmp_ports, ConnectionKey *key, Packet *pkt)
{
key->src = pkt->ip->ip_src;
key->dst = pkt->ip->ip_dst;
key->src_port = ntohs(tmp_ports >> 16);
key->dst_port = ntohs(tmp_ports & 0xffff);
}
void fill_connection_key(Packet *pkt, ConnectionKey *key) void fill_connection_key(Packet *pkt, ConnectionKey *key)
{ {
uint32_t tmp_ports; uint32_t tmp_ports;
@ -97,17 +105,11 @@ void fill_connection_key(Packet *pkt, ConnectionKey *key)
case IPPROTO_SCTP: case IPPROTO_SCTP:
case IPPROTO_UDPLITE: case IPPROTO_UDPLITE:
tmp_ports = *(uint32_t *)(pkt->transport_header); tmp_ports = *(uint32_t *)(pkt->transport_header);
key->src = pkt->ip->ip_src; extract_ip_and_port(tmp_ports, key, pkt);
key->dst = pkt->ip->ip_dst;
key->src_port = ntohs(tmp_ports & 0xffff);
key->dst_port = ntohs(tmp_ports >> 16);
break; break;
case IPPROTO_AH: case IPPROTO_AH:
tmp_ports = *(uint32_t *)(pkt->transport_header + 4); tmp_ports = *(uint32_t *)(pkt->transport_header + 4);
key->src = pkt->ip->ip_src; extract_ip_and_port(tmp_ports, key, pkt);
key->dst = pkt->ip->ip_dst;
key->src_port = ntohs(tmp_ports & 0xffff);
key->dst_port = ntohs(tmp_ports >> 16);
break; break;
default: default:
break; break;

View File

@ -76,6 +76,7 @@ typedef struct Connection {
uint32_t connection_key_hash(const void *opaque); uint32_t connection_key_hash(const void *opaque);
int connection_key_equal(const void *opaque1, const void *opaque2); int connection_key_equal(const void *opaque1, const void *opaque2);
int parse_packet_early(Packet *pkt); int parse_packet_early(Packet *pkt);
void extract_ip_and_port(uint32_t tmp_ports, ConnectionKey *key, Packet *pkt);
void fill_connection_key(Packet *pkt, ConnectionKey *key); void fill_connection_key(Packet *pkt, ConnectionKey *key);
void reverse_connection_key(ConnectionKey *key); void reverse_connection_key(ConnectionKey *key);
Connection *connection_new(ConnectionKey *key); Connection *connection_new(ConnectionKey *key);