On Mon, Aug 27, 2018 at 3:27 PM Stephen Hemminger <step...@networkplumber.org> wrote: > > On Mon, 27 Aug 2018 14:46:52 -0700 > Cong Wang <xiyou.wangc...@gmail.com> wrote: > > > UNIX_DIAG_VFS and UNIX_DIAG_ICONS are never used by ss, > > make them available in ss -e output. > > > > Cc: Stephen Hemminger <step...@networkplumber.org> > > Signed-off-by: Cong Wang <xiyou.wangc...@gmail.com> > > --- > > misc/ss.c | 25 +++++++++++++++++++++++++ > > 1 file changed, 25 insertions(+) > > > > diff --git a/misc/ss.c b/misc/ss.c > > index 41e7762b..d28bc1ec 100644 > > --- a/misc/ss.c > > +++ b/misc/ss.c > > @@ -16,6 +16,7 @@ > > #include <sys/ioctl.h> > > #include <sys/socket.h> > > #include <sys/uio.h> > > +#include <sys/sysmacros.h> > > Why is this included, it isn't on my system.
It is for major() and minor(). $ find /usr/include/ -name sysmacros.h /usr/include/bits/sysmacros.h /usr/include/sys/sysmacros.h $ rpm -qf /usr/include/sys/sysmacros.h glibc-headers-2.26-28.fc27.x86_64 So you are not using glibc? Or iproute2 should be built with non-glibc? > > > #include <netinet/in.h> > > #include <string.h> > > #include <errno.h> > > @@ -3604,6 +3605,28 @@ static int unix_show_sock(const struct sockaddr_nl > > *addr, struct nlmsghdr *nlh, > > out(" %c-%c", > > mask & 1 ? '-' : '<', mask & 2 ? '-' : '>'); > > } > > + if (tb[UNIX_DIAG_VFS]) { > > + struct unix_diag_vfs uv; > > + > > + memcpy(&uv, RTA_DATA(tb[UNIX_DIAG_VFS]), sizeof(uv)); > > Copy here is unnecessary, you can just do: > const struct unix_diag_vfs *uv > = RTA_DATA(tb[UNIX_DIAG_VFS]); Oh, good point! > > > + out(" ino:%u dev:%u/%u", uv.udiag_vfs_ino, > > major(uv.udiag_vfs_dev), > > + minor(uv.udiag_vfs_dev)); > > + } > > + if (tb[UNIX_DIAG_ICONS]) { > > + int len = RTA_PAYLOAD(tb[UNIX_DIAG_ICONS]); > > + __u32 *peers = malloc(len); > > + int i; > > Ditto, allocation and copy are not necessary, just reference the data. > Sure, will update. Thanks.