diff options
author | Pavel Emelyanov <xemul@parallels.com> | 2011-12-06 07:57:06 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-12-06 13:58:01 -0500 |
commit | 8d34172dfdb762a306cdf58b547aa10d798622ec (patch) | |
tree | 5ad5bbd9117ea444eb06b0519c61f77576818d79 | |
parent | 7f1fb60c4fc9fb29fbb406ac8c4cfb4e59e168d6 (diff) | |
download | op-kernel-dev-8d34172dfdb762a306cdf58b547aa10d798622ec.zip op-kernel-dev-8d34172dfdb762a306cdf58b547aa10d798622ec.tar.gz |
sock_diag: Introduce new message type
This type will run the family+protocol based socket dumping.
Also prepare the stub function for it.
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/linux/inet_diag.h | 1 | ||||
-rw-r--r-- | net/ipv4/inet_diag.c | 17 |
2 files changed, 16 insertions, 2 deletions
diff --git a/include/linux/inet_diag.h b/include/linux/inet_diag.h index abf5028..f7baaf6 100644 --- a/include/linux/inet_diag.h +++ b/include/linux/inet_diag.h @@ -6,6 +6,7 @@ /* Just some random number */ #define TCPDIAG_GETSOCK 18 #define DCCPDIAG_GETSOCK 19 +#define SOCK_DIAG_BY_FAMILY 20 #define INET_DIAG_GETSOCK_MAX 24 diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c index a5f3c40..eb6bdfa 100644 --- a/net/ipv4/inet_diag.c +++ b/net/ipv4/inet_diag.c @@ -850,7 +850,7 @@ unlock: return skb->len; } -static int inet_diag_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) +static int inet_diag_rcv_msg_compat(struct sk_buff *skb, struct nlmsghdr *nlh) { int hdrlen = sizeof(struct inet_diag_req); @@ -877,9 +877,22 @@ static int inet_diag_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) return inet_diag_get_exact(skb, nlh); } +static int __sock_diag_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) +{ + return -EOPNOTSUPP; +} + static int sock_diag_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) { - return inet_diag_rcv_msg(skb, nlh); + switch (nlh->nlmsg_type) { + case TCPDIAG_GETSOCK: + case DCCPDIAG_GETSOCK: + return inet_diag_rcv_msg_compat(skb, nlh); + case SOCK_DIAG_BY_FAMILY: + return __sock_diag_rcv_msg(skb, nlh); + default: + return -EINVAL; + } } static DEFINE_MUTEX(sock_diag_mutex); |