nat: fix ED mode unknown proto session management 46/19146/3
authorMatthew Smith <mgsmith@netgate.com>
Mon, 22 Apr 2019 22:30:13 +0000 (17:30 -0500)
committerOle Trøan <otroan@employees.org>
Fri, 26 Apr 2019 11:19:21 +0000 (11:19 +0000)
commitaaed170828dfdb3d62295b76fd617f794dc76b3f
treed23842dbe40026a9ea26c994eb24ef8316c9135f
parent6825bc11287fd48b9ff2a4236446db5426b78c93
nat: fix ED mode unknown proto session management

In endpoint dependent mode, when a session at the head of a user
LRU is reused, if the IP protocol for that session was unknown (any
other than tcp, udp, or icmp), the attempt to delete the session
mapping from the in2out bihash was not using the same key that was
used when the mapping was added. This would cause the deletion of
the mapping to fail. If packets arrive later which match the original
session, the search for the session key would succeed when it should
have failed and the session, which is now associated with a different
pair of endpoints, may end up being updated when it should not be.

Update the key generation when reallocating an existing session to
do the right thing if the session is for an unknown protocol.

Also update format_nat_session() for unknown protocols so that
'vppctl show nat44 session detail' will display the protocol
correctly. In endpoint dependent mode, the IP protocol is stored in
the port field on a session if the protocol is unknown. The value
is stored in host byte order, but the format function was swapping
the bytes before writing the protocol.

Change-Id: I9e8daadd4569cb2610532dab4e4f41d1567cf3d1
Signed-off-by: Matthew Smith <mgsmith@netgate.com>
src/plugins/nat/nat.c
src/plugins/nat/nat_format.c
src/plugins/nat/out2in_ed.c