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

📄 ip6routetable.cc

📁 Click is a modular router toolkit. To use it you ll need to know how to compile and install the sof
💻 CC
字号:
// -*- c-basic-offset: 4 -*-/* * ip6 handler kludge by Marko Zec * * originates from iproutetable.{cc,hh} by Benjie Chen, Eddie Kohler * * Copyright (c) 2001 Massachusetts Institute of Technology * Copyright (c) 2002 International Computer Science Institute * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, subject to the conditions listed in the Click LICENSE * file. These conditions include: you must preserve this copyright * notice, and you cannot mention the copyright holders in advertising * related to the Software without their permission.  The Software is * provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This notice is a * summary of the Click LICENSE file; the license in that file is * legally binding. */#include <click/config.h>#include <click/ip6address.hh>#include <click/confparse.hh>#include <click/error.hh>#include <click/glue.hh>#include "ip6routetable.hh"CLICK_DECLSvoid *IP6RouteTable::cast(const char *name){    if (strcmp(name, "IPRouteTable") == 0)	return (void *)this;    else	return Element::cast(name);}intIP6RouteTable::add_route(IP6Address, IP6Address, IP6Address,			 int, ErrorHandler *errh){    // by default, cannot add routes    return errh->error("cannot add routes to this routing table");}intIP6RouteTable::remove_route(IP6Address, IP6Address, ErrorHandler *errh){    // by default, cannot remove routes    return errh->error("cannot delete routes from this routing table");}StringIP6RouteTable::dump_routes(){    return String();}intIP6RouteTable::add_route_handler(const String &conf, Element *e, void *, ErrorHandler *errh){    IP6RouteTable *r = static_cast<IP6RouteTable *>(e);    Vector<String> words;    cp_spacevec(conf, words);    IP6Address dst, mask, gw;    int port, ok;    if (words.size() == 2)        ok = cp_va_kparse(words, r, errh,			  "PREFIX", cpkP+cpkM, cpIP6AddressOrPrefix, &dst, &mask,			  "PORT", cpkP+cpkM, cpInteger, &port, cpEnd);    else        ok = cp_va_kparse(words, r, errh,			  "PREFIX", cpkP+cpkM, cpIP6AddressOrPrefix, &dst, &mask,			  "GATEWAY", cpkP+cpkM, cpIP6Address, &gw,			  "PORT", cpkP+cpkM, cpInteger, &port, cpEnd);    if (ok >= 0 && (port < 0 || port >= r->noutputs()))        ok = errh->error("output port out of range");    if (ok >= 0)        ok = r->add_route(dst, mask, gw, port, errh);    return ok;}intIP6RouteTable::remove_route_handler(const String &conf, Element *e, void *, ErrorHandler *errh){    IP6RouteTable *r = static_cast<IP6RouteTable *>(e);    Vector<String> words;    cp_spacevec(conf, words);    IP6Address a, mask;    int ok = 0;    ok = cp_va_kparse(words, r, errh,		      "PREFIX", cpkP+cpkM, cpIP6AddressOrPrefix, &a, &mask,		      cpEnd);    if (ok >= 0)	ok = r->remove_route(a, mask, errh);    return ok;}intIP6RouteTable::ctrl_handler(const String &conf_in, Element *e, void *thunk, ErrorHandler *errh){    String conf = conf_in;    String first_word = cp_shift_spacevec(conf);    if (first_word == "add")	return add_route_handler(conf, e, thunk, errh);    else if (first_word == "remove")	return remove_route_handler(conf, e, thunk, errh);    else	return errh->error("bad command, should be `add' or `remove'");}StringIP6RouteTable::table_handler(Element *e, void *){    IP6RouteTable *r = static_cast<IP6RouteTable*>(e);    return r->dump_routes();}CLICK_ENDDECLSELEMENT_PROVIDES(IP6RouteTable)

⌨️ 快捷键说明

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