The patch modifies the miniflow extract function to hande the case where the network protocol for a packet is ESP. In this case the SPI value in the ESP header is extracted and set in the minflow map.
Signed-off-by: Ian Stokes <[email protected]> --- lib/flow.c | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletions(-) diff --git a/lib/flow.c b/lib/flow.c index b2b10aa..428ff7a 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -643,6 +643,7 @@ miniflow_extract(struct dp_packet *packet, struct miniflow *dst) uint8_t nw_frag, nw_tos, nw_ttl, nw_proto; uint8_t *ct_nw_proto_p = NULL; ovs_be16 ct_tp_src = 0, ct_tp_dst = 0; + ovs_be32 esp_spi = 0; /* Metadata. */ if (flow_tnl_dst_is_set(&md->tunnel)) { @@ -920,7 +921,15 @@ miniflow_extract(struct dp_packet *packet, struct miniflow *dst) miniflow_push_be16(mf, ct_tp_src, ct_tp_src); miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst); } - } else if (OVS_LIKELY(nw_proto == IPPROTO_SCTP)) { + } else if (OVS_LIKELY(nw_proto == IPPROTO_ESP)) { + if (OVS_LIKELY(size >= ESP_HEADER_LEN)) { + const struct esp_header *esp = data; + + esp_spi = esp->spi; + miniflow_push_be32(mf, spi, esp_spi); + miniflow_push_be32(mf, pad4, 0); /* Pad for ESP */ + } + }else if (OVS_LIKELY(nw_proto == IPPROTO_SCTP)) { if (OVS_LIKELY(size >= SCTP_HEADER_LEN)) { const struct sctp_header *sctp = data; -- 1.7.0.7 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
