Line data Source code
1 : /* $OpenBSD: ip_ether.h,v 1.28 2017/11/17 18:21:33 jca Exp $ */
2 : /*
3 : * The author of this code is Angelos D. Keromytis (angelos@adk.gr)
4 : *
5 : * This code was written by Angelos D. Keromytis in October 1999.
6 : *
7 : * Copyright (C) 1999-2001 Angelos D. Keromytis.
8 : *
9 : * Permission to use, copy, and modify this software with or without fee
10 : * is hereby granted, provided that this entire notice is included in
11 : * all copies of any software which is or includes a copy or
12 : * modification of this software.
13 : * You may use this code under the GNU public license if you so wish. Please
14 : * contribute changes back to the authors under this freer than GPL license
15 : * so that we may further the use of strong encryption without limitations to
16 : * all.
17 : *
18 : * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR
19 : * IMPLIED WARRANTY. IN PARTICULAR, NONE OF THE AUTHORS MAKES ANY
20 : * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE
21 : * MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
22 : * PURPOSE.
23 : */
24 :
25 : #ifndef _NETINET_IP_ETHER_H_
26 : #define _NETINET_IP_ETHER_H_
27 :
28 : /*
29 : * Ethernet-inside-IP processing.
30 : */
31 :
32 : struct etheripstat {
33 : u_int64_t etherips_hdrops; /* packet shorter than header shows */
34 : u_int64_t etherips_qfull; /* bridge queue full, packet dropped */
35 : u_int64_t etherips_noifdrops; /* no interface/bridge information */
36 : u_int64_t etherips_pdrops; /* packet dropped due to policy */
37 : u_int64_t etherips_adrops; /* all other drops */
38 : u_int64_t etherips_ipackets; /* total input packets */
39 : u_int64_t etherips_opackets; /* total output packets */
40 : u_int64_t etherips_ibytes; /* input bytes */
41 : u_int64_t etherips_obytes; /* output bytes */
42 : };
43 :
44 : struct etherip_header {
45 : #if BYTE_ORDER == LITTLE_ENDIAN
46 : u_int eip_res:4; /* reserved */
47 : u_int eip_ver:4; /* version */
48 : #endif
49 : #if BYTE_ORDER == BIG_ENDIAN
50 : u_int eip_ver:4; /* version */
51 : u_int eip_res:4; /* reserved */
52 : #endif
53 : u_int8_t eip_pad; /* required padding byte */
54 : } __packed;
55 :
56 : #define ETHERIP_VERSION 0x03
57 :
58 : /*
59 : * Names for Ether-IP sysctl objects
60 : */
61 : #define ETHERIPCTL_ALLOW 1 /* accept incoming EtherIP packets */
62 : #define ETHERIPCTL_STATS 2 /* etherip stats */
63 : #define ETHERIPCTL_MAXID 3
64 :
65 : #define ETHERIPCTL_NAMES { \
66 : { 0, 0 }, \
67 : { "allow", CTLTYPE_INT }, \
68 : { "stats", CTLTYPE_STRUCT }, \
69 : }
70 :
71 : #ifdef _KERNEL
72 :
73 : #include <sys/percpu.h>
74 :
75 : enum etheripstat_counters {
76 : etherips_hdrops, /* packet shorter than header shows */
77 : etherips_qfull, /* bridge queue full, packet dropped */
78 : etherips_noifdrops, /* no interface/bridge information */
79 : etherips_pdrops, /* packet dropped due to policy */
80 : etherips_adrops, /* all other drops */
81 : etherips_ipackets, /* total input packets */
82 : etherips_opackets, /* total output packets */
83 : etherips_ibytes, /* input bytes */
84 : etherips_obytes, /* output bytes */
85 :
86 : etherips_ncounters
87 : };
88 :
89 : extern struct cpumem *etheripcounters;
90 :
91 : static inline void
92 0 : etheripstat_inc(enum etheripstat_counters c)
93 : {
94 0 : counters_inc(etheripcounters, c);
95 0 : }
96 :
97 : static inline void
98 : etheripstat_add(enum etheripstat_counters c, uint64_t v)
99 : {
100 : counters_add(etheripcounters, c, v);
101 : }
102 :
103 : static inline void
104 0 : etheripstat_pkt(enum etheripstat_counters pcounter,
105 : enum etheripstat_counters bcounter, uint64_t v)
106 : {
107 0 : counters_pkt(etheripcounters, pcounter, bcounter, v);
108 0 : }
109 :
110 : struct tdb; /* XXX within #ifdef MPLS? */
111 :
112 : #ifdef MPLS
113 : int mplsip_output(struct mbuf *, struct tdb *, struct mbuf **, int);
114 : int mplsip_input(struct mbuf **, int *, int, int);
115 : #endif /* MPLS */
116 :
117 : #endif /* _KERNEL */
118 : #endif /* _NETINET_IP_ETHER_H_ */
|