Hi Akhil, I will address all issues except the last one with a comment
below:
- n = num;
- sqn = esn_outb_update_sqn(sa, &n);
- if (n != num)
+ n_sqn = nb_segs_t;
+ sqn = esn_outb_update_sqn(sa, &n_sqn);
+ if (n_sqn != nb_segs_t) {
rte_errno = EOVERFLOW;
If it is an error condition, shouldn't we return.
Also, I do not see rte_errno being checked anywhere in the app/test or
ipsec-secgw.
We are sending all packets that don't cause a SN overflow, and we set
the error flag. The user will see that not all packets were sent and and
rte_errno, and this is the behaviour that was in place before this patch.
+ /* if there are segmented packets find out how many can be
+ * sent until overflow occurs
+ */
+ if (nb_segs_t > num) { /* there is at least 1 */
+ uint32_t seg_cnt = 0;
+ for (i = 0; i < num && seg_cnt < n_sqn; i++)
+ seg_cnt += nb_segs[i];
+ num = i - 1;
+ } else {
+ num = n_sqn; /* no segmented packets */
+ }
+ }