From 1b2e2c955b01ec490720206378165266dafbfd4a Mon Sep 17 00:00:00 2001 From: hartkopp Date: Tue, 29 Aug 2006 12:31:50 +0000 Subject: [PATCH] updated tst-raw.c to check RAW sockopt functionality on Kernel 2.6 git-svn-id: svn://svn.berlios.de//socketcan/trunk@60 030b6a49-0b11-0410-94ab-b0dab22257f2 --- test/tst-raw.c | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/test/tst-raw.c b/test/tst-raw.c index 320ba98..f084dd7 100644 --- a/test/tst-raw.c +++ b/test/tst-raw.c @@ -70,11 +70,34 @@ int main(int argc, char **argv) int ifindex; int opt; - while ((opt = getopt(argc, argv, "i:")) != -1) { + /* sockopt test */ + int loopback = 0; + int set_loopback = 0; + int recv_own_msgs = 0; + int set_recv_own_msgs = 0; + int send_one_frame = 0; + + while ((opt = getopt(argc, argv, "i:l:r:s")) != -1) { switch (opt) { + case 'i': ifname = optarg; break; + + case 'l': + loopback = atoi(optarg); + set_loopback = 1; + break; + + case 'r': + recv_own_msgs = atoi(optarg); + set_recv_own_msgs = 1; + break; + + case 's': + send_one_frame = 1; + break; + default: fprintf(stderr, "Unknown option %c\n", opt); break; @@ -98,6 +121,12 @@ int main(int argc, char **argv) setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof(rfilter)); + if(set_loopback) + setsockopt(s, SOL_CAN_RAW, CAN_RAW_LOOPBACK, &loopback, sizeof(loopback)); + + if(set_recv_own_msgs) + setsockopt(s, SOL_CAN_RAW, CAN_RAW_RECV_OWN_MSGS, &recv_own_msgs, sizeof(recv_own_msgs)); + strcpy(ifr.ifr_name, ifname); ioctl(s, SIOCGIFINDEX, &ifr); ifindex = ifr.ifr_ifindex; @@ -110,6 +139,16 @@ int main(int argc, char **argv) return 1; } + if(send_one_frame) { + + frame.can_id = 0x123; + frame.can_dlc = 2; + frame.data[0] = 0x11; + frame.data[1] = 0x22; + + nbytes = write(s, &frame, sizeof(struct can_frame)); + } + while (1) { if ((nbytes = read(s, &frame, sizeof(struct can_frame))) < 0) { -- 2.39.2