mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-19 09:16:43 +00:00
52 lines
1.3 KiB
C++
52 lines
1.3 KiB
C++
|
/*
|
||
|
* \brief Network receive handler per MAC address
|
||
|
* \author Markus Partheymueller
|
||
|
* \date 2012-07-31
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Copyright (C) 2012 Intel Corporation
|
||
|
* Copyright (C) 2013 Genode Labs GmbH
|
||
|
*
|
||
|
* This file is part of the Genode OS framework, which is distributed
|
||
|
* under the terms of the GNU General Public License version 2.
|
||
|
*
|
||
|
* The code is partially based on the Vancouver VMM, which is distributed
|
||
|
* under the terms of the GNU General Public License version 2.
|
||
|
*
|
||
|
* Modifications by Intel Corporation are contributed under the terms and
|
||
|
* conditions of the GNU General Public License version 2.
|
||
|
*/
|
||
|
|
||
|
/* local includes */
|
||
|
#include <network.h>
|
||
|
|
||
|
extern const void * _forward_pkt;
|
||
|
|
||
|
|
||
|
Vancouver_network::Vancouver_network(Motherboard &mb, Nic::Session * nic)
|
||
|
: _mb(mb), _nic(nic)
|
||
|
{
|
||
|
start();
|
||
|
}
|
||
|
|
||
|
|
||
|
void Vancouver_network::entry()
|
||
|
{
|
||
|
Logging::printf("Hello, this is the network receiver.\n");
|
||
|
|
||
|
while (true) {
|
||
|
Packet_descriptor rx_packet = _nic->rx()->get_packet();
|
||
|
|
||
|
/* send it to the network bus */
|
||
|
char * rx_content = _nic->rx()->packet_content(rx_packet);
|
||
|
_forward_pkt = rx_content;
|
||
|
MessageNetwork msg((unsigned char *)rx_content, rx_packet.size(), 0);
|
||
|
_mb.bus_network.send(msg);
|
||
|
_forward_pkt = 0;
|
||
|
|
||
|
/* acknowledge received packet */
|
||
|
_nic->rx()->acknowledge_packet(rx_packet);
|
||
|
}
|
||
|
}
|