summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorSrinath Arunachalam <Srinath.Arunachalam@harman.com>2015-07-15 15:08:31 -0600
committerSrinath Arunachalam <Srinath.Arunachalam@harman.com>2015-08-19 15:59:38 -0600
commit42578be460787d6177f5241d851789ab5dcd6bff (patch)
tree3448f42857d6a48c0a0d423073bbc7f22f506807 /examples
parenta9c939cf9f8af40492ae1f1d1ddca86ab6ff3c80 (diff)
downloadOpen-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.c122
-rw-r--r--examples/common/listener_mrp_client.h33
-rw-r--r--examples/common/talker_mrp_client.c21
-rw-r--r--examples/common/talker_mrp_client.h15
-rw-r--r--examples/simple_listener/simple_listener.c17
-rw-r--r--examples/simple_talker/simple_talker.c10
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");