fork download
  1. #include <arpa/inet.h>
  2. #include <linux/if_packet.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <sys/ioctl.h>
  7. #include <sys/socket.h>
  8. #include <net/if.h>
  9. #include <netinet/ether.h>
  10.  
  11. #define BUF_SIZ 65536
  12. #define SEND 0
  13. #define RECV 1
  14.  
  15.  
  16.  
  17. void send_message(){
  18.  
  19. //Do something here
  20. memset(&sk_addr, 0, sk_addr_size);
  21. //set sk_addr for 0
  22. sk_addr.sll_ifindex = if_idx.ifr_ifindex;
  23. sk_addr.sll_halen = ETH_ALEN;
  24.  
  25. byteSent = sendto(sockfd, buf, BUF_SIZ, 0, (struct socketaddr*)&sk_addr, sizeof(struct sockaddr_ll));
  26. printf("success");
  27.  
  28. }
  29.  
  30. void recv_message(){
  31.  
  32. //Do something here
  33. memset(&sk_addr, 0, sk_addr_size);
  34.  
  35. recvLen = recvfrom(sockfd, buf, BUF_SIZ, 0, (struct sockaddr*)&sk_addr, &sk_addr_size);
  36. printf("receive %s\n", buf);
  37. }
  38. //Sub function
  39.  
  40. int main(int argc, char *argv[])
  41. {
  42. int mode;
  43. char hw_addr[6];
  44. char interfaceName[IFNAMSIZ];
  45. char buf[BUF_SIZ];
  46. memset(buf, 0, BUF_SIZ);
  47. //set buf for 0
  48.  
  49. int correct=0;
  50. if (argc > 1){
  51. if(strncmp(argv[1],"Send", 4)==0){
  52. if (argc == 5){
  53. mode=SEND;
  54. sscanf(argv[3], "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", &hw_addr[0], &hw_addr[1], &hw_addr[2], &hw_addr[3], &hw_addr[4], &hw_addr[5]);
  55. //set hw_addr
  56. strncpy(buf, argv[4], BUF_SIZ);
  57. //set buf
  58. correct=1;
  59. printf(" buf: %s\n", buf);
  60. }
  61. }
  62. else if(strncmp(argv[1],"Recv", 4)==0){
  63. if (argc == 3){
  64. mode=RECV;
  65. correct=1;
  66. }
  67. }
  68. strncpy(interfaceName, argv[2], IFNAMSIZ); //set interfacename
  69. } //set mode
  70. if(!correct){
  71. fprintf(stderr, "./455_proj2 Send <InterfaceName> <DestHWAddr> <Message>\n");
  72. fprintf(stderr, "./455_proj2 Recv <InterfaceName>\n");
  73. exit(1);
  74. }
  75.  
  76. //Do something here
  77. int sockfd = 0;
  78. struct sockaddr_ll sk_addr;
  79. int sk_addr_size = sizeof(struct sockaddr_ll);
  80.  
  81. //Do something here
  82.  
  83. if((sockfd = ioctl(sockfd, SIOCGIFINDEX, htons(ETH_P_IP))) < 0){ //set sockfd
  84. perror("socket fail");
  85. exit(1);
  86. }
  87.  
  88.  
  89. if(mode == SEND){
  90. send_message();
  91. }
  92. else if (mode == RECV){
  93. recv_message();
  94. }
  95.  
  96. return 0;
  97. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp: In function ‘void send_message()’:
prog.cpp:20:9: error: ‘sk_addr’ was not declared in this scope
 memset(&sk_addr, 0, sk_addr_size);
         ^~~~~~~
prog.cpp:20:9: note: suggested alternative: ‘s6_addr’
 memset(&sk_addr, 0, sk_addr_size);
         ^~~~~~~
         s6_addr
prog.cpp:20:21: error: ‘sk_addr_size’ was not declared in this scope
 memset(&sk_addr, 0, sk_addr_size);
                     ^~~~~~~~~~~~
prog.cpp:20:21: note: suggested alternative: ‘sockaddr_in6’
 memset(&sk_addr, 0, sk_addr_size);
                     ^~~~~~~~~~~~
                     sockaddr_in6
prog.cpp:22:23: error: ‘if_idx’ was not declared in this scope
 sk_addr.sll_ifindex = if_idx.ifr_ifindex;
                       ^~~~~~
prog.cpp:22:23: note: suggested alternative: ‘ifaddr’
 sk_addr.sll_ifindex = if_idx.ifr_ifindex;
                       ^~~~~~
                       ifaddr
prog.cpp:25:1: error: ‘byteSent’ was not declared in this scope
 byteSent = sendto(sockfd, buf, BUF_SIZ, 0, (struct socketaddr*)&sk_addr, sizeof(struct sockaddr_ll));
 ^~~~~~~~
prog.cpp:25:19: error: ‘sockfd’ was not declared in this scope
 byteSent = sendto(sockfd, buf, BUF_SIZ, 0, (struct socketaddr*)&sk_addr, sizeof(struct sockaddr_ll));
                   ^~~~~~
prog.cpp:25:19: note: suggested alternative: ‘socket’
 byteSent = sendto(sockfd, buf, BUF_SIZ, 0, (struct socketaddr*)&sk_addr, sizeof(struct sockaddr_ll));
                   ^~~~~~
                   socket
prog.cpp:25:27: error: ‘buf’ was not declared in this scope
 byteSent = sendto(sockfd, buf, BUF_SIZ, 0, (struct socketaddr*)&sk_addr, sizeof(struct sockaddr_ll));
                           ^~~
prog.cpp: In function ‘void recv_message()’:
prog.cpp:33:9: error: ‘sk_addr’ was not declared in this scope
 memset(&sk_addr, 0, sk_addr_size);
         ^~~~~~~
prog.cpp:33:9: note: suggested alternative: ‘s6_addr’
 memset(&sk_addr, 0, sk_addr_size);
         ^~~~~~~
         s6_addr
prog.cpp:33:21: error: ‘sk_addr_size’ was not declared in this scope
 memset(&sk_addr, 0, sk_addr_size);
                     ^~~~~~~~~~~~
prog.cpp:33:21: note: suggested alternative: ‘sockaddr_in6’
 memset(&sk_addr, 0, sk_addr_size);
                     ^~~~~~~~~~~~
                     sockaddr_in6
prog.cpp:35:1: error: ‘recvLen’ was not declared in this scope
 recvLen = recvfrom(sockfd, buf, BUF_SIZ, 0, (struct sockaddr*)&sk_addr, &sk_addr_size);
 ^~~~~~~
prog.cpp:35:1: note: suggested alternative: ‘recvmsg’
 recvLen = recvfrom(sockfd, buf, BUF_SIZ, 0, (struct sockaddr*)&sk_addr, &sk_addr_size);
 ^~~~~~~
 recvmsg
prog.cpp:35:20: error: ‘sockfd’ was not declared in this scope
 recvLen = recvfrom(sockfd, buf, BUF_SIZ, 0, (struct sockaddr*)&sk_addr, &sk_addr_size);
                    ^~~~~~
prog.cpp:35:20: note: suggested alternative: ‘socket’
 recvLen = recvfrom(sockfd, buf, BUF_SIZ, 0, (struct sockaddr*)&sk_addr, &sk_addr_size);
                    ^~~~~~
                    socket
prog.cpp:35:28: error: ‘buf’ was not declared in this scope
 recvLen = recvfrom(sockfd, buf, BUF_SIZ, 0, (struct sockaddr*)&sk_addr, &sk_addr_size);
                            ^~~
stdout
Standard output is empty