summaryrefslogtreecommitdiffstats
path: root/VNFs/DPPD-PROX/prox_cksum.c
diff options
context:
space:
mode:
authorXavier Simonart <xavier.simonart@intel.com>2019-06-24 17:01:54 +0200
committerXavier Simonart <xavier.simonart@intel.com>2019-10-09 19:09:34 +0200
commit48f8c3d212644a33dd0abaaa1a0c71d4decaafdf (patch)
tree515043d3dc43025bb5ce5e6cb842afd68ae891e9 /VNFs/DPPD-PROX/prox_cksum.c
parent4cc4dabe80eb7d19c20920b7ec20899d6a76a1dd (diff)
Add support for igmp and multicast
Multicast can be enabled through configuration or through command line - Through configuration Add multicast=mcast_address (e.g. multicast=01:00:5e:01:02:03) in the port section - Through command line run enable multicast port_id mcast_address (e.g. enable multicast 1 01:00:5e:01:02:03) IGMP join message is sent unsollicited through command line: join igmp core_id task_id ip (e.g. join igmp 1 0 224.1.1.3) To enable swap answering IGMP Query (w/ IGMP Join) - Through configuration Add igmp ipv4=ip_address within the core/task section - Through command line join igmp core_id task_id ip (e.g. join igmp 1 0 224.1.1.3) (this will 1st initiate an unsollicated join, then answer any subsequent query) UDP/TCP packets received on a multicast address (224.0.0.0 => 239.255.255.255) are discarded To stop sending responses to IGMP query: leave igmp core_id task_id Change-Id: I3808ccabf3b38b5a1e10e1b044db63aa05bcd7b5 Signed-off-by: Xavier Simonart <xavier.simonart@intel.com>
Diffstat (limited to 'VNFs/DPPD-PROX/prox_cksum.c')
-rw-r--r--VNFs/DPPD-PROX/prox_cksum.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/VNFs/DPPD-PROX/prox_cksum.c b/VNFs/DPPD-PROX/prox_cksum.c
index add52f2b..58e05a6b 100644
--- a/VNFs/DPPD-PROX/prox_cksum.c
+++ b/VNFs/DPPD-PROX/prox_cksum.c
@@ -112,6 +112,10 @@ inline void prox_ip_udp_cksum(struct rte_mbuf *mbuf, struct ipv4_hdr *pip, uint1
} else
#endif
prox_tcp_cksum_sw(tcp, l4_len, pip->src_addr, pip->dst_addr);
+ } else if (pip->next_proto_id == IPPROTO_IGMP) {
+ struct igmpv2_hdr *igmp = (struct igmpv2_hdr *)(((uint8_t*)pip) + l3_len);
+ // Not sure NIC can offload IGMP checkum => do it in software
+ prox_igmp_cksum_sw(igmp, l4_len);
}
}
@@ -153,3 +157,10 @@ inline void prox_tcp_cksum_sw(struct tcp_hdr *tcp, uint16_t len, uint32_t src_ip
uint16_t csum = checksum_byte_seq((uint16_t *)tcp, len);
tcp->cksum = csum;
}
+
+inline void prox_igmp_cksum_sw(struct igmpv2_hdr *igmp, uint16_t len)
+{
+ igmp->checksum = 0;
+ uint16_t csum = checksum_byte_seq((uint16_t *)igmp, len);
+ igmp->checksum = csum;
+}