X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fioam%2Fudp-ping%2Fudp_ping_node.c;h=e1a57955fbc9595de4edd955cb261c1ba05e497c;hb=5d73eecd63018db69b10bf56adeec9cc5cf92790;hp=4de8fe2f8946b23d9df3c12327de6fce7bdad794;hpb=1b563527c143903b6e7e79b5978af5310372f605;p=vpp.git diff --git a/src/plugins/ioam/udp-ping/udp_ping_node.c b/src/plugins/ioam/udp-ping/udp_ping_node.c index 4de8fe2f894..e1a57955fbc 100644 --- a/src/plugins/ioam/udp-ping/udp_ping_node.c +++ b/src/plugins/ioam/udp-ping/udp_ping_node.c @@ -25,7 +25,7 @@ #include #include #include -#include +#include typedef enum { @@ -429,7 +429,18 @@ udp_ping_analyse_hbh (vlib_buffer_t * b0, ioam_e2e_option_t *e2e; ioam_trace_option_t *trace; + /* If the packet doesnt match UDP session then return */ + if (PREDICT_FALSE (pool_is_free_index (udp_ping_main.ip46_flow, flow_id))) + return; + ip46_flow = udp_ping_main.ip46_flow + flow_id; + /* Check port is within range */ + if (PREDICT_FALSE ((src_port < ip46_flow->udp_data.start_src_port) || + (src_port > ip46_flow->udp_data.end_src_port) || + (dst_port < ip46_flow->udp_data.start_dst_port) || + (dst_port > ip46_flow->udp_data.end_dst_port))) + return; + flow_index = (src_port - ip46_flow->udp_data.start_src_port) * (ip46_flow->udp_data.end_dst_port - ip46_flow->udp_data.start_dst_port + 1);