aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMao Zhongyi <maozy.fnst@cn.fujitsu.com>2017-10-13 14:32:09 +0800
committerJason Wang <jasowang@redhat.com>2017-11-13 15:46:37 +0800
commit8fa5ad6dfb66b6c695aa6a6b54b7031c90345a37 (patch)
tree92230f57345c9c4ac9b2663de7d36e50483dc065
parent3463218c6cb6326f3b428935209aa0828d69ee42 (diff)
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>
-rw-r--r--net/colo.c18
-rw-r--r--net/colo.h1
2 files changed, 11 insertions, 8 deletions
diff --git a/net/colo.c b/net/colo.c
index 28ce7c8ae0..a39d600f34 100644
--- a/net/colo.c
+++ b/net/colo.c
@@ -82,6 +82,14 @@ int parse_packet_early(Packet *pkt)
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)
{
uint32_t tmp_ports;
@@ -97,17 +105,11 @@ void fill_connection_key(Packet *pkt, ConnectionKey *key)
case IPPROTO_SCTP:
case IPPROTO_UDPLITE:
tmp_ports = *(uint32_t *)(pkt->transport_header);
- key->src = pkt->ip->ip_src;
- key->dst = pkt->ip->ip_dst;
- key->src_port = ntohs(tmp_ports & 0xffff);
- key->dst_port = ntohs(tmp_ports >> 16);
+ extract_ip_and_port(tmp_ports, key, pkt);
break;
case IPPROTO_AH:
tmp_ports = *(uint32_t *)(pkt->transport_header + 4);
- key->src = pkt->ip->ip_src;
- key->dst = pkt->ip->ip_dst;
- key->src_port = ntohs(tmp_ports & 0xffff);
- key->dst_port = ntohs(tmp_ports >> 16);
+ extract_ip_and_port(tmp_ports, key, pkt);
break;
default:
break;
diff --git a/net/colo.h b/net/colo.h
index caedb0dca7..0658e869b4 100644
--- a/net/colo.h
+++ b/net/colo.h
@@ -76,6 +76,7 @@ typedef struct Connection {
uint32_t connection_key_hash(const void *opaque);
int connection_key_equal(const void *opaque1, const void *opaque2);
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 reverse_connection_key(ConnectionKey *key);
Connection *connection_new(ConnectionKey *key);