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

📄 ipsumdump_udp.cc

📁 Click is a modular router toolkit. To use it you ll need to know how to compile and install the sof
💻 CC
字号:
// -*- mode: c++; c-basic-offset: 4 -*-/* * ipsumdump_udp.{cc,hh} -- IP transport summary dump unparsers * Eddie Kohler * * Copyright (c) 2002 International Computer Science Institute * Copyright (c) 2004 Regents of the University of California * Copyright (c) 2008 Meraki, Inc. * * 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 "ipsumdump_udp.hh"#include <click/packet.hh>#include <click/nameinfo.hh>#include <clicknet/ip.h>#include <clicknet/tcp.h>#include <clicknet/udp.h>#include <clicknet/icmp.h>#include <click/confparse.hh>CLICK_DECLSnamespace IPSummaryDump {enum { T_UDP_LEN };static bool udp_extract(PacketDesc& d, const FieldWriter *f){    int transport_length = d.p->transport_length();    switch (f->user_data) {#define CHECK(l) do { if (!d.udph || transport_length < (l)) return field_missing(d, IP_PROTO_UDP, (l)); } while (0)      case T_UDP_LEN:	CHECK(6);	d.v = ntohs(d.udph->uh_ulen);	return true;#undef CHECK      default:	return false;    }}static void udp_inject(PacketOdesc& d, const FieldReader *f){    if (!d.make_ip(0) || !d.make_transp())	return;    int ip_p = d.p->ip_header()->ip_p;    if (ip_p && ip_p != IP_PROTO_UDP && ip_p != IP_PROTO_UDPLITE)	return;    if (d.p->transport_length() < (int) sizeof(click_udp)	&& !(d.p = d.p->put(sizeof(click_udp) - d.p->transport_length())))	return;    switch (f->user_data) {    case T_UDP_LEN:	d.p->udp_header()->uh_ulen = htons(d.v);	break;    }}static const FieldWriter udp_writers[] = {    { "udp_len", B_4, T_UDP_LEN,      ip_prepare, udp_extract, num_outa, outb }};static const FieldReader udp_readers[] = {    { "udp_len", B_4, T_UDP_LEN, order_transp,      num_ina, inb, udp_inject }};}void IPSummaryDump_UDP::static_initialize(){    using namespace IPSummaryDump;    for (size_t i = 0; i < sizeof(udp_writers) / sizeof(udp_writers[0]); ++i)	FieldWriter::add(&udp_writers[i]);    for (size_t i = 0; i < sizeof(udp_readers) / sizeof(udp_readers[0]); ++i)	FieldReader::add(&udp_readers[i]);}void IPSummaryDump_UDP::static_cleanup(){    using namespace IPSummaryDump;    for (size_t i = 0; i < sizeof(udp_writers) / sizeof(udp_writers[0]); ++i)	FieldWriter::remove(&udp_writers[i]);    for (size_t i = 0; i < sizeof(udp_readers) / sizeof(udp_readers[0]); ++i)	FieldReader::remove(&udp_readers[i]);}ELEMENT_REQUIRES(userlevel IPSummaryDump)ELEMENT_PROVIDES(IPSummaryDump_UDP)CLICK_ENDDECLS

⌨️ 快捷键说明

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