[haiku-commits] haiku: hrev45762 - src/bin/network/route

  • From: kallisti5@xxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 15 Jun 2013 08:25:26 +0200 (CEST)

hrev45762 adds 1 changeset to branch 'master'
old head: 819b397354dc2452cc649ff2e269c8542398b091
new head: 24110ddab59dd5542e33e3e476cc271969324063
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=24110dd+%5E819b397

----------------------------------------------------------------------------

24110dd: Route: Don't call null function pointers
  
  * Regression from hrev38233 (2010 baby!)
  * If no netmask, don't print anything
    vs showing uninitialized data.
  * Introduce "worst case address length"
    information per network family.
  * Fixes #9821

                          [ Alexander von Gluck IV <kallisti5@xxxxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev45762
Commit:      24110ddab59dd5542e33e3e476cc271969324063
URL:         http://cgit.haiku-os.org/haiku/commit/?id=24110dd
Author:      Alexander von Gluck IV <kallisti5@xxxxxxxxxxx>
Date:        Sat Jun 15 06:24:15 2013 UTC

Ticket:      https://dev.haiku-os.org/ticket/9821

----------------------------------------------------------------------------

1 file changed, 22 insertions(+), 34 deletions(-)
src/bin/network/route/route.cpp | 56 +++++++++++++++----------------------

----------------------------------------------------------------------------

diff --git a/src/bin/network/route/route.cpp b/src/bin/network/route/route.cpp
index 9989d03..7e37bcd 100644
--- a/src/bin/network/route/route.cpp
+++ b/src/bin/network/route/route.cpp
@@ -1,9 +1,10 @@
 /*
- * Copyright 2006-2010, Haiku, Inc. All Rights Reserved.
+ * Copyright 2006-2013, Haiku, Inc. All Rights Reserved.
  * Distributed under the terms of the MIT License.
  *
  * Authors:
  *             Axel Dörfler, axeld@xxxxxxxxxxxxxxxx
+ *             Alexander von Gluck <kallisti5@xxxxxxxxxxx>
  */
 
 
@@ -48,11 +49,7 @@ struct address_family {
        int                     family;
        const char*     name;
        const char*     identifiers[4];
-       preferred_output_format preferred_format;
-       bool            (*parse_address)(const char* string, sockaddr* 
_address);
-       bool            (*prefix_length_to_mask)(uint8 prefixLength, sockaddr* 
mask);
-       uint8           (*mask_to_prefix_length)(sockaddr* mask);
-       const char*     (*address_to_string)(sockaddr* address);
+       uint32          maxLength;
 };
 
 
@@ -61,15 +58,15 @@ static const address_family kFamilies[] = {
                AF_INET,
                "inet",
                {"AF_INET", "inet", "ipv4", NULL},
-               PREFER_OUTPUT_MASK,
+               15,
        },
        {
                AF_INET6,
                "inet6",
                {"AF_INET6", "inet6", "ipv6", NULL},
-               PREFER_OUTPUT_PREFIX_LENGTH,
+               39,
        },
-       { -1, NULL, {NULL}, PREFER_OUTPUT_MASK, NULL, NULL, NULL, NULL }
+       { -1, NULL, {NULL} }
 };
 
 
@@ -204,20 +201,16 @@ list_routes(int socket, const char *interfaceName, 
route_entry &route)
 
                        if (family != NULL) {
                                BNetworkAddress destination(*route.destination);
-                               BNetworkAddress mask;
-                               if (route.mask != NULL)
-                                       mask.SetTo(*route.mask);
 
-                               // TODO: is the %15s format OK for IPv6?
                                printf("%15s", destination.ToString().String());
-                               switch (family->preferred_format) {
-                                       case PREFER_OUTPUT_MASK:
-                                               printf(" mask %-15s ", 
mask.ToString().String());
-                                               break;
-                                       case PREFER_OUTPUT_PREFIX_LENGTH:
-                                               printf("/%zd ", 
mask.PrefixLength());
-                                               break;
-                               }
+
+                               if (route.mask != NULL) {
+                                       BNetworkAddress mask;
+                                       mask.SetTo(*route.mask);
+                                       printf("/%zd\t", mask.PrefixLength());
+                               } else
+                                       printf("   \t");
+
                                if ((route.flags & RTF_GATEWAY) != 0) {
                                        BNetworkAddress gateway;
                                        if (route.gateway != NULL)
@@ -334,22 +327,17 @@ get_route(int socket, route_entry &route)
        }
 
        if (family != NULL) {
-               printf("%s", family->address_to_string(request.destination));
-               switch (family->preferred_format) {
-                       case PREFER_OUTPUT_MASK:
-                               printf(" mask %s ",
-                                       
family->address_to_string(request.mask));
-                               break;
-                       case PREFER_OUTPUT_PREFIX_LENGTH:
-                               printf("/%u ",
-                                       
family->mask_to_prefix_length(request.mask));
-                               break;
-               }
+               BNetworkAddress destination(*request.destination);
+               BNetworkAddress mask(*request.mask);
+               printf("%s", destination.ToString().String());
+               printf("/%zd ", mask.PrefixLength());
 
+               BNetworkAddress gateway(*request.gateway);
                if (request.flags & RTF_GATEWAY)
-                       printf("gateway %s ", 
family->address_to_string(request.gateway));
+                       printf("gateway %s ", gateway.ToString().String());
 
-               printf("source %s\n", 
family->address_to_string(request.source));
+               BNetworkAddress source(*request.source);
+               printf("source %s\n", source.ToString().String());
        } else {
                printf("unknown family ");
        }


Other related posts: