Changeset e5b2777 in mainline
- Timestamp:
- 2024-12-13T08:44:05Z (10 months ago)
- 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)
- Location:
- uspace/lib
- Files:
-
- 2 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/nic/include/nic.h
re1e8f7a re5b2777 280 280 281 281 /* pcapdump interface */ 282 extern pcap_dumper_t *nic_get_pcap_ iface(nic_t *);282 extern pcap_dumper_t *nic_get_pcap_dumper(nic_t *); 283 283 284 284 extern errno_t nic_fun_add_to_cats(ddf_fun_t *fun); -
uspace/lib/nic/src/nic_driver.c
re1e8f7a re5b2777 47 47 #include <ops/nic.h> 48 48 #include <errno.h> 49 #include <pcapdump_ srv.h>49 #include <pcapdump_drv_iface.h> 50 50 51 51 #include "nic_driver.h" … … 523 523 * calls it inside send_frame handler (with locked main lock) 524 524 */ 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); 526 526 fibril_rwlock_read_lock(&nic_data->rxc_lock); 527 527 nic_frame_type_t frame_type; … … 562 562 fibril_rwlock_write_unlock(&nic_data->stats_lock); 563 563 } 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); 565 565 nic_release_frame(nic_data, frame); 566 566 } … … 651 651 nic_data->dev = device; 652 652 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)); 654 654 if (pcap_rc != EOK) { 655 655 printf("Failed creating pcapdump port\n"); … … 1141 1141 } 1142 1142 1143 pcap_dumper_t *nic_get_pcap_ iface(nic_t *nic_data)1143 pcap_dumper_t *nic_get_pcap_dumper(nic_t *nic_data) 1144 1144 { 1145 1145 return &nic_data->pcapdump; -
uspace/lib/nic/src/nic_impl.c
re1e8f7a re5b2777 40 40 #include <ipc/services.h> 41 41 #include <ns.h> 42 #include <pcapdump_ srv.h>42 #include <pcapdump_drv_iface.h> 43 43 #include "nic_driver.h" 44 44 #include "nic_ev.h" … … 180 180 return EBUSY; 181 181 } 182 pcapdump_packet(nic_get_pcap_ iface(nic_data), data, size);182 pcapdump_packet(nic_get_pcap_dumper(nic_data), data, size); 183 183 nic_data->send_frame(nic_data, data, size); 184 184 fibril_rwlock_read_unlock(&nic_data->main_lock); -
uspace/lib/pcap/include/pcap.h
re1e8f7a re5b2777 55 55 #define PCAP_LINKTYPE_IP_RAW 101 /* Raw IP packet */ 56 56 #define PCAP_LINKTYPE_IEEE802_11_RADIO 127 57 #define PCAP_LINKTYPE_USB_LINUX_MMAPPED 220 57 58 #define WIRESHARK_EX 0xc 58 59 #define WIRESHARK_SNAPLEN 0xffff … … 94 95 }; 95 96 96 extern void pcap_writer_add_header(pcap_writer_t *writer );97 extern void pcap_writer_add_header(pcap_writer_t *writer, uint32_t linktype, bool nano); 97 98 extern void pcap_writer_add_packet(pcap_writer_t *writer, const void *captured_packet, size_t size); 98 99 extern void pcap_set_time(pcap_packet_header_t *header); -
uspace/lib/pcap/include/pcap_dumper.h
re1e8f7a re5b2777 46 46 } pcap_dumper_t; 47 47 48 extern void pcap_dumper_stop(struct pcap_dumper *); 49 extern errno_t pcap_dumper_init(pcap_dumper_t *); ///tahle 48 extern void pcap_dumper_stop(pcap_dumper_t *); 50 49 extern 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);50 extern errno_t pcap_dumper_set_ops(pcap_dumper_t *, int); 51 extern errno_t pcap_dumper_start(pcap_dumper_t *, const char *); 52 extern void pcap_dumper_add_packet(pcap_dumper_t *, const void *data, size_t size); 54 53 55 54 #endif -
uspace/lib/pcap/include/pcapdump_client.h
re1e8f7a re5b2777 36 36 */ 37 37 38 #ifndef _PCAP CTL_DUMP_H_39 #define _PCAP CTL_DUMP_H_38 #ifndef _PCAPDUMP_CLIENT_H_ 39 #define _PCAPDUMP_CLIENT_H_ 40 40 41 41 #include <stdbool.h> … … 51 51 extern errno_t pcapctl_dump_open(int *, pcapctl_sess_t **); 52 52 extern errno_t pcapctl_dump_close(pcapctl_sess_t *); 53 53 54 extern errno_t pcapctl_dump_start(const char *, int *, pcapctl_sess_t *); 54 // extern errno_t pcapctl_dump_set_ops(const char *, pcapctl_sess_t *);55 55 extern errno_t pcapctl_dump_stop(pcapctl_sess_t *); 56 56 extern errno_t pcapctl_list(void); -
uspace/lib/pcap/include/pcapdump_srv.h
re1e8f7a re5b2777 40 40 41 41 #include <errno.h> 42 #include "pcap_dumper.h"43 42 44 extern errno_t pcapdump_init(pcap_dumper_t *);45 extern void pcapdump_packet(pcap_dumper_t *, const void *, size_t);46 43 extern void pcapdump_conn(ipc_call_t *, void *); 47 44 #endif -
uspace/lib/pcap/meson.build
re1e8f7a re5b2777 32 32 'src/pcapdump_srv.c', 33 33 'src/pcapdump_client.c', 34 'src/pcapdump_drv_iface.c', 34 35 ) -
uspace/lib/pcap/src/pcap.c
re1e8f7a re5b2777 56 56 * 57 57 */ 58 void pcap_writer_add_header(pcap_writer_t *writer )58 void pcap_writer_add_header(pcap_writer_t *writer, uint32_t linktype, bool nano) 59 59 { 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 }; 62 67 writer->ops->write_buffer(writer, &file_header, sizeof(file_header)); 63 68 } -
uspace/lib/pcap/src/pcap_dumper.c
re1e8f7a re5b2777 40 40 41 41 #define SHORT_OPS_BYTE_COUNT 60 42 #define NAME "pcap"43 42 44 43 /** Initialize writing to .pcap file. … … 55 54 return EINVAL; 56 55 } 57 pcap_writer_add_header(writer );56 pcap_writer_add_header(writer, (uint32_t)PCAP_LINKTYPE_ETHERNET, false); 58 57 59 58 return EOK; … … 70 69 } 71 70 71 static 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 72 82 static size_t pcap_file_w32(pcap_writer_t *writer, uint32_t data) 73 83 { … … 122 132 }; 123 133 124 static pcap_writer_ops_t ops[3] = {file_ops, short_file_ops, append_file_ops}; 134 static 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 142 static pcap_writer_ops_t ops[4] = {file_ops, short_file_ops, append_file_ops, usb_file_ops}; 125 143 126 144 int pcap_dumper_get_ops_number(void) … … 129 147 } 130 148 131 errno_t pcap_dumper_start( struct pcap_dumper*dumper, const char *name)149 errno_t pcap_dumper_start(pcap_dumper_t *dumper, const char *name) 132 150 { 133 151 fibril_mutex_lock(&dumper->mutex); … … 147 165 } 148 166 149 errno_t pcap_dumper_set_ops( struct pcap_dumper*dumper, int index)167 errno_t pcap_dumper_set_ops(pcap_dumper_t *dumper, int index) 150 168 { 151 169 fibril_mutex_lock(&dumper->mutex); … … 156 174 } 157 175 158 void pcap_dumper_add_packet( struct pcap_dumper*dumper, const void *data, size_t size)176 void pcap_dumper_add_packet(pcap_dumper_t *dumper, const void *data, size_t size) 159 177 { 160 178 fibril_mutex_lock(&dumper->mutex); … … 169 187 } 170 188 171 void pcap_dumper_stop( struct pcap_dumper*dumper)189 void pcap_dumper_stop(pcap_dumper_t *dumper) 172 190 { 173 191 fibril_mutex_lock(&dumper->mutex); … … 183 201 } 184 202 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 203 204 204 205 /** @} -
uspace/lib/pcap/src/pcapdump_client.c
re1e8f7a re5b2777 61 61 rc = loc_category_get_id("pcap", &pcap_cat, 0); 62 62 if (rc != EOK) { 63 printf("Error resolving category 'pcap'.\n");63 fprintf(stderr, "Error resolving category 'pcap'.\n"); 64 64 return rc; 65 65 } … … 67 67 rc = loc_category_get_svcs(pcap_cat, &pcap_svcs, &count); 68 68 if (rc != EOK) { 69 printf("Error resolving list of pcap services.\n");69 fprintf(stderr, "Error resolving list of pcap services.\n"); 70 70 free(pcap_svcs); 71 71 return rc; … … 89 89 rc = loc_category_get_id("pcap", &pcap_cat, 0); 90 90 if (rc != EOK) { 91 printf("Error resolving category pcap.\n");91 fprintf(stderr, "Error resolving category pcap.\n"); 92 92 return rc; 93 93 } … … 95 95 rc = loc_category_get_svcs(pcap_cat, &pcap_svcs, &count); 96 96 if (rc != EOK) { 97 printf("Error resolving list of pcap services.\n");97 fprintf(stderr, "Error resolving list of pcap services.\n"); 98 98 free(pcap_svcs); 99 99 return rc; … … 141 141 rc = loc_category_get_id("pcap", &pcap_cat, 0); 142 142 if (rc != EOK) { 143 printf("Error resolving category pcap.\n");143 fprintf(stderr, "Error resolving category pcap.\n"); 144 144 return rc; 145 145 } … … 147 147 rc = loc_category_get_svcs(pcap_cat, &pcap_svcs, &count); 148 148 if (rc != EOK) { 149 printf("Error resolving list of pcap services.\n");149 fprintf(stderr, "Error resolving list of pcap services.\n"); 150 150 free(pcap_svcs); 151 151 return rc; … … 179 179 rc = pcapctl_cat_get_svc(index, &svc); 180 180 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); 182 182 goto error; 183 183 } -
uspace/lib/pcap/src/pcapdump_srv.c
re1e8f7a re5b2777 43 43 #include <io/log.h> 44 44 45 #include "pcap_dumper.h" 45 46 #include "pcapdump_srv.h" 46 47 #include "pcapdump_ipc.h" … … 127 128 } 128 129 129 errno_t pcapdump_init(pcap_dumper_t *dumper)130 {131 port_id_t port;132 errno_t rc;133 130 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 driver150 *151 * Called every time, the packet is sent/recieved by the device152 *153 * @param dumper Dumping interface154 * @param data The packet155 * @param size Size of the packet156 *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 }165 131 166 132 /** @}
Note:
See TracChangeset
for help on using the changeset viewer.