Changes in / [e846bec:6eab537d] in mainline
- Location:
- uspace
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/pcapctl/main.c
re846bec r6eab537d 43 43 pcapctl_sess_t sess; 44 44 45 static errno_t start_dumping(const char *drv_name,const char *name)45 static void start_dumping(const char *name) 46 46 { 47 errno_t rc = pcapctl_dump_init(&sess, drv_name);48 if (rc != EOK) {49 //fprintf(stderr, "Error initializing ...\n");50 return 1;51 }52 47 pcapctl_dump_start(name, &sess); 53 return EOK;54 48 } 55 49 56 /** Session might */ 57 static errno_t stop_dumping(const char *drv_name) 50 static void stop_dumping(void) 58 51 { 59 errno_t rc = pcapctl_dump_init(&sess, drv_name);60 if (rc != EOK) {61 fprintf(stderr, "Error initializing ...\n");62 return 1;63 }64 52 pcapctl_dump_stop(&sess); 65 return EOK;66 }67 68 static void list_devs(void) {69 pcapctl_list();70 53 } 71 54 … … 73 56 { 74 57 fprintf(stderr, "Usage:\n"); 75 fprintf(stderr, " %s start < device> <outfile>: Packets dumped from <device>will be written to <outfile>\n", progname);76 fprintf(stderr, " %s stop <device>: Dumping from <device>stops\n", progname);58 fprintf(stderr, " %s start <outfile>: Packets will be written to <outfile>\n", progname); 59 fprintf(stderr, " %s stop: Dumping stops\n", progname); 77 60 78 61 } … … 84 67 return 1; 85 68 } else { 86 if (str_cmp(argv[1], "--help") == 0 || str_cmp(argv[1], "-h") == 0) { 87 usage(argv[0]); 88 return 0; 89 } else if (str_cmp(argv[1], "list") == 0) { 90 list_devs(); 91 return 0; 92 } else if (str_cmp(argv[1], "start") == 0) { 93 if (argc != 4) { 94 usage(argv[0]); 95 return 1; 96 } 97 start_dumping(argv[2], argv[3]); 98 } else if (str_cmp(argv[1], "stop") == 0) { 69 errno_t rc = pcapctl_dump_init(&sess); 70 if (rc != EOK) { 71 fprintf(stderr, "Error initializing ...\n"); 72 return 1; 73 } 74 if (str_cmp(argv[1], "start") == 0) { 99 75 if (argc != 3) { 100 76 usage(argv[0]); 101 77 return 1; 102 78 } 103 stop_dumping(argv[2]); 79 start_dumping(argv[2]); 80 } else if (str_cmp(argv[1], "stop") == 0) { 81 stop_dumping(); 104 82 fprintf(stdout, "Dumping was stopped\n"); 105 83 return EOK; -
uspace/lib/pcap/include/pcapctl_dump.h
re846bec r6eab537d 49 49 } pcapctl_sess_t; 50 50 51 extern errno_t pcapctl_dump_init(pcapctl_sess_t * , const char *);51 extern errno_t pcapctl_dump_init(pcapctl_sess_t *); 52 52 extern errno_t pcapctl_dump_start(const char *, pcapctl_sess_t *); 53 53 extern errno_t pcapctl_dump_stop(pcapctl_sess_t *); 54 extern errno_t pcapctl_list(void);55 54 56 55 #endif -
uspace/lib/pcap/include/pcapdump_iface.h
re846bec r6eab537d 44 44 typedef enum { 45 45 PCAP_CONTROL_SET_START = IPC_FIRST_USER_METHOD, 46 PCAP_CONTROL_SET_STOP, 47 PCAP_CONTROL_GET_NAME 46 PCAP_CONTROL_SET_STOP 48 47 } pcap_request_t; 49 48 -
uspace/lib/pcap/src/pcapctl_dump.c
re846bec r6eab537d 51 51 } 52 52 53 static errno_t pcapctl_cat_has_drv(const char *drv_name, service_id_t* svc) { 53 errno_t pcapctl_dump_init(pcapctl_sess_t *sess) 54 { 54 55 errno_t rc; 56 char *svc_name; 55 57 category_id_t pcap_cat; 56 58 size_t count; … … 68 70 return rc; 69 71 } 70 71 for (unsigned i = 0; i < count; ++i) {72 char *name = NULL;73 loc_service_get_name(pcap_svcs[i], &name);74 if (!str_cmp(drv_name, name)) {75 *svc = pcap_svcs[i];76 return EOK;77 }78 }79 free(pcap_svcs);80 return 1;81 }82 83 extern errno_t pcapctl_list(void) {84 85 errno_t rc;86 category_id_t pcap_cat;87 size_t count;88 service_id_t *pcap_svcs = NULL;89 90 rc = loc_category_get_id("pcap", &pcap_cat, 0);91 if (rc != EOK) {92 printf("Error resolving category 'pcap'.\n");93 return rc;94 }95 96 rc = loc_category_get_svcs(pcap_cat, &pcap_svcs, &count);97 if (rc != EOK) {98 printf("Error resolving list of pcap services.\n");99 return rc;100 }101 102 72 assert((count > 0) && "TODO: not implemented when no services are available\n"); 103 73 104 fprintf(stdout, "Drivers:\n"); 105 for (unsigned i = 0; i < count; ++i) { 106 char *name = NULL; 107 loc_service_get_name(pcap_svcs[i], &name); 74 rc = loc_service_get_name(pcap_svcs[0], &svc_name); // Note: for now [0], because only one driver is in pcap_svcs and there is no need to find particular 75 if (rc != EOK) { 76 printf("Error getting service name.\n"); 77 goto error; 78 } 79 printf("Using device: %s\n", svc_name); 108 80 109 fprintf(stdout, "driver: %s\n", name); 110 } 111 return EOK; 112 } 113 114 errno_t pcapctl_dump_init(pcapctl_sess_t *sess, const char *drv_name) 115 { 116 errno_t rc; 117 service_id_t svc; 118 rc = pcapctl_cat_has_drv(drv_name, &svc); 119 if (rc != EOK) { 120 fprintf(stderr, "No such driver was found.\n"); 121 return 1; 122 } 123 async_sess_t *new_session = loc_service_connect(svc, INTERFACE_PCAP_CONTROL, 0); 81 async_sess_t *new_session = loc_service_connect(pcap_svcs[0], INTERFACE_PCAP_CONTROL, 0); 124 82 if (new_session == NULL) { 125 fprintf(stderr,"Error connecting to service.\n");83 printf("Error connecting to service.\n"); 126 84 rc = EREFUSED; 127 85 goto error; … … 130 88 rc = EOK; 131 89 error: 90 free(pcap_svcs); 132 91 return rc; 133 92 }
Note:
See TracChangeset
for help on using the changeset viewer.