embox

Форк
0
/
process.c 
62 строки · 1.2 Кб
1
/**
2
 * @file
3
 *
4
 * @brief Graph executer process
5
 *
6
 * @date 14.03.2012
7
 * @author Anton Bondarev
8
 */
9
#include <errno.h>
10

11
#include <pnet/core/core.h>
12
#include <pnet/core/graph.h>
13
#include <pnet/pack/pnet_pack.h>
14
#include <pnet/core/node.h>
15

16
static int step_process(struct pnet_pack *pack, net_hnd hnd, net_node_t next_node) {
17
	net_node_t node;
18
	net_id_t res = NET_HND_FORWARD_DEFAULT;
19

20
	assert(pack);
21
	assert(pack->node);
22

23
	node = pack->node;
24

25
	if (0 != pnet_graph_run_valid(node->graph)) {
26
		pnet_pack_destroy(pack);
27
		return -EINVAL;
28
	}
29

30
	if (node->proto != NULL) {
31
		if(NULL != hnd) {
32
			res = hnd(pack);
33
		}
34
	}
35

36
	switch (res) {
37
	case NET_HND_FORWARD_DEFAULT:
38
		assert(next_node);
39
		pack->node = next_node;
40
		/* FALLTHROUGH */
41
	case NET_HND_FORWARD:
42
		pnet_rx_thread_add(pack);
43
		break;
44
	case NET_HND_STOP_FREE:
45
		pnet_pack_destroy(pack);
46
		break;
47
	case NET_HND_STOP:
48
		break;
49
	default:
50
		/* do nothing */
51
		break;
52
	}
53

54
	return 0;
55
}
56

57
int pnet_process(struct pnet_pack *pack) {
58
	if (pack->dir == PNET_PACK_DIRECTION_RX) {
59
		return step_process(pack, pnet_proto_rx_hnd(pack->node), pack->node->rx_dfault);
60
	}
61
	return step_process(pack, pnet_proto_tx_hnd(pack->node), pack->node->tx_dfault);
62
}
63

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.