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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [freertos-6.1.1/] [Demo/] [Common/] [ethernet/] [lwIP/] [netif/] [loopif.c] - Blame information for rev 606

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 606 jeremybenn
/*
2
 * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
3
 * All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without modification,
6
 * are permitted provided that the following conditions are met:
7
 *
8
 * 1. Redistributions of source code must retain the above copyright notice,
9
 *    this list of conditions and the following disclaimer.
10
 * 2. Redistributions in binary form must reproduce the above copyright notice,
11
 *    this list of conditions and the following disclaimer in the documentation
12
 *    and/or other materials provided with the distribution.
13
 * 3. The name of the author may not be used to endorse or promote products
14
 *    derived from this software without specific prior written permission.
15
 *
16
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
19
 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
21
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
24
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
25
 * OF SUCH DAMAGE.
26
 *
27
 * This file is part of the lwIP TCP/IP stack.
28
 *
29
 * Author: Adam Dunkels <adam@sics.se>
30
 *
31
 */
32
#include "lwip/opt.h"
33
 
34
#if LWIP_HAVE_LOOPIF
35
 
36
#include "netif/loopif.h"
37
#include "lwip/mem.h"
38
 
39
#if defined(LWIP_DEBUG) && defined(LWIP_TCPDUMP)
40
#include "netif/tcpdump.h"
41
#endif /* LWIP_DEBUG && LWIP_TCPDUMP */
42
 
43
#include "lwip/tcp.h"
44
#include "lwip/ip.h"
45
 
46
static void
47
loopif_input( void * arg )
48
{
49
        struct netif *netif = (struct netif *)( ((void **)arg)[ 0 ] );
50
        struct pbuf *r = (struct pbuf *)( ((void **)arg)[ 1 ] );
51
 
52
        mem_free( arg );
53
        netif -> input( r, netif );
54
}
55
 
56
static err_t
57
loopif_output(struct netif *netif, struct pbuf *p,
58
       struct ip_addr *ipaddr)
59
{
60
  struct pbuf *q, *r;
61
  u8_t *ptr;
62
  void **arg;
63
 
64
#if defined(LWIP_DEBUG) && defined(LWIP_TCPDUMP)
65
  tcpdump(p);
66
#endif /* LWIP_DEBUG && LWIP_TCPDUMP */
67
 
68
  r = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_RAM);
69
  if (r != NULL) {
70
    ptr = r->payload;
71
 
72
    for(q = p; q != NULL; q = q->next) {
73
      memcpy(ptr, q->payload, q->len);
74
      ptr += q->len;
75
    }
76
 
77
    arg = mem_malloc( sizeof( void *[2]));
78
        if( NULL == arg ) {
79
                return ERR_MEM;
80
        }
81
 
82
        arg[0] = netif;
83
        arg[1] = r;
84
        /**
85
         * workaround (patch #1779) to try to prevent bug #2595:
86
         * When connecting to "localhost" with the loopif interface,
87
         * tcp_output doesn't get the opportunity to finnish sending the
88
         * segment before tcp_process gets it, resulting in tcp_process
89
         * referencing pcb->unacked-> which still is NULL.
90
         *
91
         * TODO: Is there still a race condition here? Leon
92
         */
93
        sys_timeout( 1, loopif_input, arg );
94
 
95
    return ERR_OK;
96
  }
97
  return ERR_MEM;
98
}
99
 
100
err_t
101
loopif_init(struct netif *netif)
102
{
103
  netif->name[0] = 'l';
104
  netif->name[1] = 'o';
105
#if 0 /** TODO: I think this should be enabled, or not? Leon */
106
  netif->input = loopif_input;
107
#endif
108
  netif->output = loopif_output;
109
  return ERR_OK;
110
}
111
 
112
#endif /* LWIP_HAVE_LOOPIF */
113
 
114
 
115
 
116
 
117
 
118
 
119
 

powered by: WebSVN 2.1.0

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