inet_diag: Add equal-operator for ports
authorKristian Evensen <kristian.evensen@gmail.com>
Wed, 27 Dec 2017 17:27:58 +0000 (18:27 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 2 Jan 2018 18:54:04 +0000 (13:54 -0500)
commitbbb6189df4077cde8592cd2f804bb1122067dd32
tree4f7f2ab154619d45f2bdbab77bd08867fb092411
parentd323b524e8bf5d8cb7669ab333a1509bfc5a76e5
inet_diag: Add equal-operator for ports

inet_diag currently provides less/greater than or equal operators for
comparing ports when filtering sockets. An equal comparison can be
performed by combining the two existing operators, or a user can for
example request a port range and then do the final filtering in
userspace. However, these approaches both have drawbacks. Implementing
equal using LE/GE causes the size and complexity of a filter to grow
quickly as the number of ports increase, while it on busy machines would
be great if the kernel only returns information about relevant sockets.

This patch introduces source and destination port equal operators.
INET_DIAG_BC_S_EQ is used to match a source port, INET_DIAG_BC_D_EQ a
destination port, and usage is the same as for the existing port
operators.  I.e., the port to match is stored in the no-member of the
next inet_diag_bc_op-struct in the filter.

Signed-off-by: Kristian Evensen <kristian.evensen@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/uapi/linux/inet_diag.h
net/ipv4/inet_diag.c