]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - sys/contrib/pf/net/if_pflow.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / sys / contrib / pf / net / if_pflow.h
1 /*      $OpenBSD: if_pflow.h,v 1.5 2009/02/27 11:09:36 gollo Exp $      */
2
3 /*
4  * Copyright (c) 2008 Henning Brauer <henning@openbsd.org>
5  * Copyright (c) 2008 Joerg Goltermann <jg@osn.de>
6  *
7  * Permission to use, copy, modify, and distribute this software for any
8  * purpose with or without fee is hereby granted, provided that the above
9  * copyright notice and this permission notice appear in all copies.
10  *
11  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15  * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER IN
16  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
17  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18  *
19  * $FreeBSD$
20  */
21
22 #ifndef _NET_IF_PFLOW_H_
23 #define _NET_IF_PFLOW_H_
24
25 #define PFLOW_ID_LEN    sizeof(u_int64_t)
26
27 #define PFLOW_MAXFLOWS 30
28 #define PFLOW_VERSION 5
29 #define PFLOW_ENGINE_TYPE 42
30 #define PFLOW_ENGINE_ID 42
31 #define PFLOW_MAXBYTES 0xffffffff
32 #define PFLOW_TIMEOUT 30
33
34 struct pflow_flow {
35         u_int32_t       src_ip;
36         u_int32_t       dest_ip;
37         u_int32_t       nexthop_ip;
38         u_int16_t       if_index_in;
39         u_int16_t       if_index_out;
40         u_int32_t       flow_packets;
41         u_int32_t       flow_octets;
42         u_int32_t       flow_start;
43         u_int32_t       flow_finish;
44         u_int16_t       src_port;
45         u_int16_t       dest_port;
46         u_int8_t        pad1;
47         u_int8_t        tcp_flags;
48         u_int8_t        protocol;
49         u_int8_t        tos;
50         u_int16_t       src_as;
51         u_int16_t       dest_as;
52         u_int8_t        src_mask;
53         u_int8_t        dest_mask;
54         u_int16_t       pad2;
55 } __packed;
56
57 #ifdef _KERNEL
58
59 extern int pflow_ok;
60
61 struct pflow_softc {
62         struct ifnet             sc_if;
63         struct ifnet            *sc_pflow_ifp;
64
65         unsigned int             sc_count;
66         unsigned int             sc_maxcount;
67         u_int64_t                sc_gcounter;
68         struct ip_moptions       sc_imo;
69 #ifdef __FreeBSD__
70         struct callout           sc_tmo;
71 #else
72         struct timeout           sc_tmo;
73 #endif
74         struct in_addr           sc_sender_ip;
75         u_int16_t                sc_sender_port;
76         struct in_addr           sc_receiver_ip;
77         u_int16_t                sc_receiver_port;
78         struct mbuf             *sc_mbuf;       /* current cumulative mbuf */
79         SLIST_ENTRY(pflow_softc) sc_next;
80 };
81
82 extern struct pflow_softc       *pflowif;
83
84 #endif /* _KERNEL */
85
86 struct pflow_header {
87         u_int16_t       version;
88         u_int16_t       count;
89         u_int32_t       uptime_ms;
90         u_int32_t       time_sec;
91         u_int32_t       time_nanosec;
92         u_int32_t       flow_sequence;
93         u_int8_t        engine_type;
94         u_int8_t        engine_id;
95         u_int8_t        reserved1;
96         u_int8_t        reserved2;
97 } __packed;
98
99 #define PFLOW_HDRLEN sizeof(struct pflow_header)
100
101 struct pflowstats {
102         u_int64_t       pflow_flows;
103         u_int64_t       pflow_packets;
104         u_int64_t       pflow_onomem;
105         u_int64_t       pflow_oerrors;
106 };
107
108 /*
109  * Configuration structure for SIOCSETPFLOW SIOCGETPFLOW
110  */
111 struct pflowreq {
112         struct in_addr          sender_ip;
113         struct in_addr          receiver_ip;
114         u_int16_t               receiver_port;
115         u_int16_t               addrmask;
116 #define PFLOW_MASK_SRCIP        0x01
117 #define PFLOW_MASK_DSTIP        0x02
118 #define PFLOW_MASK_DSTPRT       0x04
119 };
120
121 #ifdef _KERNEL
122 int export_pflow(struct pf_state *);
123 int pflow_sysctl(int *, u_int,  void *, size_t *, void *, size_t);
124 #endif /* _KERNEL */
125
126 #endif /* _NET_IF_PFLOW_H_ */