From 89cab1f000357f037eb409ded5b0f1e9c93879b5 Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Tue, 22 Aug 2017 11:35:20 +0000 Subject: [PATCH] Export decode_inet_addr * defs.h (decode_inet_addr): New prototype. * netlink_inet_diag.c (decode_inet_addr): Remove static keyword, move ... * sockaddr.c: ... here. --- defs.h | 3 +++ netlink_inet_diag.c | 39 --------------------------------------- sockaddr.c | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 39 deletions(-) diff --git a/defs.h b/defs.h index e6659a57..d83f4edc 100644 --- a/defs.h +++ b/defs.h @@ -610,6 +610,9 @@ extern void printfd(struct tcb *, int); extern void print_sockaddr(const void *sa, int len); extern bool print_inet_addr(int af, const void *addr, unsigned int len, const char *var_name); +extern bool +decode_inet_addr(struct tcb *, kernel_ulong_t addr, + unsigned int len, int family, const char *var_name); extern const char *get_sockaddr_by_inode(struct tcb *, int fd, unsigned long inode); extern bool print_sockaddr_by_inode(struct tcb *, int fd, unsigned long inode); extern void print_dirfd(struct tcb *, int); diff --git a/netlink_inet_diag.c b/netlink_inet_diag.c index 4e33a4f4..700cbd3b 100644 --- a/netlink_inet_diag.c +++ b/netlink_inet_diag.c @@ -58,45 +58,6 @@ print_inet_diag_sockid(const struct inet_diag_sockid *id, const uint8_t family) tprints("}"); } -static bool -decode_inet_addr(struct tcb *const tcp, - const kernel_ulong_t addr, - const unsigned int len, - const int family, - const char *const var_name) -{ - union { - struct in_addr a4; - struct in6_addr a6; - } addrbuf; - size_t size = 0; - - switch (family) { - case AF_INET: - size = sizeof(addrbuf.a4); - break; - case AF_INET6: - size = sizeof(addrbuf.a6); - break; - } - - if (!size || len < size) { - if (var_name) - tprintf("%s=", var_name); - printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX); - return false; - } - - if (umoven(tcp, addr, size, &addrbuf) < 0) { - if (var_name) - tprintf("%s=", var_name); - printaddr(addr); - return false; - } - - return print_inet_addr(family, &addrbuf, size, var_name); -} - static void decode_inet_diag_hostcond(struct tcb *const tcp, const kernel_ulong_t addr, diff --git a/sockaddr.c b/sockaddr.c index 81d861ba..34c565bf 100644 --- a/sockaddr.c +++ b/sockaddr.c @@ -119,6 +119,45 @@ print_inet_addr(const int af, return false; } +bool +decode_inet_addr(struct tcb *const tcp, + const kernel_ulong_t addr, + const unsigned int len, + const int family, + const char *const var_name) +{ + union { + struct in_addr a4; + struct in6_addr a6; + } addrbuf; + size_t size = 0; + + switch (family) { + case AF_INET: + size = sizeof(addrbuf.a4); + break; + case AF_INET6: + size = sizeof(addrbuf.a6); + break; + } + + if (!size || len < size) { + if (var_name) + tprintf("%s=", var_name); + printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX); + return false; + } + + if (umoven(tcp, addr, size, &addrbuf) < 0) { + if (var_name) + tprintf("%s=", var_name); + printaddr(addr); + return false; + } + + return print_inet_addr(family, &addrbuf, size, var_name); +} + static void print_sockaddr_data_in(const void *const buf, const int addrlen) { -- 2.40.0