diff options
Diffstat (limited to 'src/net.c')
-rw-r--r-- | src/net.c | 38 |
1 files changed, 38 insertions, 0 deletions
@@ -734,6 +734,33 @@ print_txrehash(struct tcb *const tcp, const kernel_ulong_t addr, const int len) } static void +print_port_range(struct tcb *const tcp, const kernel_ulong_t addr, + const unsigned int len) +{ + unsigned int ports; + + if (len != sizeof(ports)) { + printstr_ex(tcp, addr, len, QUOTE_FORCE_HEX); + return; + } + + if (umove_or_printaddr(tcp, addr, &ports)) + return; + + tprint_indirect_begin(); + PRINT_VAL_X(ports); + if (xlat_verbose(xlat_verbosity) != XLAT_STYLE_RAW) { + unsigned short lo = ports & 0xffff; + unsigned short hi = ports >> 16; + + if (ports && (!lo || !hi || lo <= hi)) + tprintf_comment("%.0hu..%.0hu", lo, hi); + } + tprint_indirect_end(); +} + + +static void print_tpacket_stats(struct tcb *const tcp, const kernel_ulong_t addr, unsigned int len) { @@ -910,6 +937,14 @@ print_getsockopt(struct tcb *const tcp, const unsigned int level, } break; + case SOL_IP: + switch (name) { + case IP_LOCAL_PORT_RANGE: + print_port_range(tcp, addr, rlen); + return; + } + break; + case SOL_PACKET: switch (name) { case PACKET_STATISTICS: @@ -1189,6 +1224,9 @@ print_setsockopt(struct tcb *const tcp, const unsigned int level, case MCAST_LEAVE_GROUP: print_group_req(tcp, addr, len); return; + case IP_LOCAL_PORT_RANGE: + print_port_range(tcp, addr, len); + return; } break; |