summaryrefslogtreecommitdiff
path: root/stack/src/rxtx.c
blob: ded77d024c61ec91a3e84cdac0af7178ec99997b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/* \brief ��Э��ջ���Ĵ�������
 * 
 * ģ�鴦������������Э��ջ�����ݱ��ĺ�׼���������������ݱ���
 * 
 * \author Lu Qiuwen<[email protected]>
 * \date 2016-10-21
 */

#include <unistd.h>
#include <assert.h>
#include <sk_device.h>
#include <sk_stack.h>
#include <sk_udp.h>
#include <sk_arp.h>
#include <sk_tcp.h>
#include <sk_icmp.h>

int sk_serv_device_tx_bulk(struct sk_dev_desc * dev_desc, thread_id_t sid,
	struct rte_mbuf * mbufs_out[], int nr_mbufs_max)
{
	int nr_mbufs_out = 0;
	int nr_mbufs_left = nr_mbufs_max;
	
	// ��ѭ�����Ļ�����
	nr_mbufs_out += rte_ring_sc_dequeue_burst(dev_desc->tx_loop_buffer[sid],
		(void **)&mbufs_out[nr_mbufs_out], nr_mbufs_left);

	return nr_mbufs_out;
}

int sk_serv_device_rx_bulk(struct sk_dev_desc * dev_desc, thread_id_t sid,
	struct rte_mbuf * mbufs_in[], int nr_mbufs_in)
{
	// ARP���Ĵ���
	int nr_handled = 0;
	nr_handled += protocol_serv_arp_entry(dev_desc, sid, mbufs_in, nr_mbufs_in);
	
	// ICMP���Ĵ���
	nr_handled += protocol_serv_icmp_entry(dev_desc, sid, mbufs_in, nr_mbufs_in);

	// UDP���Ĵ���
	nr_handled += protocol_serv_udp_entry(dev_desc, sid, mbufs_in, nr_mbufs_in);

	return nr_handled;
}