VirtualBox

Changeset 51575 in vbox for trunk/src


Ignore:
Timestamp:
Jun 8, 2014 12:22:18 PM (10 years ago)
Author:
vboxsync
Message:

NAT/Net: Get rid of inet_ntop(3). Add formatter for %R[ping_pcb] and use it.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/NetworkServices/NAT/pxping.c

    r51574 r51575  
    66#include "proxy_pollmgr.h"
    77#include "pxremap.h"
     8
     9#include <iprt/string.h>
    810
    911#ifndef RT_OS_WINDOWS
     
    1416#endif
    1517#include <netinet/in.h>
    16 #include <arpa/inet.h>          /* XXX: inet_ntop */
    1718#include <poll.h>
    1819#include <stdint.h>
     
    193194                                             ipX_addr_t *dst, u16_t host_id);
    194195
     196static FNRTSTRFORMATTYPE pxping_pcb_rtstrfmt;
    195197static struct ping_pcb *pxping_pcb_allocate(struct pxping *pxping);
    196198static void pxping_pcb_register(struct pxping *pxping, struct ping_pcb *pcb);
     
    199201static void pxping_timeout_add(struct pxping *pxping, struct ping_pcb *pcb);
    200202static void pxping_timeout_del(struct pxping *pxping, struct ping_pcb *pcb);
    201 static void pxping_pcb_debug_print(struct ping_pcb *pcb);
    202203
    203204static int pxping_pmgr_pump(struct pollmgr_handler *handler, SOCKET fd, int revents);
     
    329330    }
    330331
     332    status = RTStrFormatTypeRegister("ping_pcb", pxping_pcb_rtstrfmt, NULL);
     333    AssertRC(status);
     334
    331335    return ERR_OK;
    332336}
     
    455459    }
    456460
    457     pxping_pcb_debug_print(pcb); /* XXX */
    458     DPRINTF((" seq %d len %u ttl %d\n",
     461    DPRINTF(("ping %p: %R[ping_pcb] seq %d len %u ttl %d\n",
     462             pcb, pcb,
    459463             ntohs(icmph->seqno), (unsigned int)p->tot_len,
    460464             IPH_TTL(iph)));
     
    673677    }
    674678
    675     pxping_pcb_debug_print(pcb); /* XXX */
    676     DPRINTF((" seq %d len %u hopl %d\n",
     679    DPRINTF(("ping %p: %R[ping_pcb] seq %d len %u hopl %d\n",
     680             pcb, pcb,
    677681             ntohs(seq), (unsigned int)p->tot_len,
    678682             IP6H_HOPLIM(iph)));
     
    747751
    748752
    749 static void
    750 pxping_pcb_debug_print(struct ping_pcb *pcb)
    751 {
    752     char addrbuf[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"];
    753     const char *addrstr;
    754     int sdom = pcb->is_ipv6 ? AF_INET6 : AF_INET;
    755 
    756     DPRINTF(("ping %p:", (void *)pcb));
    757 
    758     addrstr = inet_ntop(sdom, (void *)&pcb->src, addrbuf, sizeof(addrbuf));
    759     DPRINTF((" %s", addrstr));
    760 
    761     DPRINTF((" ->"));
    762 
    763     addrstr = inet_ntop(sdom, (void *)&pcb->dst, addrbuf, sizeof(addrbuf));
    764     DPRINTF((" %s", addrstr));
    765 
    766     DPRINTF((" id %04x->%04x", ntohs(pcb->guest_id), ntohs(pcb->host_id)));
     753/**
     754 * Formatter for %R[ping_pcb].
     755 */
     756static DECLCALLBACK(size_t)
     757pxping_pcb_rtstrfmt(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
     758                    const char *pszType, const void *pvValue,
     759                    int cchWidth, int cchPrecision, unsigned int fFlags,
     760                    void *pvUser)
     761{
     762    const struct ping_pcb *pcb = (const struct ping_pcb *)pvValue;
     763    size_t cb = 0;
     764
     765    NOREF(cchWidth);
     766    NOREF(cchPrecision);
     767    NOREF(fFlags);
     768    NOREF(pvUser);
     769
     770    AssertReturn(strcmp(pszType, "ping_pcb") == 0, 0);
     771
     772    if (pcb == NULL) {
     773        return RTStrFormat(pfnOutput, pvArgOutput, NULL, NULL, "(null)");
     774    }
     775
     776    /* XXX: %RTnaipv4 takes the value, but %RTnaipv6 takes the pointer */
     777    if (pcb->is_ipv6) {
     778        cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, NULL,
     779                          "%RTnaipv6 -> %RTnaipv6", &pcb->src, &pcb->dst);
     780    }
     781    else {
     782        cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, NULL,
     783                          "%RTnaipv4 -> %RTnaipv4",
     784                          ip4_addr_get_u32(ipX_2_ip(&pcb->src)),
     785                          ip4_addr_get_u32(ipX_2_ip(&pcb->dst)));
     786    }
     787                     
     788    cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, NULL,
     789                      " id %04x->%04x", ntohs(pcb->guest_id), ntohs(pcb->host_id));
     790
     791    return cb;
    767792}
    768793
     
    932957        sys_mutex_unlock(&pxping->lock);
    933958
    934         pxping_pcb_debug_print(pcb); /* XXX */
    935         DPRINTF((" - created\n"));
     959        DPRINTF(("ping %p: %R[ping_pcb] - created\n", pcb, pcb));
    936960
    937961        pxping_timer_needed(pxping);
     
    939963    else {
    940964        /* just bump up expiration timeout lazily */
    941         pxping_pcb_debug_print(pcb); /* XXX */
    942         DPRINTF((" - slot %d -> %d\n",
     965        DPRINTF(("ping %p: %R[ping_pcb] - slot %d -> %d\n",
     966                 pcb, pcb,
    943967                 (unsigned int)pcb->timeout_slot,
    944968                 (unsigned int)pxping->timeout_slot));
     
    11951219    seq = icmph->seqno;
    11961220
    1197     {
    1198         char addrbuf[sizeof "255.255.255.255"];
    1199         const char *addrstr;
    1200 
    1201         addrstr = inet_ntop(AF_INET, &peer->sin_addr, addrbuf, sizeof(addrbuf));
    1202         DPRINTF(("<--- PING %s id 0x%x seq %d\n",
    1203                  addrstr, ntohs(id), ntohs(seq)));
    1204     }
    1205 
     1221    DPRINTF(("<--- PING %RTnaipv4 id 0x%x seq %d\n",
     1222             peer->sin_addr.s_addr, ntohs(id), ntohs(seq)));
    12061223
    12071224    /*
     
    13391356    seq = oicmph->seqno;
    13401357
    1341     {
    1342         char addrbuf[sizeof "255.255.255.255"];
    1343         const char *addrstr;
    1344 
    1345         addrstr = inet_ntop(AF_INET, &oiph->dest, addrbuf, sizeof(addrbuf));
    1346         DPRINTF2(("%s: ping %s id 0x%x seq %d",
    1347                   __func__, addrstr, ntohs(id), ntohs(seq)));
    1348         if (ICMPH_TYPE(icmph) == ICMP_DUR) {
    1349             DPRINTF2((" unreachable (code %d)\n", ICMPH_CODE(icmph)));
    1350         }
    1351         else {
    1352             DPRINTF2((" time exceeded\n"));
    1353         }
     1358    DPRINTF2(("%s: ping %RTnaipv4 id 0x%x seq %d",
     1359              __func__, ip4_addr_get_u32(&oiph->dest), ntohs(id), ntohs(seq)));
     1360    if (ICMPH_TYPE(icmph) == ICMP_DUR) {
     1361        DPRINTF2((" unreachable (code %d)\n", ICMPH_CODE(icmph)));
     1362    }
     1363    else {
     1364        DPRINTF2((" time exceeded\n"));
    13541365    }
    13551366
     
    14541465    int status;
    14551466
    1456     char addrbuf[sizeof "ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"];
    1457     const char *addrstr;
    1458 
    14591467    /*
    14601468     * Reads from raw IPv6 sockets deliver only the payload.  Full
     
    14971505    icmph = (struct icmp6_echo_hdr *)pollmgr_udpbuf;
    14981506
    1499     addrstr = inet_ntop(AF_INET6, (void *)&sin6.sin6_addr,
    1500                         addrbuf, sizeof(addrbuf));
    1501     DPRINTF2(("%s: %s ICMPv6: ", __func__, addrstr));
     1507    DPRINTF2(("%s: %RTnaipv6 ICMPv6: ", __func__, &sin6.sin6_addr));
    15021508
    15031509    if (icmph->type == ICMP6_TYPE_EREP) {
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette