-
Notifications
You must be signed in to change notification settings - Fork 82
/
flowipoutputcombo.hh
72 lines (58 loc) · 1.82 KB
/
flowipoutputcombo.hh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#ifndef CLICK_FLOWIPOUTPUTCOMBO_HH
#define CLICK_FLOWIPOUTPUTCOMBO_HH
#include <click/config.h>
#include <click/glue.hh>
#include <clicknet/ip.h>
#include <click/flow/flowelement.hh>
CLICK_DECLS
/*
* =c
* FlowIPOutputCombo(COLOR, IPADDR, MTU)
* =s ip
* output combo for IP routing
* =d
* A single element encapsulating common tasks on an IP router's output path.
* Effectively equivalent to
*
* elementclass FlowIPOutputCombo { $COLOR, $IPADDR, $MTU |
* input[0] -> DropBroadcasts
* -> p::PaintTee($COLOR)
* -> g::IPGWOptions($IPADDR)
* -> FixIPSrc($IPADDR)
* -> d::DecIPTTL
* -> l::CheckLength($MTU)
* -> [0]output;
* p[1] -> [1]output;
* g[1] -> [2]output;
* d[1] -> [3]output;
* l[1] -> [4]output;
* }
*
* Output 0 is the path for normal packets; outputs 1 through 3 are error
* outputs for PaintTee, IPGWOptions, and DecIPTTL, respectively; and
* output 4 is for packets longer than MTU.
*
* =n
*
* FlowIPOutputCombo does no fragmentation. You'll still need an IPFragmenter for
* that.
*
* =a DropBroadcasts, PaintTee, CheckLength, IPGWOptions, FixIPSrc, DecIPTTL,
* IPFragmenter, IPInputCombo */
class FlowIPOutputCombo : public FlowSharedBufferPaintElement {
public:
FlowIPOutputCombo() CLICK_COLD;
~FlowIPOutputCombo() CLICK_COLD;
const char *class_name() const { return "FlowIPOutputCombo"; }
const char *port_count() const { return "1/5"; }
const char *processing() const { return PUSH; }
int configure(Vector<String> &, ErrorHandler *) CLICK_COLD;
void push_flow(int, int*, PacketBatch *);
private:
int _color; // PaintTee
struct in_addr _my_ip; // IPGWOptions, FixIPSrc
unsigned _mtu; // Fragmenter
inline int action(Packet* &p_in, bool color, int given_color);
};
CLICK_ENDDECLS
#endif