Index: /trunk/src/VBox/Additions/common/VBoxGuest/linux/files_vboxguest
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxGuest/linux/files_vboxguest	(revision 23960)
+++ /trunk/src/VBox/Additions/common/VBoxGuest/linux/files_vboxguest	(revision 23961)
@@ -37,4 +37,5 @@
     ${PATH_ROOT}/include/iprt/memobj.h=>include/iprt/memobj.h \
     ${PATH_ROOT}/include/iprt/mp.h=>include/iprt/mp.h \
+    ${PATH_ROOT}/include/iprt/net.h=>include/iprt/net.h \
     ${PATH_ROOT}/include/iprt/param.h=>include/iprt/param.h \
     ${PATH_ROOT}/include/iprt/power.h=>include/iprt/power.h \
Index: /trunk/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv	(revision 23960)
+++ /trunk/src/VBox/HostDrivers/Support/freebsd/files_vboxdrv	(revision 23961)
@@ -43,4 +43,5 @@
     ${PATH_ROOT}/include/iprt/memobj.h=>include/iprt/memobj.h \
     ${PATH_ROOT}/include/iprt/mp.h=>include/iprt/mp.h \
+    ${PATH_ROOT}/include/iprt/net.h=>include/iprt/net.h \
     ${PATH_ROOT}/include/iprt/param.h=>include/iprt/param.h \
     ${PATH_ROOT}/include/iprt/power.h=>include/iprt/power.h \
Index: /trunk/src/VBox/HostDrivers/Support/linux/files_vboxdrv
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/linux/files_vboxdrv	(revision 23960)
+++ /trunk/src/VBox/HostDrivers/Support/linux/files_vboxdrv	(revision 23961)
@@ -43,4 +43,5 @@
     ${PATH_ROOT}/include/iprt/memobj.h=>include/iprt/memobj.h \
     ${PATH_ROOT}/include/iprt/mp.h=>include/iprt/mp.h \
+    ${PATH_ROOT}/include/iprt/net.h=>include/iprt/net.h \
     ${PATH_ROOT}/include/iprt/param.h=>include/iprt/param.h \
     ${PATH_ROOT}/include/iprt/power.h=>include/iprt/power.h \
Index: /trunk/src/VBox/HostDrivers/VBoxNetAdp/linux/files_vboxnetadp
===================================================================
--- /trunk/src/VBox/HostDrivers/VBoxNetAdp/linux/files_vboxnetadp	(revision 23960)
+++ /trunk/src/VBox/HostDrivers/VBoxNetAdp/linux/files_vboxnetadp	(revision 23961)
@@ -37,4 +37,5 @@
     ${PATH_ROOT}/include/iprt/memobj.h=>include/iprt/memobj.h \
     ${PATH_ROOT}/include/iprt/mp.h=>include/iprt/mp.h \
+    ${PATH_ROOT}/include/iprt/net.h=>include/iprt/net.h \
     ${PATH_ROOT}/include/iprt/param.h=>include/iprt/param.h \
     ${PATH_ROOT}/include/iprt/power.h=>include/iprt/power.h \
Index: /trunk/src/VBox/Runtime/common/string/strformatrt.cpp
===================================================================
--- /trunk/src/VBox/Runtime/common/string/strformatrt.cpp	(revision 23960)
+++ /trunk/src/VBox/Runtime/common/string/strformatrt.cpp	(revision 23961)
@@ -51,4 +51,8 @@
  *      - \%RTiop           - Takes a #RTIOPORT value.
  *      - \%RTldrm          - Takes a #RTLDRMOD value.
+ *      - \%RTmac           - Takes a #PCRTMAC pointer.
+ *      - \%RTnaipv4        - Takes a #RTNETADDRIPV4 value.
+ *      - \%RTnaipv6        - Takes a #PCRTNETADDRIPV6 value.
+ *      - \%RTnthrd         - Takes a #RTNATIVETHREAD value.
  *      - \%RTnthrd         - Takes a #RTNATIVETHREAD value.
  *      - \%RTproc          - Takes a #RTPROCESS value.
@@ -153,6 +157,7 @@
 # include <iprt/err.h>
 #endif
+#include <iprt/ctype.h>
 #include <iprt/time.h>
-#include <iprt/ctype.h>
+#include <iprt/net.h>
 #include "internal/string.h"
 
@@ -198,5 +203,17 @@
                  * Interpret the type.
                  */
