OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [net/] [bsd_tcpip/] [current/] [src/] [sys/] [netinet/] [ip_ecn.c] - Blame information for rev 838

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 786 skrzyp
//==========================================================================
2
//
3
//      src/sys/netinet/ip_ecn.c
4
//
5
//==========================================================================
6
// ####BSDCOPYRIGHTBEGIN####                                    
7
// -------------------------------------------                  
8
// This file is part of eCos, the Embedded Configurable Operating System.
9
//
10
// Portions of this software may have been derived from FreeBSD 
11
// or other sources, and if so are covered by the appropriate copyright
12
// and license included herein.                                 
13
//
14
// Portions created by the Free Software Foundation are         
15
// Copyright (C) 2002 Free Software Foundation, Inc.            
16
// -------------------------------------------                  
17
// ####BSDCOPYRIGHTEND####                                      
18
//==========================================================================
19
 
20
/*      $KAME: ip_ecn.c,v 1.11 2001/05/03 16:09:29 itojun Exp $ */
21
 
22
/*
23
 * Copyright (C) 1999 WIDE Project.
24
 * All rights reserved.
25
 *
26
 * Redistribution and use in source and binary forms, with or without
27
 * modification, are permitted provided that the following conditions
28
 * are met:
29
 * 1. Redistributions of source code must retain the above copyright
30
 *    notice, this list of conditions and the following disclaimer.
31
 * 2. Redistributions in binary form must reproduce the above copyright
32
 *    notice, this list of conditions and the following disclaimer in the
33
 *    documentation and/or other materials provided with the distribution.
34
 * 3. Neither the name of the project nor the names of its contributors
35
 *    may be used to endorse or promote products derived from this software
36
 *    without specific prior written permission.
37
 *
38
 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
39
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
40
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
41
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
42
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
43
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
44
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
45
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
46
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
47
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48
 * SUCH DAMAGE.
49
 *
50
 */
51
/*
52
 * ECN consideration on tunnel ingress/egress operation.
53
 * http://www.aciri.org/floyd/papers/draft-ipsec-ecn-00.txt
54
 */
55
 
56
#include <sys/param.h>
57
#include <sys/malloc.h>
58
#include <sys/mbuf.h>
59
#include <sys/errno.h>
60
 
61
#include <netinet/in.h>
62
#include <netinet/in_systm.h>
63
#include <netinet/ip.h>
64
#ifdef INET6
65
#include <netinet/ip6.h>
66
#endif
67
 
68
#include <netinet/ip_ecn.h>
69
 
70
/*
71
 * modify outer ECN (TOS) field on ingress operation (tunnel encapsulation).
72
 */
73
void
74
ip_ecn_ingress(mode, outer, inner)
75
        int mode;
76
        u_int8_t *outer;
77
        const u_int8_t *inner;
78
{
79
        if (!outer || !inner)
80
                panic("NULL pointer passed to ip_ecn_ingress");
81
 
82
        *outer = *inner;
83
        switch (mode) {
84
        case ECN_ALLOWED:               /* ECN allowed */
85
                *outer &= ~IPTOS_CE;
86
                break;
87
        case ECN_FORBIDDEN:             /* ECN forbidden */
88
                *outer &= ~(IPTOS_ECT | IPTOS_CE);
89
                break;
90
        case ECN_NOCARE:        /* no consideration to ECN */
91
                break;
92
        }
93
}
94
 
95
/*
96
 * modify inner ECN (TOS) field on egress operation (tunnel decapsulation).
97
 */
98
void
99
ip_ecn_egress(mode, outer, inner)
100
        int mode;
101
        const u_int8_t *outer;
102
        u_int8_t *inner;
103
{
104
        if (!outer || !inner)
105
                panic("NULL pointer passed to ip_ecn_egress");
106
 
107
        switch (mode) {
108
        case ECN_ALLOWED:
109
                if (*outer & IPTOS_CE)
110
                        *inner |= IPTOS_CE;
111
                break;
112
        case ECN_FORBIDDEN:             /* ECN forbidden */
113
        case ECN_NOCARE:        /* no consideration to ECN */
114
                break;
115
        }
116
}
117
 
118
#ifdef INET6
119
void
120
ip6_ecn_ingress(mode, outer, inner)
121
        int mode;
122
        u_int32_t *outer;
123
        const u_int32_t *inner;
124
{
125
        u_int8_t outer8, inner8;
126
 
127
        if (!outer || !inner)
128
                panic("NULL pointer passed to ip6_ecn_ingress");
129
 
130
        inner8 = (ntohl(*inner) >> 20) & 0xff;
131
        ip_ecn_ingress(mode, &outer8, &inner8);
132
        *outer &= ~htonl(0xff << 20);
133
        *outer |= htonl((u_int32_t)outer8 << 20);
134
}
135
 
136
void
137
ip6_ecn_egress(mode, outer, inner)
138
        int mode;
139
        const u_int32_t *outer;
140
        u_int32_t *inner;
141
{
142
        u_int8_t outer8, inner8;
143
 
144
        if (!outer || !inner)
145
                panic("NULL pointer passed to ip6_ecn_egress");
146
 
147
        outer8 = (ntohl(*outer) >> 20) & 0xff;
148
        ip_ecn_egress(mode, &outer8, &inner8);
149
        *inner &= ~htonl(0xff << 20);
150
        *inner |= htonl((u_int32_t)inner8 << 20);
151
}
152
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.