From 7e52da1d0bc0497fc42fda221bc7b50bfac568a1 Mon Sep 17 00:00:00 2001 From: Bernd Eckenfels Date: Sun, 2 Jun 2002 05:25:15 +0000 Subject: [PATCH] simple patch from Ajax (corrected) to print DDP (AppleTalk) routing table. --- lib/ddp_gr.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- lib/pathnames.h | 2 +- 2 files changed, 72 insertions(+), 3 deletions(-) diff --git a/lib/ddp_gr.c b/lib/ddp_gr.c index 94169f0..3453e2f 100644 --- a/lib/ddp_gr.c +++ b/lib/ddp_gr.c @@ -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 + * + * Modification: + * 2002-06-02 integrated into main source by Bernd Eckenfels + * + */ + +/* TODO: name lookups (/etc/atalk.names? NBP?) */ + #include "config.h" #if HAVE_AFATALK @@ -16,9 +33,61 @@ #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 diff --git a/lib/pathnames.h b/lib/pathnames.h index 1f7fefb..2d2c0a8 100644 --- a/lib/pathnames.h +++ b/lib/pathnames.h @@ -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" -- 2.7.4