-                typedef enum { RTSF_INT, RTSF_INTW, RTSF_FP16, RTSF_FP32, RTSF_FP64, RTSF_UUID, RTSF_BOOL } RTSF;
+                typedef enum
+                {
+                    RTSF_INT,
+                    RTSF_INTW,
+                    RTSF_BOOL,
+                    RTSF_FP16,
+                    RTSF_FP32,
+                    RTSF_FP64,
+                    RTSF_IPV4,
+                    RTSF_IPV6,
+                    RTSF_MAC,
+                    RTSF_UUID
+                } RTSF;
                 static const struct
                 {
@@ -247,4 +264,7 @@
                     { STRMEM("Tiop"),    sizeof(RTIOPORT),       16, RTSF_INTW,  0 },
                     { STRMEM("Tldrm"),   sizeof(RTLDRMOD),       16, RTSF_INTW,  0 },
+                    { STRMEM("Tmac"),    sizeof(PCRTMAC),        16, RTSF_MAC,   0 },
+                    { STRMEM("Tnaipv4"), sizeof(RTNETADDRIPV4),  10, RTSF_IPV4,  0 },
+                    { STRMEM("Tnaipv6"), sizeof(PCRTNETADDRIPV6),16, RTSF_IPV6,  0 },
                     { STRMEM("Tnthrd"),  sizeof(RTNATIVETHREAD), 16, RTSF_INTW,  0 },
                     { STRMEM("Tproc"),   sizeof(RTPROCESS),      16, RTSF_INTW,  0 },
@@ -271,4 +291,6 @@
 #undef STRMEM
                 };
+                static const char s_szNull[] = "<NULL>";
+
                 const char *pszType = *ppszFormat - 1;
                 int         iStart  = 0;
@@ -278,17 +300,20 @@
                 union
                 {
-                    uint8_t     u8;
-                    uint16_t    u16;
-                    uint32_t    u32;
-                    uint64_t    u64;
-                    int8_t      i8;
-                    int16_t     i16;
-                    int32_t     i32;
-                    int64_t     i64;
-                    RTFAR16     fp16;
-                    RTFAR32     fp32;
-                    RTFAR64     fp64;
-                    bool        fBool;
-                    PCRTUUID    pUuid;
+                    uint8_t             u8;
+                    uint16_t            u16;
+                    uint32_t            u32;
+                    uint64_t            u64;
+                    int8_t              i8;
+                    int16_t             i16;
+                    int32_t             i32;
+                    int64_t             i64;
+                    RTFAR16             fp16;
+                    RTFAR32             fp32;
+                    RTFAR64             fp64;
+                    bool                fBool;
+                    PCRTMAC             pMac;
+                    RTNETADDRIPV4       Ipv4Addr;
+                    PCRTNETADDRIPV6     pIpv6Addr;
+                    PCRTUUID            pUuid;
                 } u;
                 char        szBuf[80];
@@ -414,4 +439,16 @@
                     }
 
+                    case RTSF_BOOL:
+                    {
+                        static const char s_szTrue[]  = "true ";
+                        static const char s_szFalse[] = "false";
+                        if (u.u64 == 1)
+                            return pfnOutput(pvArgOutput, s_szTrue,  sizeof(s_szTrue) - 1);
+                        if (u.u64 == 0)
+                            return pfnOutput(pvArgOutput, s_szFalse, sizeof(s_szFalse) - 1);
+                        /* invalid boolean value */
+                        return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "!%lld!", u.u64);
+                    }
+
                     case RTSF_FP16:
                     {
@@ -448,8 +485,52 @@
                     }
 
+                    case RTSF_IPV4:
+                        return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
+                                           "%u.%u.%u.%u",
+                                           u.Ipv4Addr.au8[0],
+                                           u.Ipv4Addr.au8[1],
+                                           u.Ipv4Addr.au8[2],
+                                           u.Ipv4Addr.au8[3]);
+
+                    case RTSF_IPV6:
+                    {
+                        if (VALID_PTR(u.pIpv6Addr))
+                            return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
+                                               "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",
+                                               u.pIpv6Addr->au8[0],
+                                               u.pIpv6Addr->au8[1],
+                                               u.pIpv6Addr->au8[2],
+                                               u.pIpv6Addr->au8[3],
+                                               u.pIpv6Addr->au8[4],
+                                               u.pIpv6Addr->au8[5],
+                                               u.pIpv6Addr->au8[6],
+                                               u.pIpv6Addr->au8[7],
+                                               u.pIpv6Addr->au8[8],
+                                               u.pIpv6Addr->au8[9],
+                                               u.pIpv6Addr->au8[10],
+                                               u.pIpv6Addr->au8[11],
+                                               u.pIpv6Addr->au8[12],
+                                               u.pIpv6Addr->au8[13],
+                                               u.pIpv6Addr->au8[14],
+                                               u.pIpv6Addr->au8[15]);
+                        return pfnOutput(pvArgOutput, s_szNull, sizeof(s_szNull) - 1);
+                    }
+
+                    case RTSF_MAC:
+                    {
+                        if (VALID_PTR(u.pMac))
+                            return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
+                                               "%02x:%02x:%02x:%02x:%02x:%02x",
+                                               u.pMac->au8[0],
+                                               u.pMac->au8[1],
+                                               u.pMac->au8[2],
+                                               u.pMac->au8[3],
+                                               u.pMac->au8[4],
+                                               u.pMac->au8[5]);
+                        return pfnOutput(pvArgOutput, s_szNull, sizeof(s_szNull) - 1);
+                    }
+
                     case RTSF_UUID:
                     {
-                        static const char szNull[] = "<NULL>";
-
                         if (VALID_PTR(u.pUuid))
                         {
@@ -469,17 +550,5 @@
                                                u.pUuid->Gen.au8Node[5]);
                         }
