Changes in / [e846bec:6eab537d] in mainline


Ignore:
Location:
uspace
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/pcapctl/main.c

    re846bec r6eab537d  
    4343pcapctl_sess_t sess;
    4444
    45 static errno_t start_dumping(const char *drv_name, const char *name)
     45static void start_dumping(const char *name)
    4646{
    47         errno_t rc = pcapctl_dump_init(&sess, drv_name);
    48         if (rc != EOK) {
    49                 //fprintf(stderr, "Error initializing ...\n");
    50                 return 1;
    51         }
    5247        pcapctl_dump_start(name, &sess);
    53         return EOK;
    5448}
    5549
    56 /** Session might */
    57 static errno_t stop_dumping(const char *drv_name)
     50static void stop_dumping(void)
    5851{
    59         errno_t rc = pcapctl_dump_init(&sess, drv_name);
    60         if (rc != EOK) {
    61                 fprintf(stderr, "Error initializing ...\n");
    62                 return 1;
    63         }
    6452        pcapctl_dump_stop(&sess);
    65         return EOK;
    66 }
    67 
    68 static void list_devs(void) {
    69         pcapctl_list();
    7053}
    7154
     
    7356{
    7457        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);
    7760
    7861}
     
    8467                return 1;
    8568        } 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) {
    9975                        if (argc != 3) {
    10076                                usage(argv[0]);
    10177                                return 1;
    10278                        }
    103                         stop_dumping(argv[2]);
     79                        start_dumping(argv[2]);
     80                } else if (str_cmp(argv[1], "stop") == 0) {
     81                        stop_dumping();
    10482                        fprintf(stdout, "Dumping was stopped\n");
    10583                        return EOK;
  • uspace/lib/pcap/include/pcapctl_dump.h

    re846bec r6eab537d  
    4949} pcapctl_sess_t;
    5050
    51 extern errno_t pcapctl_dump_init(pcapctl_sess_t *, const char *);
     51extern errno_t pcapctl_dump_init(pcapctl_sess_t *);
    5252extern errno_t pcapctl_dump_start(const char *, pcapctl_sess_t *);
    5353extern errno_t pcapctl_dump_stop(pcapctl_sess_t *);
    54 extern errno_t pcapctl_list(void);
    5554
    5655#endif
  • uspace/lib/pcap/include/pcapdump_iface.h

    re846bec r6eab537d  
    4444typedef enum {
    4545        PCAP_CONTROL_SET_START = IPC_FIRST_USER_METHOD,
    46         PCAP_CONTROL_SET_STOP,
    47         PCAP_CONTROL_GET_NAME
     46        PCAP_CONTROL_SET_STOP
    4847} pcap_request_t;
    4948
  • uspace/lib/pcap/src/pcapctl_dump.c

    re846bec r6eab537d  
    5151}
    5252
    53 static errno_t pcapctl_cat_has_drv(const char *drv_name, service_id_t* svc) {
     53errno_t pcapctl_dump_init(pcapctl_sess_t *sess)
     54{
    5455        errno_t rc;
     56        char *svc_name;
    5557        category_id_t pcap_cat;
    5658        size_t count;
     
    6870                return rc;
    6971        }
    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 
    10272        assert((count > 0) && "TODO: not implemented when no services are available\n");
    10373
    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);
    10880
    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);
    12482        if (new_session == NULL) {
    125                 fprintf(stderr, "Error connecting to service.\n");
     83                printf("Error connecting to service.\n");
    12684                rc =  EREFUSED;
    12785                goto error;
     
    13088        rc = EOK;
    13189error:
     90        free(pcap_svcs);
    13291        return rc;
    13392}
Note: See TracChangeset for help on using the changeset viewer.