5 #include <netinet/in.h>
8 #include <sys/socket.h>
10 #include <linux/can.h>
11 #include <linux/can/raw.h>
23 read( sock_udp, &cf, sizeof(cf) );
24 write( sock_can, &cf, sizeof(cf) );
26 printf( "sending to can\n" );
32 struct sockaddr_in udp_dest;
34 udp_dest.sin_family = AF_INET;
35 udp_dest.sin_addr.s_addr = inet_addr("127.0.0.1");
36 udp_dest.sin_port = htons(10502);
38 read( sock_can, &cf, sizeof(cf) );
39 sendto( sock_udp, &cf, sizeof(cf), 0, (struct sockaddr*) &udp_dest, sizeof(udp_dest) );
40 //write( sock_eth, &cf, sizeof(cf) );
42 printf( "sending to eth\n" );
45 int main( int argc, char* argv[] )
47 struct sockaddr_in udp_addr;
48 struct sockaddr_can can_addr;
54 printf( "usage example: %s can1\n", argv[0] );
59 sock_udp = socket( PF_INET, SOCK_DGRAM, IPPROTO_UDP );
62 fprintf( stderr, "error: socket(), udp\n" );
66 udp_addr.sin_family = AF_INET;
67 udp_addr.sin_port = htons(10501);
68 udp_addr.sin_addr.s_addr = INADDR_ANY;
70 if( bind( sock_udp, (struct sockaddr*) &udp_addr, sizeof(udp_addr) ) < 0 )
72 fprintf( stderr, "error: bind(), udp\n" );
78 sock_can = socket( PF_CAN, SOCK_RAW, CAN_RAW );
81 fprintf( stderr, "error: socket(), can\n");
86 strcpy( ifr.ifr_name, argv[1] );
87 if( ioctl( sock_can, SIOCGIFINDEX, &ifr ) < 0 )
89 fprintf( stderr, "error: ioctl(), get if index\n" );
93 can_addr.can_family = AF_CAN;
94 can_addr.can_ifindex = ifr.ifr_ifindex;
95 // setsockopt( sock_can, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0 ); /*?!?*/
97 if( bind( sock_can, (struct sockaddr*) &can_addr, sizeof(can_addr) ) < 0 )
99 fprintf( stderr, "error: bind(), can" );
104 pfd[GW_POLL_ETH].fd = sock_udp;
105 pfd[GW_POLL_ETH].events = POLLIN | POLLPRI;
106 pfd[GW_POLL_ETH].revents = 0;
108 pfd[GW_POLL_CAN].fd = sock_can;
109 pfd[GW_POLL_CAN].events = POLLIN | POLLPRI;
110 pfd[GW_POLL_CAN].revents = 0;
113 unsigned char buf[1];
116 read( sock_can, &cf, sizeof(cf) ); again, return 0
117 printf( "can read\n" );
122 printf( "polling\n" );
123 int polret = poll( pfd, 2, -1 );
126 fprintf( stderr, "error: poll returned 0\n" );
129 if( pfd[GW_POLL_ETH].revents != 0 )
133 if( pfd[GW_POLL_CAN].revents != 0 )
138 pfd[GW_POLL_ETH].revents = 0;
139 pfd[GW_POLL_CAN].revents = 0;