Changeset 1d14090 in mainline
- Timestamp:
- 2024-12-13T08:44:05Z (10 months ago)
- Children:
- 64ea525
- Parents:
- f08447b
- git-author:
- Nataliia Korop <n.corop08@…> (2024-11-10 09:08:41)
- git-committer:
- Nataliia Korop <n.corop08@…> (2024-12-13 08:44:05)
- Location:
- uspace
- Files:
-
- 10 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/pcapctl/main.c
rf08447b r1d14090 52 52 } 53 53 54 pcapctl_dump_start(name, sess); 54 rc = pcapctl_dump_start(name, sess); 55 if (rc != EOK) 56 { 57 printf("Starting the dumping was not successful.\n"); 58 } 55 59 pcapctl_dump_close(sess); 56 60 return EOK; … … 64 68 return 1; 65 69 } 66 pcapctl_dump_stop(sess); 70 rc = pcapctl_dump_stop(sess); 71 if (rc != EOK) 72 { 73 printf("Stoping the dumping was not successful.\n"); 74 } 75 pcapctl_dump_close(sess); 76 return EOK; 77 } 78 79 static errno_t set_dumper_ops(int *dev_number, const char *name) 80 { 81 pcapctl_sess_t *sess = NULL; 82 errno_t rc = pcapctl_dump_open(dev_number, &sess); 83 if (rc != EOK) 84 { 85 return rc; 86 } 87 88 rc = pcapctl_dump_set_ops(name, sess); 89 if (rc != EOK) 90 { 91 printf("Setting dumper ops was not successful.\n"); 92 } 67 93 pcapctl_dump_close(sess); 68 94 return EOK; … … 84 110 { "start", no_argument, 0, 'r' }, 85 111 { "stop", no_argument, 0, 't' }, 112 { "ops", required_argument, 0, 'o' }, 86 113 { 0, 0, 0, 0 } 87 114 }; … … 106 133 bool start = false; 107 134 bool stop = false; 135 bool set_ops = false; 108 136 int dev_number = -1; 109 137 const char *output_file_name = ""; 138 const char *ops_name = ""; 110 139 int idx = 0; 111 140 int ret = 0; … … 142 171 stop = true; 143 172 break; 173 case 'o': 174 set_ops = true; 175 ops_name = optarg; 176 break; 144 177 } 145 178 } … … 154 187 stop_dumping(&dev_number); 155 188 } 189 else if (set_ops) 190 { 191 set_dumper_ops(&dev_number, ops_name); 192 } 156 193 return 0; 157 194 } -
uspace/lib/nic/include/nic.h
rf08447b r1d14090 44 44 #include <device/hw_res_parsed.h> 45 45 #include <ops/nic.h> 46 #include <pcap_ iface.h>46 #include <pcap_dumper.h> 47 47 48 48 #define DEVICE_CATEGORY_NIC "nic" -
uspace/lib/nic/src/nic_driver.c
rf08447b r1d14090 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_iface(nic_data), frame->data, frame->size); 565 565 nic_release_frame(nic_data, frame); 566 566 } -
uspace/lib/nic/src/nic_impl.c
rf08447b r1d14090 180 180 return EBUSY; 181 181 } 182 //pcapdump_packet(nic_get_pcap_iface(nic_data), data, size);182 pcapdump_packet(nic_get_pcap_iface(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_dumper.h
rf08447b r1d14090 48 48 extern void pcap_dumper_stop(struct pcap_dumper *); 49 49 extern errno_t pcap_dumper_init(pcap_dumper_t *); 50 51 // v ramci init jeste linktype prg 52 //set snaplen taky lze pridavat prg 53 50 extern errno_t pcap_dumper_set_ops(struct pcap_dumper *, const char *); 54 51 extern errno_t pcap_dumper_start(struct pcap_dumper *, const char *); 55 52 extern void pcap_dumper_add_packet(struct pcap_dumper *, const void *data, size_t size); -
uspace/lib/pcap/include/pcapctl_dump.h
rf08447b r1d14090 49 49 } pcapctl_sess_t; 50 50 51 extern errno_t pcapctl_dump_open(int *, pcapctl_sess_t ** rsess);52 extern errno_t pcapctl_dump_close(pcapctl_sess_t * sess);51 extern errno_t pcapctl_dump_open(int *, pcapctl_sess_t **); 52 extern errno_t pcapctl_dump_close(pcapctl_sess_t *); 53 53 extern errno_t pcapctl_dump_start(const char *, pcapctl_sess_t *); 54 extern errno_t pcapctl_dump_set_ops(const char *, pcapctl_sess_t *); 54 55 extern errno_t pcapctl_dump_stop(pcapctl_sess_t *); 55 56 extern errno_t pcapctl_list(void); -
uspace/lib/pcap/include/pcapdump_iface.h
rf08447b r1d14090 40 40 41 41 #include <errno.h> 42 #include "pcap_ iface.h"42 #include "pcap_dumper.h" 43 43 44 44 typedef enum { 45 45 PCAP_CONTROL_SET_START = IPC_FIRST_USER_METHOD, 46 46 PCAP_CONTROL_SET_STOP, 47 PCAP_CONTROL_GET_NAME 47 PCAP_CONTROL_GET_NAME, 48 PCAP_CONTROL_SET_OPS, 48 49 } pcap_request_t; 49 50 -
uspace/lib/pcap/meson.build
rf08447b r1d14090 29 29 src = files( 30 30 'src/pcap.c', 31 'src/pcap_ iface.c',31 'src/pcap_dumper.c', 32 32 'src/pcapdump_iface.c', 33 33 'src/pcapctl_dump.c', -
uspace/lib/pcap/src/pcap.c
rf08447b r1d14090 72 72 void pcap_writer_add_packet(pcap_writer_t *writer, const void *captured_packet, size_t size) 73 73 { 74 if (!writer->data) 75 return; 74 76 75 pcap_packet_header_t pcap_packet; 77 76 pcap_set_time(&pcap_packet); -
uspace/lib/pcap/src/pcap_dumper.c
rf08447b r1d14090 35 35 36 36 #include <errno.h> 37 #include "pcap_iface.h" 37 #include <str.h> 38 #include "pcap_dumper.h" 38 39 39 40 static size_t pcap_file_w32(pcap_writer_t *writer, uint32_t data) … … 49 50 static size_t pcap_file_wbuffer(pcap_writer_t *writer, const void *data, size_t size) 50 51 { 52 assert(writer->data); 51 53 return fwrite(data, 1, size, (FILE *)writer->data); 52 54 } … … 55 57 { 56 58 fclose((FILE *)writer->data); 59 writer->data = NULL; 57 60 } 58 61 … … 65 68 }; 66 69 67 //static size_t pcap_short_file_w32(pcap_writer_t *writer, uint32_t data)68 //{69 //return fwrite(&data, 1, 4, (FILE *)writer->data);70 //}70 static size_t pcap_short_file_w32(pcap_writer_t *writer, uint32_t data) 71 { 72 return fwrite(&data, 1, 4, (FILE *)writer->data); 73 } 71 74 72 //static size_t pcap_short_file_w16(pcap_writer_t *writer, uint16_t data)73 //{74 //return fwrite(&data, 1, 2, (FILE *)writer->data);75 //}75 static size_t pcap_short_file_w16(pcap_writer_t *writer, uint16_t data) 76 { 77 return fwrite(&data, 1, 2, (FILE *)writer->data); 78 } 76 79 77 //static size_t pcap_short_file_wbuffer(pcap_writer_t *writer, const void *data, size_t size)78 //{79 //return fwrite(data, 1, size<60?size:60, (FILE *)writer->data);80 //}80 static size_t pcap_short_file_wbuffer(pcap_writer_t *writer, const void *data, size_t size) 81 { 82 return fwrite(data, 1, size<60?size:60, (FILE *)writer->data); 83 } 81 84 82 //static void pcap_short_file_close(pcap_writer_t *writer)83 //{84 //fclose((FILE *)writer->data);85 //}85 static void pcap_short_file_close(pcap_writer_t *writer) 86 { 87 fclose((FILE *)writer->data); 88 } 86 89 87 //static pcap_writer_ops_t short_file_ops = {88 //.write_u32 = &pcap_short_file_w32,89 //.write_u16 = &pcap_short_file_w16,90 //.write_buffer = &pcap_short_file_wbuffer,91 //.close = &pcap_short_file_close90 static pcap_writer_ops_t short_file_ops = { 91 .write_u32 = &pcap_short_file_w32, 92 .write_u16 = &pcap_short_file_w16, 93 .write_buffer = &pcap_short_file_wbuffer, 94 .close = &pcap_short_file_close 92 95 93 //};96 }; 94 97 95 98 errno_t pcap_dumper_start(struct pcap_dumper *dumper, const char *name) … … 98 101 99 102 /** When try to start when already started, close current and starts new */ 100 if (dumper->to_dump == true) {103 if (dumper->to_dump) { 101 104 pcap_dumper_stop(dumper); 102 105 } … … 111 114 } 112 115 113 //udelat globalni 116 errno_t pcap_dumper_set_ops(struct pcap_dumper *dumper, const char *name) 117 { 118 fibril_mutex_lock(&dumper->mutex); 119 errno_t rc = EOK; 120 if (!str_cmp(name, "short_file")) 121 { 122 dumper->writer.ops = &short_file_ops; 123 } 124 else if (!str_cmp(name, "full_file")) 125 { 126 dumper->writer.ops = &file_ops; 127 } 128 else 129 { 130 rc = EINVAL; 131 } 132 fibril_mutex_unlock(&dumper->mutex); 133 return rc; 134 } 135 136 114 137 void pcap_dumper_add_packet(struct pcap_dumper *dumper, const void *data, size_t size) 115 138 { 116 139 fibril_mutex_lock(&dumper->mutex); 117 140 118 if ( dumper->writer.data == NULL ||!dumper->to_dump) {141 if (!dumper->to_dump) { 119 142 fibril_mutex_unlock(&dumper->mutex); 120 143 return; 121 144 } 145 122 146 pcap_writer_add_packet(&dumper->writer, data, size); 123 147 fibril_mutex_unlock(&dumper->mutex); 124 148 } 125 149 126 //udelt globalni127 150 void pcap_dumper_stop(struct pcap_dumper *dumper) 128 151 { … … 130 153 131 154 /** If want to stop, when already stopped, do nothing */ 132 if ( dumper->to_dump == false) {155 if (!dumper->to_dump) { 133 156 fibril_mutex_unlock(&dumper->mutex); 134 157 return; … … 136 159 dumper->to_dump = false; 137 160 dumper->writer.ops->close(&dumper->writer); 138 dumper->writer.data = NULL;139 161 fibril_mutex_unlock(&dumper->mutex); 140 162 } … … 149 171 fibril_mutex_initialize(&dumper->mutex); 150 172 dumper->to_dump = false; 151 dumper->writer.ops = &file_ops;173 dumper->writer.ops = NULL; 152 174 return EOK; 153 175 } -
uspace/lib/pcap/src/pcapctl_dump.c
rf08447b r1d14090 198 198 aid_t req = async_send_0(exch, PCAP_CONTROL_SET_START, NULL); 199 199 200 rc = async_data_write_start(exch, (const void *)name, size);200 rc = async_data_write_start(exch, name, size); 201 201 202 202 pcapctl_dump_exchange_end(exch); … … 227 227 } 228 228 229 errno_t pcapctl_dump_set_ops(const char *ops_name, pcapctl_sess_t *sess) 230 { 231 errno_t rc; 232 async_exch_t *exch = async_exchange_begin(sess->sess); 233 234 size_t size = str_size(ops_name); 235 aid_t req = async_send_0(exch, PCAP_CONTROL_SET_OPS, NULL); 236 237 rc = async_data_write_start(exch, ops_name, size); 238 239 pcapctl_dump_exchange_end(exch); 240 241 if (rc != EOK) { 242 async_forget(req); 243 return rc; 244 } 245 246 errno_t retval; 247 async_wait_for(req, &retval); 248 return retval; 249 } 250 229 251 /** @} 230 252 */ -
uspace/lib/pcap/src/pcapdump_iface.c
rf08447b r1d14090 70 70 } 71 71 72 static void pcapdump_set_ops_srv(ipc_call_t *icall, pcap_dumper_t *dumper) 73 { 74 char *data; 75 size_t size; 76 errno_t rc = async_data_write_accept((void **) &data, true, 0, 0, 0, &size); 77 if (rc != EOK) { 78 async_answer_0(icall, rc); 79 return; 80 } 81 82 assert(str_length(data) == size && "Data were damaged during transmission.\n"); 83 84 rc = pcap_dumper_set_ops(dumper, (const char *)data); 85 free(data); 86 if (rc != EOK) { 87 //TODO what? 88 } 89 async_answer_0(icall, EOK); 90 91 } 92 72 93 void pcapdump_conn(ipc_call_t *icall, void *arg) 73 94 { … … 94 115 case PCAP_CONTROL_SET_STOP: 95 116 pcapdump_stop_srv(&call, dumper); 117 break; 118 case PCAP_CONTROL_SET_OPS: 119 pcapdump_set_ops_srv(&call, dumper); 96 120 break; 97 121 default:
Note:
See TracChangeset
for help on using the changeset viewer.