Changeset e5b2777 in mainline


Ignore:
Timestamp:
2024-12-13T08:44:05Z (10 months ago)
Author:
Nataliia Korop <n.corop08@…>
Children:
31d2aee
Parents:
e1e8f7a
git-author:
Nataliia Korop <n.corop08@…> (2024-11-17 09:14:10)
git-committer:
Nataliia Korop <n.corop08@…> (2024-12-13 08:44:05)
Message:

create drv iface for drivers

Location:
uspace/lib
Files:
2 added
12 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/nic/include/nic.h

    re1e8f7a re5b2777  
    280280
    281281/* pcapdump interface */
    282 extern pcap_dumper_t *nic_get_pcap_iface(nic_t *);
     282extern pcap_dumper_t *nic_get_pcap_dumper(nic_t *);
    283283
    284284extern errno_t nic_fun_add_to_cats(ddf_fun_t *fun);
  • uspace/lib/nic/src/nic_driver.c

    re1e8f7a re5b2777  
    4747#include <ops/nic.h>
    4848#include <errno.h>
    49 #include <pcapdump_srv.h>
     49#include <pcapdump_drv_iface.h>
    5050
    5151#include "nic_driver.h"
     
    523523         *               calls it inside send_frame handler (with locked main lock)
    524524         */
    525         pcapdump_packet(nic_get_pcap_iface(nic_data), frame->data, frame->size);
     525        pcapdump_packet(nic_get_pcap_dumper(nic_data), frame->data, frame->size);
    526526        fibril_rwlock_read_lock(&nic_data->rxc_lock);
    527527        nic_frame_type_t frame_type;
     
    562562                fibril_rwlock_write_unlock(&nic_data->stats_lock);
    563563        }
    564         //pcapdump_packet(nic_get_pcap_iface(nic_data), frame->data, frame->size);
     564        //pcapdump_packet(nic_get_pcap_dumper(nic_data), frame->data, frame->size);
    565565        nic_release_frame(nic_data, frame);
    566566}
     
    651651        nic_data->dev = device;
    652652
    653         errno_t pcap_rc  = pcapdump_init(nic_get_pcap_iface(nic_data));
     653        errno_t pcap_rc  = pcapdump_init(nic_get_pcap_dumper(nic_data));
    654654        if (pcap_rc != EOK) {
    655655                printf("Failed creating pcapdump port\n");
     
    11411141}
    11421142
    1143 pcap_dumper_t *nic_get_pcap_iface(nic_t *nic_data)
     1143pcap_dumper_t *nic_get_pcap_dumper(nic_t *nic_data)
    11441144{
    11451145        return &nic_data->pcapdump;
  • uspace/lib/nic/src/nic_impl.c

    re1e8f7a re5b2777  
    4040#include <ipc/services.h>
    4141#include <ns.h>
    42 #include <pcapdump_srv.h>
     42#include <pcapdump_drv_iface.h>
    4343#include "nic_driver.h"
    4444#include "nic_ev.h"
     
    180180                return EBUSY;
    181181        }
    182         pcapdump_packet(nic_get_pcap_iface(nic_data), data, size);
     182        pcapdump_packet(nic_get_pcap_dumper(nic_data), data, size);
    183183        nic_data->send_frame(nic_data, data, size);
    184184        fibril_rwlock_read_unlock(&nic_data->main_lock);
  • uspace/lib/pcap/include/pcap.h

    re1e8f7a re5b2777  
    5555#define PCAP_LINKTYPE_IP_RAW 101        /* Raw IP packet */
    5656#define PCAP_LINKTYPE_IEEE802_11_RADIO 127
     57#define PCAP_LINKTYPE_USB_LINUX_MMAPPED 220
    5758#define WIRESHARK_EX 0xc
    5859#define WIRESHARK_SNAPLEN 0xffff
     
    9495};
    9596
    96 extern void pcap_writer_add_header(pcap_writer_t *writer);
     97extern void pcap_writer_add_header(pcap_writer_t *writer, uint32_t linktype, bool nano);
    9798extern void pcap_writer_add_packet(pcap_writer_t *writer, const void *captured_packet, size_t size);
    9899extern void pcap_set_time(pcap_packet_header_t *header);
  • uspace/lib/pcap/include/pcap_dumper.h

    re1e8f7a re5b2777  
    4646} pcap_dumper_t;
    4747
    48 extern void pcap_dumper_stop(struct pcap_dumper *);
    49 extern errno_t pcap_dumper_init(pcap_dumper_t *); ///tahle
     48extern void pcap_dumper_stop(pcap_dumper_t *);
    5049extern int pcap_dumper_get_ops_number(void);
    51 extern errno_t pcap_dumper_set_ops(struct pcap_dumper *, int);
    52 extern errno_t pcap_dumper_start(struct pcap_dumper *, const char *);
    53 extern void pcap_dumper_add_packet(struct pcap_dumper *, const void *data, size_t size);
     50extern errno_t pcap_dumper_set_ops(pcap_dumper_t *, int);
     51extern errno_t pcap_dumper_start(pcap_dumper_t *, const char *);
     52extern void pcap_dumper_add_packet(pcap_dumper_t *, const void *data, size_t size);
    5453
    5554#endif
  • uspace/lib/pcap/include/pcapdump_client.h

    re1e8f7a re5b2777  
    3636 */
    3737
    38 #ifndef _PCAPCTL_DUMP_H_
    39 #define _PCAPCTL_DUMP_H_
     38#ifndef _PCAPDUMP_CLIENT_H_
     39#define _PCAPDUMP_CLIENT_H_
    4040
    4141#include <stdbool.h>
     
    5151extern errno_t pcapctl_dump_open(int *, pcapctl_sess_t **);
    5252extern errno_t pcapctl_dump_close(pcapctl_sess_t *);
     53
    5354extern errno_t pcapctl_dump_start(const char *, int *, pcapctl_sess_t *);
    54 // extern errno_t pcapctl_dump_set_ops(const char *, pcapctl_sess_t *);
    5555extern errno_t pcapctl_dump_stop(pcapctl_sess_t *);
    5656extern errno_t pcapctl_list(void);
  • uspace/lib/pcap/include/pcapdump_srv.h

    re1e8f7a re5b2777  
    4040
    4141#include <errno.h>
    42 #include "pcap_dumper.h"
    4342
    44 extern errno_t pcapdump_init(pcap_dumper_t *);
    45 extern void pcapdump_packet(pcap_dumper_t *, const void *, size_t);
    4643extern void pcapdump_conn(ipc_call_t *, void *);
    4744#endif
  • uspace/lib/pcap/meson.build

    re1e8f7a re5b2777  
    3232    'src/pcapdump_srv.c',
    3333    'src/pcapdump_client.c',
     34    'src/pcapdump_drv_iface.c',
    3435)
  • uspace/lib/pcap/src/pcap.c

    re1e8f7a re5b2777  
    5656 *
    5757 */
    58 void pcap_writer_add_header(pcap_writer_t *writer)
     58void pcap_writer_add_header(pcap_writer_t *writer, uint32_t linktype, bool nano)
    5959{
    60         pcap_file_header_t file_header = { PCAP_MAGIC_NANO, PCAP_MAJOR_VERSION, PCAP_MINOR_VERSION,
    61                 0x00000000, 0x00000000, (uint32_t)PCAP_SNAP_LEN, (uint32_t)PCAP_LINKTYPE_ETHERNET };
     60        uint32_t magic_version = PCAP_MAGIC_MICRO;
     61        if (nano)
     62        {
     63                magic_version = PCAP_MAGIC_NANO;
     64        }
     65        pcap_file_header_t file_header = { magic_version, PCAP_MAJOR_VERSION, PCAP_MINOR_VERSION,
     66                0x00000000, 0x00000000, (uint32_t)PCAP_SNAP_LEN, linktype };
    6267        writer->ops->write_buffer(writer, &file_header, sizeof(file_header));
    6368}
  • uspace/lib/pcap/src/pcap_dumper.c

    re1e8f7a re5b2777  
    4040
    4141#define SHORT_OPS_BYTE_COUNT 60
    42 #define NAME "pcap"
    4342
    4443/** Initialize writing to .pcap file.
     
    5554                return EINVAL;
    5655        }
    57         pcap_writer_add_header(writer);
     56        pcap_writer_add_header(writer, (uint32_t)PCAP_LINKTYPE_ETHERNET, false);
    5857
    5958        return EOK;
     
    7069}
    7170
     71static errno_t pcap_writer_to_file_usb_init(pcap_writer_t *writer, const char *filename)
     72{
     73        writer->data = fopen(filename, "a");
     74        if (writer->data == NULL) {
     75                return EINVAL;
     76        }
     77        pcap_writer_add_header(writer, (uint32_t)PCAP_LINKTYPE_USB_LINUX_MMAPPED, false);
     78
     79        return EOK;
     80}
     81
    7282static size_t pcap_file_w32(pcap_writer_t *writer, uint32_t data)
    7383{
     
    122132};
    123133
    124 static pcap_writer_ops_t ops[3] = {file_ops, short_file_ops, append_file_ops};
     134static const pcap_writer_ops_t usb_file_ops = {
     135        .open = &pcap_writer_to_file_usb_init,
     136        .write_u32 = &pcap_file_w32,
     137        .write_u16 = &pcap_file_w16,
     138        .write_buffer = &pcap_file_wbuffer,
     139        .close = &pcap_file_close
     140};
     141
     142static pcap_writer_ops_t ops[4] = {file_ops, short_file_ops, append_file_ops, usb_file_ops};
    125143
    126144int pcap_dumper_get_ops_number(void)
     
    129147}
    130148
    131 errno_t pcap_dumper_start(struct pcap_dumper *dumper, const char *name)
     149errno_t pcap_dumper_start(pcap_dumper_t *dumper, const char *name)
    132150{
    133151        fibril_mutex_lock(&dumper->mutex);
     
    147165}
    148166
    149 errno_t pcap_dumper_set_ops(struct pcap_dumper *dumper, int index)
     167errno_t pcap_dumper_set_ops(pcap_dumper_t *dumper, int index)
    150168{
    151169        fibril_mutex_lock(&dumper->mutex);
     
    156174}
    157175
    158 void pcap_dumper_add_packet(struct pcap_dumper *dumper, const void *data, size_t size)
     176void pcap_dumper_add_packet(pcap_dumper_t *dumper, const void *data, size_t size)
    159177{
    160178        fibril_mutex_lock(&dumper->mutex);
     
    169187}
    170188
    171 void pcap_dumper_stop(struct pcap_dumper *dumper)
     189void pcap_dumper_stop(pcap_dumper_t *dumper)
    172190{
    173191        fibril_mutex_lock(&dumper->mutex);
     
    183201}
    184202
    185 /** Initialize interface for dumping packets
    186  *
    187  * @param dumper Device dumping interface
    188  *
    189  */
    190 errno_t pcap_dumper_init(pcap_dumper_t *dumper)
    191 {
    192         fibril_mutex_initialize(&dumper->mutex);
    193         dumper->to_dump = false;
    194         dumper->writer.ops = NULL;
    195 
    196         errno_t rc = log_init(NAME);
    197         if (rc != EOK) {
    198                 printf("%s : Failed to initialize log.\n", NAME);
    199                 return 1;
    200         }
    201         return EOK;
    202 }
     203
    203204
    204205/** @}
  • uspace/lib/pcap/src/pcapdump_client.c

    re1e8f7a re5b2777  
    6161        rc = loc_category_get_id("pcap", &pcap_cat, 0);
    6262        if (rc != EOK) {
    63                 printf("Error resolving category 'pcap'.\n");
     63                fprintf(stderr, "Error resolving category 'pcap'.\n");
    6464                return rc;
    6565        }
     
    6767        rc = loc_category_get_svcs(pcap_cat, &pcap_svcs, &count);
    6868        if (rc != EOK) {
    69                 printf("Error resolving list of pcap services.\n");
     69                fprintf(stderr, "Error resolving list of pcap services.\n");
    7070                free(pcap_svcs);
    7171                return rc;
     
    8989        rc = loc_category_get_id("pcap", &pcap_cat, 0);
    9090        if (rc != EOK) {
    91                 printf("Error resolving category pcap.\n");
     91                fprintf(stderr, "Error resolving category pcap.\n");
    9292                return rc;
    9393        }
     
    9595        rc = loc_category_get_svcs(pcap_cat, &pcap_svcs, &count);
    9696        if (rc != EOK) {
    97                 printf("Error resolving list of pcap services.\n");
     97                fprintf(stderr, "Error resolving list of pcap services.\n");
    9898                free(pcap_svcs);
    9999                return rc;
     
    141141        rc = loc_category_get_id("pcap", &pcap_cat, 0);
    142142        if (rc != EOK) {
    143                 printf("Error resolving category pcap.\n");
     143                fprintf(stderr, "Error resolving category pcap.\n");
    144144                return rc;
    145145        }
     
    147147        rc = loc_category_get_svcs(pcap_cat, &pcap_svcs, &count);
    148148        if (rc != EOK) {
    149                 printf("Error resolving list of pcap services.\n");
     149                fprintf(stderr, "Error resolving list of pcap services.\n");
    150150                free(pcap_svcs);
    151151                return rc;
     
    179179        rc  = pcapctl_cat_get_svc(index, &svc);
    180180        if (rc != EOK) {
    181                 printf("Error finding the device with index: %d\n", *index);
     181                fprintf(stderr, "Error finding the device with index: %d\n", *index);
    182182                goto error;
    183183        }
  • uspace/lib/pcap/src/pcapdump_srv.c

    re1e8f7a re5b2777  
    4343#include <io/log.h>
    4444
     45#include "pcap_dumper.h"
    4546#include "pcapdump_srv.h"
    4647#include "pcapdump_ipc.h"
     
    127128}
    128129
    129 errno_t pcapdump_init(pcap_dumper_t *dumper)
    130 {
    131         port_id_t port;
    132         errno_t rc;
    133130
    134         rc = pcap_dumper_init(dumper);
    135 
    136         if (rc != EOK) {
    137                 log_msg(LOG_DEFAULT, LVL_DEBUG, "Failed creating pcap interface: %s", str_error(rc));
    138                 return rc;
    139         }
    140 
    141         rc = async_create_port(INTERFACE_PCAP_CONTROL, pcapdump_conn, dumper, &port);
    142         if (rc != EOK) {
    143                 log_msg(LOG_DEFAULT, LVL_DEBUG, "Failed creating port: %s", str_error(rc));
    144                 return rc;
    145         }
    146         return EOK;
    147 }
    148 
    149 /** Dumping function for driver
    150  *
    151  * Called every time, the packet is sent/recieved by the device
    152  *
    153  * @param dumper Dumping interface
    154  * @param data The packet
    155  * @param size Size of the packet
    156  *
    157  */
    158 void pcapdump_packet(pcap_dumper_t *dumper, const void *data, size_t size)
    159 {
    160         if (dumper == NULL) {
    161                 return;
    162         }
    163         pcap_dumper_add_packet(dumper, data, size);
    164 }
    165131
    166132/** @}
Note: See TracChangeset for help on using the changeset viewer.