embox
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
16static int step_process(struct pnet_pack *pack, net_hnd hnd, net_node_t next_node) {17net_node_t node;18net_id_t res = NET_HND_FORWARD_DEFAULT;19
20assert(pack);21assert(pack->node);22
23node = pack->node;24
25if (0 != pnet_graph_run_valid(node->graph)) {26pnet_pack_destroy(pack);27return -EINVAL;28}29
30if (node->proto != NULL) {31if(NULL != hnd) {32res = hnd(pack);33}34}35
36switch (res) {37case NET_HND_FORWARD_DEFAULT:38assert(next_node);39pack->node = next_node;40/* FALLTHROUGH */41case NET_HND_FORWARD:42pnet_rx_thread_add(pack);43break;44case NET_HND_STOP_FREE:45pnet_pack_destroy(pack);46break;47case NET_HND_STOP:48break;49default:50/* do nothing */51break;52}53
54return 0;55}
56
57int pnet_process(struct pnet_pack *pack) {58if (pack->dir == PNET_PACK_DIRECTION_RX) {59return step_process(pack, pnet_proto_rx_hnd(pack->node), pack->node->rx_dfault);60}61return step_process(pack, pnet_proto_tx_hnd(pack->node), pack->node->tx_dfault);62}
63