Fix kernel version detection
[profile/ivi/OpenAVB.git] / examples / mrp_client / mrpq.c
1 /******************************************************************************
2
3   Copyright (c) 2012, Intel Corporation 
4   Copyright (c) 2012, AudioScience, Inc
5   All rights reserved.
6   
7   Redistribution and use in source and binary forms, with or without 
8   modification, are permitted provided that the following conditions are met:
9   
10    1. Redistributions of source code must retain the above copyright notice, 
11       this list of conditions and the following disclaimer.
12   
13    2. Redistributions in binary form must reproduce the above copyright 
14       notice, this list of conditions and the following disclaimer in the 
15       documentation and/or other materials provided with the distribution.
16   
17    3. Neither the name of the Intel Corporation nor the names of its 
18       contributors may be used to endorse or promote products derived from 
19       this software without specific prior written permission.
20   
21   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
23   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
24   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
25   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
26   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
27   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
28   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
29   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
30   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31   POSSIBILITY OF SUCH DAMAGE.
32
33 ******************************************************************************/
34
35 #include <fcntl.h>
36 #include <stdlib.h>
37 #include <stdio.h>
38 #include <string.h>
39 #include <signal.h>
40 #include <errno.h>
41
42 #if defined WIN32
43 #include <winsock2.h>
44 #endif
45
46 #include "mrpd.h"
47 #include "mrpdclient.h"
48
49 /* global variables */
50 #define VERSION_STR     "0.0"
51
52 static const char *version_str =
53     "mrpq v" VERSION_STR "\n" "Copyright (c) 2012, Intel Corporation\n";
54
55 int process_ctl_msg(char *buf, int buflen)
56 {
57         (void)buflen;
58
59         /*
60          * M?? - query MMRP Registrar MAC Address database
61          * M+? - JOIN_MT a MAC address
62          * -- note M++ doesn't exist apparently- MMRP doesn't use 'New' --
63          * M-- - LV a MAC address
64          * V?? - query MVRP Registrar VID database
65          * V++ - JOIN_IN a VID (VLAN ID)
66          * V+? - JOIN_MT a VID (VLAN ID)
67          * V-- - LV a VID (VLAN ID)
68          */
69
70         /* XXX */
71         printf("<%s\n", buf);
72         fflush(stdout);
73         free(buf);
74         return (0);
75 }
76
77 void process_events(void)
78 {
79
80         /* wait for events, demux the received packets, process packets */
81 }
82
83 int main(int argc, char *argv[])
84 {
85         int rc = 0;
86         char *msgbuf;
87 #if defined WIN32
88         WSADATA wsa_data;
89 #endif
90         (void)argc;
91         (void)argv;
92
93 #if defined WIN32
94         WSAStartup(MAKEWORD(1, 1), &wsa_data);
95 #endif
96
97         printf("%s\n", version_str);
98
99         rc = mrpdclient_init(MRPD_PORT_DEFAULT);
100         if (rc) {
101                 printf("init failed\n");
102                 return -1;
103         }
104
105         msgbuf = (char *)malloc(1500);
106
107         memset(msgbuf, 0, 1500);
108         sprintf(msgbuf, "M??");
109         printf(">M??\n");
110         rc = mprdclient_sendto(msgbuf, 1500);
111         rc = mrpdclient_recv(process_ctl_msg);
112         if (rc <= SOCKET_ERROR)
113                 printf("recv error\n");
114
115         memset(msgbuf, 0, 1500);
116         sprintf(msgbuf, "V??");
117         printf(">V??\n");
118         rc = mprdclient_sendto(msgbuf, 1500);
119         rc = mrpdclient_recv(process_ctl_msg);
120         if (rc <= SOCKET_ERROR)
121                 printf("recv error\n");
122
123         memset(msgbuf, 0, 1500);
124         sprintf(msgbuf, "S??");
125         printf(">S??\n");
126         rc = mprdclient_sendto(msgbuf, 1500);
127         rc = mrpdclient_recv(process_ctl_msg);
128         if (rc <= SOCKET_ERROR)
129                 printf("recv error\n");
130
131         sprintf(msgbuf, "BYE");
132         rc = mprdclient_sendto(msgbuf, 1500);
133         mprdclient_close();
134
135 #if defined WIN32
136         WSACleanup();
137 #endif
138         return (rc);
139 }