#include <stdlib.h>
#include <time.h>
+#include <misc/timespec_operations.h>
#include "frescan_queues.h"
#include "frescan_packets.h"
frescan_ss_t id,
frescan_packet_t *packet)
{
- DEBUG(FRESCAN_SERVERS_ENABLE_DEBUG, "enqueue packet for id:%u\n", id);
+ frescan_server_data_t *server = &the_servers_pool[net][id];
clock_gettime (CLOCK_MONOTONIC, &packet->timestamp);
+ DEBUG(FRESCAN_SERVERS_ENABLE_DEBUG, "id:%u timestamp:(%d, %d)\n",
+ id, packet->timestamp.tv_sec, packet->timestamp.tv_nsec);
+
// add the packet to the server fifo list
- list_add_tail(&packet->fifo_list,
- &the_servers_pool[net][id].packet_list.fifo_list);
+ list_add_tail(&packet->fifo_list, &server->packet_list.fifo_list);
- // if the server was inactive (no packets to send) put it active
- // (in the active list)
- if (the_servers_pool[net][id].pending_packets == 0) {
+ // if the server was inactive (no packets) put it in the active list
+ if (server->pending_packets == 0) {
DEBUG(FRESCAN_SERVERS_ENABLE_DEBUG,
- "server was inactive, put in the active list\n");
- list_add_tail(&the_servers_pool[net][id].servers_list,
- &the_active_servers[net].servers_list);
+ "ss becomes active act_time=timestamp\n");
+ list_add_tail(&server->servers_list,
+ &the_active_servers[net].servers_list);
+ server->act_time = packet->timestamp;
}
- the_servers_pool[net][id].pending_packets++;
+ server->pending_packets++;
return 0;
}
frescan_prio_t *packet_prio)
{
struct list_head *pos;
+ frescan_server_data_t *server;
- if (list_empty(&the_servers_pool[net][id].packet_list.fifo_list)) {
+ server = &the_servers_pool[net][id];
+
+ if (list_empty(&server->packet_list.fifo_list)) {
ERROR("no packet in server %d fifo list\n", id);
return -1;
}
- list_for_each(pos, &the_servers_pool[net][id].packet_list.fifo_list) {
+ list_for_each(pos, &server->packet_list.fifo_list) {
*packet = list_entry(pos, frescan_packet_t, fifo_list);
break;
}
list_del(&((*packet)->fifo_list));
- *packet_prio = the_servers_pool[net][id].current_priority;
- the_servers_pool[net][id].pending_packets--;
+ *packet_prio = server->current_priority;
+ server->pending_packets--;
- if (the_servers_pool[net][id].pending_packets == 0) {
+ if (server->pending_packets == 0) {
DEBUG(FRESCAN_SERVERS_ENABLE_DEBUG,
"no more packets, delete from active list\n");
- list_del(&the_servers_pool[net][id].servers_list);
+ list_del(&server->servers_list);
}
DEBUG(FRESCAN_SERVERS_ENABLE_DEBUG,
"dequeued packet server:%u cur_prio:%u pending:%u\n",
- id, *packet_prio, the_servers_pool[net][id].pending_packets);
+ id, *packet_prio, server->pending_packets);
return 0;
}