-                        return pfnOutput(pvArgOutput, szNull, sizeof(szNull) - 1);
-                    }
-
-                    case RTSF_BOOL:
-                    {
-                        static const char szTrue[]  = "true ";
-                        static const char szFalse[] = "false";
-                        if (u.u64 == 1)
-                            return pfnOutput(pvArgOutput, szTrue, sizeof(szTrue) - 1);
-                        if (u.u64 == 0)
-                            return pfnOutput(pvArgOutput, szFalse, sizeof(szFalse) - 1);
-                        /* invalid boolean value */
-                        return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0, "!%lld!", u.u64);
+                        return pfnOutput(pvArgOutput, s_szNull, sizeof(s_szNull) - 1);
                     }
 
Index: /trunk/src/VBox/Runtime/testcase/tstRTStrFormat.cpp
===================================================================
--- /trunk/src/VBox/Runtime/testcase/tstRTStrFormat.cpp	(revision 23960)
+++ /trunk/src/VBox/Runtime/testcase/tstRTStrFormat.cpp	(revision 23961)
@@ -35,4 +35,5 @@
 
 #include <iprt/initterm.h>
+#include <iprt/net.h>
 #include <iprt/stream.h>
 #include <iprt/test.h>
@@ -270,4 +271,37 @@
     CHECK42("%RTiop", (RTIOPORT)0xffff, "ffff");
 
+    RTMAC Mac;
+    Mac.au8[0] = 0;
+    Mac.au8[1] = 0x1b;
+    Mac.au8[2] = 0x21;
+    Mac.au8[3] = 0x0a;
+    Mac.au8[4] = 0x1d;
+    Mac.au8[5] = 0xd9;
+    CHECK42("%RTmac", &Mac, "00:1b:21:0a:1d:d9");
+    Mac.au16[0] = 0xffff;
+    Mac.au16[1] = 0xffff;
+    Mac.au16[2] = 0xffff;
+    CHECK42("%RTmac", &Mac, "ff:ff:ff:ff:ff:ff");
+
+    RTNETADDRIPV4 Ipv4Addr;
+    Ipv4Addr.u = RT_H2N_U32_C(0xf040d003);
+    CHECK42("%RTnaipv4", Ipv4Addr.u, "240.64.208.3");
+    Ipv4Addr.u = RT_H2N_U32_C(0xffffffff);
+    CHECK42("%RTnaipv4", Ipv4Addr.u, "255.255.255.255");
+
+    RTNETADDRIPV6 Ipv6Addr;
+    Ipv6Addr.au16[0] = RT_H2N_U16_C(0x2001);
+    Ipv6Addr.au16[1] = RT_H2N_U16_C(0x0db8);
+    Ipv6Addr.au16[2] = RT_H2N_U16_C(0x85a3);
+    Ipv6Addr.au16[3] = RT_H2N_U16_C(0x0000);
+    Ipv6Addr.au16[4] = RT_H2N_U16_C(0x0000);
+    Ipv6Addr.au16[5] = RT_H2N_U16_C(0x8a2e);
+    Ipv6Addr.au16[6] = RT_H2N_U16_C(0x0370);
+    Ipv6Addr.au16[7] = RT_H2N_U16_C(0x7334);
+    CHECK42("%RTnaipv6", &Ipv6Addr, "2001:0db8:85a3:0000:0000:8a2e:0370:7334");
+    Ipv6Addr.au64[0] = UINT64_MAX;
+    Ipv6Addr.au64[1] = UINT64_MAX;
+    CHECK42("%RTnaipv6", &Ipv6Addr, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
+
     CHECK42("%RTproc", (RTPROCESS)0xffffff, "00ffffff");
     CHECK42("%RTproc", (RTPROCESS)0x43455443, "43455443");
