summaryrefslogtreecommitdiff
path: root/src/net.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/net.c')
-rw-r--r--src/net.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/net.c b/src/net.c
index 01f1c34f8..4c84928b8 100644
--- a/src/net.c
+++ b/src/net.c
@@ -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;