⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 route.c

📁 Linux下网络相关工具源代码。
💻 C
字号:
/* * route        This file contains an implementation of the command *              that manages the IP routing table in the kernel. * * Version:     $Id: route.c,v 1.6 1999/04/18 20:28:41 philip Exp $ * * Maintainer:  Bernd 'eckes' Eckenfels, <net-tools@lina.inka.de> * * Author:      Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org> *              (derived from FvK's 'route.c     1.70    01/04/94') * * Modifications: *              Johannes Stille:        for Net-2Debugged by  *                                      <johannes@titan.os.open.de> *              Linus Torvalds:         Misc Changes *              Alan Cox:               add the new mtu/window stuff *              Miquel van Smoorenburg: rt_add and rt_del *       {1.79} Bernd Eckenfels:        route_info *       {1.80} Bernd Eckenfels:        reject, metric, irtt, 1.2.x support. *       {1.81} Bernd Eckenfels:        reject routes need a dummy device *960127 {1.82} Bernd Eckenfels:        'mod' and 'dyn' 'reinstate' added *960129 {1.83} Bernd Eckenfels:        resolve and getsock now in lib/,  *                                      REJECT displays '-' as gatway. *960202 {1.84} Bernd Eckenfels:        net-features support added *960203 {1.85} Bernd Eckenfels:        "#ifdef' in '#if' for net-features *                                      -A  (aftrans) support, get_longopts *960206 {1.86} Bernd Eckenfels:        route_init(); *960218 {1.87} Bernd Eckenfels:        netinet/in.h added *960221 {1.88} Bernd Eckenfels:        aftrans_dfl support *960222 {1.90} Bernd Eckenfels:        moved all AF specific code to lib/. *960413 {1.91} Bernd Eckenfels:        new RTACTION support+FLAG_CACHE/FIB *960426 {1.92} Bernd Eckenfels:        FLAG_SYM/-N support *960823 {x.xx} Frank Strauss:          INET6 stuff *980629 {1.95} Arnaldo Carvalho de Melo: gettext instead of catgets *990101 {1.96} Bernd Eckenfels:	fixed usage and FLAG_CACHE Output * */#include <sys/types.h>#include <sys/ioctl.h>#include <sys/socket.h>#include <net/if.h>/* #include <net/route.h> realy broken */#include <netinet/in.h>#include <netdb.h>#include <netinet/in.h>#include <arpa/nameser.h>#include <resolv.h>#include <linux/param.h>#include <stdio.h>#include <errno.h>#include <fcntl.h>#include <stdlib.h>#include <string.h>#include <getopt.h>#include <unistd.h>#include <ctype.h>#include "net-support.h"#include "config.h"#include "intl.h"#include "pathnames.h"#include "version.h"#define DFLT_AF "inet"#define FEATURE_ROUTE#include "lib/net-features.h"	/* needs some of the system includes above! */char *Release = RELEASE, *Version = "route 1.96 (1999-01-01)";int opt_n = 0;			/* numerical output flag        */int opt_v = 0;			/* debugging output flag        */int opt_e = 1;			/* 1,2,3=type of routetable     */int opt_fc = 0;			/* routing cache/FIB */int opt_h = 0;			/* help selected                */struct aftype *ap;		/* current address family       */static void usage(void){    fprintf(stderr, _("Usage: route [-nNvee] [-FC] [<AF>]           List kernel routing tables\n"));    fprintf(stderr, _("       route [-v] [-FC] {add|del|flush} ...  Modify routing table for AF.\n\n"));    fprintf(stderr, _("       route {-h|--help} [<AF>]              Detailed usage syntax for specified AF.\n"));    fprintf(stderr, _("       route {-V|--version}                  Display version/author and exit.\n\n"));    fprintf(stderr, _("        -v, --verbose            be verbose\n"));    fprintf(stderr, _("        -n, --numeric            dont resolve names\n"));    fprintf(stderr, _("        -N, --symbolic           resolve hardware names\n"));    fprintf(stderr, _("        -e, --extend             display other/more information\n"));    fprintf(stderr, _("        -F, --fib                display Forwarding Information Base (default)\n"));    fprintf(stderr, _("        -C, --cache              display routing cache instead of FIB\n\n"));    fprintf(stderr, _("  <AF>=Use '-A <af>' or '--<af>' Default: %s\n"), DFLT_AF);    fprintf(stderr, _("  List of possible address families (which support routing):\n"));    print_aflist(1); /* 1 = routeable */    exit(E_USAGE);}static void version(void){    fprintf(stderr, "%s\n%s\n%s\n", Release, Version, Features);    exit(E_VERSION);}int main(int argc, char **argv){    int i, lop, what = 0;    struct option longopts[] =    {	AFTRANS_OPTS,	{"extend", 0, 0, 'e'},	{"verbose", 0, 0, 'v'},	{"version", 0, 0, 'V'},	{"numeric", 0, 0, 'n'},	{"symbolic", 0, 0, 'N'},	{"protocol", 1, 0, 'A'},	{"cache", 0, 0, 'C'},	{"fib", 0, 0, 'F'},	{"help", 0, 0, 'h'},	{NULL, 0, 0, 0}    };    char **tmp;    char *progname;    int options;#if I18N    bindtextdomain("net-tools", "/usr/share/locale");    textdomain("net-tools");#endif    getroute_init();		/* Set up AF routing support */    setroute_init();    afname[0] = '\0';    progname = argv[0];    /* getopts and -net wont work :-/ */    for (tmp = argv; *tmp; tmp++) {	if (!strcmp(*tmp, "-net"))	    strcpy(*tmp, "#net");	else if (!strcmp(*tmp, "-host"))	    strcpy(*tmp, "#host");    }    /* Fetch the command-line arguments. */    while ((i = getopt_long(argc, argv, "A:eCFhnNVv?", longopts, &lop)) != EOF)	switch (i) {	case -1:	    break;	case 'n':	    opt_n |= FLAG_NUM;	    break;	case 'N':	    opt_n |= FLAG_SYM;	    break;	case 'v':	    opt_v |= FLAG_VERBOSE;	    break;	case 'e':	    opt_e++;	    break;	case 1:	    if (lop < 0 || lop >= AFTRANS_CNT) {		EINTERN("route.c", "longopts 1 range");		break;	    }	    if ((i = aftrans_opt(longopts[lop].name)))		exit(i);	    break;	case 'C':	    opt_fc |= FLAG_CACHE;	    break;	case 'F':	    opt_fc |= FLAG_FIB;	    break;	case 'A':	    if ((i = aftrans_opt(optarg)))		exit(i);	    break;	case 'V':	    version();	case 'h':	case '?':	    opt_h++;	    break;	default:	    usage();	}    argv += optind;    argc -= optind;    if (opt_h) {	if (!afname[0])	    usage();	else	    what = RTACTION_HELP;    } else {	if (!afname[0])	    /* this will initialise afname[] */	    aftrans_def("route", progname, DFLT_AF);	/* Do we have to show the contents of the routing table? */	if (*argv == NULL) {	    what = RTACTION_SHOW;	} else {	    if (!strcmp(*argv, "add"))		what = RTACTION_ADD;	    else if (!strcmp(*argv, "del") || !strcmp(*argv, "delete"))		what = RTACTION_DEL;	    else if (!strcmp(*argv, "flush"))		what = RTACTION_FLUSH;	    else		usage();	}    }    options = (opt_e & FLAG_EXT) | opt_n | opt_fc | opt_v;    if (!opt_fc)	options |= FLAG_FIB;    if (what == RTACTION_SHOW)	i = route_info(afname, options);    else	i = route_edit(what, afname, options, ++argv);    if (i == E_OPTERR)	usage();    return (i);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -