simple patch from Ajax <ajax@firest0rm.org> (corrected) to print DDP
authorBernd Eckenfels <net-tools@lina.inka.de>
Sun, 2 Jun 2002 05:25:15 +0000 (05:25 +0000)
committerBernd Eckenfels <net-tools@lina.inka.de>
Sun, 2 Jun 2002 05:25:15 +0000 (05:25 +0000)
(AppleTalk) routing table.

lib/ddp_gr.c
lib/pathnames.h

index 94169f0..3453e2f 100644 (file)
@@ -1,3 +1,20 @@
+/*
+ * lib/ddp_gr.c         Prinbting of DDP (AppleTalk) routing table
+ *                      used by the NET-LIB.
+ *
+ * NET-LIB      
+ *
+ * Version:     $Id: ddp_gr.c,v 1.4 2002/06/02 05:25:15 ecki Exp $
+ *
+ * Author:      Ajax <ajax@firest0rm.org>
+ *
+ * Modification:
+ *  2002-06-02 integrated into main source by Bernd Eckenfels
+ *
+ */
+
+/* TODO: name lookups (/etc/atalk.names?  NBP?) */
+
 #include "config.h"
 
 #if HAVE_AFATALK
 #include "pathnames.h"
 #include "intl.h"
 
+/* stolen from inet_gr.c */
+#define flags_decode(i,o) do {                  \
+        o[0] = '\0';                            \
+        if (i & RTF_UP) strcat(o, "U");         \
+        if (i & RTF_GATEWAY) strcat(o, "G");    \
+        if (i & RTF_REJECT) strcat(o, "!");     \
+        if (i & RTF_HOST) strcat(o, "H");       \
+        if (i & RTF_REINSTATE) strcat(o, "R");  \
+        if (i & RTF_DYNAMIC) strcat(o, "D");    \
+        if (i & RTF_MODIFIED) strcat(o, "M");   \
+        if (i & RTF_DEFAULT) strcat(o, "d");    \
+        if (i & RTF_ALLONLINK) strcat(o, "a");  \
+        if (i & RTF_ADDRCONF) strcat(o, "c");   \
+        if (i & RTF_NONEXTHOP) strcat(o, "o");  \
+        if (i & RTF_EXPIRES) strcat(o, "e");    \
+        if (i & RTF_CACHE) strcat(o, "c");      \
+        if (i & RTF_FLOW) strcat(o, "f");       \
+        if (i & RTF_POLICY) strcat(o, "p");     \
+        if (i & RTF_LOCAL) strcat(o, "l");      \
+        if (i & RTF_MTU) strcat(o, "u");        \
+        if (i & RTF_WINDOW) strcat(o, "w");     \
+        if (i & RTF_IRTT) strcat(o, "i");       \
+        if (i & RTF_NOTCACHED) strcat(o, "n");  \
+    } while (0)
+
 int DDP_rprint(int options)
 {
-    fprintf(stderr, _("Routing table for `ddp' not yet supported.\n"));
-    return (1);
+    FILE *fp;
+    char *dest, *gw, *dev, *flags;
+    char oflags[32];
+    char *hdr = "Destination     Gateway         Device          Flags";
+
+    fp = fopen(_PATH_PROCNET_ATALK_ROUTE, "r");
+
+    if (!fp) {
+        perror("Error opening " _PATH_PROCNET_ATALK_ROUTE);
+        fprintf(stderr, "DDP (AppleTalk) not configured on this system.\n");
+        return 1;
+    }
+
+    fscanf(fp, "%as %as %as %as\n", &dest, &gw, &flags, &dev);
+    free(dest); free(gw); free(dev); free(flags);
+
+    printf("%s\n", hdr);
+
+    while (fscanf(fp, "%as %as %as %as\n", &dest, &gw, &flags, &dev) == 4) {
+        int iflags = atoi(flags);
+        flags_decode(iflags, oflags);
+        printf("%-16s%-16s%-16s%-s\n", dest, gw, dev, oflags);
+        free(dest); free(gw); free(dev); free(flags);
+    }
+
+    fclose(fp);
+    
+    return 0;
+
 }
 #endif
index 1f7fefb..2d2c0a8 100644 (file)
@@ -1,4 +1,3 @@
-
 /*
  * lib/pathnames.h    This file contains the definitions of the path 
  *                      names used by the NET-LIB.
@@ -45,6 +44,7 @@
 #define _PATH_PROCNET_X25              "/proc/net/x25"
 #define _PATH_PROCNET_X25_ROUTE                "/proc/net/x25_routes"
 #define _PATH_PROCNET_DEV_MCAST                "/proc/net/dev_mcast"
+#define _PATH_PROCNET_ATALK_ROUTE      "/proc/net/atalk_route"
 
 /* pathname for the netlink device */
 #define _PATH_DEV_ROUTE        "/dev/route"