]> granicus.if.org Git - strace/blobdiff - net.c
CREDITS.in: use UTF-8 consistently
[strace] / net.c
diff --git a/net.c b/net.c
index 98b151e3b1c03bf5aaa422b24f68d10dfb3ae0f4..34a394dba8f3ee447a865429cda7befdbaf52523 100644 (file)
--- a/net.c
+++ b/net.c
@@ -443,19 +443,17 @@ print_sockopt_fd_level_name(struct tcb *tcp, int fd, unsigned int level,
 
 static void
 print_set_linger(struct tcb *const tcp, const kernel_ulong_t addr,
-                const unsigned int len)
+                const int len)
 {
        struct linger linger;
 
-       if (len < sizeof(linger) ||
-           umove(tcp, addr, &linger) < 0) {
+       if (len < (int) sizeof(linger)) {
                printaddr(addr);
-               return;
+       } else if (!umove_or_printaddr(tcp, addr, &linger)) {
+               PRINT_FIELD_D("{", linger, l_onoff);
+               PRINT_FIELD_D(", ", linger, l_linger);
+               tprints("}");
        }
-
-       PRINT_FIELD_D("{", linger, l_onoff);
-       PRINT_FIELD_D(", ", linger, l_linger);
-       tprints("}");
 }
 
 static void
@@ -525,9 +523,9 @@ print_tpacket_stats(struct tcb *const tcp, const kernel_ulong_t addr,
            umove(tcp, addr, &stats) < 0) {
                printaddr(addr);
        } else {
-               tprintf("{packets=%u, drops=%u}",
-                       stats.tp_packets,
-                       stats.tp_drops);
+               PRINT_FIELD_U("{", stats, tp_packets);
+               PRINT_FIELD_U("{", stats, tp_drops);
+               tprints("}");
        }
 }
 #endif /* PACKET_STATISTICS */
@@ -653,61 +651,36 @@ SYS_FUNC(getsockopt)
 #ifdef IP_ADD_MEMBERSHIP
 static void
 print_mreq(struct tcb *const tcp, const kernel_ulong_t addr,
-          const unsigned int len)
+          const int len)
 {
        struct ip_mreq mreq;
 
-       if (len < sizeof(mreq)) {
-               printstrn(tcp, addr, len);
-               return;
+       if (len < (int) sizeof(mreq)) {
+               printaddr(addr);
+       } else if (!umove_or_printaddr(tcp, addr, &mreq)) {
+               PRINT_FIELD_INET4_ADDR("{", mreq, imr_multiaddr);
+               PRINT_FIELD_INET4_ADDR(", ", mreq, imr_interface);
+               tprints("}");
        }
-       if (umove_or_printaddr(tcp, addr, &mreq))
-               return;
-
-       PRINT_FIELD_INET4_ADDR("{", mreq, imr_multiaddr);
-       PRINT_FIELD_INET4_ADDR(", ", mreq, imr_interface);
-       tprints("}");
 }
 #endif /* IP_ADD_MEMBERSHIP */
 
 #ifdef IPV6_ADD_MEMBERSHIP
 static void
 print_mreq6(struct tcb *const tcp, const kernel_ulong_t addr,
-           const unsigned int len)
+           const int len)
 {
        struct ipv6_mreq mreq;
 
-       if (len < sizeof(mreq)) {
-               printstrn(tcp, addr, len);
-               return;
-       }
-       if (umove_or_printaddr(tcp, addr, &mreq))
-               return;
-
-       PRINT_FIELD_INET_ADDR("{", mreq, ipv6mr_multiaddr, AF_INET6);
-       PRINT_FIELD_IFINDEX(", ", mreq, ipv6mr_interface);
-       tprints("}");
-}
-#endif /* IPV6_ADD_MEMBERSHIP */
-
-#ifdef MCAST_JOIN_GROUP
-static void
-print_group_req(struct tcb *const tcp, const kernel_ulong_t addr, const int len)
-{
-       struct group_req greq;
-
-       if (len != sizeof(greq) ||
-           umove(tcp, addr, &greq) < 0) {
+       if (len < (int) sizeof(mreq)) {
                printaddr(addr);
-               return;
+       } else if (!umove_or_printaddr(tcp, addr, &mreq)) {
+               PRINT_FIELD_INET_ADDR("{", mreq, ipv6mr_multiaddr, AF_INET6);
+               PRINT_FIELD_IFINDEX(", ", mreq, ipv6mr_interface);
+               tprints("}");
        }
-
-       tprintf("{gr_interface=%u, gr_group=", greq.gr_interface);
-       print_sockaddr(tcp, &greq.gr_group, sizeof(greq.gr_group));
-       tprints("}");
-
 }
-#endif /* MCAST_JOIN_GROUP */
+#endif /* IPV6_ADD_MEMBERSHIP */
 
 #ifdef PACKET_RX_RING
 static void
@@ -719,12 +692,11 @@ print_tpacket_req(struct tcb *const tcp, const kernel_ulong_t addr, const int le
            umove(tcp, addr, &req) < 0) {
                printaddr(addr);
        } else {
-               tprintf("{block_size=%u, block_nr=%u, "
-                       "frame_size=%u, frame_nr=%u}",
-                       req.tp_block_size,
-                       req.tp_block_nr,
-                       req.tp_frame_size,
-                       req.tp_frame_nr);
+               PRINT_FIELD_U("{", req, tp_block_size);
+               PRINT_FIELD_U(", ", req, tp_block_nr);
+               PRINT_FIELD_U(", ", req, tp_frame_size);
+               PRINT_FIELD_U(", ", req, tp_frame_nr);
+               tprints("}");
        }
 }
 #endif /* PACKET_RX_RING */
@@ -743,9 +715,11 @@ print_packet_mreq(struct tcb *const tcp, const kernel_ulong_t addr, const int le
        } else {
                unsigned int i;
 
-               tprintf("{mr_ifindex=%u, mr_type=", mreq.mr_ifindex);
-               printxval(packet_mreq_type, mreq.mr_type, "PACKET_MR_???");
-               tprintf(", mr_alen=%u, mr_address=", mreq.mr_alen);
+               PRINT_FIELD_IFINDEX("{", mreq, mr_ifindex);
+               PRINT_FIELD_XVAL(", ", mreq, mr_type, packet_mreq_type,
+                                "PACKET_MR_???");
+               PRINT_FIELD_U(", ", mreq, mr_alen);
+               tprints(", mr_address=");
                if (mreq.mr_alen > ARRAY_SIZE(mreq.mr_address))
                        mreq.mr_alen = ARRAY_SIZE(mreq.mr_address);
                for (i = 0; i < mreq.mr_alen; ++i)
@@ -812,6 +786,12 @@ print_setsockopt(struct tcb *const tcp, const unsigned int level,
                        print_mreq6(tcp, addr, len);
                        return;
 #endif /* IPV6_ADD_MEMBERSHIP */
+#ifdef MCAST_JOIN_GROUP
+               case MCAST_JOIN_GROUP:
+               case MCAST_LEAVE_GROUP:
+                       print_group_req(tcp, addr, len);
+                       return;
+#endif /* MCAST_JOIN_GROUP */
                }
                break;