diff options
author | Srinath Arunachalam <Srinath.Arunachalam@harman.com> | 2015-07-15 15:08:31 -0600 |
---|---|---|
committer | Srinath Arunachalam <Srinath.Arunachalam@harman.com> | 2015-08-19 15:59:38 -0600 |
commit | 42578be460787d6177f5241d851789ab5dcd6bff (patch) | |
tree | 3448f42857d6a48c0a0d423073bbc7f22f506807 /examples | |
parent | a9c939cf9f8af40492ae1f1d1ddca86ab6ff3c80 (diff) | |
download | Open-AVB-42578be460787d6177f5241d851789ab5dcd6bff.tar.gz |
Moved global variables in simple_talker mrp client and simple_listener mrp clinet to a struct.
Diffstat (limited to 'examples')
-rw-r--r-- | examples/common/listener_mrp_client.c | 122 | ||||
-rw-r--r-- | examples/common/listener_mrp_client.h | 33 | ||||
-rw-r--r-- | examples/common/talker_mrp_client.c | 21 | ||||
-rw-r--r-- | examples/common/talker_mrp_client.h | 15 | ||||
-rw-r--r-- | examples/simple_listener/simple_listener.c | 17 | ||||
-rw-r--r-- | examples/simple_talker/simple_talker.c | 10 |
6 files changed, 106 insertions, 112 deletions
diff --git a/examples/common/listener_mrp_client.c b/examples/common/listener_mrp_client.c index 6546a88c..02ccdf79 100644 --- a/examples/common/listener_mrp_client.c +++ b/examples/common/listener_mrp_client.c @@ -26,21 +26,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. /* global variables */ -int control_socket; -volatile int talker = 0; -unsigned char stream_id[8]; -unsigned char dst_mac[6]; -volatile int halt_tx = 0; - -volatile int domain_a_valid = 0; -int domain_class_a_id = 0; -int domain_class_a_priority = 0; -u_int16_t domain_class_a_vid = 0; - -volatile int domain_b_valid = 0; -int domain_class_b_id = 0; -int domain_class_b_priority = 0; -u_int16_t domain_class_b_vid = 0; +struct listener_context global_struct_listener; pthread_t monitor_thread; pthread_attr_t monitor_attr; @@ -48,12 +34,37 @@ pthread_attr_t monitor_attr; * private */ +int mrp_listener_client_init(void) +{ + int i; + global_struct_listener.control_socket=-1; + global_struct_listener.talker = 0; + global_struct_listener.halt_tx = 0; + global_struct_listener.domain_a_valid = 0; + global_struct_listener.domain_class_a_id = 0; + global_struct_listener.domain_class_a_priority = 0; + global_struct_listener.domain_class_a_vid = 0; + global_struct_listener.domain_b_valid = 0; + global_struct_listener.domain_class_b_id = 0; + global_struct_listener.domain_class_b_priority = 0; + global_struct_listener.domain_class_b_vid = 0; + for (i=0;i<8;i++) + { + global_struct_listener.stream_id[i]=0; + } + for (i=0;i<6;i++) + { + global_struct_listener.dst_mac[i]=0; + } + return 0; +} + int send_msg(char *data, int data_len) { //printf("Inside send msg\n"); struct sockaddr_in addr; - if (control_socket == -1) + if (global_struct_listener.control_socket == -1) return -1; if (data == NULL) return -1; @@ -63,7 +74,7 @@ int send_msg(char *data, int data_len) addr.sin_port = htons(MRPD_PORT_DEFAULT); addr.sin_addr.s_addr = inet_addr("127.0.0.1"); inet_aton("127.0.0.1", &addr.sin_addr); - return sendto(control_socket, data, data_len, 0, + return sendto(global_struct_listener.control_socket, data, data_len, 0, (struct sockaddr*)&addr, (socklen_t)sizeof(addr)); } @@ -72,7 +83,6 @@ int msg_process(char *buf, int buflen) uint32_t id; int j, l=0; unsigned int vid; - //unsigned int id; unsigned int priority; fprintf(stderr, "Msg: %s\n", buf); @@ -87,15 +97,15 @@ int msg_process(char *buf, int buflen) for(j = 0; j < 8 ; l+=2, j++) { sscanf(&buf[l],"%02x",&id); - stream_id[j] = (unsigned char)id; + global_struct_listener.stream_id[j] = (unsigned char)id; } l+=3; for(j = 0; j < 6 ; l+=2, j++) { sscanf(&buf[l],"%02x",&id); - dst_mac[j] = (unsigned char)id; + global_struct_listener.dst_mac[j] = (unsigned char)id; } - talker = 1; + global_struct_listener.talker = 1; } if (strncmp(buf, "SJO D:", 6) == 0) @@ -109,17 +119,17 @@ int msg_process(char *buf, int buflen) if (id == 6) { - domain_class_a_id = id; - domain_class_a_priority = priority; - domain_class_a_vid = vid; - domain_a_valid = 1; + global_struct_listener.domain_class_a_id = id; + global_struct_listener.domain_class_a_priority = priority; + global_struct_listener.domain_class_a_vid = vid; + global_struct_listener.domain_a_valid = 1; } else { - domain_class_b_id = id; - domain_class_b_priority = priority; - domain_class_b_vid = vid; - domain_b_valid = 1; + global_struct_listener.domain_class_b_id = id; + global_struct_listener.domain_class_b_priority = priority; + global_struct_listener.domain_class_b_vid = vid; + global_struct_listener.domain_b_valid = 1; } l+=4; @@ -134,13 +144,13 @@ int msg_process(char *buf, int buflen) int create_socket() // TODO FIX! =:-| { struct sockaddr_in addr; - control_socket = socket(AF_INET, SOCK_DGRAM, 0); + global_struct_listener.control_socket = socket(AF_INET, SOCK_DGRAM, 0); /** in POSIX fd 0,1,2 are reserved */ - if (2 > control_socket) + if (2 > global_struct_listener.control_socket) { - if (-1 > control_socket) - close(control_socket); + if (-1 > global_struct_listener.control_socket) + close(global_struct_listener.control_socket); return -1; } @@ -148,10 +158,10 @@ int create_socket() // TODO FIX! =:-| addr.sin_family = AF_INET; addr.sin_port = htons(0); - if(0 > (bind(control_socket, (struct sockaddr*)&addr, sizeof(addr)))) + if(0 > (bind(global_struct_listener.control_socket, (struct sockaddr*)&addr, sizeof(addr)))) { fprintf(stderr, "Could not bind socket.\n"); - close(control_socket); + close(global_struct_listener.control_socket); return -1; } return 0; @@ -171,8 +181,8 @@ void *mrp_monitor_thread(void *arg) msgbuf = (char *)malloc(MAX_MRPD_CMDSZ); if (NULL == msgbuf) return NULL; - while (!halt_tx) { - fds.fd = control_socket; + while (!global_struct_listener.halt_tx) { + fds.fd = global_struct_listener.control_socket; fds.events = POLLIN; fds.revents = 0; rc = poll(&fds, 1, 100); @@ -195,7 +205,7 @@ void *mrp_monitor_thread(void *arg) msg.msg_namelen = sizeof(client_addr); msg.msg_iov = &iov; msg.msg_iovlen = 1; - bytes = recvmsg(control_socket, &msg, 0); + bytes = recvmsg(global_struct_listener.control_socket, &msg, 0); if (bytes < 0) continue; msg_process(msgbuf, bytes); @@ -250,7 +260,7 @@ int mrp_get_domain(int *class_a_id, int *a_priority, u_int16_t * a_vid, free(msgbuf); if (ret != 1500) return -1; - while (!halt_tx && (domain_a_valid == 0) && (domain_b_valid == 0)) + while (!global_struct_listener.halt_tx && (global_struct_listener.domain_a_valid == 0) && (global_struct_listener.domain_b_valid == 0)) usleep(20000); *class_a_id = 0; *a_priority = 0; @@ -258,15 +268,15 @@ int mrp_get_domain(int *class_a_id, int *a_priority, u_int16_t * a_vid, *class_b_id = 0; *b_priority = 0; *b_vid = 0; - if (domain_a_valid) { - *class_a_id = domain_class_a_id; - *a_priority = domain_class_a_priority; - *a_vid = domain_class_a_vid; + if (global_struct_listener.domain_a_valid) { + *class_a_id = global_struct_listener.domain_class_a_id; + *a_priority = global_struct_listener.domain_class_a_priority; + *a_vid = global_struct_listener.domain_class_a_vid; } - if (domain_b_valid) { - *class_b_id = domain_class_b_id; - *b_priority = domain_class_b_priority; - *b_vid = domain_class_b_vid; + if (global_struct_listener.domain_b_valid) { + *class_b_id = global_struct_listener.domain_class_b_id; + *b_priority = global_struct_listener.domain_class_b_priority; + *b_vid = global_struct_listener.domain_class_b_vid; } return 0; } @@ -293,7 +303,7 @@ int join_vlan(u_int16_t vid) int await_talker() { - while (0 == talker) + while (0 == global_struct_listener.talker) ; return 0; } @@ -308,10 +318,10 @@ int send_ready() return -1; memset(databuf, 0, 1500); sprintf(databuf, "S+L:L=%02x%02x%02x%02x%02x%02x%02x%02x, D=2", - stream_id[0], stream_id[1], - stream_id[2], stream_id[3], - stream_id[4], stream_id[5], - stream_id[6], stream_id[7]); + global_struct_listener.stream_id[0], global_struct_listener.stream_id[1], + global_struct_listener.stream_id[2], global_struct_listener.stream_id[3], + global_struct_listener.stream_id[4], global_struct_listener.stream_id[5], + global_struct_listener.stream_id[6], global_struct_listener.stream_id[7]); rc = send_msg(databuf, 1500); free(databuf); @@ -331,10 +341,10 @@ int send_leave() return -1; memset(databuf, 0, 1500); sprintf(databuf, "S-L:L=%02x%02x%02x%02x%02x%02x%02x%02x, D=3", - stream_id[0], stream_id[1], - stream_id[2], stream_id[3], - stream_id[4], stream_id[5], - stream_id[6], stream_id[7]); + global_struct_listener.stream_id[0], global_struct_listener.stream_id[1], + global_struct_listener.stream_id[2], global_struct_listener.stream_id[3], + global_struct_listener.stream_id[4], global_struct_listener.stream_id[5], + global_struct_listener.stream_id[6], global_struct_listener.stream_id[7]); rc = send_msg(databuf, 1500); free(databuf); diff --git a/examples/common/listener_mrp_client.h b/examples/common/listener_mrp_client.h index 6932f0f4..b734740b 100644 --- a/examples/common/listener_mrp_client.h +++ b/examples/common/listener_mrp_client.h @@ -46,21 +46,25 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // TODO move these in a talker_context struct + init func -extern int control_socket; -extern volatile int talker; -extern unsigned char stream_id[8]; -extern unsigned char dst_mac[6]; -extern volatile int halt_tx; +struct listener_context +{ + int control_socket; + volatile int talker; + unsigned char stream_id[8]; + unsigned char dst_mac[6]; + volatile int halt_tx; + volatile int domain_a_valid; + int domain_class_a_id; + int domain_class_a_priority; + u_int16_t domain_class_a_vid; + volatile int domain_b_valid; + int domain_class_b_id; + int domain_class_b_priority; + u_int16_t domain_class_b_vid; +}global_struct_listener; + +extern struct listener_context global_struct_listener; -extern volatile int domain_a_valid; -extern int domain_class_a_id; -extern int domain_class_a_priority; -extern u_int16_t domain_class_a_vid; - -extern volatile int domain_b_valid; -extern int domain_class_b_id; -extern int domain_class_b_priority; -extern u_int16_t domain_class_b_vid; /* functions */ @@ -74,5 +78,6 @@ int send_ready(); int send_leave(); int mrp_disconnect(); int mrp_get_domain(int *class_a_id, int *a_priority, u_int16_t * a_vid, int *class_b_id, int *b_priority, u_int16_t * b_vid); +int mrp_listener_client_init(void); #endif /* _LISTENER_MRP_CLIENT_H_ */ diff --git a/examples/common/talker_mrp_client.c b/examples/common/talker_mrp_client.c index 5ad09617..5cd1646f 100644 --- a/examples/common/talker_mrp_client.c +++ b/examples/common/talker_mrp_client.c @@ -40,27 +40,10 @@ -extern struct talker_context global_struct_talker; +struct talker_context global_struct_talker; volatile int mrp_okay; volatile int mrp_error = 0;; - - -/*int control_socket = -1; -volatile int halt_tx = 0; -volatile int listeners = 0; -volatile int domain_a_valid = 0; -int domain_class_a_id = 0; -int domain_class_a_priority = 0; -u_int16_t domain_class_a_vid = 0; - -volatile int domain_b_valid = 0; -int domain_class_b_id = 0; -int domain_class_b_priority = 0; -u_int16_t domain_class_b_vid = 0; -unsigned char monitor_stream_id[] = { 0, 0, 0, 0, 0, 0, 0, 0 };*/ - - pthread_t monitor_thread; pthread_attr_t monitor_attr; @@ -68,7 +51,7 @@ pthread_attr_t monitor_attr; /* * private */ - + int mrp_talker_client_init(void) { int i; diff --git a/examples/common/talker_mrp_client.h b/examples/common/talker_mrp_client.h index 69cee9ce..6deceda7 100644 --- a/examples/common/talker_mrp_client.h +++ b/examples/common/talker_mrp_client.h @@ -52,8 +52,6 @@ /* global variables */ -// TODO move these in a talker_context struct + init func - struct talker_context { int control_socket; @@ -72,19 +70,6 @@ struct talker_context extern struct talker_context global_struct_talker; extern volatile int mrp_error; -/*extern volatile int halt_tx; -extern volatile int listeners; - - -extern volatile int domain_a_valid; -extern int domain_class_a_id; -extern int domain_class_a_priority; -extern u_int16_t domain_class_a_vid; - -extern volatile int domain_b_valid; -extern int domain_class_b_id; -extern int domain_class_b_priority; -extern u_int16_t domain_class_b_vid;*/ /* functions */ diff --git a/examples/simple_listener/simple_listener.c b/examples/simple_listener/simple_listener.c index 170d34e5..0080e5cf 100644 --- a/examples/simple_listener/simple_listener.c +++ b/examples/simple_listener/simple_listener.c @@ -110,7 +110,7 @@ void pcap_callback(u_char* args, const struct pcap_pkthdr* packet_header, const test_stream_id[6], test_stream_id[7]); #endif /* DEBUG*/ - if (0 == memcmp(test_stream_id, stream_id, sizeof(STREAM_ID_SIZE))) + if (0 == memcmp(test_stream_id, global_struct_listener.stream_id, sizeof(STREAM_ID_SIZE))) { #if DEBUG @@ -140,15 +140,15 @@ void sigint_handler(int signum) fprintf(stdout,"Received signal %d:leaving...\n", signum); - if (0 != talker) { + if (0 != global_struct_listener.talker) { ret = send_leave(); if (ret) printf("send_leave failed\n"); } - if (2 > control_socket) + if (2 > global_struct_listener.control_socket) { - close(control_socket); + close(global_struct_listener.control_socket); ret = mrp_disconnect(); if (ret) printf("mrp_disconnect failed\n"); @@ -202,6 +202,13 @@ int main(int argc, char *argv[]) if ((NULL == dev) || (NULL == file_name)) help(); + rc = mrp_listener_client_init(); + if (rc) + { + printf("failed to initialize global variables\n"); + return EXIT_FAILURE; + } + if (create_socket()) { fprintf(stderr, "Socket creation failed.\n"); @@ -284,7 +291,7 @@ int main(int argc, char *argv[]) fprintf(stdout,"Got session pcap handler.\n"); #endif /* DEBUG */ /* compile and apply filter */ - sprintf(filter_exp,"ether dst %02x:%02x:%02x:%02x:%02x:%02x",dst_mac[0],dst_mac[1],dst_mac[2],dst_mac[3],dst_mac[4],dst_mac[5]); + sprintf(filter_exp,"ether dst %02x:%02x:%02x:%02x:%02x:%02x",global_struct_listener.dst_mac[0],global_struct_listener.dst_mac[1],global_struct_listener.dst_mac[2],global_struct_listener.dst_mac[3],global_struct_listener.dst_mac[4],global_struct_listener.dst_mac[5]); if (-1 == pcap_compile(glob_pcap_handle, &comp_filter_exp, filter_exp, 0, PCAP_NETMASK_UNKNOWN)) { fprintf(stderr, "Could not parse filter %s: %s\n", filter_exp, pcap_geterr(glob_pcap_handle)); diff --git a/examples/simple_talker/simple_talker.c b/examples/simple_talker/simple_talker.c index 2973b108..33e2feda 100644 --- a/examples/simple_talker/simple_talker.c +++ b/examples/simple_talker/simple_talker.c @@ -510,9 +510,13 @@ int main(int argc, char *argv[]) fprintf( stderr, "Must specify valid transport\n" ); usage(); } - - mrp_talker_client_init(); - + + rc = mrp_talker_client_init(); + if (rc) { + printf("MRP talker client initialization failed\n"); + return errno; + } + rc = mrp_connect(); if (rc) { printf("socket creation failed\n"); |