#include <time.h>
#include <string.h>
#include <pthread.h>
+#include "common.h"
-#define BASE_PORT 5100
-#define BUFFSIZE 65536
-#define AC_QUEUES 4
+int ac_sockfd[AC_NUM];
-/* Turn on/off debugging */
-#define DEBUG 0
-
-const int prio_to_ac[8] = {2,3,3,2,1,1,0,0};
-const unsigned int ac_to_tos[4] = {224,160,96,64};
-int ac_sockfd[AC_QUEUES];
+struct receiver {
+ unsigned received, last_received;
+} receivers[AC_NUM];
void stopper()
{
int i;
- for (i = 0 ; i < AC_QUEUES; i++)
- close(ac_sockfd[AC_QUEUES]);
+ for (i = 0 ; i < AC_NUM; i++)
+ close(ac_sockfd[AC_NUM]);
exit(0);
}
return -1;
}
- //tos = ((AC_QUEUES - ac) *2 - 1)*32;
+ //tos = ((AC_NUM - ac) *2 - 1)*32;
tos = ac_to_tos[ac];
if (setsockopt(sockfd, SOL_IP, IP_TOS, &tos, sizeof(tos))) {
perror("Unable to set TOS");
void* qhandler(void* queue)
{
- char buff[BUFFSIZE];
+ union msg_buff buff;
struct sockaddr_in rem_addr;
int mlen;
unsigned int ac, rem_addr_length;
ac = (int) queue;
printf("AC= %d\n",ac);
rem_addr_length=sizeof(rem_addr);
+
+ block_signals();
+ set_rt_prio(90-ac);
+
while (1) {
- while ((mlen = recvfrom(ac_sockfd[ac], buff, sizeof(buff) , 0, \
+ while ((mlen = recvfrom(ac_sockfd[ac], &buff, sizeof(buff) , 0, \
(struct sockaddr*)&rem_addr, &rem_addr_length)) < 0) {
if (errno == EINTR) continue;
perror("Chyba pri prijimani pozadavku");
return NULL;
}
-#if DEBUG
+#ifdef DEBUG
printf("%d",ac);
fflush(stdout);
-#endif
- while (sendto(ac_sockfd[ac], buff, mlen,0 ,(struct sockaddr*)&rem_addr, \
+#endif
+ receivers[ac].received++;
+/* clock_gettime(CLOCK_MONOTONIC, &buff.msg.sendback_timestamp); */
+ while (sendto(ac_sockfd[ac], &buff, mlen,0 ,(struct sockaddr*)&rem_addr, \
sizeof(rem_addr)) < 0){
if (errno == EINTR) continue;
perror("Chyba pri zapisu");
int main(int argc, char *argv[])
{
- int i,rc;
+ int ac,rc;
pthread_attr_t attr;
pthread_t thread;
exit(1);
}
- for (i = 0; i < AC_QUEUES; i++) {
- ac_sockfd[i] = create_ac_socket(i);
- rc = pthread_create(&thread, &attr, qhandler, (void*) i);
+ for (ac = 0; ac < AC_NUM; ac++) {
+ ac_sockfd[ac] = create_ac_socket(ac);
+ rc = pthread_create(&thread, &attr, qhandler, (void*) ac);
}
while (1) {
- sleep(100000);
+ printf("\r");
+ for (ac = 0; ac < AC_NUM; ac++) {
+ int delta = receivers[ac].received - receivers[ac].last_received;
+ receivers[ac].last_received = receivers[ac].received;
+ fprintf(stderr, "%s %5d %4d/s ", ac_to_text[ac], receivers[ac].received, delta);
+ }
+ fflush(stdout);
+ sleep(1);
}
+ printf("\n");
return 0;