examples/ipsec-secgw: fix SPD no-match case
authorKonstantin Ananyev <konstantin.ananyev@intel.com>
Thu, 4 Apr 2019 12:13:26 +0000 (13:13 +0100)
committerAkhil Goyal <akhil.goyal@nxp.com>
Tue, 23 Apr 2019 12:44:01 +0000 (14:44 +0200)
commit49757b6845835394d1a9a6efad9356a6da58fd85
treea320a2bc577e06f7a0bb735228674b708fd3d6c9
parent7f251bcf22c5729792f9243480af1b3c072876a5
examples/ipsec-secgw: fix SPD no-match case

acl_classify() returns zero value when no matching rule was found.
Currently ipsec-secgw treats it as a valid SPI value, though it has
to discard such packets.
Error could be easily observed by sending outbound unmatched packets,
user will see something like that in the log:
IPSEC: No cryptodev: core 7, cipher_algo 0, auth_algo 0, aead_algo 0

To fix it we need to treat packets with zero result from acl_classify()
as invalid ones. Also we can change DISCARD and BYPASS values to
simplify checks and save some extra space for valid SPI values.
To summarize the approach:
1. have special SPI values for DISCARD and BYPASS.
2. store in SPD full SPI value.
3. after acl_classify(), first check SPI value for DISCARD and BYPASS,
   then convert it in SA index.
4. add check at initilisation time that for each SPD rule there is a
   corresponding SA entry (with the same SPI).

Also marked few global variables as *static*.

Fixes: 906257e965b7 ("examples/ipsec-secgw: support IPv6")
Fixes: 2a5106af132b ("examples/ipsec-secgw: fix corner case for SPI value")
Cc: stable@dpdk.org
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Acked-by: Fan Zhang <roy.fan.zhang@intel.com>
Acked-by: Akhil Goyal <akhil.goyal@nxp.com>
examples/ipsec-secgw/ipsec-secgw.c
examples/ipsec-secgw/ipsec.h
examples/ipsec-secgw/sa.c
examples/ipsec-secgw/sp4.c
examples/ipsec-secgw/sp6.c